[Scummvm-cvs-logs] scummvm master -> 0638308ef13727b4b359d98d54bc09156752aaaa
sev-
sev at scummvm.org
Wed May 15 18:28:07 CEST 2013
This automated email contains information about 382 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
52e0ac85db NEVERHOOD: First code with basic detection, nothing else so far
3b00cfa669 NEVERHOOD: Start with the blb archive class
70d20096c1 NEVERHOOD: Start with the resource manager
7d5d5f139f NEVERHOOD: Start with graphics code (bitmap parsing and rle decompression)
a262055df2 NEVERHOOD: Start with the BaseSurface class (doesn't do much yet)
108368e9b5 NEVERHOOD: Add more
eb5ab30ce0 NEVERHOOD: More work on the Palette class
4a01a69e37 NEVERHOOD: Start with Module and GameModule classes
ce4ef688b3 NEVERHOOD: Add skeleton for Module1500 (the intro module)
aded2a104b NEVERHOOD: Start with Scene and Sprite classes
0614b288cf NEVERHOOD: Add default parameters to StaticSprite constructors
f01f9343c8 NEVERHOOD: Start with AnimatedSprite and AnimResource
3c82668fe4 NEVERHOOD: More work on Module1500
44ab81eab8 NEVERHOOD: Start with the Screen class, also
1285b37b32 NEVERHOOD: Start with the Background and DirtyBackground classes
bd1749863e NEVERHOOD: Start with the Palette2 class (which needs a better name later)
21eb88053c NEVERHOOD: Implement SmackerScene, SmackerPlayer and related stuff
9d0e90bcd2 NEVERHOOD: Add skeleton for Module1000
ae4ef4e66d NEVERHOOD: Add StaticData class
6b71d17792 NEVERHOOD: Start with the CollisionMan class
056b69f0c8 NEVERHOOD: Module1000 and Scene1001 skeletons
97f319c945 NEVERHOOD: More work on Scene1001, implement Class509 (yes, will be renamed later) and AnimResource related stuff
e6236a3978 NEVERHOOD: Add transparency and x flipping to sprite drawing (flip y still TODO but rarely used)
5a34d20ec8 NEVERHOOD: More work on Scene1001, also give sprites classes and vars some better names
88d2759f85 NEVERHOOD: Start with the Klayman class (this is quite some horrible code, also, it doesn't work yet and isn't used yet)
3131cc6f18 NEVERHOOD: Implement Klayman::update
c694ce8505 NEVERHOOD: More work on Klayman
78d632b0ed NEVERHOOD: Commit of create_neverhood and neverhood.dat
5c69ae21dd NEVERHOOD: More work on Klayman (still eye cancerous code)
222cd4a651 NEVERHOOD: More work on Scene1001 and Klayman
ed863b65b5 NEVERHOOD: More work on Scene1001/Klayman
6d81ef0199 NEVERHOOD: Implement game vars
c39fb81951 NEVERHOOD: More work on Scene1001/Klayman
9f6e6c6f7f NEVERHOOD: Implement MouseCursorResource and Mouse433 mouse cursor
626cea6d1c NEVERHOOD: Implement Mouse435
be8d542264 NEVERHOOD: Updated tables.h with data from Scene1002
92e08f21ed NEVERHOOD: Start with Scene1002 (a lot incomplete)
ffe024844b NEVERHOOD: More work on Scene1002
b611b65bf4 NEVERHOOD: Change addHitRect to use an explicit count
436f8952bb NEVERHOOD: More work on Scene1002, Klayman and the rest
2647778935 NEVERHOOD: Fix crash/corruption in clipped sprite drawing
8a5c4a84d0 NEVERHOOD: Implement color replace in AnimatedSprite
78365121ea NEVERHOOD: Add NavigationLists in create_neverhood
db9e45706c NEVERHOOD: More work on Scene1002
0bfb52df74 NEVERHOOD: Implement NavigationScene
a23b694c94 NEVERHOOD: Implement Scene1005
71da221507 NEVERHOOD: Implement Scene1004
438b6bb53c NEVERHOOD: Implement Module2300 (just a bunch of NavigationScenes)
b1377ab153 NEVERHOOD: Add entries for Module2300
720050bec1 NEVERHOOD: Start with Module1200/Scene1201 (not complete yet)
0632fc7dda NEVERHOOD: Add tables for Scene1201
f162516f25 NEVERHOOD: More work on Scene1201
04d2b9a402 NEVERHOOD: Add entries for Scene1401, Scene1402 and Scene1705
bfd71cff6e NEVERHOOD: New modules Module1200, Module1400, Module1700 and Module1800
d7dd4b4356 NEVERHOOD: Implement Scene1403, Scene1404 and Scene1405 (memory minigame)
ad7c50d593 NEVERHOOD: Add more tables
08be9cde7b NEVERHOOD: Implement Scene3010 (door lock)
63fe7bd18a NEVERHOOD: Introduce and use Module::createNavigationScene and Module::createSmackerScene
d88836596d NEVERHOOD: More work on Module3000 and Scene3009 (incomplete)
87d1f79f31 NEVERHOOD: More work on Scene3009
9d12661537 NEVERHOOD: Implement Scene3011
5fcc3af23b NEVERHOOD: Implement Module2000
8286290185 NEVERHOOD: Add tables for Module2000
bc239b3fb1 NEVERHOOD: Restructure/redesign create_neverhood tool and made it more extensible for future game structures
bec86c7c2e NEVERHOOD: Switch to initGraphics() call, rather than separate calls. Default to 1xScalar.
eb8c44b54c NEVERHOOD: Implement Scene2201
28177361bf NEVERHOOD: Add Hall of Records tables
b64b0cfac2 NEVERHOOD: Implement updateScene2201
c4a4ce4e35 NEVERHOOD: Implement Scene2202 (sliding puzzle)
9273c2e97a NEVERHOOD: Add tables for Scene2203
31457e11aa NEVERHOOD: Implement Scene2203
732f7c8845 NEVERHOOD: Add Scene2204 (just a DiskplayerScene)
e177dcf911 NEVERHOOD: Implement Scene2205
8729ca04d9 NEVERHOOD: Add tables for Scene2205
80bbb06453 NEVERHOOD: Add tables for Scene2206
f29619f655 NEVERHOOD: Implement Scene2206
8459fa9777 NEVERHOOD: Add tables for Scene2207
41f8749bd0 NEVERHOOD: Implement Scene2207 (not complete yet)
50996201f4 NEVERHOOD: Very small cleanup
730844f1b7 NEVERHOOD: Implement Scene2208 (viewer for Hall Of Records text)
904f7ac335 NEVERHOOD: Add tables for Scene2242
9133d17cdf NEVERHOOD: Implement Scene2242
49658b6b5a NEVERHOOD: Forgot to remove debug code
b16f34c376 NEVERHOOD: Add Scene2248
9b151cefc3 NEVERHOOD: Implement HallOfRecordsScene (and all HoR scenes) and Scene2247
5214284271 NEVERHOOD: Add tables for Scene1302
d4030b7a9f NEVERHOOD: Start with Module1300 and implement Scene1302
b5fc6ed2c0 NEVERHOOD: Add tables for Scene1303
9d6e3b9575 NEVERHOOD: Add Scene1303
4c7930bd34 NEVERHOOD: Add tables for Scene1304
086879a4aa NEVERHOOD: Add Scene1304
a29c62ce5a NEVERHOOD: Add tables for Scene1305
a6cb31c9c3 NEVERHOOD: Add Scene1305
089ada55ba NEVERHOOD: Add tables for Scene1306
30ff790a07 NEVERHOOD: Add Scene1306
e13b8740c9 NEVERHOOD: Add Scene1307
85a216737c NEVERHOOD: Add tables for Scene1308
3e122b002c NEVERHOOD: Add Scene1308 (renaming of stuff todo)
38378d2090 NEVERHOOD: Add Scene1317
a21f9ef891 NEVERHOOD: Add Scene1310 and Scene1311
b757e22f88 NEVERHOOD: Multiple changes to make the game logic code cleaner (hopefully :)
cac9a090e7 NEVERHOOD: Use insertStaticSprite
4a88ce37dd NEVERHOOD: Use InsertKlayman
5d63bef6a2 NEVERHOOD: Use setBackground
c30e16628e NEVERHOOD: Add Module::updateChild and use it (in most places)
fad64afa44 NEVERHOOD: Remove unused resource preloading stuff (probably resource preloading is not needed since the original game r
02fe0bc65d NEVERHOOD: Merge scene-specific createSceneXXX/updateSceneXXX methods into createScene and updateScene (for Module2200 o
67fe73352b NEVERHOOD: Merge createSceneXXX/updateSceneXXX methods into createScene and updateScene for Module1000
d24907d1bb NEVERHOOD: Rename Palette2::addPalette to addBasePalette to prepare the merge of the Palette/Palette2 classes
71ea4d5877 NEVERHOOD: Merge Palette2 class into Palette
0ec039c5b0 NEVERHOOD: Merge the three mouse classes into Mouse, introduce insertMouse433 etc. methods and use them
a4c34cedd5 NEVERHOOD: Merge createSceneXXX/updateSceneXXX methods into createScene and updateScene for Module1200
17ad070a9c NEVERHOOD: Move createSceneXXX/updateSceneXXX methods
10ff159030 NEVERHOOD: Move createModuleXXX/updateModuleXXX methods
fa695229be NEVERHOOD: Add Sprite::setVisible and use it instead of direct access to the surface member
2f670690bc NEVERHOOD: Add Scene::setPalette for simpled palette creation and use it
1b2d496d18 NEVERHOOD: Try to clean up the clipRect stuff a little
9aff6337bc NEVERHOOD: Try to cleanup sprite creation with a templated insertSprite function (only in Module1000 so far)
abf78e07ee NEVERHOOD: Replace InsertKlayman macros with template functions (still weird but nicer)
3872efe2a5 NEVERHOOD: Start with Module1100 and add Scene1105
95cfa04e3b NEVERHOOD: Add tables for Scene1105
8a08287e7b NEVERHOOD: Add tables for Scene1109
47f1fe141b NEVERHOOD: Add Scene1109
2445e6aba8 NEVERHOOD: Add tables for Module1600 and Scene1608
236ca705e8 NEVERHOOD: Add Module1600 and Scene1608 (stuff will be renamed later)
af2820fd23 NEVERHOOD: Add leaveModule and leaveScene
2275141d56 NEVERHOOD: Add Scene1609
7a0a0c4b65 NEVERHOOD: Add Module1900 and Scene1901, Scene1907
729e3ae26e NEVERHOOD: Add tables for Scene1901
ced4efc66f NEVERHOOD: Add tables for Scene2101
21ebcf2af2 NEVERHOOD: Add Module2100 and Scene2101 (not complete yet)
a7dcbd0f33 NEVERHOOD: Add floor button ("Class429") to Scene2101
8840c74819 NEVERHOOD: Add floor button to Scene1401
9f599a7dfc NEVERHOOD: Start with Module2600 (missing Scene2609)
28be9f6f4b NEVERHOOD: Add Scene2609 and hook Module2600 to the GameModule
770689b2f1 NEVERHOOD: Start with Module2700 (doesn't do anything yet)
ee1bf85456 NEVERHOOD: Add new SceneInfo2700 structure and some tables using it for Module2700
e7673ffdc6 NEVERHOOD: Updated dat
aa789ee02b NEVERHOOD: More work in Module2700
463039c406 NEVERHOOD: Add Scene2706
31b3dec8c9 NEVERHOOD: More tables for Module2700
d276e7ceaa NEVERHOOD: Add Scene2701
6315ccb552 NEVERHOOD: Add tables for Scene2702
c56c93f085 NEVERHOOD: Add Scene2702 (needs cleanup)
023c36f2b6 NEVERHOOD: Add Class437 (still needs renaming, of course :)
9cf2c83e5e NEVERHOOD: Major renaming:
01f3f3a8dd Merge branch 'master'
dac95f3f73 NEVERHOOD: More renaming (mostly in Klayman and AnimatedSprite)
adb02a9f38 NEVERHOOD: More renaming
f43b54827e NEVERHOOD: Some renaming in Module1000
5465e6fe64 NEVERHOOD: Pack the KlaymanIdleTableItem struct
4f35989ac4 NEVERHOOD: Minor renaming, avoid mixing variables with their types
13efdceb9e NEVERHOOD: Add TODO
2e94464a8a NEVERHOOD: Start with Module2800 and add Scene2801
88bfe5d076 NEVERHOOD: Added a FIXME
8613ff3a9d NEVERHOOD: Add tables for Scene2801
8172d679df NEVERHOOD: Add scene create/update handling in Module2800
9c2341678e Merge branch 'master'
0683ed9eee NEVERHOOD: Rename SetSpriteCallback to SetSpriteUpdate
9de3cf5675 NEVERHOOD: Some minor cleanup, add a TODO about some palette issues (I couldn't find any apparent causes yet)
0abba004fe NEVERHOOD: Add tables for Scene2805
6467904898 NEVERHOOD: Implement Scene2805
ee7bd2fc6c NEVERHOOD: Implement Scene2803b
f3d98e6275 NEVERHOOD: Add scene 28/05
3cee21ac93 NEVERHOOD: Add tables for Scene2803b (forgot them before) and Scene2806
c2f91e39ba NEVERHOOD: Implement Scene2806 (Class469 TODO)
404aaaad94 NEVERHOOD: Implement Class469
12bb3f23f3 NEVERHOOD: Implement Scene2808
1cb1e66c10 NEVERHOOD: Implement Class488 (renaming TODO)
5688047fe3 NEVERHOOD: Add tables for Scene2809
2aa6e6b89c NEVERHOOD: Implement Scene2809
4f1e8b2070 NEVERHOOD: Implement Scene2804
0962c594bd NEVERHOOD: Rename wrongly named stuff
6f003399c8 NEVERHOOD: Implement Scene2807
745e46279e NEVERHOOD: Add tables for Scene2810
99ebd0eca3 NEVERHOOD: Implement Scene2810
0388fb496d NEVERHOOD: Implement Scene2822
93a074e9ad NEVERHOOD: Implement Scene2812
c27e930861 NEVERHOOD: Add tables for Scene2812
43362dfbd1 NEVERHOOD: Implement Scene2803
de622586f6 NEVERHOOD: Add tables for Scene2803
b2175adf61 NEVERHOOD: Add tables for Scene2501
bbb23cdf27 NEVERHOOD: Start with Module2500
31270bc5e6 NEVERHOOD: Add car track tables for Module2500
86c75922fe NEVERHOOD: Implement Scene2504 and add all car track scenes
bd3dac9781 NEVERHOOD: Add commented out code (which is TODO) to Module2500 so I don't forget it later
d4e322bc78 NEVERHOOD: Add tables for Scene2401
402f4bd275 NEVERHOOD: Start with Module2400
49f39b0da2 NEVERHOOD: Add tables for Scene2402
7c2aa2a225 NEVERHOOD: Implement Scene2402
93614a17a8 NEVERHOOD: Implement Scene2406
2386456223 NEVERHOOD: Add tables for Scene2406
a94c1fcb8f NEVERHOOD: Add tables for Scene2403
1a581543a7 NEVERHOOD: Implement Scene2403
ee36d5d5e3 NEVERHOOD: Add remaining scenes in Module2400
d1d1596fd1 NEVERHOOD: Add support for shadow sprites, used only for the shadow of the car/vehicle thing
96153bfe04 NEVERHOOD: Implement TextSurface, used in the save/load menus
65afa25c9f NEVERHOOD: Implement the SoundMan; no sound is played yet since the important code doesn't exist yet
0bb70c39f0 NEVERHOOD: More work on the SoundMan
fc0e40db30 NEVERHOOD: Implement the actual audio code
f5a8c9d90d NEVERHOOD: Add most SoundMan remaining calls
a2bc192912 NEVERHOOD: Add sound lists to all modules which have them
ba991fe702 NEVERHOOD: Fix addSound in AsScene2609Water and add a destructor
2ba49676ea NEVERHOOD: Add destructor to AsScene2804BeamCoil
21d1372d7e NEVERHOOD: Some work on the Klayman "idle" code (when the user doesn't do something for a certain time)
8bdddfdb02 NEVERHOOD: Rename many Klayman functions/variables
a5986fd722 NEVERHOOD: Fix resource file reading by introducing SafeMutexedSeekableSubReadStream which locks a mutex during reads an
cce19001fd NEVERHOOD: Rename more Klayman stuff (not much left :)
d1927ef8e6 NEVERHOOD: Move Klayman teleporter appear/disappear animation code from the several subclasses to the base Klayman class
e1943c1e2b NEVERHOOD: Move more into the Klayman base class
6160ee3cf2 NEVERHOOD: Move code from entity.h to new entity.cpp
0f04a01338 NEVERHOOD: Change sound playing
7adc1d312e NEVERHOOD: Change sound stuff in Module1100
fc359abd08 NEVERHOOD: Change sound stuff in Module1200
5ab4eb6555 NEVERHOOD: Change sound stuff in Module1300
b119efd5ed NEVERHOOD: Change sound stuff in Module1400
2df0a0a2e1 NEVERHOOD: Change sound stuff in Module1500
0c272631df NEVERHOOD: Change sound stuff in Module1600
0a1a228a88 NEVERHOOD: Change sound stuff in Module1700
a8dda6c5b6 NEVERHOOD: Change sound stuff in Module1900
78df19c648 NEVERHOOD: Change sound stuff in Module2100
3651d982c4 NEVERHOOD: Change sound stuff in Module2200
0c5a5b3c62 NEVERHOOD: Change sound stuff in Module2400
fb9d9c30e6 NEVERHOOD: Change sound stuff in Module2500
26188a3a69 NEVERHOOD: Change sound stuff in Module2600
73f4e4bcac NEVERHOOD: Change sound stuff in Module2700
eca881bd3e NEVERHOOD: Change sound stuff in Module2800
45da15adce NEVERHOOD: Change sound stuff in Module3000 (dirty, TODO)
1b3a686cac NEVERHOOD: Fix AsScene3011Symbol
acdc0256bb NEVERHOOD: Change sound stuff in DiskplayerScene
e97bd30682 NEVERHOOD: Change sound stuff in Klayman
7e4faf3505 NEVERHOOD: More Klayman merging
22cfd04b12 NEVERHOOD: Rename handleMessage41D640
4fef1ac9f2 NEVERHOOD: Some more merging and renaming in the Klayman class
3ef691f1af NEVERHOOD: Rename
debc7e953d NEVERHOOD: More changes to the Klayman class:
bb4bda7404 NEVERHOOD: More minor Klayman changes:
c88fdc34dd NEVERHOOD: Rename Class152 to StaticScene
81667d492a NEVERHOOD: Remove SsScene1002LadderArch and Class599 and turn them into static sprites; the classes were only used to se
5e08ab3e3f NEVERHOOD: Rename Class426 to SsCommonPressButton
f77b12cf96 NEVERHOOD: Rename stuff in Module1200
7b0b3000a7 NEVERHOOD: Rename stuff in Module1200
106ec42124 NEVERHOOD: Work on Module1300:
eefa175a2f NEVERHOOD: Update todo.txt
39d1982e47 NEVERHOOD: Work on Module1400:
cb5ca83578 NEVERHOOD: Rename more stuff in Module1400; also fix some bugs
b320c9f5a0 NEVERHOOD: Work on Module1600:
2fa76ccca1 NEVERHOOD: Work on Module1700:
8a9ca493b6 NEVERHOOD: Rename stuff in several modules
15cfb9f787 NEVERHOOD: Implement clipping against multiple clipRects, used only in several scenes for the Klayman sprite.
9b7bb71dd9 NEVERHOOD: Simplify code and rename things
483d76d635 NEVERHOOD: Enable/fixup navigation scene sound update code in several modules
4c421a09c8 NEVERHOOD: Add clipRects to all Klayman subclasses
1da6b95af9 NEVERHOOD: Work on Module2500:
fcbab80507 NEVERHOOD: Rename stuff in Module2700 (also in Module2500 which uses some of it)
5aee04b127 NEVERHOOD: Work on Module2800:
016638bd9e NEVERHOOD: Rename stuff in Module2700
59901c5d13 NEVERHOOD: Rename stuff in Module3000
fd13b546a7 NEVERHOOD: Rename stuff in the Scene class and clean up a little
97ee348c2a NEVERHOOD: Rename stuff in DiskplayerScene
1539023834 NEVERHOOD: Use constants for the numbers in get/setGlobalVar
02c5cc75a7 Merge branch 'master'
2e7d100a6f NEVERHOOD: Replace most of the literal digits in get/setSubVar with constants
111b6d32c6 NEVERHOOD: Fix Smacker framerate bug after the video decoder changes
b8d939a94b NEVERHOOD: Implement Scene2802 (radio tuning scene)
a80ec8c89c NEVERHOOD: Implement Module2900, the teleporter
fa53c0cf83 NEVERHOOD: Work on the resource system:
a724e603da NEVERHOOD: Use CursorMan
676c7569f6 NEVERHOOD: Fix a very stupid bug in Scene::insertMouse433
9858705772 NEVERHOOD: Graphics related changes/fixes:
6df8fccf6b NEVERHOOD: Implement GameModule::createModuleByHash
682d15fce4 NEVERHOOD: Cleanup and fixes
f5c7070ace NEVERHOOD: Add mouse cursor hiding/showing
2c4f0b70fe NEVERHOOD: Add Entity::setSoundPan and use it in the DiskplayerScene
963b760076 NEVERHOOD: Remove TODOs concerning the original engine's debug code
692edf40c7 NEVERHOOD: Try to give the AsCommonCar identifiers better names
c09c0b8998 NEVERHOOD: Implement an experimental "render queue" to only draw and update what's actually changed; it works surprising
4295991d19 NEVERHOOD: Use hardcoded values as width/height of several sprites (in the original the values were loaded from the entr
a238f57805 NEVERHOOD: Remove DirtyBackground which became obsolete after the renderqueue stuff
a6e9475a3f NEVERHOOD: Remove Scene::_surfaceFlag which also is obsolete now
c7ad09c685 NEVERHOOD: Remove BaseSurface::addDirtyRect() which is obsolete as well
9b7354dacb NEVERHOOD: Fix mouse cursor visibility by starting out invisible when the Mouse object is created and hiding the cursor
533eb5d61d NEVERHOOD: Rename puzzle initialization methods and give them better names
126a306c89 NEVERHOOD: Some cleanup:
ef8f0215cf NEVERHOOD: Add GameVars::dumpVars() for debugging
2e32b32808 NEVERHOOD: Start with the MenuModule
c43253bd6a NEVERHOOD: Implement CreditsScene
5ba8f2e9c8 NEVERHOOD: Add making of video to the main menu
f8ff1cc12f NEVERHOOD: Add CreditsScene to Module1300 and Module1800 (played after the game end and after jumping into the hole...)
8d97f26cef NEVERHOOD: Fix AsScene2402Door animation
54c83924ce NEVERHOOD: Add class NonRepeatingRandomNumbers
5af2de503e NEVERHOOD: Rewrite GameModule::initMemoryPuzzle() to use NonRepeatingRandomNumbers
47994441cd NEVERHOOD: Move setting of debug variables to the GameModule
eb054471e0 NEVERHOOD: Fix _drawRects in AsScene1002Door and SsCommonPressButton
9ba7a7f1a1 NEVERHOOD: Rename stuff in Sprite:
f24a6769c2 NEVERHOOD: Make use of NDrawRect::set
bf1371c9d4 NEVERHOOD: Rename and clean up fields in AnimFrameInfo
1589e4fe7d NEVERHOOD: Add new method StaticSprite::loadSprite and use it instead of setting stuff "manually"
4d7610f69d NEVERHOOD: Clean up Module1000:
f744e60e0e NEVERHOOD: Clean up Module1100:
097f1f27bb NEVERHOOD: Clean up Module1200 (like the ones before)
ee7d47cb18 NEVERHOOD: Clean up Module1300 (like the ones before)
af37a2200e NEVERHOOD: Clean up Module1400 (like the ones before)
f51140490d NEVERHOOD: Clean up Module1500 (like the ones before)
e2b696b891 NEVERHOOD: Clean up Module1600 (like the ones before)
904d9430bf NEVERHOOD: Clean up Module1700 (like the ones before)
dd26512c0d NEVERHOOD: Clean up Module1800 (like the ones before)
2fbfd673ad NEVERHOOD: Clean up Module1900 (like the ones before)
9d987a97d3 NEVERHOOD: Clean up Module2000 (like the ones before)
0dd4995af3 NEVERHOOD: Clean up Module2100 (like the ones before)
1993d4165a NEVERHOOD: Clean up Module2200 (like the ones before)
61e2a6f81d NEVERHOOD: Clean up Module2300 (like the ones before)
38df3c0d62 NEVERHOOD: Clean up Module2400 (like the ones before)
28e613c68b NEVERHOOD: Clean up Module2500 (like the ones before)
36204f573d NEVERHOOD: Clean up Module2600 (like the ones before)
8d5a4f736e NEVERHOOD: Add tables for new scenes in Module2700
c539060460 NEVERHOOD: Clean up Module2700 (like the ones before)
4df22cf979 NEVERHOOD: Remove track rectList code because none of the tracks has a rectList
228d9264c8 NEVERHOOD: Start with menu widget stuff (doesn't do anything yet!)
eecd9b8b2a NEVERHOOD: Add TextLabelWidget (still doesn't do anything)
0022c57858 NEVERHOOD: Add SavegameListBox
6be5c11713 NEVERHOOD: More work on the menu system:
73e0372cef NEVERHOOD: A little more work on the menu stuff
685ce4e312 NEVERHOOD: Add initCodeSymbolsPuzzle
1904e944c5 NEVERHOOD: Add initCubeSymbolsPuzzle
325c85fc41 NEVERHOOD: Fix Klaymen in Scene1403 (*facepalm*)
370f00e808 NEVERHOOD: New _sceneNum in Module2800
1b9807b312 NEVERHOOD: Remove more old comments
cc015e3d24 NEVERHOOD: Simplify resource loading
b2934eb166 NEVERHOOD: Fix Klaymen "grow" animation after drinking the potion
9a1d9883ad NEVERHOOD: Fix AsCommonCar turning
c182688e44 NEVERHOOD: Add saveload skeleton (doesn't actually do anything yet)
99e15e4005 NEVERHOOD: More work on saveload, saving works, loading not yet (from the GMM, in-game isn't finished yet)
060287a4f8 NEVERHOOD: Improve frame-exact seeking for Scene2802
0f1aa64fd0 NEVERHOOD: Add support for the demo version
a35cd088e5 NEVERHOOD: Remove obsolete _keyState
30178e46e5 NEVERHOOD: Implement savegame loading via GMM (in-game saving/loading still TODO)
fec1d7816a NEVERHOOD: Implement resource cache purging and purge it after each scene
4b7ad48ca8 NEVERHOOD: Rename some CollisionMan methods/fields
9963ce41ea NEVERHOOD: Merge CollisionMan into Scene class
b875696fc7 NEVERHOOD: Update todo.txt
fa205be892 NEVERHOOD: Remove some obsolete TODOs
6ddedc955a NEVERHOOD: Merge TextSurface into FontSurface
a98d9aa58a NEVERHOOD: Clean up DiskplayerScene
57497817e1 NEVERHOOD: Add enum for the resource types
f945448c7b NEVERHOOD: Change graphic resource draw method to get a Surface instead of separate pixels/pitch
df43b8bd68 NEVERHOOD: Move Scene2804::initCrystalColors() to GameModule::initCrystalColorsPuzzle()
e43184f4f2 NEVERHOOD: Remove obsolete TODOs
9ea07e0925 NEVERHOOD: Add tables for Scene2706
18ce1acc12 NEVERHOOD: Rework the car track scenes in Module2500 and Module2700
5bf8fb3e96 NEVERHOOD: Remove more old TODOs
51979c4f3f NEVERHOOD: Rename SceneInfo2700 to TrackInfo
eea9dbe2da NEVERHOOD: Minor renaming and cleanup
e51bea9b4e NEVERHOOD: Don't load a DataResource if the same data is already loaded; this fixes a nasty bug in several scenes which
5ff11f0041 NEVERHOOD: Rework the sound system
ac1dc3e4db NEVERHOOD: Fix Module1300::createScene
4389d32974 NEVERHOOD: Rename "Klayman" to "Klaymen" (the correct name of the game's hero)
490d447ed1 NEVERHOOD: Implement restart functionality (from both main menu and game logic)
379a8cbbe0 NEVERHOOD: Add support for loading/saving games with the game's own menu
4c6e82fc05 NEVERHOOD: Remove objectPriority and surfacePriority parameters from the Klaymen class constructor since they always hav
c218cb46e0 NEVERHOOD: Remove unneeded braces
1383c5f395 NEVERHOOD: Rename stuff in the Klaymen class
9ae1888593 NEVERHOOD: Change Klaymen idle callbacks from method pointers to integers and evaluate these in a new method enterIdleAn
65c6984635 NEVERHOOD: Implement game-internal savegame overwrite query screen
53a81d11b8 NEVERHOOD: Don't allow main menu until _canRequestMainMenu is set
c96d2475b1 NEVERHOOD: Add Screen::saveParams and Screen::restoreParams, called when etnering/leaving the menu
70fdfd9d57 NEVERHOOD: Delete all sound/music items on exit
bdac28929f NEVERHOOD: Add Y-flipping to unpackSpriteNormal
dc459b5f67 NEVERHOOD: Merge some code in the save/load menus
a80bafeb2e NEVERHOOD: Support game loading from launcher/command line
2a571d71b0 NEVERHOOD: Fix GUI options and game copyright
a03879963f NEVERHOOD: Changed the save/load menu to allow gaps in saved games to simplify game deletion
8749efdea8 NEVERHOOD: Add game-internal savegame delete menu
9ca3973e6f NEVERHOOD: Work on the save/load/delete menus
9b6d813d41 NEVERHOOD: Update todo.txt
583f9abaf9 NEVERHOOD: Fix some logic bugs and minor changes
1022996309 Merge branch 'master'
78e0d6a3f1 NEVERHOOD: Move module files to own subdirectory
163023a8ed NEVERHOOD: Fix issues in the save/load screens
fb0332d884 NEVERHOOD: Fix deletes in SpriteResource::unload() and ResourceMan::purgeResources()
32c21754e2 NEVERHOOD: Fix member var initializations
0638308ef1 Merge pull request #330 from johndoe123/neverhood
Commit: 52e0ac85db1b1bc7f2670498d019cf982c16d413
https://github.com/scummvm/scummvm/commit/52e0ac85db1b1bc7f2670498d019cf982c16d413
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:49-07:00
Commit Message:
NEVERHOOD: First code with basic detection, nothing else so far
Changed paths:
A engines/neverhood/detection.cpp
A engines/neverhood/module.mk
A engines/neverhood/neverhood.cpp
A engines/neverhood/neverhood.h
base/plugins.cpp
configure
engines/engines.mk
diff --git a/base/plugins.cpp b/base/plugins.cpp
index 4c2fd2c..261ae4c 100644
--- a/base/plugins.cpp
+++ b/base/plugins.cpp
@@ -136,6 +136,9 @@ public:
#if PLUGIN_ENABLED_STATIC(MOHAWK)
LINK_PLUGIN(MOHAWK)
#endif
+ #if PLUGIN_ENABLED_STATIC(NEVERHOOD)
+ LINK_PLUGIN(NEVERHOOD)
+ #endif
#if PLUGIN_ENABLED_STATIC(PARALLACTION)
LINK_PLUGIN(PARALLACTION)
#endif
diff --git a/configure b/configure
index 04ca85f..fb3e869 100755
--- a/configure
+++ b/configure
@@ -102,6 +102,7 @@ add_engine mohawk "Mohawk" yes "cstime myst riven"
add_engine cstime "Where in Time is Carmen Sandiego?" no
add_engine riven "Riven: The Sequel to Myst" no
add_engine myst "Myst" no
+add_engine neverhood "Neverhood" no
add_engine parallaction "Parallaction" yes
add_engine queen "Flight of the Amazon Queen" yes
add_engine saga "SAGA" yes "ihnm saga2"
diff --git a/engines/engines.mk b/engines/engines.mk
index dc09fbd..fb754ef 100644
--- a/engines/engines.mk
+++ b/engines/engines.mk
@@ -116,6 +116,11 @@ DEFINES += -DENABLE_RIVEN
endif
endif
+ifdef ENABLE_NEVERHOOD
+DEFINES += -DENABLE_NEVERHOOD=$(ENABLE_NEVERHOOD)
+MODULES += engines/neverhood
+endif
+
ifdef ENABLE_PARALLACTION
DEFINES += -DENABLE_PARALLACTION=$(ENABLE_PARALLACTION)
MODULES += engines/parallaction
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
new file mode 100644
index 0000000..b80379b
--- /dev/null
+++ b/engines/neverhood/detection.cpp
@@ -0,0 +1,285 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "base/plugins.h"
+
+#include "engines/advancedDetector.h"
+#include "common/file.h"
+
+#include "neverhood/neverhood.h"
+
+
+namespace Neverhood {
+
+struct NeverhoodGameDescription {
+ ADGameDescription desc;
+
+ int gameID;
+ int gameType;
+ uint32 features;
+ uint16 version;
+};
+
+const char *NeverhoodEngine::getGameId() const {
+ return _gameDescription->desc.gameid;
+}
+
+uint32 NeverhoodEngine::getFeatures() const {
+ return _gameDescription->features;
+}
+
+Common::Platform NeverhoodEngine::getPlatform() const {
+ return _gameDescription->desc.platform;
+}
+
+uint16 NeverhoodEngine::getVersion() const {
+ return _gameDescription->version;
+}
+
+}
+
+static const PlainGameDescriptor neverhoodGames[] = {
+ {"neverhood", "The Neverhood Chronicles"},
+ {0, 0}
+};
+
+namespace Neverhood {
+
+using Common::GUIO_NONE;
+using Common::GUIO_NOSPEECH;
+
+static const NeverhoodGameDescription gameDescriptions[] = {
+
+ {
+ // Neverhood English version
+ // TODO: Maybe additional files are needed to properly detect different versions
+ {
+ "neverhood",
+ 0,
+ AD_ENTRY1s("hd.blb", "22958d968458c9ff221aee38577bb2b2", 4279716),
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO_NONE
+ },
+ 0,
+ 0,
+ 0,
+ 0,
+ },
+
+ { AD_TABLE_END_MARKER, 0, 0, 0, 0 }
+};
+
+/**
+ * The fallback game descriptor used by the Neverhood engine's fallbackDetector.
+ * Contents of this struct are to be overwritten by the fallbackDetector.
+ */
+static NeverhoodGameDescription g_fallbackDesc = {
+ {
+ "",
+ "",
+ AD_ENTRY1(0, 0), // This should always be AD_ENTRY1(0, 0) in the fallback descriptor
+ Common::UNK_LANG,
+ Common::kPlatformPC,
+ ADGF_NO_FLAGS,
+ GUIO_NONE
+ },
+ 0,
+ 0,
+ 0,
+ 0,
+};
+
+} // End of namespace Neverhood
+
+class NeverhoodMetaEngine : public AdvancedMetaEngine {
+public:
+ NeverhoodMetaEngine() : AdvancedMetaEngine(Neverhood::gameDescriptions, sizeof(Neverhood::NeverhoodGameDescription), neverhoodGames) {
+ _singleid = "neverhood";
+ }
+
+ virtual const char *getName() const {
+ return "Neverhood Engine";
+ }
+
+ virtual const char *getOriginalCopyright() const {
+ return "Neverhood Engine (C) Infogrames";
+ }
+
+ virtual bool hasFeature(MetaEngineFeature f) const;
+ virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
+
+#if 0 // Not used yet but let's keep it for later when it is
+ SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
+ void removeSaveState(const char *target, int slot) const;
+ SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
+#endif
+
+ const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const;
+
+};
+
+bool NeverhoodMetaEngine::hasFeature(MetaEngineFeature f) const {
+ return
+ false; // Nothing yet :(
+// (f == kSupportsListSaves) ||
+// (f == kSupportsLoadingDuringStartup) ||
+// (f == kSupportsDeleteSave) ||
+// (f == kSavesSupportMetaInfo) ||
+// (f == kSavesSupportThumbnail);
+}
+
+bool Neverhood::NeverhoodEngine::hasFeature(EngineFeature f) const {
+ return
+ false; // Nothing yet :(
+// (f == kSupportsRTL) || // TODO: Not yet...
+// (f == kSupportsLoadingDuringRuntime) ||
+// (f == kSupportsSavingDuringRuntime);
+}
+
+bool NeverhoodMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
+ const Neverhood::NeverhoodGameDescription *gd = (const Neverhood::NeverhoodGameDescription *)desc;
+ if (gd) {
+ *engine = new Neverhood::NeverhoodEngine(syst, gd);
+ }
+ return gd != 0;
+}
+
+const ADGameDescription *NeverhoodMetaEngine::fallbackDetect(const Common::FSList &fslist) const {
+ // Set the default values for the fallback descriptor's ADGameDescription part.
+ Neverhood::g_fallbackDesc.desc.language = Common::UNK_LANG;
+ Neverhood::g_fallbackDesc.desc.platform = Common::kPlatformPC;
+ Neverhood::g_fallbackDesc.desc.flags = ADGF_NO_FLAGS;
+
+ // Set default values for the fallback descriptor's NeverhoodGameDescription part.
+ Neverhood::g_fallbackDesc.gameID = 0;
+ Neverhood::g_fallbackDesc.features = 0;
+ Neverhood::g_fallbackDesc.version = 3;
+
+ return NULL;
+}
+
+#if 0 // Not used yet but let's keep it for later when it is
+
+SaveStateList NeverhoodMetaEngine::listSaves(const char *target) const {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Neverhood::NeverhoodEngine::SaveHeader header;
+ Common::String pattern = target;
+ pattern += ".???";
+
+ Common::StringArray filenames;
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+
+ SaveStateList saveList;
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); file++) {
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ if (slotNum >= 0 && slotNum <= 999) {
+ Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
+ if (in) {
+ if (Neverhood::NeverhoodEngine::readSaveHeader(in, false, header) == Neverhood::NeverhoodEngine::kRSHENoError) {
+ saveList.push_back(SaveStateDescriptor(slotNum, header.description));
+ }
+ delete in;
+ }
+ }
+ }
+
+ return saveList;
+}
+
+int NeverhoodMetaEngine::getMaximumSaveSlot() const {
+ return 999;
+}
+
+void NeverhoodMetaEngine::removeSaveState(const char *target, int slot) const {
+ // Slot 0 can't be deleted, it's for restarting the game(s)
+ if (slot == 0)
+ return;
+
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, slot);
+
+ saveFileMan->removeSavefile(filename.c_str());
+
+ Common::StringArray filenames;
+ Common::String pattern = target;
+ pattern += ".???";
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ // Rename every slot greater than the deleted slot,
+ // Also do not rename quicksaves.
+ if (slotNum > slot && slotNum < 990) {
+ // FIXME: Our savefile renaming done here is inconsitent with what we do in
+ // GUI_v2::deleteMenu. While here we rename every slot with a greater equal
+ // number of the deleted slot to deleted slot, deleted slot + 1 etc.,
+ // we only rename the following slots in GUI_v2::deleteMenu until a slot
+ // is missing.
+ saveFileMan->renameSavefile(file->c_str(), filename.c_str());
+
+ filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, ++slot);
+ }
+ }
+
+}
+
+SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
+ Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, slot);
+ Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(filename.c_str());
+
+ if (in) {
+ Neverhood::NeverhoodEngine::SaveHeader header;
+ Neverhood::NeverhoodEngine::kReadSaveHeaderError error;
+
+ error = Neverhood::NeverhoodEngine::readSaveHeader(in, true, header);
+ delete in;
+
+ if (error == Neverhood::NeverhoodEngine::kRSHENoError) {
+ SaveStateDescriptor desc(slot, header.description);
+
+ desc.setDeletableFlag(false);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+
+ return desc;
+ }
+ }
+
+ return SaveStateDescriptor();
+}
+
+#endif
+
+#if PLUGIN_ENABLED_DYNAMIC(NEVERHOOD)
+ REGISTER_PLUGIN_DYNAMIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
+#else
+ REGISTER_PLUGIN_STATIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
+#endif
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
new file mode 100644
index 0000000..d46d6a6
--- /dev/null
+++ b/engines/neverhood/module.mk
@@ -0,0 +1,13 @@
+MODULE := engines/neverhood
+
+MODULE_OBJS = \
+ detection.o \
+ neverhood.o
+
+# This module can be built as a plugin
+ifdef BUILD_PLUGINS
+PLUGIN := 1
+endif
+
+# Include common rules
+include $(srcdir)/rules.mk
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
new file mode 100644
index 0000000..9c464b9
--- /dev/null
+++ b/engines/neverhood/neverhood.cpp
@@ -0,0 +1,113 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/algorithm.h"
+#include "common/events.h"
+#include "common/keyboard.h"
+#include "common/file.h"
+#include "common/random.h"
+#include "common/savefile.h"
+#include "common/config-manager.h"
+
+#include "base/plugins.h"
+#include "base/version.h"
+
+#include "graphics/cursorman.h"
+
+#include "engines/util.h"
+
+#include "audio/mididrv.h"
+#include "audio/mixer.h"
+
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+NeverhoodEngine::NeverhoodEngine(OSystem *syst, const NeverhoodGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
+ // Setup mixer
+ if (!_mixer->isReady()) {
+ warning("Sound initialization failed.");
+ }
+
+ _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume"));
+ _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
+
+ _rnd = new Common::RandomSource("neverhood");
+
+}
+
+NeverhoodEngine::~NeverhoodEngine() {
+ delete _rnd;
+}
+
+Common::Error NeverhoodEngine::run() {
+ // Initialize backend
+ _system->beginGFXTransaction();
+ initCommonGFX(false);
+ _system->initSize(640, 480);
+ _system->endGFXTransaction();
+
+ _isSaveAllowed = false;
+
+ return Common::kNoError;
+}
+
+void NeverhoodEngine::updateEvents() {
+ Common::Event event;
+ Common::EventManager *eventMan = _system->getEventManager();
+
+ while (eventMan->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN:
+ _keyState = event.kbd.keycode;
+ break;
+ case Common::EVENT_KEYUP:
+ _keyState = Common::KEYCODE_INVALID;
+ break;
+ case Common::EVENT_MOUSEMOVE:
+ _mouseX = event.mouse.x;
+ _mouseY = event.mouse.y;
+ break;
+ /*
+ case Common::EVENT_LBUTTONDOWN:
+ _buttonState |= kLeftButton;
+ break;
+ case Common::EVENT_LBUTTONUP:
+ _buttonState &= ~kLeftButton;
+ break;
+ case Common::EVENT_RBUTTONDOWN:
+ _buttonState |= kRightButton;
+ break;
+ case Common::EVENT_RBUTTONUP:
+ _buttonState &= ~kRightButton;
+ break;
+ case Common::EVENT_QUIT:
+ _system->quit();
+ break;
+ */
+ default:
+ break;
+ }
+ }
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
new file mode 100644
index 0000000..c17116d
--- /dev/null
+++ b/engines/neverhood/neverhood.h
@@ -0,0 +1,111 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_H
+#define NEVERHOOD_H
+
+#include "common/scummsys.h"
+#include "common/events.h"
+#include "common/keyboard.h"
+#include "common/random.h"
+#include "common/savefile.h"
+#include "common/system.h"
+
+#include "audio/mixer.h"
+
+#include "graphics/surface.h"
+
+#include "engines/engine.h"
+
+namespace Neverhood {
+
+enum NeverhoodGameFeatures {
+};
+
+struct NeverhoodGameDescription;
+
+class NeverhoodEngine : public ::Engine {
+protected:
+
+ Common::Error run();
+
+public:
+ NeverhoodEngine(OSystem *syst, const NeverhoodGameDescription *gameDesc);
+ virtual ~NeverhoodEngine();
+
+ // Detection related functions
+ const NeverhoodGameDescription *_gameDescription;
+ const char *getGameId() const;
+ uint32 getFeatures() const;
+ uint16 getVersion() const;
+ Common::Platform getPlatform() const;
+ bool hasFeature(EngineFeature f) const;
+
+ Common::RandomSource *_rnd;
+
+ int _mouseX, _mouseY;
+ Common::KeyCode _keyState;
+ uint16 _buttonState;
+
+ void updateEvents();
+
+public:
+
+ /* Save/load */
+
+ enum kReadSaveHeaderError {
+ kRSHENoError = 0,
+ kRSHEInvalidType = 1,
+ kRSHEInvalidVersion = 2,
+ kRSHEIoError = 3
+ };
+
+ struct SaveHeader {
+ Common::String description;
+ uint32 version;
+ byte gameID;
+ uint32 flags;
+ Graphics::Surface *thumbnail;
+ };
+
+ bool _isSaveAllowed;
+
+ bool canLoadGameStateCurrently() { return _isSaveAllowed; }
+ bool canSaveGameStateCurrently() { return _isSaveAllowed; }
+
+#if 0 // Not used yet but let's keep it for later when it is
+ Common::Error loadGameState(int slot);
+ Common::Error saveGameState(int slot, const Common::String &description);
+ void savegame(const char *filename, const char *description);
+ void loadgame(const char *filename);
+ const char *getSavegameFilename(int num);
+ static Common::String getSavegameFilename(const Common::String &target, int num);
+ static kReadSaveHeaderError readSaveHeader(Common::SeekableReadStream *in, bool loadThumbnail, SaveHeader &header);
+#endif
+
+public:
+
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_H */
Commit: 3b00cfa669a94490e727b065f14fb9216d43351c
https://github.com/scummvm/scummvm/commit/3b00cfa669a94490e727b065f14fb9216d43351c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with the blb archive class
Changed paths:
A engines/neverhood/blbarchive.cpp
A engines/neverhood/blbarchive.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
new file mode 100644
index 0000000..48452ef
--- /dev/null
+++ b/engines/neverhood/blbarchive.cpp
@@ -0,0 +1,107 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/dcl.h"
+#include "neverhood/blbarchive.h"
+
+namespace Neverhood {
+
+BlbArchive::BlbArchive() : _extData(NULL) {
+}
+
+BlbArchive::~BlbArchive() {
+ delete[] _extData;
+}
+
+void BlbArchive::open(const Common::String &filename) {
+ BlbHeader header;
+
+ _entries.clear();
+
+ if (!_fd.open(filename))
+ error("BlbArchive::open() Could not open %s", filename.c_str());
+
+ header.id1 = _fd.readUint32LE();
+ header.id2 = _fd.readUint16LE();
+ header.extDataSize = _fd.readUint16LE();
+ header.fileSize = _fd.readUint32LE();
+ header.fileCount = _fd.readUint32LE();
+
+ if (header.id1 != 0x2004940 || header.id2 != 7 || header.fileSize != _fd.size())
+ error("BlbArchive::open() %s seems to be corrupt", filename.c_str());
+
+ debug("fileCount = %d", header.fileCount);
+
+ _entries.reserve(header.fileCount);
+
+ // Load file hashes
+ for (uint i = 0; i < header.fileCount; i++) {
+ BlbArchiveEntry entry;
+ entry.fileHash = _fd.readUint32LE();
+ _entries.push_back(entry);
+ }
+
+ // Load file records
+ for (uint i = 0; i < header.fileCount; i++) {
+ BlbArchiveEntry &entry = _entries[i];
+ entry.type = _fd.readByte();
+ entry.comprType = _fd.readByte();
+ entry.extDataOfs = _fd.readUint16LE();
+ entry.timeStamp = _fd.readUint32LE();
+ entry.offset = _fd.readUint32LE();
+ entry.diskSize = _fd.readUint32LE();
+ entry.size = _fd.readUint32LE();
+ debug("%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
+ entry.fileHash, entry.type, entry.comprType, entry.extDataOfs, entry.timeStamp,
+ entry.offset, entry.diskSize, entry.size);
+ }
+
+ // Load ext data
+ if (header.extDataSize > 0) {
+ _extData = new byte[header.extDataSize];
+ _fd.read(_extData, header.extDataSize);
+ }
+
+}
+
+void BlbArchive::load(uint index, byte *buffer, uint32 size) {
+
+ BlbArchiveEntry &entry = _entries[index];
+
+ _fd.seek(entry.offset);
+
+ switch (entry.comprType) {
+ case 1: // Uncompressed
+ if (size == 0)
+ size = entry.diskSize;
+ _fd.read(buffer, size);
+ break;
+ case 3: // DCL-compressed
+ Common::decompressDCL(&_fd, buffer, entry.diskSize, entry.size);
+ break;
+ default:
+ ;
+ }
+
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/blbarchive.h b/engines/neverhood/blbarchive.h
new file mode 100644
index 0000000..7fc54d9
--- /dev/null
+++ b/engines/neverhood/blbarchive.h
@@ -0,0 +1,66 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_BLBARCHIVE_H
+#define NEVERHOOD_BLBARCHIVE_H
+
+#include "common/array.h"
+#include "common/file.h"
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+struct BlbHeader {
+ uint32 id1;
+ uint16 id2;
+ uint16 extDataSize;
+ int32 fileSize;
+ uint32 fileCount;
+};
+
+struct BlbArchiveEntry {
+ uint32 fileHash;
+ byte type;
+ byte comprType;
+ uint16 extDataOfs;
+ uint32 timeStamp;
+ uint32 offset;
+ uint32 diskSize;
+ uint32 size;
+};
+
+class BlbArchive {
+public:
+ BlbArchive();
+ ~BlbArchive();
+ void open(const Common::String &filename);
+ void load(uint index, byte *buffer, uint32 size);
+ uint32 getSize(uint index) { return _entries[index].size; }
+private:
+ Common::File _fd;
+ Common::Array<BlbArchiveEntry> _entries;
+ byte *_extData;
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_BLBARCHIVE_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index d46d6a6..0601f54 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -1,6 +1,7 @@
MODULE := engines/neverhood
MODULE_OBJS = \
+ blbarchive.o \
detection.o \
neverhood.o
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 9c464b9..873d7ff 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -20,7 +20,6 @@
*
*/
-#include "common/algorithm.h"
#include "common/events.h"
#include "common/keyboard.h"
#include "common/file.h"
@@ -35,10 +34,10 @@
#include "engines/util.h"
-#include "audio/mididrv.h"
#include "audio/mixer.h"
#include "neverhood/neverhood.h"
+#include "neverhood/blbarchive.h"
namespace Neverhood {
@@ -68,6 +67,12 @@ Common::Error NeverhoodEngine::run() {
_isSaveAllowed = false;
+
+ BlbArchive *blb = new BlbArchive();
+ blb->open("m.blb");
+
+ delete blb;
+
return Common::kNoError;
}
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index c17116d..63862dd 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -66,7 +66,7 @@ public:
Common::KeyCode _keyState;
uint16 _buttonState;
- void updateEvents();
+ void updateEvents();
public:
Commit: 70d20096c16b983d254366b82e725ce14e5b195c
https://github.com/scummvm/scummvm/commit/70d20096c16b983d254366b82e725ce14e5b195c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with the resource manager
Changed paths:
A engines/neverhood/resourceman.cpp
A engines/neverhood/resourceman.h
engines/neverhood/blbarchive.cpp
engines/neverhood/blbarchive.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 48452ef..4259be3 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -49,7 +49,7 @@ void BlbArchive::open(const Common::String &filename) {
if (header.id1 != 0x2004940 || header.id2 != 7 || header.fileSize != _fd.size())
error("BlbArchive::open() %s seems to be corrupt", filename.c_str());
- debug("fileCount = %d", header.fileCount);
+ debug(2, "fileCount = %d", header.fileCount);
_entries.reserve(header.fileCount);
@@ -70,7 +70,7 @@ void BlbArchive::open(const Common::String &filename) {
entry.offset = _fd.readUint32LE();
entry.diskSize = _fd.readUint32LE();
entry.size = _fd.readUint32LE();
- debug("%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
+ debug(2, "%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
entry.fileHash, entry.type, entry.comprType, entry.extDataOfs, entry.timeStamp,
entry.offset, entry.diskSize, entry.size);
}
@@ -84,7 +84,6 @@ void BlbArchive::open(const Common::String &filename) {
}
void BlbArchive::load(uint index, byte *buffer, uint32 size) {
-
BlbArchiveEntry &entry = _entries[index];
_fd.seek(entry.offset);
@@ -104,4 +103,9 @@ void BlbArchive::load(uint index, byte *buffer, uint32 size) {
}
+byte *BlbArchive::getEntryExtData(uint index) {
+ BlbArchiveEntry &entry = _entries[index];
+ return _extData && entry.extDataOfs != 0 ? &_extData[entry.extDataOfs - 1] : NULL;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/blbarchive.h b/engines/neverhood/blbarchive.h
index 7fc54d9..3c373cc 100644
--- a/engines/neverhood/blbarchive.h
+++ b/engines/neverhood/blbarchive.h
@@ -54,7 +54,10 @@ public:
~BlbArchive();
void open(const Common::String &filename);
void load(uint index, byte *buffer, uint32 size);
+ byte *getEntryExtData(uint index);
uint32 getSize(uint index) { return _entries[index].size; }
+ BlbArchiveEntry *getEntry(uint index) { return &_entries[index]; }
+ uint getCount() { return _entries.size(); }
private:
Common::File _fd;
Common::Array<BlbArchiveEntry> _entries;
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 0601f54..bdb6d86 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -3,7 +3,8 @@ MODULE := engines/neverhood
MODULE_OBJS = \
blbarchive.o \
detection.o \
- neverhood.o
+ neverhood.o \
+ resourceman.o
# This module can be built as a plugin
ifdef BUILD_PLUGINS
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 873d7ff..9254f88 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -38,6 +38,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
+#include "neverhood/resourceman.h"
namespace Neverhood {
@@ -67,11 +68,25 @@ Common::Error NeverhoodEngine::run() {
_isSaveAllowed = false;
-
+#if 0
BlbArchive *blb = new BlbArchive();
blb->open("m.blb");
-
delete blb;
+#endif
+
+#if 1
+ ResourceMan *res = new ResourceMan();
+ res->addArchive("a.blb");
+ res->addArchive("c.blb");
+ res->addArchive("hd.blb");
+ res->addArchive("i.blb");
+ res->addArchive("m.blb");
+ res->addArchive("s.blb");
+ res->addArchive("t.blb");
+
+ ResourceFileEntry *r = res->findEntry(0x50A80517);
+
+#endif
return Common::kNoError;
}
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
new file mode 100644
index 0000000..59e3fad
--- /dev/null
+++ b/engines/neverhood/resourceman.cpp
@@ -0,0 +1,167 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/resourceman.h"
+
+namespace Neverhood {
+
+ResourceMan::ResourceMan() {
+}
+
+ResourceMan::~ResourceMan() {
+}
+
+void ResourceMan::addArchive(const Common::String &filename) {
+ BlbArchive *archive = new BlbArchive();
+ uint archiveIndex = _archives.size();
+ archive->open(filename);
+ _archives.push_back(archive);
+ debug("ResourceMan::addArchive(%s) %d files", filename.c_str(), archive->getCount());
+ _entries.reserve(_entries.size() + archive->getCount());
+ for (uint archiveEntryIndex = 0; archiveEntryIndex < archive->getCount(); archiveEntryIndex++) {
+ BlbArchiveEntry *archiveEntry = archive->getEntry(archiveEntryIndex);
+ ResourceFileEntry *entry = findEntrySimple(archiveEntry->fileHash);
+ if (entry) {
+ if (archiveEntry->timeStamp > _archives[entry->archiveIndex]->getEntry(entry->entryIndex)->timeStamp) {
+ entry->archiveIndex = archiveIndex;
+ entry->entryIndex = archiveEntryIndex;
+ }
+ } else {
+ ResourceFileEntry newEntry;
+ newEntry.fileHash = archiveEntry->fileHash;
+ newEntry.resourceHandle = -1;
+ newEntry.archiveIndex = archiveIndex;
+ newEntry.entryIndex = archiveEntryIndex;
+ _entries.push_back(newEntry);
+ }
+ }
+}
+
+ResourceFileEntry *ResourceMan::findEntrySimple(uint32 fileHash) {
+ for (uint i = 0; i < _entries.size(); i++) {
+ if (_entries[i].fileHash == fileHash)
+ return &_entries[i];
+ }
+ return NULL;
+}
+
+ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntrySimple(fileHash);
+ for (; entry && getArchiveEntry(entry)->comprType == 0x65; fileHash = getArchiveEntry(entry)->diskSize)
+ entry = findEntrySimple(fileHash);
+ return entry;
+}
+
+BlbArchiveEntry *ResourceMan::getArchiveEntry(ResourceFileEntry *entry) const {
+ return _archives[entry->archiveIndex]->getEntry(entry->entryIndex);
+}
+
+int ResourceMan::useResource(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntry(fileHash);
+ if (entry->resourceHandle != -1) {
+ _resources[entry->resourceHandle]->useRefCount++;
+ } else {
+ Resource *resource = new Resource();
+ resource->fileHash = entry->fileHash;
+ resource->archiveIndex = entry->archiveIndex;
+ resource->entryIndex = entry->entryIndex;
+ resource->data = NULL;
+ resource->dataRefCount = 0;
+ resource->useRefCount = 1;
+ entry->resourceHandle = (int)_resources.size();
+ _resources.push_back(resource);
+ }
+ return entry->resourceHandle;
+}
+
+void ResourceMan::unuseResource(int resourceHandle) {
+ Resource *resource = _resources[resourceHandle];
+ if (resource->useRefCount > 0)
+ resource->useRefCount--;
+}
+
+void ResourceMan::unuseResourceByHash(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntry(fileHash);
+ if (entry->resourceHandle != -1)
+ unuseResource(entry->resourceHandle);
+}
+
+int ResourceMan::getResourceHandleByHash(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntry(fileHash);
+ return entry->resourceHandle;
+}
+
+bool ResourceMan::isResourceDataValid(int resourceHandle) const {
+ return _resources[resourceHandle]->data != NULL;
+}
+
+uint32 ResourceMan::getResourceSize(int resourceHandle) const {
+ Resource *resource = _resources[resourceHandle];
+ return _archives[resource->archiveIndex]->getEntry(resource->entryIndex)->size;
+}
+
+byte ResourceMan::getResourceType(int resourceHandle) {
+ Resource *resource = _resources[resourceHandle];
+ return _archives[resource->archiveIndex]->getEntry(resource->entryIndex)->type;
+}
+
+byte ResourceMan::getResourceTypeByHash(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntry(fileHash);
+ return getArchiveEntry(entry)->type;
+}
+
+byte *ResourceMan::getResourceExtData(int resourceHandle) {
+ Resource *resource = _resources[resourceHandle];
+ return _archives[resource->archiveIndex]->getEntryExtData(resource->entryIndex);
+}
+
+byte *ResourceMan::getResourceExtDataByHash(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntry(fileHash);
+ return _archives[entry->archiveIndex]->getEntryExtData(entry->entryIndex);
+}
+
+byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
+ Resource *resource = _resources[resourceHandle];
+ if (resource->data != NULL) {
+ resource->dataRefCount++;
+ } else {
+ BlbArchive *archive = _archives[resource->archiveIndex];
+ BlbArchiveEntry *archiveEntry = archive->getEntry(resource->entryIndex);
+ resource->data = new byte[archiveEntry->size];
+ archive->load(resource->entryIndex, resource->data, 0);
+ resource->dataRefCount = 1;
+ }
+ return resource->data;
+}
+
+void ResourceMan::unloadResource(int resourceHandle) {
+ Resource *resource = _resources[resourceHandle];
+ if (resource->dataRefCount > 0)
+ resource->dataRefCount--;
+}
+
+void ResourceMan::freeResource(Resource *resource) {
+ delete[] resource->data;
+ resource->data = NULL;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
new file mode 100644
index 0000000..0dd70e1
--- /dev/null
+++ b/engines/neverhood/resourceman.h
@@ -0,0 +1,78 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_RESOURCEMAN_H
+#define NEVERHOOD_RESOURCEMAN_H
+
+#include "common/array.h"
+#include "common/file.h"
+#include "neverhood/neverhood.h"
+#include "neverhood/blbarchive.h"
+
+namespace Neverhood {
+
+struct ResourceFileEntry {
+ uint32 fileHash;
+ int resourceHandle;
+ uint archiveIndex;
+ uint entryIndex;
+};
+
+struct Resource {
+ uint32 fileHash;
+ uint archiveIndex;
+ uint entryIndex;
+ byte *data;
+ int dataRefCount;
+ int useRefCount;
+};
+
+class ResourceMan {
+public:
+ ResourceMan();
+ ~ResourceMan();
+ void addArchive(const Common::String &filename);
+ ResourceFileEntry *findEntrySimple(uint32 fileHash);
+ ResourceFileEntry *findEntry(uint32 fileHash);
+ BlbArchiveEntry *getArchiveEntry(ResourceFileEntry *entry) const;
+ int useResource(uint32 fileHash);
+ void unuseResource(int resourceHandle);
+ void unuseResourceByHash(uint32 fileHash);
+ int getResourceHandleByHash(uint32 fileHash);
+ bool isResourceDataValid(int resourceHandle) const;
+ uint32 getResourceSize(int resourceHandle) const;
+ byte getResourceType(int resourceHandle);
+ byte getResourceTypeByHash(uint32 fileHash);
+ byte *getResourceExtData(int resourceHandle);
+ byte *getResourceExtDataByHash(uint32 fileHash);
+ byte *loadResource(int resourceHandle, bool moveToFront = false);
+ void unloadResource(int resourceHandle);
+ void freeResource(Resource *resource);
+private:
+ Common::Array<BlbArchive*> _archives;
+ Common::Array<ResourceFileEntry> _entries;
+ Common::Array<Resource*> _resources;
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_RESOURCEMAN_H */
Commit: 7d5d5f139f5d2ac747f1440171f4cc42735541a7
https://github.com/scummvm/scummvm/commit/7d5d5f139f5d2ac747f1440171f4cc42735541a7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with graphics code (bitmap parsing and rle decompression)
Changed paths:
A engines/neverhood/graphics.cpp
A engines/neverhood/graphics.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
new file mode 100644
index 0000000..8f8849b
--- /dev/null
+++ b/engines/neverhood/graphics.cpp
@@ -0,0 +1,108 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/graphics.h"
+
+namespace Neverhood {
+
+void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels) {
+
+ uint16 flags;
+
+ flags = READ_LE_UINT16(sprite);
+ sprite += 2;
+
+ if (rle)
+ *rle = flags & 1;
+
+ if (flags & 2) {
+ if (dimensions) {
+ dimensions->width = READ_LE_UINT16(sprite);
+ dimensions->height = READ_LE_UINT16(sprite + 2);
+ }
+ sprite += 4;
+ } else if (dimensions) {
+ dimensions->width = 1;
+ dimensions->height = 1;
+ }
+
+ if (flags & 4) {
+ if (unknown) {
+ unknown->unk1 = READ_LE_UINT16(sprite);
+ unknown->unk2 = READ_LE_UINT16(sprite + 2);
+ }
+ sprite += 4;
+ } else if (unknown) {
+ unknown->unk1 = 0;
+ unknown->unk2 = 0;
+ }
+
+ if (flags & 8) {
+ if (palette)
+ *palette = sprite;
+ sprite += 1024;
+ } else if (palette)
+ *palette = NULL;
+
+ if (flags & 0x10) {
+ if (pixels)
+ *pixels = sprite;
+ } else if (pixels)
+ *pixels = NULL;
+
+}
+
+void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
+
+ // TODO: Flip
+
+ int16 rows, chunks;
+ int16 skip, copy;
+
+ rows = READ_LE_UINT16(source);
+ chunks = READ_LE_UINT16(source + 2);
+ source += 4;
+
+ do {
+ if (chunks == 0) {
+ dest += rows * destPitch;
+ } else {
+ while (rows-- > 0) {
+ uint16 rowChunks = chunks;
+ while (rowChunks-- > 0) {
+ skip = READ_LE_UINT16(source);
+ copy = READ_LE_UINT16(source + 2);
+ source += 4;
+ memcpy(dest + skip, source, copy);
+ source += copy;
+ }
+ dest += destPitch;
+ }
+ }
+ rows = READ_LE_UINT16(source);
+ chunks = READ_LE_UINT16(source + 2);
+ source += 4;
+ } while (rows > 0);
+
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
new file mode 100644
index 0000000..8cac5a5
--- /dev/null
+++ b/engines/neverhood/graphics.h
@@ -0,0 +1,45 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_GRAPHICS_H
+#define NEVERHOOD_GRAPHICS_H
+
+#include "common/array.h"
+#include "common/file.h"
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+struct NDimensions {
+ int16 width, height;
+};
+
+struct NUnknown {
+ int16 unk1, unk2;
+};
+
+void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels);
+void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_GRAPHICS_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index bdb6d86..57491e6 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -3,6 +3,7 @@ MODULE := engines/neverhood
MODULE_OBJS = \
blbarchive.o \
detection.o \
+ graphics.o \
neverhood.o \
resourceman.o
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 9254f88..fa781fb 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -38,6 +38,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
+#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
namespace Neverhood {
@@ -68,26 +69,50 @@ Common::Error NeverhoodEngine::run() {
_isSaveAllowed = false;
+ _res = new ResourceMan();
+ _res->addArchive("a.blb");
+ _res->addArchive("c.blb");
+ _res->addArchive("hd.blb");
+ _res->addArchive("i.blb");
+ _res->addArchive("m.blb");
+ _res->addArchive("s.blb");
+ _res->addArchive("t.blb");
+
#if 0
BlbArchive *blb = new BlbArchive();
blb->open("m.blb");
delete blb;
#endif
-#if 1
- ResourceMan *res = new ResourceMan();
- res->addArchive("a.blb");
- res->addArchive("c.blb");
- res->addArchive("hd.blb");
- res->addArchive("i.blb");
- res->addArchive("m.blb");
- res->addArchive("s.blb");
- res->addArchive("t.blb");
-
- ResourceFileEntry *r = res->findEntry(0x50A80517);
-
+#if 0
+ ResourceFileEntry *r = _res->findEntry(0x50A80517);
#endif
+#if 0
+ int resourceHandle = _res->useResource(0x0CA04202);
+ debug("resourceHandle = %d", resourceHandle);
+ byte *data = _res->loadResource(resourceHandle);
+ bool rle;
+ NDimensions dimensions;
+ NUnknown unknown;
+ byte *palette, *pixels;
+ parseBitmapResource(data, &rle, &dimensions, &unknown, &palette, &pixels);
+ debug("%d, %d", dimensions.width, dimensions.height);
+ byte *rawpixels = new byte[dimensions.width * dimensions.height];
+ memset(rawpixels, 0, dimensions.width * dimensions.height);
+ debug("rle = %d", rle);
+ unpackSpriteRle(pixels, dimensions.width, dimensions.height, rawpixels, dimensions.width, false, false);
+ Common::DumpFile d;
+ d.open("dump.0");
+ d.write(rawpixels, dimensions.width * dimensions.height);
+ d.close();
+ delete[] rawpixels;
+ _res->unloadResource(resourceHandle);
+ _res->unuseResource(resourceHandle);
+#endif
+
+ delete _res;
+
return Common::kNoError;
}
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 63862dd..956880f 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -43,6 +43,8 @@ enum NeverhoodGameFeatures {
struct NeverhoodGameDescription;
+class ResourceMan;
+
class NeverhoodEngine : public ::Engine {
protected:
@@ -66,6 +68,8 @@ public:
Common::KeyCode _keyState;
uint16 _buttonState;
+ ResourceMan *_res;
+
void updateEvents();
public:
Commit: a262055df25b0b00fcb0fe9e7919153f5089d615
https://github.com/scummvm/scummvm/commit/a262055df25b0b00fcb0fe9e7919153f5089d615
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with the BaseSurface class (doesn't do much yet)
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 8f8849b..fb8ec4a 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -24,6 +24,39 @@
namespace Neverhood {
+BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height)
+ : _vm(vm), _priority(priority), _visible(true) {
+
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = width;
+ _drawRect.height = height;
+ _sysRect.x = 0;
+ _sysRect.y = 0;
+ _sysRect.width = (width + 3) & 0xFFFC; // align by 4 bytes
+ _sysRect.height = height;
+ _clipRect.x1 = 0;
+ _clipRect.y1 = 0;
+ _clipRect.x2 = 640;
+ _clipRect.y2 = 480;
+ _surface = new Graphics::Surface();
+ _surface->create(width, height, Graphics::PixelFormat::createFormatCLUT8());
+}
+
+BaseSurface::~BaseSurface() {
+ delete _surface;
+}
+
+void BaseSurface::draw() {
+ // TODO
+}
+
+void BaseSurface::addDirtyRect() {
+ // TODO
+}
+
+// Misc
+
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels) {
uint16 flags;
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 8cac5a5..bc59287 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -25,6 +25,7 @@
#include "common/array.h"
#include "common/file.h"
+#include "graphics/surface.h"
#include "neverhood/neverhood.h"
namespace Neverhood {
@@ -37,6 +38,36 @@ struct NUnknown {
int16 unk1, unk2;
};
+struct NRect {
+ int16 x1, y1, x2, y2;
+ NRect() : x1(0), y1(0), x2(0), y2(0) {}
+};
+
+struct NDrawRect {
+ int16 x, y, width, height;
+ NDrawRect() : x(0), y(0), width(0), height(0) {}
+};
+
+// NOTE: "Restore" methods aren't need in the reimplementation as they're DirectDraw-specific
+
+class BaseSurface {
+public:
+ BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height);
+ virtual ~BaseSurface();
+ virtual void draw();
+ virtual void addDirtyRect();
+protected:
+ NeverhoodEngine *_vm;
+ int _priority;
+ bool _visible;
+ Graphics::Surface *_surface;
+ NDrawRect _drawRect;
+ NDrawRect _sysRect;
+ NRect _clipRect;
+};
+
+// Misc
+
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels);
void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
Commit: 108368e9b5282a72d0f582e89803f5ee099baa94
https://github.com/scummvm/scummvm/commit/108368e9b5282a72d0f582e89803f5ee099baa94
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Add more
- SpriteResource and PaletteResource resource classes
- Extend BaseSurface to be able to draw SpriteResources onto it
- Implement Entity base class (this may need some work concerning the update/message callbacks later since I'm not sure if the way it's done now is portable)
Changed paths:
A engines/neverhood/entity.cpp
A engines/neverhood/entity.h
A engines/neverhood/palette.cpp
A engines/neverhood/palette.h
A engines/neverhood/resource.cpp
A engines/neverhood/resource.h
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
new file mode 100644
index 0000000..9070d5c
--- /dev/null
+++ b/engines/neverhood/entity.cpp
@@ -0,0 +1,27 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/entity.h"
+
+namespace Neverhood {
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
new file mode 100644
index 0000000..b7ebdd1
--- /dev/null
+++ b/engines/neverhood/entity.h
@@ -0,0 +1,64 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_ENTITY_H
+#define NEVERHOOD_ENTITY_H
+
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+struct MessageParam {
+ union {
+ uint32 _integer;
+ // TODO: Other types...
+ };
+ // TODO: Constructors for the param types...
+};
+
+#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler)
+#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, MessageParam ¶m, Entity *sender)> (handler)
+
+class Entity {
+public:
+ Entity(NeverhoodEngine *vm, int priority)
+ : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority) {
+ }
+ ~Entity() {
+ }
+ void handleUpdate() {
+ if (_updateHandlerCb)
+ (this->*_updateHandlerCb)();
+ }
+ uint32 handleMessage(int messageNum, MessageParam ¶m, Entity *sender) {
+ return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
+ }
+protected:
+ void (Entity::*_updateHandlerCb)();
+ uint32 (Entity::*_messageHandlerCb)(int messageNum, MessageParam ¶m, Entity *sender);
+ NeverhoodEngine *_vm;
+ int _priority;
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_ENTITY_H */
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index fb8ec4a..315c62d 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/graphics.h"
+#include "neverhood/resource.h"
namespace Neverhood {
@@ -55,6 +56,18 @@ void BaseSurface::addDirtyRect() {
// TODO
}
+void BaseSurface::clear() {
+ _surface->fillRect(Common::Rect(0, 0, _surface->w, _surface->h), 0);
+}
+
+void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
+ if (spriteResource.dimensions().width <= _drawRect.width &&
+ spriteResource.dimensions().height <= _drawRect.height) {
+ clear();
+ spriteResource.draw((byte*)_surface->pixels, _surface->pitch, false, false);
+ }
+}
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels) {
@@ -138,4 +151,18 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
}
+void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
+
+ // TODO: Flip
+
+ int sourcePitch = (width + 3) & 0xFFFC;
+
+ while (height-- > 0) {
+ memcpy(dest, source, width);
+ source += sourcePitch;
+ dest += destPitch;
+ }
+
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index bc59287..27ef6cd 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -48,6 +48,8 @@ struct NDrawRect {
NDrawRect() : x(0), y(0), width(0), height(0) {}
};
+class SpriteResource;
+
// NOTE: "Restore" methods aren't need in the reimplementation as they're DirectDraw-specific
class BaseSurface {
@@ -56,6 +58,8 @@ public:
virtual ~BaseSurface();
virtual void draw();
virtual void addDirtyRect();
+ void clear();
+ void drawSpriteResource(SpriteResource &spriteResource);
protected:
NeverhoodEngine *_vm;
int _priority;
@@ -66,10 +70,21 @@ protected:
NRect _clipRect;
};
+/*
+class Palette {
+public:
+ Palette();
+ ~Palette();
+protected:
+
+};
+*/
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels);
void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
+void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 57491e6..d70c4a9 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -3,8 +3,11 @@ MODULE := engines/neverhood
MODULE_OBJS = \
blbarchive.o \
detection.o \
+ entity.o \
graphics.o \
neverhood.o \
+ palette.o \
+ resource.o \
resourceman.o
# This module can be built as a plugin
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index fa781fb..f7bf032 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -40,6 +40,7 @@
#include "neverhood/blbarchive.h"
#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
+#include "neverhood/resource.h"
namespace Neverhood {
@@ -111,6 +112,17 @@ Common::Error NeverhoodEngine::run() {
_res->unuseResource(resourceHandle);
#endif
+#if 1
+ { // Create a new scope
+ SpriteResource r(this);
+ BaseSurface *surf = new BaseSurface(this, 0, 640, 480);
+ r.load(0x0CA04202);
+ debug("r: width = %d; height = %d", r.dimensions().width, r.dimensions().height);
+ surf->drawSpriteResource(r);
+ delete surf;
+ }
+#endif
+
delete _res;
return Common::kNoError;
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
new file mode 100644
index 0000000..385cade
--- /dev/null
+++ b/engines/neverhood/palette.cpp
@@ -0,0 +1,44 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/palette.h"
+#include "neverhood/resource.h"
+
+namespace Neverhood {
+
+Palette::Palette(NeverhoodEngine *vm) : Entity(vm, 0) {
+ _status = 0;
+ _palette = new byte[1024];
+ memset(_palette, 0, 1024);
+ SetUpdateHandler(&Palette::update);
+}
+
+Palette::~Palette() {
+ // TODO: _vm->_screen->unsetPaletteData(_palette);
+ delete[] _palette;
+}
+
+void Palette::update() {
+ // TODO
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
new file mode 100644
index 0000000..961b4ac
--- /dev/null
+++ b/engines/neverhood/palette.h
@@ -0,0 +1,44 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_PALETTE_H
+#define NEVERHOOD_PALETTE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/entity.h"
+
+namespace Neverhood {
+
+class Palette : public Entity {
+public:
+ // Default constructor with black palette
+ Palette(NeverhoodEngine *vm);
+ ~Palette();
+protected:
+ int _status;
+ byte *_palette;
+ void update();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_PALETTE_H */
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
new file mode 100644
index 0000000..6c77c48
--- /dev/null
+++ b/engines/neverhood/resource.cpp
@@ -0,0 +1,137 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/resource.h"
+#include "neverhood/resourceman.h"
+
+namespace Neverhood {
+
+SpriteResource::SpriteResource(NeverhoodEngine *vm)
+ : _vm(vm), _resourceHandle(-1), _pixels(NULL) {
+}
+
+SpriteResource::~SpriteResource() {
+ unload();
+}
+
+void SpriteResource::draw(byte *dest, int destPitch, bool flipX, bool flipY) {
+ if (_pixels) {
+ if (_rle) {
+ unpackSpriteRle(_pixels, _dimensions.width, _dimensions.height, dest, destPitch, flipX, flipY);
+ } else {
+ unpackSpriteNormal(_pixels, _dimensions.width, _dimensions.height, dest, destPitch, flipX, flipY);
+ }
+ }
+}
+
+bool SpriteResource::load(uint32 fileHash) {
+ // TODO: Later merge with load2 and make the mode a parameter
+ unload();
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ debug("SpriteResource::load(0x%08X) _resourceHandle = %d", fileHash, _resourceHandle);
+ if (_resourceHandle != -1) {
+ if (_vm->_res->getResourceType(_resourceHandle) == 2) {
+ byte *spriteData = _vm->_res->loadResource(_resourceHandle, true);
+ parseBitmapResource(spriteData, &_rle, &_dimensions, NULL, NULL, &_pixels);
+ } else {
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ }
+ }
+ return _pixels != NULL;
+}
+
+bool SpriteResource::load2(uint32 fileHash) {
+ unload();
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ if (_resourceHandle != -1) {
+ if (_vm->_res->getResourceType(_resourceHandle) == 2) {
+ byte *spriteData = _vm->_res->loadResource(_resourceHandle, true);
+ parseBitmapResource(spriteData, &_rle, &_dimensions, &_unknown, NULL, &_pixels);
+ } else {
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ }
+ }
+ return _pixels != NULL;
+}
+
+void SpriteResource::unload() {
+ if (_resourceHandle != -1) {
+ _vm->_res->unloadResource(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ } else {
+ delete[] _pixels;
+ }
+ _pixels = NULL;
+ _rle = false;
+}
+
+PaletteResource::PaletteResource(NeverhoodEngine *vm)
+ : _vm(vm), _resourceHandle(-1), _palette(NULL) {
+}
+
+PaletteResource::~PaletteResource() {
+ unload();
+}
+
+bool PaletteResource::load(uint32 fileHash) {
+ unload();
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ if (_resourceHandle != -1) {
+ _palette = _vm->_res->loadResource(_resourceHandle, true);
+ switch (_vm->_res->getResourceType(_resourceHandle)) {
+ case 2:
+ // Palette is stored in a bitmap
+ parseBitmapResource(_palette, NULL, NULL, NULL, &_palette, NULL);
+ break;
+ case 3:
+ // _palette already points to the correct data
+ break;
+ default:
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ break;
+ }
+ }
+ return _palette != NULL;
+}
+
+void PaletteResource::unload() {
+ if (_resourceHandle != -1) {
+ _vm->_res->unloadResource(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ _palette = NULL;
+ }
+}
+
+void PaletteResource::getPalette(byte *palette) {
+ if (_palette) {
+ memcpy(palette, _palette, 1024);
+ } else {
+ // TODO?: buildDefaultPalette(palette);
+ }
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
new file mode 100644
index 0000000..7f61af6
--- /dev/null
+++ b/engines/neverhood/resource.h
@@ -0,0 +1,64 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_RESOURCE_H
+#define NEVERHOOD_RESOURCE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/graphics.h"
+
+namespace Neverhood {
+
+class SpriteResource {
+public:
+ SpriteResource(NeverhoodEngine *vm);
+ ~SpriteResource();
+ void draw(byte *dest, int destPitch, bool flipX, bool flipY);
+ bool load(uint32 fileHash);
+ bool load2(uint32 fileHash);
+ void unload();
+ const NDimensions& dimensions() { return _dimensions; };
+protected:
+ NeverhoodEngine *_vm;
+ int _resourceHandle;
+ NDimensions _dimensions;
+ NUnknown _unknown;
+ byte *_pixels;
+ bool _rle;
+};
+
+class PaletteResource {
+public:
+ PaletteResource(NeverhoodEngine *vm);
+ ~PaletteResource();
+ bool load(uint32 fileHash);
+ void unload();
+ void getPalette(byte *palette);
+protected:
+ NeverhoodEngine *_vm;
+ int _resourceHandle;
+ byte *_palette;
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_RESOURCE_H */
Commit: eb5ab30ce0ca0cfb58eed5a434f2252afc9718f7
https://github.com/scummvm/scummvm/commit/eb5ab30ce0ca0cfb58eed5a434f2252afc9718f7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: More work on the Palette class
Changed paths:
engines/neverhood/palette.cpp
engines/neverhood/palette.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index 385cade..b45f8ee 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -32,13 +32,94 @@ Palette::Palette(NeverhoodEngine *vm) : Entity(vm, 0) {
SetUpdateHandler(&Palette::update);
}
+Palette::Palette(NeverhoodEngine *vm, byte *palette) : Entity(vm, 0) {
+ _status = 0;
+ _palette = new byte[1024];
+ memcpy(_palette, palette, 1024);
+ SetUpdateHandler(&Palette::update);
+}
+
+Palette::Palette(NeverhoodEngine *vm, const char *filename) : Entity(vm, 0) {
+ PaletteResource paletteResource(_vm);
+ _status = 0;
+ _palette = new byte[1024];
+ // TODO: paletteResource.load(calcHash(filename));
+ // paletteResource.copyPalette(_palette);
+ SetUpdateHandler(&Palette::update);
+}
+
+Palette::Palette(NeverhoodEngine *vm, uint32 fileHash) : Entity(vm, 0) {
+ PaletteResource paletteResource(_vm);
+ _status = 0;
+ _palette = new byte[1024];
+ paletteResource.load(fileHash);
+ paletteResource.copyPalette(_palette);
+ SetUpdateHandler(&Palette::update);
+}
+
Palette::~Palette() {
// TODO: _vm->_screen->unsetPaletteData(_palette);
delete[] _palette;
}
+void Palette::usePalette() {
+ // TODO: _vm->_screen->setPaletteData(_palette);
+}
+
+void Palette::addPalette(const char *filename, int toIndex, int count, int fromIndex) {
+ // TODO: addPalette(calcHash(filename), toIndex, count, fromIndex);
+}
+
+void Palette::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
+ PaletteResource paletteResource(_vm);
+ if (toIndex + count > 256)
+ count = 256 - toIndex;
+ paletteResource.load(fileHash);
+ memcpy(_palette + toIndex * 4, paletteResource.palette() + fromIndex * 4, count * 4);
+ // TODO: _vm->_screen->testPalette(_palette);
+}
+
+void Palette::startFadeToBlack(int counter) {
+ if (counter == 0)
+ counter = 1;
+ _fadeToR = 0;
+ _fadeToG = 0;
+ _fadeToB = 0;
+ _palCounter = counter;
+ _fadeStep = 255 / counter;
+ _status = 1;
+}
+
+void Palette::startFadeToWhite(int counter) {
+ if (counter == 0)
+ counter = 1;
+ _fadeToR = 255;
+ _fadeToG = 255;
+ _fadeToB = 255;
+ _palCounter = counter;
+ _fadeStep = 255 / counter;
+ _status = 1;
+}
+
void Palette::update() {
- // TODO
+ if (_status == 1) {
+ memset(_palette, 0, 1024);
+ _status = 0;
+ } else {
+ for (int i = 0; i < 256; i++) {
+ fadeColor(_palette + i * 4, _fadeToR, _fadeToG, _fadeToB);
+ }
+ // TODO: _vm->_screen->testPalette(_palette);
+ _palCounter--;
+ }
+}
+
+void Palette::fadeColor(byte *rgb, byte toR, byte toG, byte toB) {
+ #define FADE(color, toColor) color += _fadeStep < toColor - color ? _fadeStep : (-_fadeStep <= toColor - color ? toColor - color : -_fadeStep)
+ FADE(rgb[0], toR);
+ FADE(rgb[1], toG);
+ FADE(rgb[2], toB);
+ #undef FADE
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 961b4ac..b29d771 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -32,11 +32,26 @@ class Palette : public Entity {
public:
// Default constructor with black palette
Palette(NeverhoodEngine *vm);
+ // Create from existing palette
+ Palette(NeverhoodEngine *vm, byte *palette);
+ // Create from resource with filename
+ Palette(NeverhoodEngine *vm, const char *filename);
+ // Create from resource with fileHash
+ Palette(NeverhoodEngine *vm, uint32 fileHash);
~Palette();
+ void usePalette();
+ void addPalette(const char *filename, int toIndex, int count, int fromIndex);
+ void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
+ void startFadeToBlack(int counter);
+ void startFadeToWhite(int counter);
protected:
int _status;
byte *_palette;
+ int _palCounter;
+ byte _fadeToR, _fadeToG, _fadeToB;
+ int _fadeStep;
void update();
+ void fadeColor(byte *rgb, byte toR, byte toG, byte toB);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 6c77c48..2dd919c 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -126,9 +126,9 @@ void PaletteResource::unload() {
}
}
-void PaletteResource::getPalette(byte *palette) {
+void PaletteResource::copyPalette(byte *destPalette) {
if (_palette) {
- memcpy(palette, _palette, 1024);
+ memcpy(destPalette, _palette, 1024);
} else {
// TODO?: buildDefaultPalette(palette);
}
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 7f61af6..7f699c5 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -52,7 +52,8 @@ public:
~PaletteResource();
bool load(uint32 fileHash);
void unload();
- void getPalette(byte *palette);
+ void copyPalette(byte *destPalette);
+ byte *palette() { return _palette; }
protected:
NeverhoodEngine *_vm;
int _resourceHandle;
Commit: 4a01a69e37633aad402cea8477d812df4391a84d
https://github.com/scummvm/scummvm/commit/4a01a69e37633aad402cea8477d812df4391a84d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with Module and GameModule classes
Changed paths:
A engines/neverhood/gamemodule.cpp
A engines/neverhood/gamemodule.h
A engines/neverhood/module.cpp
A engines/neverhood/module.h
engines/neverhood/entity.h
engines/neverhood/module.mk
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index b7ebdd1..0b0fc74 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -32,29 +32,36 @@ struct MessageParam {
uint32 _integer;
// TODO: Other types...
};
+ MessageParam(uint32 value) { _integer = value; }
// TODO: Constructors for the param types...
};
#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler)
-#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, MessageParam ¶m, Entity *sender)> (handler)
+#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler)
class Entity {
public:
Entity(NeverhoodEngine *vm, int priority)
: _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority) {
}
- ~Entity() {
+ virtual ~Entity() {
+ }
+ virtual void draw() {
}
void handleUpdate() {
if (_updateHandlerCb)
(this->*_updateHandlerCb)();
}
- uint32 handleMessage(int messageNum, MessageParam ¶m, Entity *sender) {
+ uint32 sendMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
}
+ // Overloaded for various message parameter types
+ uint32 sendMessage(int messageNum, uint32 param, Entity *sender) {
+ return sendMessage(messageNum, MessageParam(param), sender);
+ }
protected:
void (Entity::*_updateHandlerCb)();
- uint32 (Entity::*_messageHandlerCb)(int messageNum, MessageParam ¶m, Entity *sender);
+ uint32 (Entity::*_messageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
NeverhoodEngine *_vm;
int _priority;
};
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
new file mode 100644
index 0000000..887ff3d
--- /dev/null
+++ b/engines/neverhood/gamemodule.cpp
@@ -0,0 +1,98 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/gamemodule.h"
+
+namespace Neverhood {
+
+GameModule::GameModule(NeverhoodEngine *vm)
+ : Module(_vm, NULL) {
+
+ // Other initializations moved to actual engine class
+
+ // TODO .text:0048AD96
+
+ // TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
+
+
+
+ SetMessageHandler(&GameModule::handleMessage);
+
+}
+
+GameModule::~GameModule() {
+
+ // TODO Sound1ChList_sub_407AF0(0x2D0031);
+
+ delete _childObject;
+ _childObject = NULL;
+
+ // TODO: Set palette to black but probably not neccessary
+
+ // TODO Sound1ChList_sub_408480();
+
+}
+
+uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Module::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0800:
+ _someFlag1 = true;
+ return messageResult;
+ case 0x1009:
+ _field24 = -1;
+ _field26 = -1;
+ _field28 = -1;
+ _field20 = param._integer;
+ _done = true;
+ return messageResult;
+ case 0x100A:
+ _field24 = (int16)param._integer;
+ return messageResult;
+ case 0x101F:
+ _field2C = true;
+ return messageResult;
+ case 0x1023:
+ _field26 = (int16)param._integer;
+ return messageResult;
+ }
+ return messageResult;
+}
+
+void GameModule::startup() {
+ // TODO: Displaying of error text probably not needed in ScummVM
+ createModule1500(0);
+}
+
+void GameModule::createModule1500(int which) {
+ // TODO
+ _someFlag1 = false;
+ // TODO *getGlobalGameVarValuePtr(0x91080831) = 0x0F10114;
+ // TODO _childObject = new Module1500(this, which, true);
+ SetUpdateHandler(&GameModule::updateModule1500);
+}
+
+void GameModule::updateModule1500() {
+ // TODO
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
new file mode 100644
index 0000000..6f47fb6
--- /dev/null
+++ b/engines/neverhood/gamemodule.h
@@ -0,0 +1,56 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// TODO: I couldn't come up with a better name than 'Module' so far
+
+#ifndef NEVERHOOD_GAMEMODULE_H
+#define NEVERHOOD_GAMEMODULE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+
+namespace Neverhood {
+
+class GameModule : public Module {
+public:
+ GameModule(NeverhoodEngine *vm);
+ virtual ~GameModule();
+protected:
+ Entity *_prevChildObject;
+ bool _someFlag1;
+ bool _field2C;
+ uint32 _counter;
+ /* TODO
+ ResourceTable _resourceTable1;
+ ResourceTable _resourceTable2;
+ ResourceTable _resourceTable3;
+ ResourceTable _resourceTable4;
+ */
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void startup();
+ void createModule1500(int which);
+ void updateModule1500();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE_H */
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
new file mode 100644
index 0000000..1aa1203
--- /dev/null
+++ b/engines/neverhood/module.cpp
@@ -0,0 +1,75 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module.h"
+
+namespace Neverhood {
+
+Module::Module(NeverhoodEngine *vm, Module *parentModule)
+ : Entity(_vm, 0), _parentModule(parentModule), _childObject(NULL),
+ _done(false), _field24(-1), _field26(-1), _field28(-1) {
+
+ SetMessageHandler(&Module::handleMessage);
+
+}
+
+Module::~Module() {
+ delete _childObject;
+}
+
+void Module::draw() {
+ if (_childObject)
+ _childObject->draw();
+}
+
+uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+
+ switch (messageNum) {
+ case 0x0008:
+ if (_parentModule)
+ _parentModule->sendMessage(8, 0, this);
+ return 0;
+ case 0x1009:
+ _field24 = -1;
+ _field26 = -1;
+ _field28 = -1;
+ _field20 = param._integer;
+ _done = true;
+ return 0;
+ case 0x100A:
+ _field24 = (int16)param._integer;
+ return 0;
+ case 0x1023:
+ _field26 = (int16)param._integer;
+ return 0;
+ case 0x1024:
+ _field28 = (int16)param._integer;
+ return 0;
+ default:
+ if (_childObject && sender == _parentModule)
+ return _childObject->sendMessage(messageNum, param, sender);
+ }
+
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
new file mode 100644
index 0000000..432a04c
--- /dev/null
+++ b/engines/neverhood/module.h
@@ -0,0 +1,49 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// TODO: I couldn't come up with a better name than 'Module' so far
+
+#ifndef NEVERHOOD_MODULE_H
+#define NEVERHOOD_MODULE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/entity.h"
+
+namespace Neverhood {
+
+class Module : public Entity {
+public:
+ Module(NeverhoodEngine *vm, Module *parentModule);
+ virtual ~Module();
+ virtual void draw();
+protected:
+ Module *_parentModule;
+ Entity *_childObject;
+ bool _done;
+ int16 _field24, _field26, _field28;
+ uint32 _field20;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index d70c4a9..ef6caba 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -4,7 +4,9 @@ MODULE_OBJS = \
blbarchive.o \
detection.o \
entity.o \
+ gamemodule.o \
graphics.o \
+ module.o \
neverhood.o \
palette.o \
resource.o \
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 956880f..edbf165 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -45,6 +45,10 @@ struct NeverhoodGameDescription;
class ResourceMan;
+struct GameState {
+ int field1;
+};
+
class NeverhoodEngine : public ::Engine {
protected:
@@ -68,6 +72,7 @@ public:
Common::KeyCode _keyState;
uint16 _buttonState;
+ GameState _gameState;
ResourceMan *_res;
void updateEvents();
Commit: ce4ef688b3c52016f31e02c2cf3f2fc6703343ba
https://github.com/scummvm/scummvm/commit/ce4ef688b3c52016f31e02c2cf3f2fc6703343ba
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Add skeleton for Module1500 (the intro module)
Changed paths:
A engines/neverhood/module1500.cpp
A engines/neverhood/module1500.h
engines/neverhood/entity.h
engines/neverhood/module.mk
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 0b0fc74..fe5d07e 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -52,6 +52,7 @@ public:
if (_updateHandlerCb)
(this->*_updateHandlerCb)();
}
+ bool hasMessageHandler() const { return _messageHandlerCb != NULL; }
uint32 sendMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
}
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index ef6caba..97ad70e 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -7,6 +7,7 @@ MODULE_OBJS = \
gamemodule.o \
graphics.o \
module.o \
+ module1500.o \
neverhood.o \
palette.o \
resource.o \
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
new file mode 100644
index 0000000..05a3bec
--- /dev/null
+++ b/engines/neverhood/module1500.cpp
@@ -0,0 +1,93 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1500.h"
+
+namespace Neverhood {
+
+Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag)
+ : Module(vm, parentModule), _flag(flag) {
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 1:
+ createScene1502();
+ break;
+ case 2:
+ createScene1503();
+ break;
+ case 3:
+ createScene1504();
+ break;
+ default:
+ createScene1501();
+ }
+ } else {
+ createScene1504();
+ }
+
+}
+
+void Module1500::update() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene1502();
+ break;
+ case 1:
+ if (_flag) {
+ createScene1503();
+ } else {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 3:
+ createScene1501();
+ break;
+ default:
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ }
+ }
+}
+
+void Module1500::createScene1501() {
+ // TODO
+}
+
+void Module1500::createScene1502() {
+ // TODO
+}
+
+void Module1500::createScene1503() {
+ // TODO
+}
+
+void Module1500::createScene1504() {
+ // TODO
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
new file mode 100644
index 0000000..d4a4310
--- /dev/null
+++ b/engines/neverhood/module1500.h
@@ -0,0 +1,47 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// TODO: I couldn't come up with a better name than 'Module' so far
+
+#ifndef NEVERHOOD_MODULE1500_H
+#define NEVERHOOD_MODULE1500_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+
+namespace Neverhood {
+
+class Module1500 : public Module {
+public:
+ Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag);
+protected:
+ bool _flag;
+ void update();
+ void createScene1501();
+ void createScene1502();
+ void createScene1503();
+ void createScene1504();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1500_H */
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index edbf165..8a95b05 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -46,7 +46,7 @@ struct NeverhoodGameDescription;
class ResourceMan;
struct GameState {
- int field1;
+ int sceneNum;
};
class NeverhoodEngine : public ::Engine {
@@ -111,6 +111,8 @@ public:
static kReadSaveHeaderError readSaveHeader(Common::SeekableReadStream *in, bool loadThumbnail, SaveHeader &header);
#endif
+ GameState& gameState() { return _gameState; }
+
public:
};
Commit: aded2a104b35320951fae30f6b6c4aa18887a4f5
https://github.com/scummvm/scummvm/commit/aded2a104b35320951fae30f6b6c4aa18887a4f5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with Scene and Sprite classes
Changed paths:
A engines/neverhood/scene.cpp
A engines/neverhood/scene.h
A engines/neverhood/sprite.cpp
A engines/neverhood/sprite.h
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index fe5d07e..bbe67a1 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -24,15 +24,18 @@
#define NEVERHOOD_ENTITY_H
#include "neverhood/neverhood.h"
+#include "neverhood/graphics.h"
namespace Neverhood {
struct MessageParam {
union {
uint32 _integer;
+ NPoint _point;
// TODO: Other types...
};
MessageParam(uint32 value) { _integer = value; }
+ MessageParam(NPoint value) { _point = value; }
// TODO: Constructors for the param types...
};
@@ -60,6 +63,10 @@ public:
uint32 sendMessage(int messageNum, uint32 param, Entity *sender) {
return sendMessage(messageNum, MessageParam(param), sender);
}
+ uint32 sendMessage(int messageNum, NPoint param, Entity *sender) {
+ return sendMessage(messageNum, MessageParam(param), sender);
+ }
+ int getPriority() const { return _priority; }
protected:
void (Entity::*_updateHandlerCb)();
uint32 (Entity::*_messageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 887ff3d..09046cf 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -29,7 +29,7 @@ GameModule::GameModule(NeverhoodEngine *vm)
// Other initializations moved to actual engine class
- // TODO .text:0048AD96
+ // TODO
// TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 315c62d..d7c1064 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -61,8 +61,8 @@ void BaseSurface::clear() {
}
void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
- if (spriteResource.dimensions().width <= _drawRect.width &&
- spriteResource.dimensions().height <= _drawRect.height) {
+ if (spriteResource.getDimensions().width <= _drawRect.width &&
+ spriteResource.getDimensions().height <= _drawRect.height) {
clear();
spriteResource.draw((byte*)_surface->pixels, _surface->pitch, false, false);
}
@@ -70,7 +70,7 @@ void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
// Misc
-void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels) {
+void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
uint16 flags;
@@ -92,14 +92,14 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnkn
}
if (flags & 4) {
- if (unknown) {
- unknown->unk1 = READ_LE_UINT16(sprite);
- unknown->unk2 = READ_LE_UINT16(sprite + 2);
+ if (position) {
+ position->x = READ_LE_UINT16(sprite);
+ position->y = READ_LE_UINT16(sprite + 2);
}
sprite += 4;
- } else if (unknown) {
- unknown->unk1 = 0;
- unknown->unk2 = 0;
+ } else if (position) {
+ position->x = 0;
+ position->y = 0;
}
if (flags & 8) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 27ef6cd..68ff84d 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -30,12 +30,12 @@
namespace Neverhood {
-struct NDimensions {
- int16 width, height;
+struct NPoint {
+ int16 x, y;
};
-struct NUnknown {
- int16 unk1, unk2;
+struct NDimensions {
+ int16 width, height;
};
struct NRect {
@@ -60,6 +60,8 @@ public:
virtual void addDirtyRect();
void clear();
void drawSpriteResource(SpriteResource &spriteResource);
+ int getPriority() const { return _priority; }
+ void setPriority(int priority) { _priority = priority; }
protected:
NeverhoodEngine *_vm;
int _priority;
@@ -70,19 +72,9 @@ protected:
NRect _clipRect;
};
-/*
-class Palette {
-public:
- Palette();
- ~Palette();
-protected:
-
-};
-*/
-
// Misc
-void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NUnknown *unknown, byte **palette, byte **pixels);
+void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels);
void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 97ad70e..709538e 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -11,7 +11,9 @@ MODULE_OBJS = \
neverhood.o \
palette.o \
resource.o \
- resourceman.o
+ resourceman.o \
+ scene.o \
+ sprite.o
# This module can be built as a plugin
ifdef BUILD_PLUGINS
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index f7bf032..d4418cb 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -117,7 +117,7 @@ Common::Error NeverhoodEngine::run() {
SpriteResource r(this);
BaseSurface *surf = new BaseSurface(this, 0, 640, 480);
r.load(0x0CA04202);
- debug("r: width = %d; height = %d", r.dimensions().width, r.dimensions().height);
+ debug("r: width = %d; height = %d", r.getDimensions().width, r.getDimensions().height);
surf->drawSpriteResource(r);
delete surf;
}
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 2dd919c..4dcbd83 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -66,7 +66,7 @@ bool SpriteResource::load2(uint32 fileHash) {
if (_resourceHandle != -1) {
if (_vm->_res->getResourceType(_resourceHandle) == 2) {
byte *spriteData = _vm->_res->loadResource(_resourceHandle, true);
- parseBitmapResource(spriteData, &_rle, &_dimensions, &_unknown, NULL, &_pixels);
+ parseBitmapResource(spriteData, &_rle, &_dimensions, &_position, NULL, &_pixels);
} else {
_vm->_res->unuseResource(_resourceHandle);
_resourceHandle = -1;
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 7f699c5..5a30d12 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -36,12 +36,13 @@ public:
bool load(uint32 fileHash);
bool load2(uint32 fileHash);
void unload();
- const NDimensions& dimensions() { return _dimensions; };
+ const NDimensions& getDimensions() { return _dimensions; }
+ const NPoint& getPosition() { return _position; }
protected:
NeverhoodEngine *_vm;
int _resourceHandle;
NDimensions _dimensions;
- NUnknown _unknown;
+ NPoint _position;
byte *_pixels;
bool _rle;
};
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
new file mode 100644
index 0000000..ccdae3a
--- /dev/null
+++ b/engines/neverhood/scene.cpp
@@ -0,0 +1,307 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
+ : Entity(vm, 0), _parentModule(parentModule) {
+
+ _messageListFlag1 = false;
+ _systemCallbackFlag = false;
+ _messageList = NULL;
+ // TODO _rectType = 0;
+ _mouseClickPos.x = 0;
+ _mouseClickPos.y = 0;
+ _mouseClicked = false;
+ // TODO _rectList = NULL;
+ // TODO _someRects = NULL;
+ // TODO _playerSprite = NULL;
+ // TODO _mouseSprite = NULL;
+ _palette = NULL;
+ // TODO _class300 = NULL;
+ // TODO _field_8E = -1;
+ if (clearHitRects) {
+ // TODO g_Class700->setHitRects(NULL, 0);
+ // TODO g_Class700->clear();
+ }
+ // TODO g_screen->setFps(24);
+ // TODO g_screen->hSmack = NULL;
+ // TODO g_screen->field_24 = 0;
+ // TODO g_screen->field_26 = 0;
+ // TODO g_screen->resetDirtyRects();
+ _messageListFlag = true;
+ _surfaceFlag = false;
+ _messageList2 = NULL;
+ // TODO _smackerPlayer = NULL;
+ _smkFileHash = 0;
+ _messageListFlag2 = false;
+ _messageValue = -1;
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&Scene::handleMessage);
+}
+
+Scene::~Scene() {
+
+ if (_palette) {
+ removeEntity(_palette);
+ delete _palette;
+ }
+
+ // Delete all entities
+ for (Common::Array<Entity*>::iterator iter = _entities.begin(); iter != _entities.end(); iter++)
+ delete *iter;
+
+ // Don't delete surfaces since they always belong to an entity
+
+}
+
+void Scene::draw() {
+ //**ALL TODO
+#if 0
+ if (_smackerPlayer) {
+ if (_surfaceFlag) {
+ g_screen->resetDirtyRects();
+ g_screen->copyDirtyRects();
+ g_screen->addDirtyRects();
+ }
+ _smackerPlayer->_surface->draw();
+ } else {
+ if (_surfaceFlag) {
+ g_screen->copyDirtyRects();
+ for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
+ (*iter)->addDirtyRect();
+ g_screen->addDirtyRects();
+ }
+ for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
+ (*iter)->draw();
+ }
+#endif
+}
+
+void Scene::addEntity(Entity *entity) {
+ int index = 0, insertIndex = -1;
+ for (Common::Array<Entity*>::iterator iter = _entities.begin(); iter != _entities.end(); iter++) {
+ if ((*iter)->getPriority() > entity->getPriority()) {
+ insertIndex = index;
+ break;
+ }
+ index++;
+ }
+ if (insertIndex >= 0)
+ _entities.insert_at(insertIndex, entity);
+ else
+ _entities.push_back(entity);
+}
+
+bool Scene::removeEntity(Entity *entity) {
+ for (uint index = 0; index < _entities.size(); index++) {
+ if (_entities[index] == entity) {
+ _entities.remove_at(index);
+ return true;
+ }
+ }
+ return false;
+}
+
+void Scene::addSurface(BaseSurface *surface) {
+ int index = 0, insertIndex = -1;
+ for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
+ if ((*iter)->getPriority() > surface->getPriority()) {
+ insertIndex = index;
+ break;
+ }
+ index++;
+ }
+ if (insertIndex >= 0)
+ _surfaces.insert_at(insertIndex, surface);
+ else
+ _surfaces.push_back(surface);
+}
+
+bool Scene::removeSurface(BaseSurface *surface) {
+ for (uint index = 0; index < _surfaces.size(); index++) {
+ if (_surfaces[index] == surface) {
+ _surfaces.remove_at(index);
+ return true;
+ }
+ }
+ return false;
+}
+
+Sprite *Scene::addSprite(Sprite *sprite) {
+ addEntity(sprite);
+ addSurface(sprite->getSurface());
+ return sprite;
+}
+
+void Scene::setSurfacePriority(BaseSurface *surface, int priority) {
+ surface->setPriority(priority);
+ if (removeSurface(surface))
+ addSurface(surface);
+}
+
+void Scene::deleteSprite(Sprite **sprite) {
+ // TODO g_Class700->removeSprite(*sprite);
+ removeSurface((*sprite)->getSurface());
+ removeEntity(*sprite);
+ delete *sprite;
+ *sprite = NULL;
+}
+
+void Scene::update() {
+
+ if (_smkFileHash != 0) {
+ // TODO
+ //**** ALL TODO
+ //_smackerPlayer = new SmackerPlayer(this, _smkFileHash, true, 0);
+ _savedUpdateHandlerCb = _updateHandlerCb;
+ _savedMessageHandlerCb = _messageHandlerCb;
+ SetUpdateHandler(&Scene::smackerUpdate);
+ SetMessageHandler(&Scene::smackerHandleMessage);
+ _smackerDone = false;
+ // smackerUpdate();
+ // g_screen->smackerPlayer = _smackerPlayer;
+ _smkFileHash = 0;
+ } else {
+ if (_mouseClicked) {
+ //** ALL TODO
+#if 0
+ if (_playerSprite) {
+ // TODO: Merge later
+ if (_playerSprite->hasMessageHandler() &&
+ _playerSprite->sendMessage(0x1008, 0, this) != 0 &&
+ _messageListFlag &&
+ queryPositionClass400(_mouseClickPos.x, _mouseClickPos.y)) {
+ _mouseClicked = false;
+ } else if (_playerSprite->hasMessageHandler() &&
+ _playerSprite->sendMessage(0x1008, 0, this) != 0 &&
+ _messageListFlag) {
+ _mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
+ }
+ } else if (queryPositionClass400(_mouseClickPos.x, _mouseClickPos.y)) {
+ _mouseClicked = false;
+ }
+#endif
+ }
+
+ // TODO runMessageList();
+
+ // Update all entities
+ for (Common::Array<Entity*>::iterator iter = _entities.begin(); iter != _entities.end(); iter++)
+ (*iter)->handleUpdate();
+
+ }
+
+}
+
+uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ // TODO
+#if 0
+ switch (messageNum) {
+ case 0: // mouse moved
+ if (_mouseSprite && _mouseSprite->hasMessageHandler())
+ _mouseSprite->sendMessage(0x4002, param, this);
+ queryPositionSomeRects(param._point.x, param._point.y);
+ break;
+ case 1: // mouse clicked
+ _mouseClicked = true;
+ _mouseClickPos = param._point;
+ break;
+ /* ORIGINAL DEBUG
+ case 3:
+ drawSurfaceRects();
+ break;
+ */
+ /* ORIGINAL DEBUG
+ case 4:
+ drawRectListRects();
+ break;
+ */
+ case 5:
+ broadcastObjectMessage5();
+ break;
+ case 6:
+ _parentModule->sendMessage(0x1009, param, this);
+ break;
+ case 0x1006:
+ if (_messageListFlag1) {
+ _messageListFlag1 = false;
+ if (_messageListIndex == _messageListCount)
+ _playerSprite->sendMessage(0x4004, 0, this);
+ else
+ runMessageList();
+ }
+ break;
+ case 0x1007:
+ if (_messageListFlag1) {
+ _messageListFlag1 = false;
+ _messageList = NULL;
+ _playerSprite->sendMessage(0x4004, 0, this);
+ }
+ break;
+ case 0x101D:
+ if (_mouseSprite) {
+ _prevVisible = _mouseSprite->_drawSurface->_visible;
+ _mouseSprite->_drawSurface->_visible = false;
+ }
+ break;
+ case 0x101E:
+ if (_prevVisible && _mouseSprite) {
+ _mouseSprite->_drawSurface->_visible = true;
+ _mouseSprite->sendMessage(0x4002, g_Screen->_mousePos, this);
+ }
+ break;
+ case 0x1022:
+ setSurfacePriority(((Sprite*)sender)->_surface, param._integer);
+ break;
+ }
+#endif
+ return 0;
+}
+
+void Scene::smackerUpdate() {
+ //**ALL TODO
+#if 0
+ _smackerPlayer->handleUpdate();
+ if (_smackerDone) {
+ delete _smackerPlayer;
+ _smackerPlayer = NULL;
+ _updateHandlerCb = _savedUpdateHandlerCb;
+ _messageHandlerCb = _savedMessageHandlerCb;
+ if (_palette)
+ _palette->usePalette();
+ // TODO class300->restore();
+ // TODO g_screen->smackerPlayer = NULL;
+ }
+#endif
+}
+
+uint32 Scene::smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ if (messageNum == 0x3002)
+ _smackerDone = true;
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
new file mode 100644
index 0000000..3532a43
--- /dev/null
+++ b/engines/neverhood/scene.h
@@ -0,0 +1,100 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_SCENE_H
+#define NEVERHOOD_SCENE_H
+
+#include "common/array.h"
+#include "neverhood/neverhood.h"
+#include "neverhood/entity.h"
+#include "neverhood/graphics.h"
+#include "neverhood/module.h"
+#include "neverhood/palette.h"
+#include "neverhood/sprite.h"
+
+namespace Neverhood {
+
+struct MessageListItem {
+ uint32 messageNum;
+ uint32 messageValue;
+};
+
+class Scene : public Entity {
+public:
+ Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
+ virtual ~Scene();
+ virtual void draw();
+ void addEntity(Entity *entity);
+ bool removeEntity(Entity *entity);
+ void addSurface(BaseSurface *surface);
+ bool removeSurface(BaseSurface *surface);
+ Sprite *addSprite(Sprite *sprite);
+ void setSurfacePriority(BaseSurface *surface, int priority);
+ void deleteSprite(Sprite **sprite);
+protected:
+ Module *_parentModule;
+ Common::Array<Entity*> _entities;
+ Common::Array<BaseSurface*> _surfaces;
+ bool _systemCallbackFlag;
+ MessageListItem *_messageList;
+ int _messageListIndex;
+ int _messageListCount;
+ bool _messageListFlag1;
+ NPoint _mouseClickPos;
+ bool _mouseClicked;
+ // TODO RectResource _rectResource;
+ // TODO 00000080 rectList dd ?
+ // TODO 00000084 rectType dw ?
+ // TODO 00000086 rectListCount dw ?
+ // TODO 00000088 someRects dd ?
+ // TODO 0000008C someRectsCount dw ?
+ // TODO 0000008E field_8E dw ?
+ // TODO 00000090 playerSprite dd ?
+ // TODO 00000094 mouseSprite dd ?
+ Palette *_palette;
+ // TODO 0000009C class300 dd ?
+ bool _surfaceFlag;
+ bool _messageListFlag;
+ MessageListItem *_messageList2;
+ int _messageListStatus;
+ // TODO 000000B0 smackerPlayer dd ?
+ void (Entity::*_savedUpdateHandlerCb)();
+ uint32 (Entity::*_savedMessageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
+ bool _smackerDone;
+ // TODO 000000BD field_BD db ?
+ // TODO 000000BE field_BE db ?
+ // TODO 000000BF field_BF db ?
+ uint32 _smkFileHash;
+ // TODO 000000C4 hitArray dd ?
+ bool _messageListFlag2;
+ bool _prevVisible;
+ int _messageValue;
+ // TODO 000000CF field_CF db ?
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void smackerUpdate();
+ uint32 smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_SCENE_H */
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
new file mode 100644
index 0000000..6ee0a66
--- /dev/null
+++ b/engines/neverhood/sprite.cpp
@@ -0,0 +1,179 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/sprite.h"
+
+namespace Neverhood {
+
+// Sprite
+
+Sprite::Sprite(NeverhoodEngine *vm, int objectPriority)
+ : Entity(vm, objectPriority), _x(0), _y(0),
+ _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
+ _doDeltaX(false), _doDeltaY(false), _needRedraw(false),
+ _deltaX1(0), _deltaY1(0), _deltaX2(0), _deltaY2(0),
+ _flags(0) {
+
+ SetMessageHandler(&Sprite::handleMessage);
+
+}
+
+Sprite::~Sprite() {
+ delete _surface;
+}
+
+void Sprite::processDelta() {
+ if (_doDeltaX) {
+ _rect.x1 = _x - _deltaX1 - _deltaX2 + 1;
+ _rect.x2 = _x - _deltaX1;
+ } else {
+ _rect.x1 = _x + _deltaX1;
+ _rect.x2 = _x + _deltaX1 + _deltaX2 - 1;
+ }
+ if (_doDeltaY) {
+ _rect.y1 = _y - _deltaY1 - _deltaY2 + 1;
+ _rect.y2 = _y - _deltaY1;
+ } else {
+ _rect.y1 = _y + _deltaY1;
+ _rect.y2 = _y + _deltaY1 + _deltaY2 - 1;
+ }
+}
+
+void Sprite::setDoDeltaX(int type) {
+ // Clear, set or toggle
+ _doDeltaX = type == 2 ? !_doDeltaX : type == 1;
+}
+
+void Sprite::setDoDeltaY(int type) {
+ // Clear, set or toggle
+ _doDeltaY = type == 2 ? !_doDeltaY : type == 1;
+}
+
+bool Sprite::isPointInside(int16 x, int16 y) {
+ return x >= _rect.x1 && x <= _rect.x2 && y >= _rect.y1 && y <= _rect.y2;
+}
+
+uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ if (messageNum == 5) {
+ // TODO: Draw debug marker (?)
+ // TODO g_Screen->drawLine(_x - 5, _y, _x + 6, _y);
+ // TODO g_Screen->drawLine(_x, _y - 5, _x, _y + 6);
+ }
+ return 0;
+}
+
+void Sprite::createSurface(int surfacePriority, int16 width, int16 height) {
+ _surface = new BaseSurface(_vm, surfacePriority, width, height);
+}
+
+// StaticSprite
+
+StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
+ : Sprite(vm, objectPriority), _spriteResource(vm) {
+
+}
+
+StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
+ : Sprite(vm, 0), _spriteResource(vm) {
+
+ // TODO init(calcHash(filename), surfacePriority, x, y, width, height);
+
+}
+
+StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
+ : Sprite(vm, 0), _spriteResource(vm) {
+
+ init(fileHash, surfacePriority, x, y, width, height);
+
+}
+
+void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) {
+
+ _spriteResource.load2(fileHash);
+
+ if (width == 0)
+ width = _spriteResource.getDimensions().width;
+
+ if (height == 0)
+ height = _spriteResource.getDimensions().height;
+
+ createSurface(surfacePriority, width, height);
+
+ _x = x == kDefPosition ? _spriteResource.getPosition().x : x;
+ _y = y == kDefPosition ? _spriteResource.getPosition().y : y;
+
+ _rect1.x1 = 0;
+ _rect1.y1 = 0;
+ _rect1.x2 = width;
+ _rect1.y2 = height;
+
+ _needRedraw = true;
+
+ update();
+
+}
+
+void StaticSprite::update() {
+
+ if (!_surface)
+ return;
+
+ if (_doDeltaX) {
+ _x = filterX(_x - _rect1.x1 - _rect1.x2 + 1);
+ } else {
+ _x = filterX(_x + _rect1.x1);
+ }
+
+ if (_doDeltaY) {
+ _y = filterY(_y - _rect1.y1 - _rect1.y2 + 1);
+ } else {
+ _y = filterY(_y + _rect1.y1);
+ }
+
+ if (_needRedraw) {
+ // TODO _surface->drawSpriteResourceEx(_spriteResource, _doDeltaX, _doDeltaY, _rect1.x2, _rect1.y2);
+ _needRedraw = false;
+ }
+
+}
+
+void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
+
+ _spriteResource.load2(fileHash);
+
+ if (dimensions) {
+ _rect1.x1 = 0;
+ _rect1.y1 = 0;
+ _rect1.x2 = _spriteResource.getDimensions().width;
+ _rect1.y2 = _spriteResource.getDimensions().height;
+ }
+
+ if (position) {
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ }
+
+ _needRedraw = true;
+
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
new file mode 100644
index 0000000..5c08e3c
--- /dev/null
+++ b/engines/neverhood/sprite.h
@@ -0,0 +1,90 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_SPRITE_H
+#define NEVERHOOD_SPRITE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/entity.h"
+#include "neverhood/graphics.h"
+#include "neverhood/resource.h"
+
+namespace Neverhood {
+
+#define SetSpriteCallback(callback) _spriteCallbackCb = static_cast <void (Sprite::*)(void)> (callback)
+#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback)
+#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback)
+
+const int16 kDefPosition = -32768;
+
+class Sprite : public Entity {
+public:
+ Sprite(NeverhoodEngine *vm, int objectPriority);
+ ~Sprite();
+ BaseSurface *getSurface() { return _surface; }
+ void processDelta();
+ void setDoDeltaX(int type);
+ void setDoDeltaY(int type);
+ bool isPointInside(int16 x, int16 y);
+protected:
+ void (Sprite::*_spriteUpdateCb)();
+ int16 (Sprite::*_filterXCb)(int16);
+ int16 (Sprite::*_filterYCb)(int16);
+ BaseSurface *_surface;
+ int16 _x, _y;
+ bool _doDeltaX, _doDeltaY;
+ bool _needRedraw;
+ //0000002B field_2B db ?
+ //0000002C field2C dd ? // unused
+ NRect _rect1;
+ int16 _deltaX1, _deltaY1;
+ int16 _deltaX2, _deltaY2;
+ NRect _rect;
+ uint16 _flags;
+ //0000004A field4A dw ? // seems to be unused except in ctor
+ //0000004C rectResource RectResource ?
+ //void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createSurface(int surfacePriority, int16 width, int16 height);
+ int16 filterX(int16 x) {
+ return _filterXCb ? (this->*_filterXCb)(x) : x;
+ }
+ int16 filterY(int16 y) {
+ return _filterYCb ? (this->*_filterYCb)(y) : y;
+ }
+};
+
+class StaticSprite : public Sprite {
+public:
+ StaticSprite(NeverhoodEngine *vm, int objectPriority);
+ StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
+ StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
+ void load(uint32 fileHash, bool dimensions, bool position);
+protected:
+ SpriteResource _spriteResource;
+ void init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
+ void update();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_SPRITE_H */
Commit: 0614b288cfc38180eddd90a41cf726718d823e13
https://github.com/scummvm/scummvm/commit/0614b288cfc38180eddd90a41cf726718d823e13
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Add default parameters to StaticSprite constructors
Changed paths:
engines/neverhood/sprite.h
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 5c08e3c..c2ed720 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -76,8 +76,8 @@ protected:
class StaticSprite : public Sprite {
public:
StaticSprite(NeverhoodEngine *vm, int objectPriority);
- StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
- StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
+ StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
+ StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
void load(uint32 fileHash, bool dimensions, bool position);
protected:
SpriteResource _spriteResource;
Commit: f01f9343c831cda618dabd2dcda7be77b2948ecc
https://github.com/scummvm/scummvm/commit/f01f9343c831cda618dabd2dcda7be77b2948ecc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: Start with AnimatedSprite and AnimResource
Changed paths:
engines/neverhood/graphics.h
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 68ff84d..cb7474c 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -62,6 +62,9 @@ public:
void drawSpriteResource(SpriteResource &spriteResource);
int getPriority() const { return _priority; }
void setPriority(int priority) { _priority = priority; }
+ NDrawRect& getDrawRect() { return _drawRect; }
+ NDrawRect& getSysRect() { return _sysRect; }
+ NRect& getClipRect() { return _clipRect; }
protected:
NeverhoodEngine *_vm;
int _priority;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index d4418cb..2f27fca 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -112,7 +112,7 @@ Common::Error NeverhoodEngine::run() {
_res->unuseResource(resourceHandle);
#endif
-#if 1
+#if 0
{ // Create a new scope
SpriteResource r(this);
BaseSurface *surf = new BaseSurface(this, 0, 640, 480);
@@ -123,6 +123,13 @@ Common::Error NeverhoodEngine::run() {
}
#endif
+#if 1
+ { // Create a new scope
+ AnimResource r(this);
+ r.load(0x000540B0);
+ }
+#endif
+
delete _res;
return Common::kNoError;
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 4dcbd83..84eab7f 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -25,6 +25,8 @@
namespace Neverhood {
+// SpriteResource
+
SpriteResource::SpriteResource(NeverhoodEngine *vm)
: _vm(vm), _resourceHandle(-1), _pixels(NULL) {
}
@@ -87,6 +89,8 @@ void SpriteResource::unload() {
_rle = false;
}
+// PaletteResource
+
PaletteResource::PaletteResource(NeverhoodEngine *vm)
: _vm(vm), _resourceHandle(-1), _palette(NULL) {
}
@@ -134,4 +138,153 @@ void PaletteResource::copyPalette(byte *destPalette) {
}
}
+// AnimResource
+
+AnimResource::AnimResource(NeverhoodEngine *vm)
+ : _vm(vm), _width(0), _height(0), _currSpriteData(NULL) {
+
+ clear();
+ clear2();
+}
+
+AnimResource::~AnimResource() {
+ unloadInternal();
+}
+
+bool AnimResource::load(uint32 fileHash) {
+
+ if (fileHash == _fileHash)
+ return true;
+
+ unload();
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ if (_resourceHandle == -1)
+ return false;
+
+ byte *resourceData, *animList, *frameList;
+ uint16 animInfoStartOfs, animListIndex, animListCount;
+ uint16 frameListStartOfs, frameCount;
+ uint32 spriteDataOfs, paletteDataOfs;
+
+ if (_vm->_res->getResourceType(_resourceHandle) != 4) {
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ return false;
+ }
+
+ resourceData = _vm->_res->loadResource(_resourceHandle);
+ if (!resourceData) {
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ return false;
+ }
+
+ animListCount = READ_LE_UINT16(resourceData);
+ animInfoStartOfs = READ_LE_UINT16(resourceData + 2);
+ spriteDataOfs = READ_LE_UINT32(resourceData + 4);
+ paletteDataOfs = READ_LE_UINT32(resourceData + 8);
+
+ animList = resourceData + 12;
+ for (animListIndex = 0; animListIndex < animListCount; animListIndex++) {
+ debug("hash: %08X", READ_LE_UINT32(animList));
+ if (READ_LE_UINT32(animList) == fileHash)
+ break;
+ animList += 8;
+ }
+
+ if (animListIndex >= animListCount) {
+ _vm->_res->unloadResource(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ return false;
+ }
+
+ _spriteData = resourceData + spriteDataOfs;
+ if (paletteDataOfs > 0)
+ _paletteData = resourceData + paletteDataOfs;
+
+ frameCount = READ_LE_UINT16(animList + 4);
+ frameListStartOfs = READ_LE_UINT16(animList + 6);
+
+ debug("frameCount = %d; frameListStartOfs = %04X; animInfoStartOfs = %04X", frameCount, frameListStartOfs, animInfoStartOfs);
+
+ frameList = resourceData + animInfoStartOfs + frameListStartOfs;
+
+ _frames.clear();
+ _frames.reserve(frameCount);
+
+ for (uint16 frameIndex = 0; frameIndex < frameCount; frameIndex++) {
+ AnimFrameInfo frameInfo;
+ frameInfo.frameHash = READ_LE_UINT32(frameList);
+ frameInfo.counter = READ_LE_UINT16(frameList + 4);
+ frameInfo.rect.x1 = READ_LE_UINT16(frameList + 6);
+ frameInfo.rect.y1 = READ_LE_UINT16(frameList + 8);
+ frameInfo.rect.x2 = READ_LE_UINT16(frameList + 10);
+ frameInfo.rect.y2 = READ_LE_UINT16(frameList + 12);
+ frameInfo.deltaX = READ_LE_UINT16(frameList + 14);
+ frameInfo.deltaY = READ_LE_UINT16(frameList + 16);
+ frameInfo.deltaRect.x = READ_LE_UINT16(frameList + 18);
+ frameInfo.deltaRect.y = READ_LE_UINT16(frameList + 20);
+ frameInfo.deltaRect.width = READ_LE_UINT16(frameList + 22);
+ frameInfo.deltaRect.height = READ_LE_UINT16(frameList + 24);
+ frameInfo.field_1A = READ_LE_UINT16(frameList + 26);
+ frameInfo.spriteDataOffs = READ_LE_UINT32(frameList + 28);
+ debug("frameHash = %08X; counter = %d; rect = (%d,%d,%d,%d); deltaX = %d; deltaY = %d; deltaRect = (%d,%d,%d,%d); field_1A = %04X; spriteDataOffs = %08X",
+ frameInfo.frameHash, frameInfo.counter,
+ frameInfo.rect.x1, frameInfo.rect.y1, frameInfo.rect.x2, frameInfo.rect.y2,
+ frameInfo.deltaX, frameInfo.deltaY,
+ frameInfo.deltaRect.x, frameInfo.deltaRect.y, frameInfo.deltaRect.width, frameInfo.deltaRect.height,
+ frameInfo.field_1A, frameInfo.spriteDataOffs);
+ frameList += 32;
+ _frames.push_back(frameInfo);
+ }
+
+ _fileHash = fileHash;
+
+ return true;
+
+}
+
+void AnimResource::unload() {
+ if (_resourceHandle != -1) {
+ _vm->_res->unloadResource(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ clear();
+ }
+}
+
+void AnimResource::clear() {
+ _resourceHandle = -1;
+ // _count = 0;
+ // _infoStructs = NULL;
+ _currSpriteData = NULL;
+ _fileHash = 0;
+ _paletteData = NULL;
+ _spriteData = NULL;
+}
+
+void AnimResource::clear2() {
+ clear();
+ _replEnabled = true;
+ _replOldByte = 0;
+ _replNewByte = 0;
+}
+
+bool AnimResource::loadInternal(uint32 fileHash) {
+ unloadInternal();
+ return load(fileHash);
+}
+
+void AnimResource::unloadInternal() {
+ unload();
+ clear2();
+}
+
+int16 AnimResource::getFrameIndex(uint32 frameHash) {
+ for (uint i = 0; i < _frames.size(); i++)
+ if (_frames[i].frameHash == frameHash)
+ return (int16)i;
+ return -1;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 5a30d12..8cab1eb 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -61,6 +61,44 @@ protected:
byte *_palette;
};
+struct AnimFrameInfo {
+ uint32 frameHash;
+ int16 counter;
+ NRect rect;
+ int16 deltaX, deltaY;
+ NDrawRect deltaRect;
+ uint16 field_1A;
+ uint32 spriteDataOffs;
+};
+
+class AnimResource {
+public:
+ AnimResource(NeverhoodEngine *vm);
+ ~AnimResource();
+ bool load(uint32 fileHash);
+ void unload();
+ void clear();
+ void clear2();
+ bool loadInternal(uint32 fileHash);
+ void unloadInternal();
+ uint getFrameCount() const { return _frames.size(); }
+ const AnimFrameInfo& getFrameInfo(int16 index) const { return _frames[index]; }
+ int16 getFrameIndex(uint32 frameHash);
+protected:
+ NeverhoodEngine *_vm;
+ int _resourceHandle;
+ int16 _width, _height;
+ byte *_currSpriteData;
+ uint32 _fileHash;
+ byte *_paletteData;
+ byte *_spriteData;
+ bool _replEnabled;
+ byte _replOldByte;
+ byte _replNewByte;
+ Common::Array<AnimFrameInfo> _frames;
+};
+
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_RESOURCE_H */
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 6ee0a66..0157673 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -30,7 +30,6 @@ Sprite::Sprite(NeverhoodEngine *vm, int objectPriority)
: Entity(vm, objectPriority), _x(0), _y(0),
_spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
_doDeltaX(false), _doDeltaY(false), _needRedraw(false),
- _deltaX1(0), _deltaY1(0), _deltaX2(0), _deltaY2(0),
_flags(0) {
SetMessageHandler(&Sprite::handleMessage);
@@ -43,18 +42,18 @@ Sprite::~Sprite() {
void Sprite::processDelta() {
if (_doDeltaX) {
- _rect.x1 = _x - _deltaX1 - _deltaX2 + 1;
- _rect.x2 = _x - _deltaX1;
+ _rect.x1 = _x - _deltaRect.x - _deltaRect.width + 1;
+ _rect.x2 = _x - _deltaRect.x;
} else {
- _rect.x1 = _x + _deltaX1;
- _rect.x2 = _x + _deltaX1 + _deltaX2 - 1;
+ _rect.x1 = _x + _deltaRect.x;
+ _rect.x2 = _x + _deltaRect.x + _deltaRect.width - 1;
}
if (_doDeltaY) {
- _rect.y1 = _y - _deltaY1 - _deltaY2 + 1;
- _rect.y2 = _y - _deltaY1;
+ _rect.y1 = _y - _deltaRect.y - _deltaRect.height + 1;
+ _rect.y2 = _y - _deltaRect.y;
} else {
- _rect.y1 = _y + _deltaY1;
- _rect.y2 = _y + _deltaY1 + _deltaY2 - 1;
+ _rect.y1 = _y + _deltaRect.y;
+ _rect.y2 = _y + _deltaRect.y + _deltaRect.height - 1;
}
}
@@ -176,4 +175,274 @@ void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
}
+// AnimatedSprite
+
+AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, int objectPriority)
+ : Sprite(vm, objectPriority), _animResource(vm) {
+
+ init();
+}
+
+AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y)
+ : Sprite(vm, 1100), _animResource(vm) {
+
+ init();
+ SetUpdateHandler(&AnimatedSprite::update);
+ createSurface1(fileHash, surfacePriority);
+ _x = x;
+ _y = y;
+ setFileHash(fileHash, 0, -1);
+
+}
+
+void AnimatedSprite::init() {
+ _counter = 0;
+ _fileHash1 = 0;
+ _deltaX = 0;
+ _deltaY = 0;
+ _fileHash2 = 0;
+ // TODO _callbackList = 0;
+ _frameIndex3 = 0;
+ // TODO _callback3 = 0;
+ _frameIndex = 0;
+ _hashListIndex = -1;
+ // TODO _callback2 = 0;
+ _newHashListIndex = -1;
+ // TODO _callback1 = 0;
+ _fileHash4 = 0;
+ _flag = false;
+ _replOldByte = 0;
+ _replNewByte = 0;
+ // TODO _animResource.replEnabled = 0;
+ _playBackwards = 0;
+}
+
+void AnimatedSprite::update() {
+ updateAnim();
+ handleSpriteUpdate();
+ updatePosition();
+}
+
+void AnimatedSprite::updateDeltaXY() {
+ if (_doDeltaX) {
+ _x -= _deltaX;
+ } else {
+ _x += _deltaX;
+ }
+ if (_doDeltaY) {
+ _y -= _deltaY;
+ } else {
+ _y += _deltaY;
+ }
+ _deltaX = 0;
+ _deltaY = 0;
+ processDelta();
+}
+
+void AnimatedSprite::updateAnim() {
+
+ _flag = false;
+
+ if (_fileHash1 == 0) {
+ if (_newHashListIndex != -1) {
+ _hashListIndex = _newHashListIndex == -2 ? _animResource.getFrameCount() - 1 : _newHashListIndex;
+ _newHashListIndex = -1;
+ } else if (_fileHash4 != 0) {
+ _hashListIndex = MAX<int16>(0, _animResource.getFrameIndex(_fileHash4));
+ _fileHash4 = 0;
+ }
+ if (_fileHash1 == 0 && _frameIndex != _hashListIndex) {
+ if (_counter != 0)
+ _counter--;
+ if (_counter == 0 && _animResource.getFrameCount() != 0) {
+
+ if (_fileHash2 != 0) {
+ if (_animResource.loadInternal(_fileHash2)) {
+ _fileHash3 = _fileHash2;
+ } else {
+ // TODO _animResource.loadInternal(calcHash("sqDefault"));
+ _fileHash3 = 0;
+ }
+ // loc_43831D
+ if (_replNewByte != _replOldByte) {
+ // TODO _animResource.setRepl(_replOldByte, _replNewByte);
+ }
+ _fileHash2 = 0;
+ if (_status != 0) {
+ _frameIndex = _fileHash6 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash6)) : 0;
+ _frameIndex2 = _fileHash5 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash5)) : _animResource.getFrameCount() - 1;
+ } else {
+ _frameIndex = _frameIndex3 != -1 ? _frameIndex3 : _animResource.getFrameCount() - 1;
+ _frameIndex2 = _frameIndex4 != -1 ? _frameIndex4 : _animResource.getFrameCount() - 1;
+ }
+ } else {
+ // TODO updateFrameIndex();
+ }
+ if (_fileHash1 == 0)
+ updateFrameInfo();
+ }
+ }
+ }
+
+ if (_fileHash1 != 0) {
+ if (_status == 2) {
+ _hashListIndex = _frameIndex;
+ } else {
+ if (_status == 1) {
+ if (_animResource.loadInternal(_fileHash1)) {
+ _fileHash3 = _fileHash1;
+ } else {
+ // TODO _animResource.loadInternal(calcHash("sqDefault"));
+ _fileHash3 = 0;
+ }
+ if (_replNewByte != _replOldByte) {
+ // TODO _animResource.setRepl(_replOldByte, _replNewByte);
+ }
+ _fileHash1 = 0;
+ _frameIndex = _fileHash6 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash6)) : 0;
+ _frameIndex2 = _fileHash5 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash5)) : _animResource.getFrameCount() - 1;
+ } else {
+ if (_animResource.loadInternal(_fileHash1)) {
+ _fileHash3 = _fileHash1;
+ } else {
+ // TODO _animResource.loadInternal(calcHash("sqDefault"));
+ _fileHash3 = 0;
+ }
+ if (_replNewByte != _replOldByte) {
+ // TODO _animResource.setRepl(_replOldByte, _replNewByte);
+ }
+ _fileHash1 = 0;
+ _frameIndex = _frameIndex3 != -1 ? _frameIndex3 : _animResource.getFrameCount() - 1;
+ _frameIndex2 = _frameIndex4 != -1 ? _frameIndex4 : _animResource.getFrameCount() - 1;
+ }
+ updateFrameInfo();
+ }
+
+ if (_newHashListIndex != -1) {
+ _hashListIndex = _newHashListIndex == -2 ? _animResource.getFrameCount() - 1 : _newHashListIndex;
+ _newHashListIndex = -1;
+ } else if (_fileHash4 != 0) {
+ _hashListIndex = MAX<int16>(0, _animResource.getFrameIndex(_fileHash4));
+ _fileHash4 = 0;
+ }
+
+ }
+
+}
+
+void AnimatedSprite::updatePosition() {
+
+ if (!_surface)
+ return;
+
+ if (_doDeltaX) {
+ _surface->getDrawRect().x = filterX(_x - _rect1.x1 - _rect1.x2 + 1);
+ } else {
+ _surface->getDrawRect().x = filterX(_x + _rect1.x1);
+ }
+
+ if (_doDeltaY) {
+ _surface->getDrawRect().y = filterY(_y - _rect1.y1 - _rect1.y2 + 1);
+ } else {
+ _surface->getDrawRect().y = filterY(_y + _rect1.y1);
+ }
+
+ if (_needRedraw) {
+ // TODO _surface->drawAnimResource(_animResource, _frameIndex, _doDeltaX, _doDeltaY, _rect1.x2, _rect1.y2);
+ _needRedraw = false;
+ }
+
+}
+
+void AnimatedSprite::updateFrameIndex() {
+ if (!_playBackwards) {
+ if (_frameIndex < _frameIndex2) {
+ _frameIndex++;
+ } else {
+ // Inform self about end of current animation
+ // The caller can then e.g. set a new animation fileHash
+ sendMessage(0x3002, 0, this);
+ if (_fileHash1 == 0)
+ _frameIndex = 0;
+ }
+ } else {
+ if (_frameIndex > 0) {
+ _frameIndex--;
+ } else {
+ sendMessage(0x3002, 0, this);
+ if (_fileHash1 == 0)
+ _frameIndex = _frameIndex2;
+ }
+ }
+}
+
+void AnimatedSprite::updateFrameInfo() {
+
+ const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_frameIndex);
+
+ _flag = true;
+ _rect1 = frameInfo.rect;
+ _deltaX = frameInfo.deltaX;
+ _deltaY = frameInfo.deltaY;
+ _deltaRect = frameInfo.deltaRect;
+ _counter = frameInfo.counter;
+
+ processDelta();
+
+ _needRedraw = true;
+
+ if (frameInfo.frameHash != 0) {
+ sendMessage(0x100D, frameInfo.frameHash, this);
+ }
+
+}
+
+void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
+ NDimensions dimensions;
+ // TODO dimensions = getAnimatedSpriteDimensions(fileHash);
+ dimensions.width = 640;
+ dimensions.height = 480;
+ _surface = new BaseSurface(_vm, surfacePriority, dimensions.width, dimensions.height);
+}
+
+void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4) {
+ _fileHash1 = fileHash;
+ _frameIndex3 = frameIndex3;
+ _frameIndex4 = frameIndex4;
+ _fileHash4 = 0;
+ _status = 0;
+ _playBackwards = false;
+ _newHashListIndex = -1;
+ _hashListIndex = -1;
+}
+
+void AnimatedSprite::setFileHash1() {
+ _fileHash1 = 1;
+ _status = 2;
+}
+
+void AnimatedSprite::setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5) {
+ _fileHash1 = fileHash;
+ _fileHash6 = fileHash6;
+ _fileHash5 = fileHash5;
+ _fileHash4 = 0;
+ _status = 1;
+ _playBackwards = false;
+ _newHashListIndex = -1;
+ _hashListIndex = -1;
+}
+
+void AnimatedSprite::setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5) {
+ _fileHash2 = fileHash2;
+ _fileHash6 = fileHash6;
+ _fileHash5 = fileHash5;
+ _fileHash4 = 0;
+ _status = 1;
+ _playBackwards = false;
+ _newHashListIndex = -1;
+ _hashListIndex = -1;
+}
+
+
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index c2ed720..708228c 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -56,8 +56,7 @@ protected:
//0000002B field_2B db ?
//0000002C field2C dd ? // unused
NRect _rect1;
- int16 _deltaX1, _deltaY1;
- int16 _deltaX2, _deltaY2;
+ NDrawRect _deltaRect;
NRect _rect;
uint16 _flags;
//0000004A field4A dw ? // seems to be unused except in ctor
@@ -65,6 +64,10 @@ protected:
//void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createSurface(int surfacePriority, int16 width, int16 height);
+ void handleSpriteUpdate() {
+ if (_spriteUpdateCb)
+ (this->*_spriteUpdateCb)();
+ }
int16 filterX(int16 x) {
return _filterXCb ? (this->*_filterXCb)(x) : x;
}
@@ -85,6 +88,54 @@ protected:
void update();
};
+class AnimatedSprite : public Sprite {
+public:
+ AnimatedSprite(NeverhoodEngine *vm, int objectPriority);
+ AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y);
+protected:
+ AnimResource _animResource;
+ uint32 _fileHash1;
+ uint32 _fileHash2;
+ uint32 _fileHash3;
+ int16 _frameIndex;
+ int16 _frameIndex3;
+ int16 _frameIndex2;
+ int16 _frameIndex4;
+ uint32 _fileHash6;
+ uint32 _fileHash5;
+ int16 _status;
+ int16 _counter;
+ int _hashListIndex;
+ int _newHashListIndex;
+ uint32 _fileHash4;
+ int16 _deltaX, _deltaY;
+ byte _replOldByte;
+ byte _replNewByte;
+ bool _playBackwards;
+ bool _flag;
+ /* TODO
+ callbackListIndex dw ?
+ callbackListCount dw ?
+ callbackList dd ?
+ callback3 dd ?
+ callback2 dd ?
+ callback1 dd ?
+ */
+ void init();
+ void update();
+ void updateDeltaXY();
+ void updateAnim();
+ void updatePosition();
+ void updateFrameIndex();
+ void updateFrameInfo();
+ void createSurface1(uint32 fileHash, int surfacePriority);
+ void setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4);
+ void setFileHash1();
+ void setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5);
+ void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
+ int16 getHashListIndex(uint32 fileHash) { return 0; } // TODO !!!
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_SPRITE_H */
Commit: 3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b
https://github.com/scummvm/scummvm/commit/3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:57-07:00
Commit Message:
NEVERHOOD: More work on Module1500
- Implement Scene1501 (with yet unimpelemented stuff commented out)
- Add preliminary main loop to test stuff/updates
- Add dummy SoundResource
- And fix a mean bug/typo in some initializer lists...
(The intro now "runs" but doesn't show anything yet since the actual display code and other classes are not yet implemented yet.)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1500.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resource.h
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 09046cf..e46d23c 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -22,20 +22,22 @@
#include "neverhood/gamemodule.h"
+#include "neverhood/module1500.h"
+
namespace Neverhood {
GameModule::GameModule(NeverhoodEngine *vm)
- : Module(_vm, NULL) {
+ : Module(vm, NULL) {
// Other initializations moved to actual engine class
// TODO
// TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
-
-
SetMessageHandler(&GameModule::handleMessage);
+
+ startup();
}
@@ -49,6 +51,8 @@ GameModule::~GameModule() {
// TODO: Set palette to black but probably not neccessary
// TODO Sound1ChList_sub_408480();
+
+ // TODO Set debug vars (maybe)
}
@@ -84,15 +88,24 @@ void GameModule::startup() {
}
void GameModule::createModule1500(int which) {
- // TODO
_someFlag1 = false;
// TODO *getGlobalGameVarValuePtr(0x91080831) = 0x0F10114;
- // TODO _childObject = new Module1500(this, which, true);
+ _childObject = new Module1500(_vm, this, which, true);
SetUpdateHandler(&GameModule::updateModule1500);
}
void GameModule::updateModule1500() {
- // TODO
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ debug("Done...");
+ // TODO createModule1000();
+ // TODO _childObject->handleUpdate();
+ }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 1aa1203..c46aa79 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -25,7 +25,7 @@
namespace Neverhood {
Module::Module(NeverhoodEngine *vm, Module *parentModule)
- : Entity(_vm, 0), _parentModule(parentModule), _childObject(NULL),
+ : Entity(vm, 0), _parentModule(parentModule), _childObject(NULL),
_done(false), _field24(-1), _field26(-1), _field28(-1) {
SetMessageHandler(&Module::handleMessage);
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 05a3bec..f4c7794 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -26,6 +26,8 @@ namespace Neverhood {
Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag)
: Module(vm, parentModule), _flag(flag) {
+
+ debug("Create Module1500(%d)", which);
if (which < 0) {
switch (_vm->gameState().sceneNum) {
@@ -75,19 +77,100 @@ void Module1500::update() {
}
void Module1500::createScene1501() {
- // TODO
+ debug("createScene1501");
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
+ SetUpdateHandler(&Module1500::update);
}
void Module1500::createScene1502() {
- // TODO
+ debug("createScene1502");
+ _vm->gameState().sceneNum = 1;
+ _childObject = new Scene1501(_vm, this, 0x30050A0A, 0x58B45E58, 110, 48);
+ SetUpdateHandler(&Module1500::update);
}
void Module1500::createScene1503() {
- // TODO
+ debug("createScene1503");
+ // TODO: This uses the MultiSmackerPlayer
+ // Game will crash now...
}
void Module1500::createScene1504() {
- // TODO
+ debug("createScene1504");
+ _vm->gameState().sceneNum = 3;
+ _childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
+ SetUpdateHandler(&Module1500::update);
+}
+
+// Scene1501
+
+Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
+ : Scene(vm, parentModule, true), _soundResource(vm),
+ _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
+
+ debug("Create Scene1501(%08X, %08X, %d, %d)", backgroundFileHash, soundFileHash, countdown2, countdown3);
+
+ SetUpdateHandler(&Scene1501::update);
+ SetMessageHandler(&Scene1501::handleMessage);
+
+ _surfaceFlag = true;
+
+ _palette = new Palette(_vm);//DUMMY!
+
+ /* TODO
+
+ _background = addBackground(new Class301(_vm, backgroundFileHash, 0, 0));
+
+ _palette = new Palette2(_vm);
+ _palette->usePalette();
+ addEntity(_palette);
+ Palette2_sub_47BF00(backgroundFileHash, 0, 256, 0);
+ Palette2_sub_47C060(12);
+
+ if (soundFileHash != 0) {
+ _soundResource.set(soundFileHash);
+ _soundResource.load();
+ _soundResource.play();
+ }
+ */
+
+}
+
+void Scene1501::update() {
+
+ Scene::update();
+
+ // TODO: Since these countdowns are used a lot, maybe these can be wrapped in a class/struct
+ // so the code gets a little cleaner.
+
+ if (_countdown1 != 0) {
+ _countdown1--;
+ if (_countdown1 == 0) {
+ // TODO g_screen->clear(0);
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !_soundResource.isPlaying()) {
+ _countdown1 = 12;
+ _palette->startFadeToBlack(11);
+ }
+
+ if (_countdown3 != 0)
+ _countdown3--;
+
+ if (_countdown3 == 0 && _flag && _countdown1 == 0) {
+ _countdown1 = 12;
+ _palette->startFadeToBlack(11);
+ }
+
+}
+
+uint32 Scene1501::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ if (messageNum == 0x0009) {
+ _flag = true;
+ }
+ return messageResult;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index d4a4310..66eef59 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -27,6 +27,9 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/graphics.h"
+#include "neverhood/palette.h"
namespace Neverhood {
@@ -42,6 +45,19 @@ protected:
void createScene1504();
};
+class Scene1501 : public Scene {
+public:
+ Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3);
+protected:
+ SoundResource _soundResource;
+ int _countdown1;
+ int _countdown2;
+ int _countdown3;
+ bool _flag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1500_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 2f27fca..ac89a3e 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -38,6 +38,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
#include "neverhood/resource.h"
@@ -123,55 +124,65 @@ Common::Error NeverhoodEngine::run() {
}
#endif
-#if 1
+#if 0
{ // Create a new scope
AnimResource r(this);
r.load(0x000540B0);
}
#endif
-
- delete _res;
- return Common::kNoError;
-}
+ _gameModule = new GameModule(this);
-void NeverhoodEngine::updateEvents() {
- Common::Event event;
- Common::EventManager *eventMan = _system->getEventManager();
-
- while (eventMan->pollEvent(event)) {
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
- _keyState = event.kbd.keycode;
- break;
- case Common::EVENT_KEYUP:
- _keyState = Common::KEYCODE_INVALID;
- break;
- case Common::EVENT_MOUSEMOVE:
- _mouseX = event.mouse.x;
- _mouseY = event.mouse.y;
- break;
- /*
- case Common::EVENT_LBUTTONDOWN:
- _buttonState |= kLeftButton;
- break;
- case Common::EVENT_LBUTTONUP:
- _buttonState &= ~kLeftButton;
- break;
- case Common::EVENT_RBUTTONDOWN:
- _buttonState |= kRightButton;
- break;
- case Common::EVENT_RBUTTONUP:
- _buttonState &= ~kRightButton;
- break;
- case Common::EVENT_QUIT:
- _system->quit();
- break;
- */
- default:
- break;
+ while (1) {
+ Common::Event event;
+ Common::EventManager *eventMan = _system->getEventManager();
+
+ while (eventMan->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN:
+ _keyState = event.kbd.keycode;
+ break;
+ case Common::EVENT_KEYUP:
+ _keyState = Common::KEYCODE_INVALID;
+ break;
+ case Common::EVENT_MOUSEMOVE:
+ _mouseX = event.mouse.x;
+ _mouseY = event.mouse.y;
+ break;
+ /*
+ case Common::EVENT_LBUTTONDOWN:
+ _buttonState |= kLeftButton;
+ break;
+ case Common::EVENT_LBUTTONUP:
+ _buttonState &= ~kLeftButton;
+ break;
+ case Common::EVENT_RBUTTONDOWN:
+ _buttonState |= kRightButton;
+ break;
+ case Common::EVENT_RBUTTONUP:
+ _buttonState &= ~kRightButton;
+ break;
+ case Common::EVENT_QUIT:
+ _system->quit();
+ break;
+ */
+ default:
+ break;
+ }
}
+
+ _gameModule->handleUpdate();
+ _system->updateScreen();
+
}
+
+ delete _gameModule;
+
+ delete _res;
+
+ debug("Ok.");
+
+ return Common::kNoError;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 8a95b05..b261a08 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -44,6 +44,7 @@ enum NeverhoodGameFeatures {
struct NeverhoodGameDescription;
class ResourceMan;
+class GameModule;
struct GameState {
int sceneNum;
@@ -74,8 +75,7 @@ public:
GameState _gameState;
ResourceMan *_res;
-
- void updateEvents();
+ GameModule *_gameModule;
public:
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 8cab1eb..6a76a73 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -98,6 +98,15 @@ protected:
Common::Array<AnimFrameInfo> _frames;
};
+// TODO: Dummy class atm
+
+class SoundResource {
+public:
+ SoundResource(NeverhoodEngine *vm) : _vm(vm) {}
+ bool isPlaying() const { return false; }
+protected:
+ NeverhoodEngine *_vm;
+};
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 3532a43..e5a3d0e 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -71,7 +71,7 @@ protected:
// TODO 00000090 playerSprite dd ?
// TODO 00000094 mouseSprite dd ?
Palette *_palette;
- // TODO 0000009C class300 dd ?
+ // TODO Background *_background;
bool _surfaceFlag;
bool _messageListFlag;
MessageListItem *_messageList2;
Commit: 44ab81eab83189bfa0693fca564543227d423799
https://github.com/scummvm/scummvm/commit/44ab81eab83189bfa0693fca564543227d423799
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Start with the Screen class, also
- Move common headers used in modules to module.h so they don't have to be explicitly #included in each module header
- Clean up #includes
Changed paths:
A engines/neverhood/screen.cpp
A engines/neverhood/screen.h
engines/neverhood/module.h
engines/neverhood/module.mk
engines/neverhood/module1500.cpp
engines/neverhood/module1500.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 432a04c..b59b532 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -27,6 +27,9 @@
#include "neverhood/neverhood.h"
#include "neverhood/entity.h"
+#include "neverhood/graphics.h"
+#include "neverhood/palette.h"
+#include "neverhood/screen.h"
namespace Neverhood {
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 709538e..e51565f 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -13,6 +13,7 @@ MODULE_OBJS = \
resource.o \
resourceman.o \
scene.o \
+ screen.o \
sprite.o
# This module can be built as a plugin
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index f4c7794..97d125a 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -147,7 +147,7 @@ void Scene1501::update() {
if (_countdown1 != 0) {
_countdown1--;
if (_countdown1 == 0) {
- // TODO g_screen->clear(0);
+ _vm->_screen->clear();
_parentModule->sendMessage(0x1009, 0, this);
}
} else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !_soundResource.isPlaying()) {
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index 66eef59..e3633a0 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -28,8 +28,6 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
-#include "neverhood/graphics.h"
-#include "neverhood/palette.h"
namespace Neverhood {
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index ac89a3e..4baff5e 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -20,28 +20,19 @@
*
*/
-#include "common/events.h"
-#include "common/keyboard.h"
#include "common/file.h"
-#include "common/random.h"
-#include "common/savefile.h"
#include "common/config-manager.h"
-
#include "base/plugins.h"
#include "base/version.h"
-
#include "graphics/cursorman.h"
-
#include "engines/util.h"
-
-#include "audio/mixer.h"
-
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
#include "neverhood/gamemodule.h"
#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
#include "neverhood/resource.h"
+#include "neverhood/screen.h"
namespace Neverhood {
@@ -71,6 +62,8 @@ Common::Error NeverhoodEngine::run() {
_isSaveAllowed = false;
+ _screen = new Screen(this);
+
_res = new ResourceMan();
_res->addArchive("a.blb");
_res->addArchive("c.blb");
@@ -179,6 +172,7 @@ Common::Error NeverhoodEngine::run() {
delete _gameModule;
delete _res;
+ delete _screen;
debug("Ok.");
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index b261a08..c13ac51 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -29,11 +29,7 @@
#include "common/random.h"
#include "common/savefile.h"
#include "common/system.h"
-
#include "audio/mixer.h"
-
-#include "graphics/surface.h"
-
#include "engines/engine.h"
namespace Neverhood {
@@ -43,8 +39,9 @@ enum NeverhoodGameFeatures {
struct NeverhoodGameDescription;
-class ResourceMan;
class GameModule;
+class ResourceMan;
+class Screen;
struct GameState {
int sceneNum;
@@ -74,6 +71,7 @@ public:
uint16 _buttonState;
GameState _gameState;
+ Screen *_screen;
ResourceMan *_res;
GameModule *_gameModule;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index ccdae3a..f120931 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -39,13 +39,13 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
// TODO _playerSprite = NULL;
// TODO _mouseSprite = NULL;
_palette = NULL;
- // TODO _class300 = NULL;
+ // TODO _background = NULL;
// TODO _field_8E = -1;
if (clearHitRects) {
// TODO g_Class700->setHitRects(NULL, 0);
// TODO g_Class700->clear();
}
- // TODO g_screen->setFps(24);
+ _vm->_screen->setFps(24);
// TODO g_screen->hSmack = NULL;
// TODO g_screen->field_24 = 0;
// TODO g_screen->field_26 = 0;
@@ -292,7 +292,7 @@ void Scene::smackerUpdate() {
_messageHandlerCb = _savedMessageHandlerCb;
if (_palette)
_palette->usePalette();
- // TODO class300->restore();
+ // TODO _background->restore();
// TODO g_screen->smackerPlayer = NULL;
}
#endif
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
new file mode 100644
index 0000000..4b531ca
--- /dev/null
+++ b/engines/neverhood/screen.cpp
@@ -0,0 +1,88 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/palette.h"
+#include "neverhood/screen.h"
+
+namespace Neverhood {
+
+Screen::Screen(NeverhoodEngine *vm)
+ : _vm(vm), _paletteData(NULL), _paletteChanged(false) {
+
+ _ticks = _vm->_system->getMillis();
+
+ _backScreen = new Graphics::Surface();
+ _backScreen->create(640, 480, Graphics::PixelFormat::createFormatCLUT8());
+
+}
+
+Screen::~Screen() {
+ delete _backScreen;
+}
+
+void Screen::wait() {
+}
+
+void Screen::setFps(int fps) {
+ _frameDelay = 1000 / fps;
+}
+
+int Screen::getFps() {
+ return 1000 / _frameDelay;
+}
+
+void Screen::setPaletteData(byte *paletteData) {
+ _paletteChanged = true;
+ _paletteData = paletteData;
+}
+
+void Screen::unsetPaletteData(byte *paletteData) {
+ if (_paletteData == paletteData) {
+ _paletteChanged = false;
+ _paletteData = NULL;
+ }
+}
+
+void Screen::testPalette(byte *paletteData) {
+ if (_paletteData == paletteData)
+ _paletteChanged = true;
+}
+
+void Screen::updatePalette() {
+ if (_paletteChanged && _paletteData) {
+ byte *tempPalette = new byte[768];
+ for (int i = 0; i < 256; i++) {
+ tempPalette[i * 3 + 0] = _paletteData[i * 4 + 0];
+ tempPalette[i * 3 + 1] = _paletteData[i * 4 + 1];
+ tempPalette[i * 3 + 2] = _paletteData[i * 4 + 2];
+ }
+ _vm->_system->getPaletteManager()->setPalette(tempPalette, 0, 256);
+ delete[] tempPalette;
+ _paletteChanged = false;
+ }
+}
+
+void Screen::clear() {
+ memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
new file mode 100644
index 0000000..0e7ce3d
--- /dev/null
+++ b/engines/neverhood/screen.h
@@ -0,0 +1,54 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_SCREEN_H
+#define NEVERHOOD_SCREEN_H
+
+#include "graphics/surface.h"
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+class Screen {
+public:
+ Screen(NeverhoodEngine *vm);
+ ~Screen();
+ void wait();
+ void setFps(int fps);
+ int getFps();
+ void setPaletteData(byte *paletteData);
+ void unsetPaletteData(byte *paletteData);
+ void testPalette(byte *paletteData);
+ void updatePalette();
+ void clear();
+protected:
+ NeverhoodEngine *_vm;
+ Graphics::Surface *_backScreen;
+ uint32 _ticks;
+ uint32 _frameDelay;
+ byte *_paletteData;
+ bool _paletteChanged;
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_SCREEN_H */
Commit: 1285b37b321850a3584ce1bbdba58462e0b8fbe3
https://github.com/scummvm/scummvm/commit/1285b37b321850a3584ce1bbdba58462e0b8fbe3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Start with the Background and DirtyBackground classes
- Also make related changes in other code
- Call the game module's draw method in the main loop
- Add some more debug output in resource load functions
Changed paths:
A engines/neverhood/background.cpp
A engines/neverhood/background.h
engines/neverhood/graphics.cpp
engines/neverhood/module.h
engines/neverhood/module.mk
engines/neverhood/module1500.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/background.cpp b/engines/neverhood/background.cpp
new file mode 100644
index 0000000..abfa507
--- /dev/null
+++ b/engines/neverhood/background.cpp
@@ -0,0 +1,89 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/background.h"
+
+namespace Neverhood {
+
+// Background
+
+Background::Background(NeverhoodEngine *vm, int objectPriority)
+ : Entity(vm, objectPriority), _surface(NULL), _spriteResource(vm) {
+ // Empty
+}
+
+Background::Background(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority)
+ : Entity(vm, objectPriority), _surface(NULL), _spriteResource(vm) {
+
+ _spriteResource.load(fileHash);
+ createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _surface->drawSpriteResource(_spriteResource);
+
+}
+
+Background::~Background() {
+ delete _surface;
+}
+
+void Background::createSurface(int surfacePriority, int16 width, int16 height) {
+ _surface = new BaseSurface(_vm, surfacePriority, width, height);
+ _spriteResource.getPosition().x = width;
+ _spriteResource.getPosition().y = height;
+}
+
+void Background::load(uint32 fileHash) {
+ _spriteResource.load(fileHash);
+ if (_surface)
+ _surface->drawSpriteResource(_spriteResource);
+}
+
+// DirtyBackground
+
+DirtyBackground::DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority)
+ : Background(vm, objectPriority) {
+
+ // TODO _spriteResource.load(calcHash(fileName));
+ createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _surface->drawSpriteResource(_spriteResource);
+
+}
+
+DirtyBackground::DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority)
+ : Background(vm, objectPriority) {
+
+ _spriteResource.load(fileHash);
+ createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _surface->drawSpriteResource(_spriteResource);
+
+}
+
+void DirtyBackground::createSurface(int surfacePriority, int16 width, int16 height) {
+
+ // TODO: Later use a DirtySurface once it is implemented
+ _surface = new BaseSurface(_vm, surfacePriority, width, height);
+ _spriteResource.getPosition().x = width;
+ _spriteResource.getPosition().y = height;
+
+}
+
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/background.h b/engines/neverhood/background.h
new file mode 100644
index 0000000..733f80b
--- /dev/null
+++ b/engines/neverhood/background.h
@@ -0,0 +1,56 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_BACKGROUND_H
+#define NEVERHOOD_BACKGROUND_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/entity.h"
+#include "neverhood/graphics.h"
+#include "neverhood/resource.h"
+
+namespace Neverhood {
+
+class Background : public Entity {
+public:
+ Background(NeverhoodEngine *vm, int objectPriority);
+ Background(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority);
+ virtual ~Background();
+ BaseSurface *getSurface() { return _surface; }
+ void createSurface(int surfacePriority, int16 width, int16 height);
+ void load(uint32 fileHash);
+protected:
+ BaseSurface *_surface;
+ SpriteResource _spriteResource;
+};
+
+class DirtyBackground : public Background {
+public:
+ DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority);
+ DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority);
+ void createSurface(int surfacePriority, int16 width, int16 height);
+
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_BACKGROUND_H */
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index d7c1064..2a86966 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -32,6 +32,7 @@ BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 h
_drawRect.y = 0;
_drawRect.width = width;
_drawRect.height = height;
+ // TODO: Check if _sysRect is needed at all in the reimplementation...
_sysRect.x = 0;
_sysRect.y = 0;
_sysRect.width = (width + 3) & 0xFFFC; // align by 4 bytes
@@ -49,6 +50,7 @@ BaseSurface::~BaseSurface() {
}
void BaseSurface::draw() {
+ debug("BaseSurface::draw()");
// TODO
}
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index b59b532..d3c7b69 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -26,6 +26,7 @@
#define NEVERHOOD_MODULE_H
#include "neverhood/neverhood.h"
+#include "neverhood/background.h"
#include "neverhood/entity.h"
#include "neverhood/graphics.h"
#include "neverhood/palette.h"
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index e51565f..cc7f9e1 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -1,6 +1,7 @@
MODULE := engines/neverhood
MODULE_OBJS = \
+ background.o \
blbarchive.o \
detection.o \
entity.o \
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 97d125a..8c4cb9c 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -116,12 +116,12 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
_surfaceFlag = true;
+ _background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
+
_palette = new Palette(_vm);//DUMMY!
/* TODO
- _background = addBackground(new Class301(_vm, backgroundFileHash, 0, 0));
-
_palette = new Palette2(_vm);
_palette->usePalette();
addEntity(_palette);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 4baff5e..207bd38 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -126,6 +126,7 @@ Common::Error NeverhoodEngine::run() {
_gameModule = new GameModule(this);
+ // Preliminary main loop, needs some more work but works for testing
while (1) {
Common::Event event;
Common::EventManager *eventMan = _system->getEventManager();
@@ -165,6 +166,7 @@ Common::Error NeverhoodEngine::run() {
}
_gameModule->handleUpdate();
+ _gameModule->draw();
_system->updateScreen();
}
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 84eab7f..300cf81 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -46,6 +46,7 @@ void SpriteResource::draw(byte *dest, int destPitch, bool flipX, bool flipY) {
}
bool SpriteResource::load(uint32 fileHash) {
+ debug("SpriteResource::load(%08X)", fileHash);
// TODO: Later merge with load2 and make the mode a parameter
unload();
_resourceHandle = _vm->_res->useResource(fileHash);
@@ -100,6 +101,7 @@ PaletteResource::~PaletteResource() {
}
bool PaletteResource::load(uint32 fileHash) {
+ debug("PaletteResource::load(%08X)", fileHash);
unload();
_resourceHandle = _vm->_res->useResource(fileHash);
if (_resourceHandle != -1) {
@@ -152,6 +154,7 @@ AnimResource::~AnimResource() {
}
bool AnimResource::load(uint32 fileHash) {
+ debug("AnimResource::load(%08X)", fileHash);
if (fileHash == _fileHash)
return true;
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 6a76a73..868bafd 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -37,7 +37,7 @@ public:
bool load2(uint32 fileHash);
void unload();
const NDimensions& getDimensions() { return _dimensions; }
- const NPoint& getPosition() { return _position; }
+ NPoint& getPosition() { return _position; }
protected:
NeverhoodEngine *_vm;
int _resourceHandle;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index f120931..6c3aae1 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -39,7 +39,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
// TODO _playerSprite = NULL;
// TODO _mouseSprite = NULL;
_palette = NULL;
- // TODO _background = NULL;
+ _background = NULL;
// TODO _field_8E = -1;
if (clearHitRects) {
// TODO g_Class700->setHitRects(NULL, 0);
@@ -53,7 +53,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_messageListFlag = true;
_surfaceFlag = false;
_messageList2 = NULL;
- // TODO _smackerPlayer = NULL;
+ _smackerPlayer = NULL;
_smkFileHash = 0;
_messageListFlag2 = false;
_messageValue = -1;
@@ -78,26 +78,25 @@ Scene::~Scene() {
}
void Scene::draw() {
+ debug("Scene::draw()");
//**ALL TODO
-#if 0
if (_smackerPlayer) {
if (_surfaceFlag) {
- g_screen->resetDirtyRects();
- g_screen->copyDirtyRects();
- g_screen->addDirtyRects();
+ // TODO g_screen->resetDirtyRects();
+ // TODO g_screen->copyDirtyRects();
+ // TODO g_screen->addDirtyRects();
}
- _smackerPlayer->_surface->draw();
+ // TODO _smackerPlayer->_surface->draw();
} else {
if (_surfaceFlag) {
- g_screen->copyDirtyRects();
+ // TODO g_screen->copyDirtyRects();
for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
(*iter)->addDirtyRect();
- g_screen->addDirtyRects();
+ // TODO g_screen->addDirtyRects();
}
for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
(*iter)->draw();
}
-#endif
}
void Scene::addEntity(Entity *entity) {
@@ -170,6 +169,12 @@ void Scene::deleteSprite(Sprite **sprite) {
*sprite = NULL;
}
+Background *Scene::addBackground(Background *background) {
+ addEntity(background);
+ addSurface(background->getSurface());
+ return background;
+}
+
void Scene::update() {
if (_smkFileHash != 0) {
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index e5a3d0e..c64c2bf 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -25,6 +25,7 @@
#include "common/array.h"
#include "neverhood/neverhood.h"
+#include "neverhood/background.h"
#include "neverhood/entity.h"
#include "neverhood/graphics.h"
#include "neverhood/module.h"
@@ -38,6 +39,9 @@ struct MessageListItem {
uint32 messageValue;
};
+class SmackerPlayer { // DUMMY!
+};
+
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
@@ -50,6 +54,7 @@ public:
Sprite *addSprite(Sprite *sprite);
void setSurfacePriority(BaseSurface *surface, int priority);
void deleteSprite(Sprite **sprite);
+ Background *addBackground(Background *background);
protected:
Module *_parentModule;
Common::Array<Entity*> _entities;
@@ -71,12 +76,12 @@ protected:
// TODO 00000090 playerSprite dd ?
// TODO 00000094 mouseSprite dd ?
Palette *_palette;
- // TODO Background *_background;
+ Background *_background;
bool _surfaceFlag;
bool _messageListFlag;
MessageListItem *_messageList2;
int _messageListStatus;
- // TODO 000000B0 smackerPlayer dd ?
+ SmackerPlayer *_smackerPlayer;
void (Entity::*_savedUpdateHandlerCb)();
uint32 (Entity::*_savedMessageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
bool _smackerDone;
Commit: bd1749863e45cde53707d0ae38b28825bc0dba2e
https://github.com/scummvm/scummvm/commit/bd1749863e45cde53707d0ae38b28825bc0dba2e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Start with the Palette2 class (which needs a better name later)
- Implement Screen::drawSurface2 (needs color key support)
- The first intro now show up, complete with fade-in and fade-out
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/module1500.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/palette.cpp
engines/neverhood/palette.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 2a86966..fa7c152 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -22,6 +22,7 @@
#include "neverhood/graphics.h"
#include "neverhood/resource.h"
+#include "neverhood/screen.h"
namespace Neverhood {
@@ -51,7 +52,10 @@ BaseSurface::~BaseSurface() {
void BaseSurface::draw() {
debug("BaseSurface::draw()");
- // TODO
+ if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
+ // TODO: _sysRect alternate drawing code (is that used?)
+ _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect);
+ }
}
void BaseSurface::addDirtyRect() {
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 8c4cb9c..c3c0864 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -110,6 +110,8 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
_countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
debug("Create Scene1501(%08X, %08X, %d, %d)", backgroundFileHash, soundFileHash, countdown2, countdown3);
+
+ Palette2 *palette2;
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
@@ -118,16 +120,14 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
_background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
- _palette = new Palette(_vm);//DUMMY!
-
- /* TODO
-
- _palette = new Palette2(_vm);
- _palette->usePalette();
+ palette2 = new Palette2(_vm);
+ palette2->usePalette();
+ _palette = palette2;
addEntity(_palette);
- Palette2_sub_47BF00(backgroundFileHash, 0, 256, 0);
- Palette2_sub_47C060(12);
-
+ palette2->addPalette(backgroundFileHash, 0, 256, 0);
+ palette2->startFadeToPalette(12);
+
+ /*
if (soundFileHash != 0) {
_soundResource.set(soundFileHash);
_soundResource.load();
@@ -150,7 +150,7 @@ void Scene1501::update() {
_vm->_screen->clear();
_parentModule->sendMessage(0x1009, 0, this);
}
- } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !_soundResource.isPlaying()) {
+ } else if ((_countdown2 != 0 && (--_countdown2 == 0)) /*|| !_soundResource.isPlaying()*/) {
_countdown1 = 12;
_palette->startFadeToBlack(11);
}
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 207bd38..9019409 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -164,10 +164,14 @@ Common::Error NeverhoodEngine::run() {
break;
}
}
-
+
+ debug("millis %d", _system->getMillis());
_gameModule->handleUpdate();
_gameModule->draw();
- _system->updateScreen();
+ _screen->wait();
+ _screen->update();
+
+ debug("---------------------------------------");
}
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index b45f8ee..bfabf89 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -22,9 +22,12 @@
#include "neverhood/palette.h"
#include "neverhood/resource.h"
+#include "neverhood/screen.h"
namespace Neverhood {
+// Palette
+
Palette::Palette(NeverhoodEngine *vm) : Entity(vm, 0) {
_status = 0;
_palette = new byte[1024];
@@ -58,12 +61,12 @@ Palette::Palette(NeverhoodEngine *vm, uint32 fileHash) : Entity(vm, 0) {
}
Palette::~Palette() {
- // TODO: _vm->_screen->unsetPaletteData(_palette);
+ _vm->_screen->unsetPaletteData(_palette);
delete[] _palette;
}
void Palette::usePalette() {
- // TODO: _vm->_screen->setPaletteData(_palette);
+ _vm->_screen->setPaletteData(_palette);
}
void Palette::addPalette(const char *filename, int toIndex, int count, int fromIndex) {
@@ -76,10 +79,11 @@ void Palette::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex)
count = 256 - toIndex;
paletteResource.load(fileHash);
memcpy(_palette + toIndex * 4, paletteResource.palette() + fromIndex * 4, count * 4);
- // TODO: _vm->_screen->testPalette(_palette);
+ _vm->_screen->testPalette(_palette);
}
void Palette::startFadeToBlack(int counter) {
+ debug("Palette::startFadeToBlack(%d)", counter);
if (counter == 0)
counter = 1;
_fadeToR = 0;
@@ -91,6 +95,7 @@ void Palette::startFadeToBlack(int counter) {
}
void Palette::startFadeToWhite(int counter) {
+ debug("Palette::startFadeToWhite(%d)", counter);
if (counter == 0)
counter = 1;
_fadeToR = 255;
@@ -102,15 +107,18 @@ void Palette::startFadeToWhite(int counter) {
}
void Palette::update() {
+ debug("Palette::update() _status = %d", _status);
if (_status == 1) {
- memset(_palette, 0, 1024);
- _status = 0;
- } else {
- for (int i = 0; i < 256; i++) {
- fadeColor(_palette + i * 4, _fadeToR, _fadeToG, _fadeToB);
+ if (_palCounter > 1) {
+ for (int i = 0; i < 256; i++) {
+ fadeColor(_palette + i * 4, _fadeToR, _fadeToG, _fadeToB);
+ }
+ _vm->_screen->testPalette(_palette);
+ _palCounter--;
+ } else {
+ memset(_palette, 0, 1024);
+ _status = 0;
}
- // TODO: _vm->_screen->testPalette(_palette);
- _palCounter--;
}
}
@@ -122,4 +130,58 @@ void Palette::fadeColor(byte *rgb, byte toR, byte toG, byte toB) {
#undef FADE
}
+// Palette2
+
+Palette2::Palette2(NeverhoodEngine *vm)
+ : Palette(vm) {
+ _basePalette = new byte[1024];
+ SetUpdateHandler(&Palette2::update);
+}
+
+Palette2::Palette2(NeverhoodEngine *vm, uint32 fileHash)
+ : Palette(vm, fileHash) {
+ _basePalette = new byte[1024];
+ SetUpdateHandler(&Palette2::update);
+}
+
+Palette2::~Palette2() {
+ delete _basePalette;
+}
+
+void Palette2::update() {
+ debug("Palette2::update() _status = %d", _status);
+ if (_status == 1) {
+ Palette::update();
+ } else if (_status == 2) {
+ debug("... _palCounter = %d", _palCounter);
+ if (_palCounter > 1) {
+ for (int i = 0; i < 256; i++) {
+ fadeColor(_palette + i * 4, _basePalette[i * 4 + 0], _basePalette[i * 4 + 1], _basePalette[i * 4 + 2]);
+ }
+ _vm->_screen->testPalette(_palette);
+ _palCounter--;
+ } else {
+ memcpy(_palette, _basePalette, 256 * 4);
+ _status = 0;
+ }
+ }
+}
+
+void Palette2::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
+ PaletteResource paletteResource(_vm);
+ if (toIndex + count > 256)
+ count = 256 - toIndex;
+ paletteResource.load(fileHash);
+ memcpy(_basePalette + toIndex * 4, paletteResource.palette() + fromIndex * 4, count * 4);
+}
+
+void Palette2::startFadeToPalette(int counter) {
+ debug("Palette2::startFadeToPalette(%d)", counter);
+ if (counter == 0)
+ counter = 1;
+ _palCounter = counter;
+ _fadeStep = 255 / counter;
+ _status = 2;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index b29d771..752ae3a 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -54,6 +54,19 @@ protected:
void fadeColor(byte *rgb, byte toR, byte toG, byte toB);
};
+class Palette2 : public Palette {
+public:
+ Palette2(NeverhoodEngine *vm);
+ // TODO: Other ctors
+ Palette2(NeverhoodEngine *vm, uint32 fileHash);
+ ~Palette2();
+ void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
+ void startFadeToPalette(int counter);
+public:
+ byte *_basePalette;
+ void update();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_PALETTE_H */
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 4b531ca..807e241 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -39,7 +39,16 @@ Screen::~Screen() {
delete _backScreen;
}
+void Screen::update() {
+ updatePalette();
+ // TODO: Implement actual code
+ _vm->_system->copyRectToScreen((const byte*)_backScreen->pixels, _backScreen->pitch, 0, 0, 640, 480);
+ _vm->_system->updateScreen();
+}
+
void Screen::wait() {
+ // TODO
+ _vm->_system->delayMillis(40);
}
void Screen::setFps(int fps) {
@@ -69,6 +78,7 @@ void Screen::testPalette(byte *paletteData) {
void Screen::updatePalette() {
if (_paletteChanged && _paletteData) {
+ debug("Screen::updatePalette() Set palette");
byte *tempPalette = new byte[768];
for (int i = 0; i < 256; i++) {
tempPalette[i * 3 + 0] = _paletteData[i * 4 + 0];
@@ -85,4 +95,67 @@ void Screen::clear() {
memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
}
+void Screen::drawSurface2(Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect) {
+
+ int16 destX, destY;
+ NRect ddRect;
+
+ if (drawRect.x + drawRect.width >= clipRect.x2)
+ ddRect.x2 = clipRect.x2 - drawRect.x;
+ else
+ ddRect.x2 = drawRect.width;
+
+ if (drawRect.x <= clipRect.x1) {
+ destX = clipRect.x1;
+ ddRect.x1 = clipRect.x1 - drawRect.x;
+ } else {
+ destX = drawRect.x;
+ ddRect.x1 = 0;
+ }
+
+ if (drawRect.y + drawRect.height >= clipRect.y2)
+ ddRect.y2 = clipRect.y2 - drawRect.y;
+ else
+ ddRect.y2 = drawRect.height;
+
+ if (drawRect.y <= clipRect.y1) {
+ destY = clipRect.y1;
+ ddRect.y1 = clipRect.y1 - drawRect.y;
+ } else {
+ destY = drawRect.y;
+ ddRect.y1 = 0;
+ }
+
+ debug("draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
+
+ byte *source = (byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
+ byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
+ int width = ddRect.x2 - ddRect.x1;
+ int height = ddRect.y2 - ddRect.y1;
+
+ while (height--) {
+ memcpy(dest, source, width);
+ source += surface->pitch;
+ dest += _backScreen->pitch;
+ }
+
+ #if 0
+ if ( ddRect.right > ddRect.left )
+ {
+ if ( ddRect.top < ddRect.bottom )
+ {
+ (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD, LPDIRECTDRAWSURFACE, struct tagRECT *, unsigned int))(**(_DWORD **)(this + 8) + 28))(
+ *(_DWORD *)(this + 8),
+ destX,
+ destY,
+ ddSurface,
+ &ddRect,
+ blitFlags | (unsigned int)DDBLTFAST_WAIT);
+ }
+ }
+ #endif
+
+}
+
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 0e7ce3d..e25b3b5 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -25,6 +25,7 @@
#include "graphics/surface.h"
#include "neverhood/neverhood.h"
+#include "neverhood/graphics.h"
namespace Neverhood {
@@ -32,6 +33,7 @@ class Screen {
public:
Screen(NeverhoodEngine *vm);
~Screen();
+ void update();
void wait();
void setFps(int fps);
int getFps();
@@ -40,6 +42,7 @@ public:
void testPalette(byte *paletteData);
void updatePalette();
void clear();
+ void drawSurface2(Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect);
protected:
NeverhoodEngine *_vm;
Graphics::Surface *_backScreen;
Commit: 21eb88053caa4cc7167f81dba9afc7f0ef89996d
https://github.com/scummvm/scummvm/commit/21eb88053caa4cc7167f81dba9afc7f0ef89996d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Implement SmackerScene, SmackerPlayer and related stuff
- The intro video after the logo screens is now played (still needs better sync)
Changed paths:
A engines/neverhood/smackerplayer.cpp
A engines/neverhood/smackerplayer.h
A engines/neverhood/smackerscene.cpp
A engines/neverhood/smackerscene.h
engines/neverhood/blbarchive.cpp
engines/neverhood/blbarchive.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module.mk
engines/neverhood/module1500.cpp
engines/neverhood/module1500.h
engines/neverhood/neverhood.cpp
engines/neverhood/palette.cpp
engines/neverhood/palette.h
engines/neverhood/resourceman.cpp
engines/neverhood/resourceman.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 4259be3..3138b91 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -108,4 +108,9 @@ byte *BlbArchive::getEntryExtData(uint index) {
return _extData && entry.extDataOfs != 0 ? &_extData[entry.extDataOfs - 1] : NULL;
}
+Common::SeekableReadStream *BlbArchive::createStream(uint index) {
+ const BlbArchiveEntry &entry = _entries[index];
+ return new Common::SeekableSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/blbarchive.h b/engines/neverhood/blbarchive.h
index 3c373cc..ddb3f01 100644
--- a/engines/neverhood/blbarchive.h
+++ b/engines/neverhood/blbarchive.h
@@ -25,6 +25,8 @@
#include "common/array.h"
#include "common/file.h"
+#include "common/stream.h"
+#include "common/substream.h"
#include "neverhood/neverhood.h"
namespace Neverhood {
@@ -58,6 +60,7 @@ public:
uint32 getSize(uint index) { return _entries[index].size; }
BlbArchiveEntry *getEntry(uint index) { return &_entries[index]; }
uint getCount() { return _entries.size(); }
+ Common::SeekableReadStream *createStream(uint index);
private:
Common::File _fd;
Common::Array<BlbArchiveEntry> _entries;
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e46d23c..3f4ad4b 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -102,7 +102,7 @@ void GameModule::updateModule1500() {
_done = false;
delete _childObject;
_childObject = NULL;
- debug("Done...");
+ error("Done...");
// TODO createModule1000();
// TODO _childObject->handleUpdate();
}
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index cc7f9e1..8eb1951 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -15,6 +15,8 @@ MODULE_OBJS = \
resourceman.o \
scene.o \
screen.o \
+ smackerscene.o \
+ smackerplayer.o \
sprite.o
# This module can be built as a plugin
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index c3c0864..95b3925 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -92,8 +92,14 @@ void Module1500::createScene1502() {
void Module1500::createScene1503() {
debug("createScene1503");
- // TODO: This uses the MultiSmackerPlayer
- // Game will crash now...
+ SmackerScene *smackerScene;
+ _parentModule->sendMessage(0x0800, 0, this);
+ _vm->gameState().sceneNum = 2;
+ smackerScene = new SmackerScene(_vm, this, true, true, true);
+ smackerScene->setFileHash(0x001A0005);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1500::update);
}
void Module1500::createScene1504() {
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index e3633a0..87b2a0b 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -28,6 +28,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/smackerscene.h"
namespace Neverhood {
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 9019409..6506812 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -165,13 +165,13 @@ Common::Error NeverhoodEngine::run() {
}
}
- debug("millis %d", _system->getMillis());
+ //debug("millis %d", _system->getMillis());
_gameModule->handleUpdate();
_gameModule->draw();
_screen->wait();
_screen->update();
- debug("---------------------------------------");
+ //debug("---------------------------------------");
}
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index bfabf89..e186d38 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -82,6 +82,13 @@ void Palette::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex)
_vm->_screen->testPalette(_palette);
}
+void Palette::copyPalette(const byte *palette, int toIndex, int count, int fromIndex) {
+ if (toIndex + count > 256)
+ count = 256 - toIndex;
+ memcpy(_palette + toIndex * 4, palette + fromIndex * 4, count * 4);
+ _vm->_screen->testPalette(_palette);
+}
+
void Palette::startFadeToBlack(int counter) {
debug("Palette::startFadeToBlack(%d)", counter);
if (counter == 0)
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 752ae3a..e3d95aa 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -42,6 +42,7 @@ public:
void usePalette();
void addPalette(const char *filename, int toIndex, int count, int fromIndex);
void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
+ void copyPalette(const byte *palette, int toIndex, int count, int fromIndex);
void startFadeToBlack(int counter);
void startFadeToWhite(int counter);
protected:
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 59e3fad..28f0994 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -164,4 +164,9 @@ void ResourceMan::freeResource(Resource *resource) {
resource->data = NULL;
}
+Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
+ ResourceFileEntry *entry = findEntry(fileHash);
+ return _archives[entry->archiveIndex]->createStream(entry->entryIndex);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
index 0dd70e1..2261440 100644
--- a/engines/neverhood/resourceman.h
+++ b/engines/neverhood/resourceman.h
@@ -67,6 +67,7 @@ public:
byte *loadResource(int resourceHandle, bool moveToFront = false);
void unloadResource(int resourceHandle);
void freeResource(Resource *resource);
+ Common::SeekableReadStream *createStream(uint32 fileHash);
private:
Common::Array<BlbArchive*> _archives;
Common::Array<ResourceFileEntry> _entries;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 6c3aae1..a73b45b 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -78,15 +78,14 @@ Scene::~Scene() {
}
void Scene::draw() {
- debug("Scene::draw()");
- //**ALL TODO
if (_smackerPlayer) {
if (_surfaceFlag) {
// TODO g_screen->resetDirtyRects();
// TODO g_screen->copyDirtyRects();
// TODO g_screen->addDirtyRects();
}
- // TODO _smackerPlayer->_surface->draw();
+ if (_smackerPlayer->getSurface())
+ _smackerPlayer->getSurface()->draw();
} else {
if (_surfaceFlag) {
// TODO g_screen->copyDirtyRects();
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index c64c2bf..405a528 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -30,6 +30,7 @@
#include "neverhood/graphics.h"
#include "neverhood/module.h"
#include "neverhood/palette.h"
+#include "neverhood/smackerplayer.h"
#include "neverhood/sprite.h"
namespace Neverhood {
@@ -39,9 +40,6 @@ struct MessageListItem {
uint32 messageValue;
};
-class SmackerPlayer { // DUMMY!
-};
-
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 807e241..68f6110 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -78,7 +78,6 @@ void Screen::testPalette(byte *paletteData) {
void Screen::updatePalette() {
if (_paletteChanged && _paletteData) {
- debug("Screen::updatePalette() Set palette");
byte *tempPalette = new byte[768];
for (int i = 0; i < 256; i++) {
tempPalette[i * 3 + 0] = _paletteData[i * 4 + 0];
@@ -95,7 +94,7 @@ void Screen::clear() {
memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
}
-void Screen::drawSurface2(Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect) {
+void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect) {
int16 destX, destY;
NRect ddRect;
@@ -128,7 +127,7 @@ void Screen::drawSurface2(Graphics::Surface *surface, NDrawRect &drawRect, NRect
debug("draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
- byte *source = (byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
+ const byte *source = (const byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
int width = ddRect.x2 - ddRect.x1;
int height = ddRect.y2 - ddRect.y1;
@@ -157,5 +156,22 @@ void Screen::drawSurface2(Graphics::Surface *surface, NDrawRect &drawRect, NRect
}
+void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect) {
+
+ const byte *source = (const byte*)surface->getBasePtr(0, 0);
+ byte *dest = (byte*)_backScreen->getBasePtr(drawRect.x, drawRect.y);
+
+ for (int16 yc = 0; yc < surface->h; yc++) {
+ byte *row = dest;
+ for (int16 xc = 0; xc < surface->w; xc++) {
+ *row++ = *source;
+ *row++ = *source++;
+ }
+ memcpy(dest + _backScreen->pitch, dest, surface->w * 2);
+ dest += _backScreen->pitch;
+ dest += _backScreen->pitch;
+ }
+
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index e25b3b5..fc56a18 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -42,7 +42,8 @@ public:
void testPalette(byte *paletteData);
void updatePalette();
void clear();
- void drawSurface2(Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect);
+ void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect);
+ void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
protected:
NeverhoodEngine *_vm;
Graphics::Surface *_backScreen;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
new file mode 100644
index 0000000..c914b42
--- /dev/null
+++ b/engines/neverhood/smackerplayer.cpp
@@ -0,0 +1,183 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/smackerplayer.h"
+#include "neverhood/palette.h"
+#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// SmackerSurface
+
+SmackerSurface::SmackerSurface(NeverhoodEngine *vm)
+ : BaseSurface(vm, 0, 0, 0), _smackerFrame(NULL) {
+}
+
+void SmackerSurface::draw() {
+ if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
+ _vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect);
+ }
+}
+
+void SmackerSurface::setSmackerFrame(const Graphics::Surface *smackerFrame) {
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = smackerFrame->w;
+ _drawRect.height = smackerFrame->h;
+ // TODO: Check if _sysRect is needed at all in the reimplementation...
+ _sysRect.x = 0;
+ _sysRect.y = 0;
+ _sysRect.width = (smackerFrame->w + 3) & 0xFFFC; // align by 4 bytes
+ _sysRect.height = smackerFrame->h;
+ _smackerFrame = smackerFrame;
+}
+
+// SmackerDoubleSurface
+
+SmackerDoubleSurface::SmackerDoubleSurface(NeverhoodEngine *vm)
+ : SmackerSurface(vm) {
+}
+
+void SmackerDoubleSurface::draw() {
+ if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
+ _vm->_screen->drawDoubleSurface2(_smackerFrame, _drawRect);
+ }
+}
+
+// SmackerPlayer
+
+SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag)
+ : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _flag2(false),
+ _palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL) {
+
+ SetUpdateHandler(&SmackerPlayer::update);
+ open(fileHash, flag);
+}
+
+SmackerPlayer::~SmackerPlayer() {
+ close();
+}
+
+void SmackerPlayer::open(uint32 fileHash, bool flag1) {
+ debug("SmackerPlayer::open(%08X)", fileHash);
+
+ _flag1 = flag1;
+
+ close();
+
+ _stream = _vm->_res->createStream(fileHash);
+
+ // TODO: _flag1 stuff
+
+ _smackerDecoder = new Video::SmackerDecoder(_vm->_mixer);
+ _smackerDecoder->loadStream(_stream);
+
+ _palette = new Palette(_vm);
+ _palette->usePalette();
+
+}
+
+void SmackerPlayer::close() {
+ delete _smackerDecoder;
+ delete _palette;
+ // NOTE: The SmackerDecoder deletes the _stream
+ delete _smackerSurface;
+ _smackerDecoder = NULL;
+ _palette = NULL;
+ _stream = NULL;
+ _smackerSurface = NULL;
+}
+
+void SmackerPlayer::gotoFrame(uint frameNumber) {
+}
+
+uint SmackerPlayer::getStatus() {
+ return 0;
+}
+
+void SmackerPlayer::update() {
+
+ if (!_smackerDecoder)
+ return;
+
+ if (_dirtyFlag) {
+ // TODO _vm->_screen->resetDirtyRects();
+ _dirtyFlag = false;
+ }
+
+ if (!_smackerDecoder->endOfVideo()) {
+
+ const Graphics::Surface *smackerFrame = _smackerDecoder->decodeNextFrame();
+
+ if (!_smackerSurface) {
+ if (_doubleSurface) {
+ // TODO: Use SmackerDoubleSurface
+ _smackerSurface = new SmackerDoubleSurface(_vm);
+ _smackerSurface->getDrawRect().x = 320 - _smackerDecoder->getWidth();
+ _smackerSurface->getDrawRect().y = 240 - _smackerDecoder->getHeight();
+ // TODO DoubleDrawSurface.field_28 = false;
+ _smackerSurface->setSmackerFrame(smackerFrame);
+ } else {
+ _smackerSurface = new SmackerSurface(_vm);
+ _smackerSurface->getDrawRect().x = (640 - _smackerDecoder->getWidth()) / 2;
+ _smackerSurface->getDrawRect().y = (480 - _smackerDecoder->getHeight()) / 2;
+ _smackerSurface->setSmackerFrame(smackerFrame);
+ }
+ }
+
+ if (_doubleSurface) {
+ // TODO
+ }
+
+ // TODO _vm->_screen->_skipUpdate = true;
+ _dirtyFlag = true;
+
+ if (_smackerDecoder->hasDirtyPalette()) {
+ updatePalette();
+ }
+
+ if (_smackerDecoder->endOfVideo() && !_flag1) {
+ if (_scene) {
+ _scene->sendMessage(0x3002, 0, this);
+ }
+ _flag2 = true;
+ } else {
+ _flag2 = false;
+ }
+
+ }
+
+}
+
+void SmackerPlayer::updatePalette() {
+ byte tempPalette[1024];
+ const byte *smackerPalette = _smackerDecoder->getPalette();
+ for (int i = 0; i < 256; i++) {
+ tempPalette[i * 4 + 0] = smackerPalette[i * 3 + 0];
+ tempPalette[i * 4 + 1] = smackerPalette[i * 3 + 1];
+ tempPalette[i * 4 + 2] = smackerPalette[i * 3 + 2];
+ }
+ _palette->copyPalette(tempPalette, 0, 256, 0);
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
new file mode 100644
index 0000000..d923bbd
--- /dev/null
+++ b/engines/neverhood/smackerplayer.h
@@ -0,0 +1,75 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_SMACKERPLAYER_H
+#define NEVERHOOD_SMACKERPLAYER_H
+
+#include "video/smk_decoder.h"
+#include "neverhood/neverhood.h"
+#include "neverhood/entity.h"
+
+namespace Neverhood {
+
+class Scene;
+class Palette;
+
+class SmackerSurface : public BaseSurface {
+public:
+ SmackerSurface(NeverhoodEngine *vm);
+ virtual void draw();
+ void setSmackerFrame(const Graphics::Surface *smackerFrame);
+protected:
+ const Graphics::Surface *_smackerFrame;
+};
+
+class SmackerDoubleSurface : public SmackerSurface {
+public:
+ SmackerDoubleSurface(NeverhoodEngine *vm);
+ virtual void draw();
+};
+
+class SmackerPlayer : public Entity {
+public:
+ SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag);
+ ~SmackerPlayer();
+ BaseSurface *getSurface() { return _smackerSurface; }
+ void open(uint32 fileHash, bool flag1);
+ void close();
+ void gotoFrame(uint frameNumber);
+ uint getStatus();
+protected:
+ Scene *_scene;
+ Palette *_palette;
+ Video::SmackerDecoder *_smackerDecoder;
+ SmackerSurface *_smackerSurface;
+ bool _doubleSurface;
+ Common::SeekableReadStream *_stream;
+ bool _flag1;
+ bool _flag2;
+ bool _dirtyFlag;
+ void update();
+ void updatePalette();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_SMACKERPLAYER_H */
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
new file mode 100644
index 0000000..f3ee577
--- /dev/null
+++ b/engines/neverhood/smackerscene.cpp
@@ -0,0 +1,127 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/smackerscene.h"
+
+namespace Neverhood {
+
+SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort)
+ : Scene(vm, parentModule, true), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _fieldDF(false),
+ _fileHashListIndex(-1), _fileHashList(NULL), _playNextVideoFlag(false) {
+
+ debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, flag1, canAbort);
+
+ // NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags)
+
+ /* TODO
+ if (_vm->getGlobalVarValue(0x06C02850)) {
+ _flag1 = true;
+ _canAbort = true;
+ }
+ */
+
+ if (_doubleSurface) {
+ _vm->_screen->clear();
+ }
+
+ _fileHash[0] = 0;
+ _fileHash[1] = 0;
+
+ SetUpdateHandler(&SmackerScene::update);
+ SetMessageHandler(&SmackerScene::handleMessage);
+
+}
+
+SmackerScene::~SmackerScene() {
+
+}
+
+void SmackerScene::setFileHash(uint32 fileHash) {
+ debug("SmackerScene::setFileHash(%08X)", fileHash);
+ _fileHash[0] = fileHash;
+ _fileHashList = _fileHash;
+}
+
+void SmackerScene::setFileHashList(uint32 *fileHashList) {
+ debug("SmackerScene::setFileHashList(...)");
+ _fileHashList = fileHashList;
+}
+
+void SmackerScene::nextVideo() {
+ debug("SmackerScene::nextVideo()");
+
+ _fileHashListIndex++;
+
+ if (_fileHashList && _fileHashList[_fileHashListIndex] != 0) {
+ uint32 smackerFileHash = _fileHashList[_fileHashListIndex];
+ if (_vm->_res->getResourceTypeByHash(smackerFileHash) != 10) {
+ // Not a Smacker file
+ _parentModule->sendMessage(0x1009, 0, this);
+ return;
+ }
+ // TODO _fieldDF = getGlobalSubVarValue(0x00800410, smackerFileHash);
+ if (!_fieldDF) {
+ // TODO setGlobalSubVarValue(0x00800410, smackerFileHash) = 1;
+ }
+ if (_fileHashListIndex == 0) {
+ _smackerPlayer = new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false);
+ addEntity(_smackerPlayer);
+ addSurface(_smackerPlayer->getSurface());
+ // TODO? Screen.hSmack = _smackerPlayer;
+ } else {
+ _smackerPlayer->open(smackerFileHash, false);
+ }
+ } else {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+
+
+}
+
+void SmackerScene::update() {
+ if (_playNextVideoFlag) {
+ nextVideo();
+ _playNextVideoFlag = false;
+ }
+ Scene::update();
+}
+
+uint32 SmackerScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0009:
+ if ((_fieldDF && _flag1) || (_canAbort && _flag1))
+ _playNextVideoFlag = true;
+ break;
+ case 0x000C:
+ if (_canAbort) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x3002:
+ _playNextVideoFlag = true;
+ break;
+ }
+ return messageResult;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/smackerscene.h b/engines/neverhood/smackerscene.h
new file mode 100644
index 0000000..b3c354c
--- /dev/null
+++ b/engines/neverhood/smackerscene.h
@@ -0,0 +1,54 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_SMACKERSCENE_H
+#define NEVERHOOD_SMACKERSCENE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+class SmackerScene : public Scene {
+public:
+ SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort);
+ virtual ~SmackerScene();
+ void setFileHash(uint32 fileHash);
+ void setFileHashList(uint32 *fileHashList);
+ void nextVideo();
+protected:
+ bool _doubleSurface;
+ bool _flag1;
+ bool _canAbort;
+ bool _fieldDF;
+ bool _playNextVideoFlag;
+ int _fileHashListIndex;
+ uint32 *_fileHashList;
+ uint32 _fileHash[2];
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_SMACKERSCENE_H */
Commit: 9d0e90bcd2fc392a66d213b64dc07ccd32d438b4
https://github.com/scummvm/scummvm/commit/9d0e90bcd2fc392a66d213b64dc07ccd32d438b4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Add skeleton for Module1000
- Add dummies for game variable access
Changed paths:
A engines/neverhood/module1000.cpp
A engines/neverhood/module1000.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 3f4ad4b..93687f9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -22,6 +22,7 @@
#include "neverhood/gamemodule.h"
+#include "neverhood/module1000.h"
#include "neverhood/module1500.h"
namespace Neverhood {
@@ -84,12 +85,14 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
- createModule1500(0);
+// createModule1500(0); // Logos and intro video
+
+ createModule1000(0);
}
void GameModule::createModule1500(int which) {
_someFlag1 = false;
- // TODO *getGlobalGameVarValuePtr(0x91080831) = 0x0F10114;
+ _vm->setGlobalVar(0x91080831, 0x00F10114);
_childObject = new Module1500(_vm, this, which, true);
SetUpdateHandler(&GameModule::updateModule1500);
}
@@ -102,8 +105,28 @@ void GameModule::updateModule1500() {
_done = false;
delete _childObject;
_childObject = NULL;
+ createModule1000(0);
+ _childObject->handleUpdate();
+ }
+}
+
+void GameModule::createModule1000(int which) {
+ _vm->setGlobalVar(0x91080831, 0x03294419);
+ _childObject = new Module1000(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1000);
+}
+
+void GameModule::updateModule1000() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ // TODO _resourceTable3.load();
+ delete _childObject;
+ _childObject = NULL;
error("Done...");
- // TODO createModule1000();
+ // TODO createModule2300();
// TODO _childObject->handleUpdate();
}
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 6f47fb6..6d65895 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -49,6 +49,8 @@ protected:
void startup();
void createModule1500(int which);
void updateModule1500();
+ void createModule1000(int which);
+ void updateModule1000();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 8eb1951..fe0f7de 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -8,6 +8,7 @@ MODULE_OBJS = \
gamemodule.o \
graphics.o \
module.o \
+ module1000.o \
module1500.o \
neverhood.o \
palette.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
new file mode 100644
index 0000000..d1403b9
--- /dev/null
+++ b/engines/neverhood/module1000.cpp
@@ -0,0 +1,116 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1000.h"
+
+namespace Neverhood {
+
+Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ debug("Create Module1000(%d)", which);
+
+ _musicFileHash = _vm->getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144;
+
+ // TODO Music18hList_add(0x03294419, 0x061880C6);
+ // TODO Music18hList_add(0x03294419, _musicFileHash);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene1001(-1);
+ break;
+ case 1:
+ createScene1002(-1);
+ break;
+ case 2:
+ createScene1003(-1);
+ break;
+ case 3:
+ createScene1004(-1);
+ break;
+ case 4:
+ createScene1005(-1);
+ break;
+ }
+ } else if (which == 0) {
+ createScene1001(0);
+ } else if (which == 1) {
+ createScene1002(1);
+ }
+
+}
+
+Module1000::~Module1000() {
+ // TODO Music18hList_deleteGroup(0x03294419);
+}
+
+void Module1000::createScene1001(int which) {
+ debug("createScene1501");
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1001(_vm, this, which);
+ // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3);
+ // TODO Music18hList_play(0x061880C6, 0, 0, 1);
+ SetUpdateHandler(&Module1000::updateScene1001);
+}
+
+void Module1000::createScene1002(int which) {
+}
+
+void Module1000::createScene1003(int which) {
+}
+
+void Module1000::createScene1004(int which) {
+}
+
+void Module1000::createScene1005(int which) {
+}
+
+void Module1000::updateScene1001() {
+}
+
+void Module1000::updateScene1002() {
+}
+
+void Module1000::updateScene1003() {
+}
+
+void Module1000::updateScene1004() {
+}
+
+void Module1000::updateScene1005() {
+}
+
+// Scene1001
+
+Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+}
+
+void Scene1001::update() {
+}
+
+uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
new file mode 100644
index 0000000..935a8be
--- /dev/null
+++ b/engines/neverhood/module1000.h
@@ -0,0 +1,71 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1000_H
+#define NEVERHOOD_MODULE1000_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+class Module1000 : public Module {
+public:
+ Module1000(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1000();
+protected:
+ uint32 _musicFileHash;
+ // TODO ResourceTable _resourceTable1;
+ // TODO ResourceTable _resourceTable2;
+ // TODO ResourceTable _resourceTable3;
+ // TODO ResourceTable _resourceTable4;
+ void createScene1001(int which);
+ void createScene1002(int which);
+ void createScene1003(int which);
+ void createScene1004(int which);
+ void createScene1005(int which);
+ void updateScene1001();
+ void updateScene1002();
+ void updateScene1003();
+ void updateScene1004();
+ void updateScene1005();
+};
+
+class Scene1001 : public Scene {
+public:
+ Scene1001(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_class511;
+ Sprite *_class508;
+ Sprite *_class509;
+ Sprite *_class608;
+ Sprite *_class510;
+ int16 _fieldE4;
+ int16 _fieldE6;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1000_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 6506812..b61f65c 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -185,4 +185,22 @@ Common::Error NeverhoodEngine::run() {
return Common::kNoError;
}
+uint32 NeverhoodEngine::getGlobalVar(uint32 nameHash) {
+ // TODO
+ return 0;
+}
+
+void NeverhoodEngine::setGlobalVar(uint32 nameHash, uint32 value) {
+ // TODO
+}
+
+uint32 NeverhoodEngine::getSubVar(uint32 nameHash, uint32 subNameHash) {
+ // TODO
+ return 0;
+}
+
+void NeverhoodEngine::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
+ // TODO
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index c13ac51..dddec47 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -110,6 +110,10 @@ public:
#endif
GameState& gameState() { return _gameState; }
+ uint32 getGlobalVar(uint32 nameHash);
+ void setGlobalVar(uint32 nameHash, uint32 value);
+ uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
+ void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value);
public:
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index f3ee577..d47dbb0 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -32,12 +32,10 @@ SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubl
// NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags)
- /* TODO
- if (_vm->getGlobalVarValue(0x06C02850)) {
+ if (_vm->getGlobalVar(0x06C02850)) {
_flag1 = true;
_canAbort = true;
}
- */
if (_doubleSurface) {
_vm->_screen->clear();
@@ -78,9 +76,9 @@ void SmackerScene::nextVideo() {
_parentModule->sendMessage(0x1009, 0, this);
return;
}
- // TODO _fieldDF = getGlobalSubVarValue(0x00800410, smackerFileHash);
+ _fieldDF = _vm->getSubVar(0x00800410, smackerFileHash);
if (!_fieldDF) {
- // TODO setGlobalSubVarValue(0x00800410, smackerFileHash) = 1;
+ _vm->setSubVar(0x00800410, smackerFileHash, 1);
}
if (_fileHashListIndex == 0) {
_smackerPlayer = new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false);
Commit: ae4ef4e66dc69a9d60b44261596860fcc4518de9
https://github.com/scummvm/scummvm/commit/ae4ef4e66dc69a9d60b44261596860fcc4518de9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Add StaticData class
Changed paths:
A engines/neverhood/staticdata.cpp
A engines/neverhood/staticdata.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/scene.h
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index fe0f7de..8a25e25 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -18,7 +18,8 @@ MODULE_OBJS = \
screen.o \
smackerscene.o \
smackerplayer.o \
- sprite.o
+ sprite.o \
+ staticdata.o
# This module can be built as a plugin
ifdef BUILD_PLUGINS
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index b61f65c..24033f0 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -33,6 +33,7 @@
#include "neverhood/resourceman.h"
#include "neverhood/resource.h"
#include "neverhood/screen.h"
+#include "neverhood/staticdata.h"
namespace Neverhood {
@@ -62,6 +63,9 @@ Common::Error NeverhoodEngine::run() {
_isSaveAllowed = false;
+ _staticData = new StaticData();
+ _staticData->load("neverhood.dat");
+
_screen = new Screen(this);
_res = new ResourceMan();
@@ -176,9 +180,10 @@ Common::Error NeverhoodEngine::run() {
}
delete _gameModule;
-
delete _res;
delete _screen;
+
+ delete _staticData;
debug("Ok.");
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index dddec47..b2ba5f7 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -42,6 +42,7 @@ struct NeverhoodGameDescription;
class GameModule;
class ResourceMan;
class Screen;
+class StaticData;
struct GameState {
int sceneNum;
@@ -74,6 +75,7 @@ public:
Screen *_screen;
ResourceMan *_res;
GameModule *_gameModule;
+ StaticData *_staticData;
public:
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 405a528..108adba 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -32,14 +32,10 @@
#include "neverhood/palette.h"
#include "neverhood/smackerplayer.h"
#include "neverhood/sprite.h"
+#include "neverhood/staticdata.h"
namespace Neverhood {
-struct MessageListItem {
- uint32 messageNum;
- uint32 messageValue;
-};
-
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
@@ -58,7 +54,7 @@ protected:
Common::Array<Entity*> _entities;
Common::Array<BaseSurface*> _surfaces;
bool _systemCallbackFlag;
- MessageListItem *_messageList;
+ MessageList *_messageList;
int _messageListIndex;
int _messageListCount;
bool _messageListFlag1;
@@ -77,7 +73,7 @@ protected:
Background *_background;
bool _surfaceFlag;
bool _messageListFlag;
- MessageListItem *_messageList2;
+ MessageList *_messageList2;
int _messageListStatus;
SmackerPlayer *_smackerPlayer;
void (Entity::*_savedUpdateHandlerCb)();
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
new file mode 100644
index 0000000..4cd1d30
--- /dev/null
+++ b/engines/neverhood/staticdata.cpp
@@ -0,0 +1,121 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/staticdata.h"
+
+namespace Neverhood {
+
+StaticData::StaticData() {
+}
+
+StaticData::~StaticData() {
+}
+
+void StaticData::load(const char *filename) {
+
+ Common::File fd;
+
+ if (!fd.open(filename))
+ error("StaticData::load() Could not open %s", filename);
+
+ fd.readUint32LE(); // magic
+ fd.readUint32LE(); // version
+
+ // Load message lists
+ uint32 messageListsCount = fd.readUint32LE();
+ debug("messageListsCount: %d", messageListsCount);
+ for (uint32 i = 0; i < messageListsCount; i++) {
+ MessageList *messageList = new MessageList();
+ uint32 id = fd.readUint32LE();
+ uint32 itemCount = fd.readUint32LE();
+ for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) {
+ MessageItem messageItem;
+ messageItem.messageNum = fd.readUint16LE();
+ messageItem.messageValue = fd.readUint32LE();
+ messageList->push_back(messageItem);
+ }
+ _messageLists[id] = messageList;
+ }
+
+ // Load rect lists
+ uint32 rectListsCount = fd.readUint32LE();
+ debug("rectListsCount: %d", rectListsCount);
+ for (uint32 i = 0; i < rectListsCount; i++) {
+ RectList *rectList = new RectList();
+ uint32 id = fd.readUint32LE();
+ uint32 itemCount = fd.readUint32LE();
+ for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) {
+ RectItem rectItem;
+ rectItem.rect.x1 = fd.readUint16LE();
+ rectItem.rect.y1 = fd.readUint16LE();
+ rectItem.rect.x2 = fd.readUint16LE();
+ rectItem.rect.y2 = fd.readUint16LE();
+ uint32 subItemCount = fd.readUint32LE();
+ rectItem.subRects.reserve(subItemCount);
+ for (uint32 subItemIndex = 0; subItemIndex < subItemCount; subItemIndex++) {
+ SubRectItem subRectItem;
+ subRectItem.rect.x1 = fd.readUint16LE();
+ subRectItem.rect.y1 = fd.readUint16LE();
+ subRectItem.rect.x2 = fd.readUint16LE();
+ subRectItem.rect.y2 = fd.readUint16LE();
+ subRectItem.messageListId = fd.readUint32LE();
+ rectItem.subRects.push_back(subRectItem);
+ }
+ rectList->push_back(rectItem);
+ }
+ _rectLists[id] = rectList;
+ }
+
+ // Load hit rects
+ uint32 hitRectListsCount = fd.readUint32LE();
+ debug("hitRectListsCount: %d", hitRectListsCount);
+ for (uint32 i = 0; i < hitRectListsCount; i++) {
+ HitRectList *hitRectList = new HitRectList();
+ uint32 id = fd.readUint32LE();
+ uint32 itemCount = fd.readUint32LE();
+ for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) {
+ HitRect hitRect;
+ hitRect.rect.x1 = fd.readUint16LE();
+ hitRect.rect.y1 = fd.readUint16LE();
+ hitRect.rect.x2 = fd.readUint16LE();
+ hitRect.rect.y2 = fd.readUint16LE();
+ hitRect.type = fd.readUint16LE();
+ hitRectList->push_back(hitRect);
+ }
+ _hitRectLists[id] = hitRectList;
+ }
+
+}
+
+HitRectList *StaticData::getHitRectList(uint32 id) {
+ return _hitRectLists[id];
+}
+
+RectList *StaticData::getRectList(uint32 id) {
+ return _rectLists[id];
+}
+
+MessageList *StaticData::getMessageList(uint32 id) {
+ return _messageLists[id];
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
new file mode 100644
index 0000000..a7d8a65
--- /dev/null
+++ b/engines/neverhood/staticdata.h
@@ -0,0 +1,75 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_STATICDATA_H
+#define NEVERHOOD_STATICDATA_H
+
+#include "common/array.h"
+#include "common/hashmap.h"
+#include "neverhood/neverhood.h"
+#include "neverhood/graphics.h"
+
+namespace Neverhood {
+
+struct HitRect {
+ NRect rect;
+ uint16 type;
+};
+
+typedef Common::Array<HitRect> HitRectList;
+
+struct SubRectItem {
+ NRect rect;
+ uint32 messageListId;
+};
+
+struct RectItem {
+ NRect rect;
+ Common::Array<SubRectItem> subRects;
+};
+
+typedef Common::Array<RectItem> RectList;
+
+struct MessageItem {
+ uint16 messageNum;
+ uint32 messageValue;
+};
+
+typedef Common::Array<MessageItem> MessageList;
+
+class StaticData {
+public:
+ StaticData();
+ ~StaticData();
+ void load(const char *filename);
+ HitRectList *getHitRectList(uint32 id);
+ RectList *getRectList(uint32 id);
+ MessageList *getMessageList(uint32 id);
+protected:
+ Common::HashMap<uint32, HitRectList*> _hitRectLists;
+ Common::HashMap<uint32, RectList*> _rectLists;
+ Common::HashMap<uint32, MessageList*> _messageLists;
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_STATICDATA_H */
Commit: 6b71d177925ff21787fb792dc05ac048eadbbca3
https://github.com/scummvm/scummvm/commit/6b71d177925ff21787fb792dc05ac048eadbbca3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Start with the CollisionMan class
Changed paths:
A engines/neverhood/collisionman.cpp
A engines/neverhood/collisionman.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
new file mode 100644
index 0000000..cc40a47
--- /dev/null
+++ b/engines/neverhood/collisionman.cpp
@@ -0,0 +1,67 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/collisionman.h"
+
+namespace Neverhood {
+
+CollisionMan::CollisionMan(NeverhoodEngine *vm)
+ : _vm(vm), _hitRects(NULL) {
+}
+
+CollisionMan::~CollisionMan() {
+}
+
+void CollisionMan::setHitRects(uint32 id) {
+ setHitRects(_vm->_staticData->getHitRectList(id));
+}
+
+void CollisionMan::setHitRects(HitRectList *hitRects) {
+ _hitRects = hitRects;
+}
+
+HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
+ // TODO
+ return NULL;
+}
+
+void CollisionMan::addSprite(Sprite *sprite) {
+ _sprites.push_back(sprite);
+}
+
+void CollisionMan::removeSprite(Sprite *sprite) {
+ // TODO
+}
+
+void CollisionMan::clearSprites() {
+ _sprites.clear();
+}
+
+void CollisionMan::save() {
+ // TODO
+}
+
+void CollisionMan::restore() {
+ // TODO
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/collisionman.h b/engines/neverhood/collisionman.h
new file mode 100644
index 0000000..cfa248a
--- /dev/null
+++ b/engines/neverhood/collisionman.h
@@ -0,0 +1,53 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_COLLISIONMAN_H
+#define NEVERHOOD_COLLISIONMAN_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/sprite.h"
+#include "neverhood/staticdata.h"
+
+namespace Neverhood {
+
+class CollisionMan {
+public:
+ CollisionMan(NeverhoodEngine *vm);
+ ~CollisionMan();
+ void setHitRects(uint32 id);
+ void setHitRects(HitRectList *hitRects);
+ HitRect *findHitRectAtPos(int16 x, int16 y);
+ void addSprite(Sprite *sprite);
+ void removeSprite(Sprite *sprite);
+ void clearSprites();
+ void save();
+ void restore();
+protected:
+ NeverhoodEngine *_vm;
+ HitRectList *_hitRects;
+ Common::Array<Sprite*> _sprites;
+};
+
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_COLLISIONMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 8a25e25..f139268 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -3,6 +3,7 @@ MODULE := engines/neverhood
MODULE_OBJS = \
background.o \
blbarchive.o \
+ collisionman.o \
detection.o \
entity.o \
gamemodule.o \
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 24033f0..8b74b66 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -28,6 +28,7 @@
#include "engines/util.h"
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
+#include "neverhood/collisionman.h"
#include "neverhood/gamemodule.h"
#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
@@ -128,6 +129,7 @@ Common::Error NeverhoodEngine::run() {
}
#endif
+ _collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
// Preliminary main loop, needs some more work but works for testing
@@ -180,6 +182,8 @@ Common::Error NeverhoodEngine::run() {
}
delete _gameModule;
+ delete _collisionMan;
+
delete _res;
delete _screen;
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index b2ba5f7..4a07d6a 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -39,6 +39,7 @@ enum NeverhoodGameFeatures {
struct NeverhoodGameDescription;
+class CollisionMan;
class GameModule;
class ResourceMan;
class Screen;
@@ -76,6 +77,7 @@ public:
ResourceMan *_res;
GameModule *_gameModule;
StaticData *_staticData;
+ CollisionMan *_collisionMan;
public:
Commit: 056b69f0c8b2c69f3040fa54268b22c6463627b0
https://github.com/scummvm/scummvm/commit/056b69f0c8b2c69f3040fa54268b22c6463627b0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Module1000 and Scene1001 skeletons
- Implement BaseSurface::drawSpriteResourceEx
- Use CollisionMan in Scene
- Some cleanup
Changed paths:
engines/neverhood/collisionman.cpp
engines/neverhood/collisionman.h
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module.h
engines/neverhood/module1000.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index cc40a47..31bc16d 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -24,6 +24,8 @@
namespace Neverhood {
+static HitRect defaultHitRect = {NRect(), 0x5000};
+
CollisionMan::CollisionMan(NeverhoodEngine *vm)
: _vm(vm), _hitRects(NULL) {
}
@@ -39,13 +41,34 @@ void CollisionMan::setHitRects(HitRectList *hitRects) {
_hitRects = hitRects;
}
+void CollisionMan::clearHitRects() {
+ _hitRects = 0;
+}
+
HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
- // TODO
- return NULL;
+ if (_hitRects) {
+ for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++) {
+ HitRect *hitRect = &(*it);
+ if (x >= hitRect->rect.x1 && x <= hitRect->rect.x2 && y >= hitRect->rect.y1 && y <= hitRect->rect.y2)
+ return hitRect;
+ }
+ }
+ return &defaultHitRect;
}
void CollisionMan::addSprite(Sprite *sprite) {
- _sprites.push_back(sprite);
+ int index = 0, insertIndex = -1;
+ for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
+ if ((*iter)->getPriority() > sprite->getPriority()) {
+ insertIndex = index;
+ break;
+ }
+ index++;
+ }
+ if (insertIndex >= 0)
+ _sprites.insert_at(insertIndex, sprite);
+ else
+ _sprites.push_back(sprite);
}
void CollisionMan::removeSprite(Sprite *sprite) {
diff --git a/engines/neverhood/collisionman.h b/engines/neverhood/collisionman.h
index cfa248a..426dca0 100644
--- a/engines/neverhood/collisionman.h
+++ b/engines/neverhood/collisionman.h
@@ -35,6 +35,7 @@ public:
~CollisionMan();
void setHitRects(uint32 id);
void setHitRects(HitRectList *hitRects);
+ void clearHitRects();
HitRect *findHitRectAtPos(int16 x, int16 y);
void addSprite(Sprite *sprite);
void removeSprite(Sprite *sprite);
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index fa7c152..3d21e8e 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -74,6 +74,20 @@ void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
}
}
+void BaseSurface::drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height) {
+ if (spriteResource.getDimensions().width <= _sysRect.width &&
+ spriteResource.getDimensions().height <= _sysRect.height) {
+ if (width > 0 && width <= _sysRect.width)
+ _drawRect.width = width;
+ if (height > 0 && height <= _sysRect.height)
+ _drawRect.height = height;
+ if (_surface) {
+ clear();
+ spriteResource.draw((byte*)_surface->pixels, _surface->pitch, flipX, flipY);
+ }
+ }
+}
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index cb7474c..ce2be1a 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -41,11 +41,13 @@ struct NDimensions {
struct NRect {
int16 x1, y1, x2, y2;
NRect() : x1(0), y1(0), x2(0), y2(0) {}
+ NRect(int16 x01, int16 y01, int16 x02, int16 y02) : x1(x01), y1(y01), x2(x02), y2(y02) {}
};
struct NDrawRect {
int16 x, y, width, height;
NDrawRect() : x(0), y(0), width(0), height(0) {}
+ NDrawRect(int16 x0, int16 y0, int16 width0, int16 height0) : x(x0), y(y0), width(width0), height(height0) {}
};
class SpriteResource;
@@ -60,11 +62,13 @@ public:
virtual void addDirtyRect();
void clear();
void drawSpriteResource(SpriteResource &spriteResource);
+ void drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height);
int getPriority() const { return _priority; }
void setPriority(int priority) { _priority = priority; }
NDrawRect& getDrawRect() { return _drawRect; }
NDrawRect& getSysRect() { return _sysRect; }
NRect& getClipRect() { return _clipRect; }
+ void setClipRect(NRect clipRect) { _clipRect = clipRect; }
protected:
NeverhoodEngine *_vm;
int _priority;
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index d3c7b69..7911e44 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -27,6 +27,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/background.h"
+#include "neverhood/collisionman.h"
#include "neverhood/entity.h"
#include "neverhood/graphics.h"
#include "neverhood/palette.h"
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index d1403b9..248769e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -103,7 +103,95 @@ void Module1000::updateScene1005() {
// Scene1001
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule, true), _fieldE4(-1), _fieldE6(-1) {
+
+ // TODO: Implement Sprite classes
+
+ Sprite *staticSprite1;
+
+ SetMessageHandler(&Scene1001::handleMessage);
+
+ _vm->_collisionMan->setHitRects(0x004B4858);
+ _surfaceFlag = false;
+ _background = addBackground(new DirtyBackground(_vm, 0x4086520E, 0, 0));
+ _palette = new Palette(_vm, 0x4086520E);
+ _palette->usePalette();
+
+ // TODO Mouse
+
+#if 0
+ // TODO: Player sprites...
+ if (which < 0) {
+ setRectList(0x004B49F0);
+ _playerSprite = new Class572(_vm, this, 200, 433, 1000, 1000);
+ setMessageList(0x004B4888);
+ } else if (which == 1) {
+ setRectList(0x004B49F0);
+ _playerSprite = new Class572(_vm, this, 640, 433, 1000, 1000);
+ setMessageList(0x004B4898);
+ } else if (which == 2) {
+ setRectList(0x004B49F0);
+ if (_vm->getGlobalVar(0xC0418A02)) {
+ _playerSprite = new Class572(_vm, this, 390, 433, 1000, 1000);
+ _playerSprite->setDoDeltaX(1);
+ } else {
+ _playerSprite = new Class572(_vm, this, 300, 433, 1000, 1000);
+ }
+ setMessageList(0x004B4970);
+ } else {
+ setRectList(0x004B4A00);
+ _playerSprite = new Class572(_vm, this, 200, 433, 1000, 1000);
+ setMessageList(0x004B4890);
+ }
+ addSprite(_playerSprite);
+#endif
+
+ staticSprite1 = addSprite(new StaticSprite(_vm, 0x2080A3A8, 1300));
+
+#if 0
+ // TODO: This sucks somehow, find a better way
+ _playerSprite->getSurface()->getClipRect().x1 = 0;
+ _playerSprite->getSurface()->getClipRect().y1 = 0;
+ _playerSprite->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _playerSprite->getSurface()->getClipRect().y2 = 480;
+
+ if (_vm->getGlobalVar(0xD217189D) == 0) {
+ _class509 = addSprite(new Class509(_vm));
+ _class509->getSurface()->getClipRect().x1 = 0;
+ _class509->getSurface()->getClipRect().y1 = 0;
+ _class509->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _class509->getSurface()->getClipRect().y2 = 480;
+ } else {
+ _class509 = NULL;
+ }
+
+ _class511 = addSprite(new Class511(_vm, this, 150, 433, 1));
+#endif
+
+ addSprite(new StaticSprite(_vm, 0x809861A6, 950));
+ addSprite(new StaticSprite(_vm, 0x89C03848, 1100));
+
+#if 0
+ _class608 = addSprite(new Class608(_vm, 0x15288120, 100, 0));
+#endif
+
+ if (_vm->getGlobalVar(0x03C698DA) == 0) {
+ staticSprite1 = addSprite(new StaticSprite(_vm, 0x8C066150, 200));
+#if 0
+ _class510 = addSprite(new Class510(_vm));
+ _class510->getSurface()->getClipRect().x1 = staticSprite1->getSurface()->getDrawRect().x;
+ _class510->getSurface()->getClipRect().y1 = staticSprite1->getSurface()->getDrawRect().y;
+ _class510->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _class510->getSurface()->getClipRect().y2 = staticSprite1->getSurface()->getDrawRect().y + staticSprite1->getSurface()->getDrawRect().height;
+#endif
+ } else {
+ _class510= NULL;
+ }
+
+#if 0
+ _class508 = addSprite(new Class508(_vm, _class509));
+#endif
+
}
void Scene1001::update() {
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 300cf81..c122ca2 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -220,10 +220,10 @@ bool AnimResource::load(uint32 fileHash) {
AnimFrameInfo frameInfo;
frameInfo.frameHash = READ_LE_UINT32(frameList);
frameInfo.counter = READ_LE_UINT16(frameList + 4);
- frameInfo.rect.x1 = READ_LE_UINT16(frameList + 6);
- frameInfo.rect.y1 = READ_LE_UINT16(frameList + 8);
- frameInfo.rect.x2 = READ_LE_UINT16(frameList + 10);
- frameInfo.rect.y2 = READ_LE_UINT16(frameList + 12);
+ frameInfo.rect.x = READ_LE_UINT16(frameList + 6);
+ frameInfo.rect.y = READ_LE_UINT16(frameList + 8);
+ frameInfo.rect.width = READ_LE_UINT16(frameList + 10);
+ frameInfo.rect.height = READ_LE_UINT16(frameList + 12);
frameInfo.deltaX = READ_LE_UINT16(frameList + 14);
frameInfo.deltaY = READ_LE_UINT16(frameList + 16);
frameInfo.deltaRect.x = READ_LE_UINT16(frameList + 18);
@@ -234,7 +234,7 @@ bool AnimResource::load(uint32 fileHash) {
frameInfo.spriteDataOffs = READ_LE_UINT32(frameList + 28);
debug("frameHash = %08X; counter = %d; rect = (%d,%d,%d,%d); deltaX = %d; deltaY = %d; deltaRect = (%d,%d,%d,%d); field_1A = %04X; spriteDataOffs = %08X",
frameInfo.frameHash, frameInfo.counter,
- frameInfo.rect.x1, frameInfo.rect.y1, frameInfo.rect.x2, frameInfo.rect.y2,
+ frameInfo.rect.x, frameInfo.rect.y, frameInfo.rect.width, frameInfo.rect.height,
frameInfo.deltaX, frameInfo.deltaY,
frameInfo.deltaRect.x, frameInfo.deltaRect.y, frameInfo.deltaRect.width, frameInfo.deltaRect.height,
frameInfo.field_1A, frameInfo.spriteDataOffs);
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 868bafd..4199fe7 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -64,7 +64,7 @@ protected:
struct AnimFrameInfo {
uint32 frameHash;
int16 counter;
- NRect rect;
+ NDrawRect rect;
int16 deltaX, deltaY;
NDrawRect deltaRect;
uint16 field_1A;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index a73b45b..b06caee 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/scene.h"
+#include "neverhood/collisionman.h"
namespace Neverhood {
@@ -42,8 +43,8 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_background = NULL;
// TODO _field_8E = -1;
if (clearHitRects) {
- // TODO g_Class700->setHitRects(NULL, 0);
- // TODO g_Class700->clear();
+ _vm->_collisionMan->clearHitRects();
+ _vm->_collisionMan->clearSprites();
}
_vm->_screen->setFps(24);
// TODO g_screen->hSmack = NULL;
@@ -161,7 +162,7 @@ void Scene::setSurfacePriority(BaseSurface *surface, int priority) {
}
void Scene::deleteSprite(Sprite **sprite) {
- // TODO g_Class700->removeSprite(*sprite);
+ _vm->_collisionMan->removeSprite(*sprite);
removeSurface((*sprite)->getSurface());
removeEntity(*sprite);
delete *sprite;
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 0157673..0f44110 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -119,11 +119,13 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y,
_x = x == kDefPosition ? _spriteResource.getPosition().x : x;
_y = y == kDefPosition ? _spriteResource.getPosition().y : y;
+
+ debug("StaticSprite::init() final: x = %d; y = %d", _x, _y);
- _rect1.x1 = 0;
- _rect1.y1 = 0;
- _rect1.x2 = width;
- _rect1.y2 = height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = width;
+ _drawRect.width = height;
_needRedraw = true;
@@ -137,19 +139,19 @@ void StaticSprite::update() {
return;
if (_doDeltaX) {
- _x = filterX(_x - _rect1.x1 - _rect1.x2 + 1);
+ _surface->getDrawRect().x = filterX(_x - _drawRect.x - _drawRect.width + 1);
} else {
- _x = filterX(_x + _rect1.x1);
+ _surface->getDrawRect().x = filterX(_x + _drawRect.x);
}
if (_doDeltaY) {
- _y = filterY(_y - _rect1.y1 - _rect1.y2 + 1);
+ _surface->getDrawRect().y = filterY(_y - _drawRect.y - _drawRect.height + 1);
} else {
- _y = filterY(_y + _rect1.y1);
+ _surface->getDrawRect().y = filterY(_y + _drawRect.y);
}
if (_needRedraw) {
- // TODO _surface->drawSpriteResourceEx(_spriteResource, _doDeltaX, _doDeltaY, _rect1.x2, _rect1.y2);
+ _surface->drawSpriteResourceEx(_spriteResource, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
_needRedraw = false;
}
@@ -160,10 +162,10 @@ void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
_spriteResource.load2(fileHash);
if (dimensions) {
- _rect1.x1 = 0;
- _rect1.y1 = 0;
- _rect1.x2 = _spriteResource.getDimensions().width;
- _rect1.y2 = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
}
if (position) {
@@ -276,7 +278,7 @@ void AnimatedSprite::updateAnim() {
_frameIndex2 = _frameIndex4 != -1 ? _frameIndex4 : _animResource.getFrameCount() - 1;
}
} else {
- // TODO updateFrameIndex();
+ updateFrameIndex();
}
if (_fileHash1 == 0)
updateFrameInfo();
@@ -336,19 +338,20 @@ void AnimatedSprite::updatePosition() {
return;
if (_doDeltaX) {
- _surface->getDrawRect().x = filterX(_x - _rect1.x1 - _rect1.x2 + 1);
+ _surface->getDrawRect().x = filterX(_x - _drawRect.x - _drawRect.width + 1);
} else {
- _surface->getDrawRect().x = filterX(_x + _rect1.x1);
+ _surface->getDrawRect().x = filterX(_x + _drawRect.x);
}
if (_doDeltaY) {
- _surface->getDrawRect().y = filterY(_y - _rect1.y1 - _rect1.y2 + 1);
+ _surface->getDrawRect().y = filterY(_y - _drawRect.y - _drawRect.height + 1);
} else {
- _surface->getDrawRect().y = filterY(_y + _rect1.y1);
+ _surface->getDrawRect().y = filterY(_y + _drawRect.y);
}
if (_needRedraw) {
- // TODO _surface->drawAnimResource(_animResource, _frameIndex, _doDeltaX, _doDeltaY, _rect1.x2, _rect1.y2);
+ debug("TODO: drawAnimResource");
+ // TODO _surface->drawAnimResource(_animResource, _frameIndex, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
_needRedraw = false;
}
@@ -381,7 +384,7 @@ void AnimatedSprite::updateFrameInfo() {
const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_frameIndex);
_flag = true;
- _rect1 = frameInfo.rect;
+ _drawRect = frameInfo.rect;
_deltaX = frameInfo.deltaX;
_deltaY = frameInfo.deltaY;
_deltaRect = frameInfo.deltaRect;
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 708228c..5d013a8 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -55,7 +55,7 @@ protected:
bool _needRedraw;
//0000002B field_2B db ?
//0000002C field2C dd ? // unused
- NRect _rect1;
+ NDrawRect _drawRect;
NDrawRect _deltaRect;
NRect _rect;
uint16 _flags;
Commit: 97f319c945baee44947d6013de2998651b79046f
https://github.com/scummvm/scummvm/commit/97f319c945baee44947d6013de2998651b79046f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: More work on Scene1001, implement Class509 (yes, will be renamed later) and AnimResource related stuff
Changed paths:
engines/neverhood/entity.h
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/screen.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index bbe67a1..18b9cba 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -44,14 +44,16 @@ struct MessageParam {
class Entity {
public:
+ Common::String _name; // Entity name for debugging purposes
Entity(NeverhoodEngine *vm, int priority)
- : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority) {
+ : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _name("Entity") {
}
virtual ~Entity() {
}
virtual void draw() {
}
void handleUpdate() {
+ //debug("Entity(%s).handleUpdate", _name.c_str());
if (_updateHandlerCb)
(this->*_updateHandlerCb)();
}
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 3d21e8e..b6d883c 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -51,7 +51,7 @@ BaseSurface::~BaseSurface() {
}
void BaseSurface::draw() {
- debug("BaseSurface::draw()");
+ debug(8, "BaseSurface::draw()");
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
// TODO: _sysRect alternate drawing code (is that used?)
_vm->_screen->drawSurface2(_surface, _drawRect, _clipRect);
@@ -88,6 +88,19 @@ void BaseSurface::drawSpriteResourceEx(SpriteResource &spriteResource, bool flip
}
}
+void BaseSurface::drawAnimResource(AnimResource &animResource, uint frameIndex, bool flipX, bool flipY, int16 width, int16 height) {
+ if (width > 0 && width <= _sysRect.width)
+ _drawRect.width = width;
+ if (height > 0 && height <= _sysRect.height)
+ _drawRect.height = height;
+ if (_surface) {
+ clear();
+ if (frameIndex < animResource.getFrameCount()) {
+ animResource.draw(frameIndex, (byte*)_surface->pixels, _surface->pitch, flipX, flipY);
+ }
+ }
+}
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index ce2be1a..bf8333c 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -50,6 +50,7 @@ struct NDrawRect {
NDrawRect(int16 x0, int16 y0, int16 width0, int16 height0) : x(x0), y(y0), width(width0), height(height0) {}
};
+class AnimResource;
class SpriteResource;
// NOTE: "Restore" methods aren't need in the reimplementation as they're DirectDraw-specific
@@ -63,12 +64,15 @@ public:
void clear();
void drawSpriteResource(SpriteResource &spriteResource);
void drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height);
+ void drawAnimResource(AnimResource &animResource, uint frameIndex, bool flipX, bool flipY, int16 width, int16 height);
int getPriority() const { return _priority; }
void setPriority(int priority) { _priority = priority; }
NDrawRect& getDrawRect() { return _drawRect; }
NDrawRect& getSysRect() { return _sysRect; }
NRect& getClipRect() { return _clipRect; }
void setClipRect(NRect clipRect) { _clipRect = clipRect; }
+ bool getVisible() const { return _visible; }
+ void setVisible(bool value) { _visible = value; }
protected:
NeverhoodEngine *_vm;
int _priority;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 248769e..162618e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -86,6 +86,36 @@ void Module1000::createScene1005(int which) {
}
void Module1000::updateScene1001() {
+ _childObject->handleUpdate();
+
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 2) {
+ // TODO createScene1003();
+ // TODO _childObject->handleUpdate();
+ } else {
+ // TODO createScene1002();
+ // TODO _childObject->handleUpdate();
+ }
+ }
+
+ if (_field24 >= 0) {
+ if (_field24 == 2) {
+ // TODO ResourceTable_multiLoad(&_resourceTable2, &_resourceTable1, &_resourceTable3);
+ _field24 = -1;
+ } else {
+ // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable1);
+ _field24 = -1;
+ }
+ }
+
+ if (_field26 >= 0) {
+ // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3);
+ _field26 = -1;
+ }
+
}
void Module1000::updateScene1002() {
@@ -101,10 +131,121 @@ void Module1000::updateScene1005() {
}
// Scene1001
+
+Class509::Class509(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm) {
+
+ _name = "Class509";
+
+ createSurface(800, 137, 242);
+
+ _x = 726;
+ _y = 440;
+
+ callback1();
+
+#if 0
+ _soundResource2.set(0xED403E03);
+ _soundResource2.load();
+ _soundResource2.createSoundBuffer();
+#endif
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class509::handleMessage);
+
+}
+
+uint32 Class509::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ handleMessage2000h();
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return 0;
+}
+
+void Class509::handleMessage2000h() {
+
+ switch (_vm->getGlobalVar(0x52371C95)) {
+ case 0:
+#if 0
+ _soundResource1.set(0x65482F03);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ setFileHash(0x624C0498, 1, 3);
+ SetAnimationCallback3(&Class509::callback1);
+ break;
+ case 1:
+#if 0
+ _soundResource1.set(0x65482F03);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ setFileHash(0x624C0498, 1, 3);
+ SetAnimationCallback3(&Class509::callback1);
+ break;
+ case 2:
+#if 0
+ _soundResource2.play(false);
+#endif
+ setFileHash(0x624C0498, 6, 6);
+ SetAnimationCallback3(&Class509::callback2);
+ break;
+ default:
+ // Nothing
+ break;
+ }
+
+ _vm->incGlobalVar(0x52371C95, 1);
+
+}
+
+void Class509::callback1() {
+ switch (_vm->getGlobalVar(0x52371C95)) {
+ case 1:
+ setFileHash(0x624C0498, 4, -1);
+ _newHashListIndex = 4;
+ break;
+ case 2:
+ setFileHash(0x624C0498, 1, -1);
+ _newHashListIndex = 1;
+ break;
+ case 3:
+ setFileHash1();
+ _surface->setVisible(false);
+ break;
+ default:
+ setFileHash(0x624C0498, 0, -1);
+ _newHashListIndex = 0;
+ break;
+ }
+}
+
+void Class509::callback2() {
+ _vm->setGlobalVar(0xD217189D, 1);
+ setFileHash(0x624C0498, 6, 6);
+ SetAnimationCallback3(&Class509::callback3);
+ _x = 30;
+}
+
+void Class509::callback3() {
+#if 0
+ _soundResource1.play(false);
+#endif
+ setFileHash1();
+ _surface->setVisible(false);
+}
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _fieldE4(-1), _fieldE6(-1) {
+ _name = "Scene1001";
+
// TODO: Implement Sprite classes
Sprite *staticSprite1;
@@ -154,6 +295,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_playerSprite->getSurface()->getClipRect().y1 = 0;
_playerSprite->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
_playerSprite->getSurface()->getClipRect().y2 = 480;
+#endif
if (_vm->getGlobalVar(0xD217189D) == 0) {
_class509 = addSprite(new Class509(_vm));
@@ -165,6 +307,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_class509 = NULL;
}
+#if 0
_class511 = addSprite(new Class511(_vm, this, 150, 433, 1));
#endif
@@ -194,9 +337,6 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
-void Scene1001::update() {
-}
-
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
return 0;
}
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 935a8be..4e7b292 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -29,6 +29,8 @@
namespace Neverhood {
+// Module1000
+
class Module1000 : public Module {
public:
Module1000(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -51,18 +53,32 @@ protected:
void updateScene1005();
};
+// Scene1001
+
+class Class509 : public AnimatedSprite {
+public:
+ Class509(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void handleMessage2000h();
+ void callback1();
+ void callback2();
+ void callback3();
+};
+
class Scene1001 : public Scene {
public:
Scene1001(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_class511;
Sprite *_class508;
Sprite *_class509;
- Sprite *_class608;
Sprite *_class510;
+ Sprite *_class511;
+ Sprite *_class608;
int16 _fieldE4;
int16 _fieldE6;
- void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 8b74b66..1ba2c98 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -203,6 +203,10 @@ void NeverhoodEngine::setGlobalVar(uint32 nameHash, uint32 value) {
// TODO
}
+void NeverhoodEngine::incGlobalVar(uint32 nameHash, int incrValue) {
+ setGlobalVar(nameHash, getGlobalVar(nameHash) - incrValue);
+}
+
uint32 NeverhoodEngine::getSubVar(uint32 nameHash, uint32 subNameHash) {
// TODO
return 0;
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 4a07d6a..952a99d 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -116,6 +116,7 @@ public:
GameState& gameState() { return _gameState; }
uint32 getGlobalVar(uint32 nameHash);
void setGlobalVar(uint32 nameHash, uint32 value);
+ void incGlobalVar(uint32 nameHash, int incrValue);
uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value);
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index c122ca2..5fc167c 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -153,6 +153,15 @@ AnimResource::~AnimResource() {
unloadInternal();
}
+void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX, bool flipY) {
+ const AnimFrameInfo frameInfo = _frames[frameIndex];
+ _currSpriteData = _spriteData + frameInfo.spriteDataOffs;
+ _width = frameInfo.rect.width;
+ _height = frameInfo.rect.height;
+ // TODO: Repl stuff
+ unpackSpriteRle(_currSpriteData, _width, _height, dest, destPitch, flipX, flipY);
+}
+
bool AnimResource::load(uint32 fileHash) {
debug("AnimResource::load(%08X)", fileHash);
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 4199fe7..969f46d 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -75,6 +75,7 @@ class AnimResource {
public:
AnimResource(NeverhoodEngine *vm);
~AnimResource();
+ void draw(uint frameIndex, byte *dest, int destPitch, bool flipX, bool flipY);
bool load(uint32 fileHash);
void unload();
void clear();
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 68f6110..77e8c02 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -125,7 +125,7 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
ddRect.y1 = 0;
}
- debug("draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
+ debug(8, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
const byte *source = (const byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 0f44110..1239a30 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -29,9 +29,10 @@ namespace Neverhood {
Sprite::Sprite(NeverhoodEngine *vm, int objectPriority)
: Entity(vm, objectPriority), _x(0), _y(0),
_spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
- _doDeltaX(false), _doDeltaY(false), _needRedraw(false),
+ _doDeltaX(false), _doDeltaY(false), _needRefresh(false),
_flags(0) {
+ _name = "Sprite";
SetMessageHandler(&Sprite::handleMessage);
}
@@ -88,12 +89,15 @@ void Sprite::createSurface(int surfacePriority, int16 width, int16 height) {
StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
: Sprite(vm, objectPriority), _spriteResource(vm) {
-
+
+ _name = "StaticSprite";
+
}
StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
+ _name = "StaticSprite";
// TODO init(calcHash(filename), surfacePriority, x, y, width, height);
}
@@ -101,6 +105,7 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfac
StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
+ _name = "StaticSprite";
init(fileHash, surfacePriority, x, y, width, height);
}
@@ -127,7 +132,7 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y,
_drawRect.width = width;
_drawRect.width = height;
- _needRedraw = true;
+ _needRefresh = true;
update();
@@ -150,9 +155,9 @@ void StaticSprite::update() {
_surface->getDrawRect().y = filterY(_y + _drawRect.y);
}
- if (_needRedraw) {
+ if (_needRefresh) {
_surface->drawSpriteResourceEx(_spriteResource, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
- _needRedraw = false;
+ _needRefresh = false;
}
}
@@ -173,7 +178,7 @@ void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
_y = _spriteResource.getPosition().y;
}
- _needRedraw = true;
+ _needRefresh = true;
}
@@ -198,6 +203,7 @@ AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surface
}
void AnimatedSprite::init() {
+ _name = "AnimatedSprite";
_counter = 0;
_fileHash1 = 0;
_deltaX = 0;
@@ -205,18 +211,18 @@ void AnimatedSprite::init() {
_fileHash2 = 0;
// TODO _callbackList = 0;
_frameIndex3 = 0;
- // TODO _callback3 = 0;
_frameIndex = 0;
_hashListIndex = -1;
- // TODO _callback2 = 0;
+ _callback1Cb = NULL;
+ _callback2Cb = NULL;
+ _callback3Cb = NULL;
_newHashListIndex = -1;
- // TODO _callback1 = 0;
_fileHash4 = 0;
_flag = false;
_replOldByte = 0;
_replNewByte = 0;
// TODO _animResource.replEnabled = 0;
- _playBackwards = 0;
+ _playBackwards = false;
}
void AnimatedSprite::update() {
@@ -265,7 +271,6 @@ void AnimatedSprite::updateAnim() {
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
- // loc_43831D
if (_replNewByte != _replOldByte) {
// TODO _animResource.setRepl(_replOldByte, _replNewByte);
}
@@ -349,10 +354,9 @@ void AnimatedSprite::updatePosition() {
_surface->getDrawRect().y = filterY(_y + _drawRect.y);
}
- if (_needRedraw) {
- debug("TODO: drawAnimResource");
- // TODO _surface->drawAnimResource(_animResource, _frameIndex, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
- _needRedraw = false;
+ if (_needRefresh) {
+ _surface->drawAnimResource(_animResource, _frameIndex, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
+ _needRefresh = false;
}
}
@@ -380,6 +384,7 @@ void AnimatedSprite::updateFrameIndex() {
}
void AnimatedSprite::updateFrameInfo() {
+ debug("AnimatedSprite::updateFrameInfo()");
const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_frameIndex);
@@ -392,7 +397,7 @@ void AnimatedSprite::updateFrameInfo() {
processDelta();
- _needRedraw = true;
+ _needRefresh = true;
if (frameInfo.frameHash != 0) {
sendMessage(0x100D, frameInfo.frameHash, this);
@@ -409,6 +414,7 @@ void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
}
void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4) {
+ debug("AnimatedSprite::setFileHash(%08X, %d, %d)", fileHash, frameIndex3, frameIndex4);
_fileHash1 = fileHash;
_frameIndex3 = frameIndex3;
_frameIndex4 = frameIndex4;
@@ -446,6 +452,29 @@ void AnimatedSprite::setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fil
_hashListIndex = -1;
}
+void AnimatedSprite::removeCallbacks() {
+
+ if (_callback1Cb) {
+ // _callback1Cb has to be cleared before it's called
+ AnimationCallback cb = _callback1Cb;
+ _callback1Cb = NULL;
+ debug("Fire _callback1Cb");
+ (this->*cb)();
+ }
+ if (_callback3Cb) {
+ _callback2Cb = _callback3Cb;
+ _callback3Cb = NULL;
+ debug("Fire _callback3Cb");
+ (this->*_callback2Cb)();
+#if 0 // TODO
+ } else if (_callbackList) {
+ removeCallbackList();
+#endif
+ } else {
+ _callback2Cb = NULL;
+ }
+
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 5d013a8..71067fa 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -52,7 +52,7 @@ protected:
BaseSurface *_surface;
int16 _x, _y;
bool _doDeltaX, _doDeltaY;
- bool _needRedraw;
+ bool _needRefresh;
//0000002B field_2B db ?
//0000002C field2C dd ? // unused
NDrawRect _drawRect;
@@ -88,11 +88,17 @@ protected:
void update();
};
+#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
+#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
+#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
+
class AnimatedSprite : public Sprite {
public:
AnimatedSprite(NeverhoodEngine *vm, int objectPriority);
AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y);
+ void update();
protected:
+ typedef void (AnimatedSprite::*AnimationCallback)();
AnimResource _animResource;
uint32 _fileHash1;
uint32 _fileHash2;
@@ -117,12 +123,11 @@ protected:
callbackListIndex dw ?
callbackListCount dw ?
callbackList dd ?
- callback3 dd ?
- callback2 dd ?
- callback1 dd ?
*/
+ AnimationCallback _callback1Cb;
+ AnimationCallback _callback2Cb;
+ AnimationCallback _callback3Cb;
void init();
- void update();
void updateDeltaXY();
void updateAnim();
void updatePosition();
@@ -134,6 +139,7 @@ protected:
void setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5);
void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
int16 getHashListIndex(uint32 fileHash) { return 0; } // TODO !!!
+ void removeCallbacks();
};
} // End of namespace Neverhood
Commit: e6236a39781360d2d41f5818b903d215015a1829
https://github.com/scummvm/scummvm/commit/e6236a39781360d2d41f5818b903d215015a1829
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Add transparency and x flipping to sprite drawing (flip y still TODO but rarely used)
- Add Class511 (the lever) to Module1000
Changed paths:
engines/neverhood/background.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
engines/neverhood/smackerplayer.cpp
diff --git a/engines/neverhood/background.cpp b/engines/neverhood/background.cpp
index abfa507..c47acd1 100644
--- a/engines/neverhood/background.cpp
+++ b/engines/neverhood/background.cpp
@@ -46,6 +46,7 @@ Background::~Background() {
void Background::createSurface(int surfacePriority, int16 width, int16 height) {
_surface = new BaseSurface(_vm, surfacePriority, width, height);
+ _surface->setTransparent(false);
_spriteResource.getPosition().x = width;
_spriteResource.getPosition().y = height;
}
@@ -80,6 +81,7 @@ void DirtyBackground::createSurface(int surfacePriority, int16 width, int16 heig
// TODO: Later use a DirtySurface once it is implemented
_surface = new BaseSurface(_vm, surfacePriority, width, height);
+ _surface->setTransparent(false);
_spriteResource.getPosition().x = width;
_spriteResource.getPosition().y = height;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index b6d883c..f6ae118 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -27,7 +27,7 @@
namespace Neverhood {
BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height)
- : _vm(vm), _priority(priority), _visible(true) {
+ : _vm(vm), _priority(priority), _visible(true), _transparent(true) {
_drawRect.x = 0;
_drawRect.y = 0;
@@ -54,7 +54,7 @@ void BaseSurface::draw() {
debug(8, "BaseSurface::draw()");
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
// TODO: _sysRect alternate drawing code (is that used?)
- _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect);
+ _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent);
}
}
@@ -152,7 +152,7 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
- // TODO: Flip
+ // TODO: Flip Y
int16 rows, chunks;
int16 skip, copy;
@@ -171,7 +171,14 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
skip = READ_LE_UINT16(source);
copy = READ_LE_UINT16(source + 2);
source += 4;
- memcpy(dest + skip, source, copy);
+ if (!flipX)
+ memcpy(dest + skip, source, copy);
+ else {
+ byte *flipDest = dest + width - skip - 1;
+ for (int xc = 0; xc < copy; xc++) {
+ *flipDest-- = source[xc];
+ }
+ }
source += copy;
}
dest += destPitch;
@@ -186,14 +193,24 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
- // TODO: Flip
+ // TODO: Flip Y
int sourcePitch = (width + 3) & 0xFFFC;
- while (height-- > 0) {
- memcpy(dest, source, width);
- source += sourcePitch;
- dest += destPitch;
+ if (!flipX) {
+ while (height-- > 0) {
+ memcpy(dest, source, width);
+ source += sourcePitch;
+ dest += destPitch;
+ }
+ } else {
+ while (height-- > 0) {
+ dest += width - 1;
+ for (int xc = 0; xc < width; xc++)
+ *dest-- = source[xc];
+ source += sourcePitch;
+ dest += destPitch;
+ }
}
}
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index bf8333c..59db1e5 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -73,6 +73,7 @@ public:
void setClipRect(NRect clipRect) { _clipRect = clipRect; }
bool getVisible() const { return _visible; }
void setVisible(bool value) { _visible = value; }
+ void setTransparent(bool value) { _transparent = value; }
protected:
NeverhoodEngine *_vm;
int _priority;
@@ -81,6 +82,7 @@ protected:
NDrawRect _drawRect;
NDrawRect _sysRect;
NRect _clipRect;
+ bool _transparent;
};
// Misc
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 162618e..c3aa0c9 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -240,7 +240,55 @@ void Class509::callback3() {
setFileHash1();
_surface->setVisible(false);
}
-
+
+Class511::Class511(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+
+ createSurface(1010, 71, 73);
+ setDoDeltaX(deltaXType);
+ setFileHash(0x04A98C36, 0, -1);
+ _newHashListIndex = 0;
+ _x = x;
+ _y = y;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class511::handleMessage);
+}
+
+uint32 Class511::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x00C0C444) {
+ _parentScene->sendMessage(0x480F, 0, this);
+ } else if (param._integer == 0xC41A02C0) {
+#if 0
+ _soundResource.set(0x40581882);
+ _soundResource.load();
+ _soundResource.play(false);
+#endif
+ }
+ break;
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x3002:
+ setFileHash(0x04A98C36, 0, -1);
+ _newHashListIndex = 0;
+ break;
+ case 0x480F:
+ setFileHash(0x04A98C36, 0, -1);
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 0x3DE, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 0x3F2, this);
+ break;
+ }
+ return messageResult;
+}
+
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _fieldE4(-1), _fieldE6(-1) {
@@ -307,9 +355,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_class509 = NULL;
}
-#if 0
_class511 = addSprite(new Class511(_vm, this, 150, 433, 1));
-#endif
addSprite(new StaticSprite(_vm, 0x809861A6, 950));
addSprite(new StaticSprite(_vm, 0x89C03848, 1100));
@@ -335,6 +381,8 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_class508 = addSprite(new Class508(_vm, _class509));
#endif
+ _class511->sendMessage(0x480F, 0, this);
+
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 4e7b292..219448a 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -68,6 +68,15 @@ protected:
void callback3();
};
+class Class511 : public AnimatedSprite {
+public:
+ Class511(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene1001 : public Scene {
public:
Scene1001(NeverhoodEngine *vm, Module *parentModule, int which);
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 77e8c02..db1c16a 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -94,7 +94,7 @@ void Screen::clear() {
memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
}
-void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect) {
+void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent) {
int16 destX, destY;
NRect ddRect;
@@ -131,12 +131,22 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
int width = ddRect.x2 - ddRect.x1;
int height = ddRect.y2 - ddRect.y1;
-
- while (height--) {
- memcpy(dest, source, width);
- source += surface->pitch;
- dest += _backScreen->pitch;
- }
+
+ if (!transparent) {
+ while (height--) {
+ memcpy(dest, source, width);
+ source += surface->pitch;
+ dest += _backScreen->pitch;
+ }
+ } else {
+ while (height--) {
+ for (int xc = 0; xc < width; xc++)
+ if (source[xc] != 0)
+ dest[xc] = source[xc];
+ source += surface->pitch;
+ dest += _backScreen->pitch;
+ }
+ }
#if 0
if ( ddRect.right > ddRect.left )
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index fc56a18..922ad48 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -42,7 +42,7 @@ public:
void testPalette(byte *paletteData);
void updatePalette();
void clear();
- void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect);
+ void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent);
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
protected:
NeverhoodEngine *_vm;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index c914b42..bbb0db1 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -35,7 +35,7 @@ SmackerSurface::SmackerSurface(NeverhoodEngine *vm)
void SmackerSurface::draw() {
if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
- _vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect);
+ _vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect, false);
}
}
Commit: 5a34d20ec857ab6142baea9d021cb9ff84196589
https://github.com/scummvm/scummvm/commit/5a34d20ec857ab6142baea9d021cb9ff84196589
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: More work on Scene1001, also give sprites classes and vars some better names
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index c3aa0c9..d5b7b03 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -132,30 +132,23 @@ void Module1000::updateScene1005() {
// Scene1001
-Class509::Class509(NeverhoodEngine *vm)
+AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm) {
- _name = "Class509";
-
createSurface(800, 137, 242);
-
_x = 726;
_y = 440;
-
callback1();
-
#if 0
_soundResource2.set(0xED403E03);
_soundResource2.load();
_soundResource2.createSoundBuffer();
#endif
-
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class509::handleMessage);
-
+ SetMessageHandler(&AsScene1001Door::handleMessage);
}
-uint32 Class509::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
@@ -168,18 +161,9 @@ uint32 Class509::handleMessage(int messageNum, const MessageParam ¶m, Entity
return 0;
}
-void Class509::handleMessage2000h() {
-
+void AsScene1001Door::handleMessage2000h() {
switch (_vm->getGlobalVar(0x52371C95)) {
case 0:
-#if 0
- _soundResource1.set(0x65482F03);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- setFileHash(0x624C0498, 1, 3);
- SetAnimationCallback3(&Class509::callback1);
- break;
case 1:
#if 0
_soundResource1.set(0x65482F03);
@@ -187,25 +171,23 @@ void Class509::handleMessage2000h() {
_soundResource1.play(false);
#endif
setFileHash(0x624C0498, 1, 3);
- SetAnimationCallback3(&Class509::callback1);
+ SetAnimationCallback3(&AsScene1001Door::callback1);
break;
case 2:
#if 0
_soundResource2.play(false);
#endif
setFileHash(0x624C0498, 6, 6);
- SetAnimationCallback3(&Class509::callback2);
+ SetAnimationCallback3(&AsScene1001Door::callback2);
break;
default:
// Nothing
break;
}
-
_vm->incGlobalVar(0x52371C95, 1);
-
}
-void Class509::callback1() {
+void AsScene1001Door::callback1() {
switch (_vm->getGlobalVar(0x52371C95)) {
case 1:
setFileHash(0x624C0498, 4, -1);
@@ -226,14 +208,14 @@ void Class509::callback1() {
}
}
-void Class509::callback2() {
+void AsScene1001Door::callback2() {
_vm->setGlobalVar(0xD217189D, 1);
setFileHash(0x624C0498, 6, 6);
- SetAnimationCallback3(&Class509::callback3);
+ SetAnimationCallback3(&AsScene1001Door::callback3);
_x = 30;
}
-void Class509::callback3() {
+void AsScene1001Door::callback3() {
#if 0
_soundResource1.play(false);
#endif
@@ -241,7 +223,84 @@ void Class509::callback3() {
_surface->setVisible(false);
}
-Class511::Class511(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType)
+AsScene1001Hammer::AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _asDoor(asDoor) {
+
+ _x = 547;
+ _y = 206;
+ createSurface(900, 177, 192);
+ setFileHash(0x022C90D4, -1, -1);
+ _newHashListIndex = -2;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1001Hammer::handleMessage);
+}
+
+uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x00352100) {
+ if (_asDoor) {
+ _asDoor->sendMessage(0x2000, 0, this);
+ }
+ } else if (param._integer == 0x0A1A0109) {
+#if 0
+ _soundResource.set(0x66410886);
+ _soundResource.load();
+ _soundResource.play(false);
+#endif
+ }
+ break;
+ case 0x2000:
+ setFileHash(0x022C90D4, 1, -1);
+#if 0
+ _soundResource.set(0xE741020A);
+ _soundResource.load();
+ _soundResource.play(false);
+#endif
+ _newHashListIndex = -2;
+ break;
+ }
+ return 0;
+}
+
+AsScene1001Window::AsScene1001Window(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _soundResource(vm) {
+
+ _x = 320;
+ _y = 240;
+ createSurface(100, 66, 129);
+ setFileHash(0xC68C2299, 0, -1);
+ _newHashListIndex = 0;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1001Window::handleMessage);
+}
+
+uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x0E0A1410) {
+#if 0
+ _soundResource.set(0x60803F10);
+ _soundResource.load();
+ _soundResource.play(false);
+#endif
+ }
+ break;
+ case 0x2001:
+ setFileHash(0xC68C2299, 0, -1);
+ break;
+ case 0x3002:
+ SetMessageHandler(NULL);
+ _vm->setGlobalVar(0x03C698DA, 1);
+ _surface->setVisible(false);
+ break;
+ }
+ return 0;
+}
+
+AsScene1001Lever::AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType)
: AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
createSurface(1010, 71, 73);
@@ -251,10 +310,10 @@ Class511::Class511(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, in
_x = x;
_y = y;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class511::handleMessage);
+ SetMessageHandler(&AsScene1001Lever::handleMessage);
}
-uint32 Class511::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -288,7 +347,40 @@ uint32 Class511::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
return messageResult;
}
-
+
+SsCommonButtonSprite::SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, int surfacePriority, uint32 soundFileHash)
+ : StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene), _soundResource(vm), _countdown(0) {
+
+ _priority = 1100;
+ _soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
+ _surface->setVisible(false);
+ SetUpdateHandler(&SsCommonButtonSprite::update);
+ SetMessageHandler(&SsCommonButtonSprite::handleMessage);
+}
+
+void SsCommonButtonSprite::update() {
+ if (_countdown != 0 && (--_countdown) == 0) {
+ _surface->setVisible(false);
+ }
+}
+
+uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x480B:
+ _parentScene->sendMessage(0x480B, 0, this);
+ _surface->setVisible(true);
+ _countdown = 8;
+#if 0
+ _soundResource.set(_soundFileHash);
+ _soundResource.load();
+ _soundResource.play(false);
+#endif
+ break;
+ }
+ return messageResult;
+}
+
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _fieldE4(-1), _fieldE6(-1) {
@@ -346,47 +438,90 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
#endif
if (_vm->getGlobalVar(0xD217189D) == 0) {
- _class509 = addSprite(new Class509(_vm));
- _class509->getSurface()->getClipRect().x1 = 0;
- _class509->getSurface()->getClipRect().y1 = 0;
- _class509->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
- _class509->getSurface()->getClipRect().y2 = 480;
+ _asDoor = addSprite(new AsScene1001Door(_vm));
+ _asDoor->getSurface()->getClipRect().x1 = 0;
+ _asDoor->getSurface()->getClipRect().y1 = 0;
+ _asDoor->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _asDoor->getSurface()->getClipRect().y2 = 480;
} else {
- _class509 = NULL;
+ _asDoor = NULL;
}
- _class511 = addSprite(new Class511(_vm, this, 150, 433, 1));
+ _asLever = addSprite(new AsScene1001Lever(_vm, this, 150, 433, 1));
addSprite(new StaticSprite(_vm, 0x809861A6, 950));
addSprite(new StaticSprite(_vm, 0x89C03848, 1100));
-#if 0
- _class608 = addSprite(new Class608(_vm, 0x15288120, 100, 0));
-#endif
+ _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x15288120, 100, 0));
if (_vm->getGlobalVar(0x03C698DA) == 0) {
staticSprite1 = addSprite(new StaticSprite(_vm, 0x8C066150, 200));
-#if 0
- _class510 = addSprite(new Class510(_vm));
- _class510->getSurface()->getClipRect().x1 = staticSprite1->getSurface()->getDrawRect().x;
- _class510->getSurface()->getClipRect().y1 = staticSprite1->getSurface()->getDrawRect().y;
- _class510->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
- _class510->getSurface()->getClipRect().y2 = staticSprite1->getSurface()->getDrawRect().y + staticSprite1->getSurface()->getDrawRect().height;
-#endif
+ _asWindow = addSprite(new AsScene1001Window(_vm));
+ _asWindow->getSurface()->getClipRect().x1 = staticSprite1->getSurface()->getDrawRect().x;
+ _asWindow->getSurface()->getClipRect().y1 = staticSprite1->getSurface()->getDrawRect().y;
+ _asWindow->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _asWindow->getSurface()->getClipRect().y2 = staticSprite1->getSurface()->getDrawRect().y + staticSprite1->getSurface()->getDrawRect().height;
} else {
- _class510= NULL;
+ _asWindow = NULL;
}
-#if 0
- _class508 = addSprite(new Class508(_vm, _class509));
-#endif
-
- _class511->sendMessage(0x480F, 0, this);
+ _asHammer = addSprite(new AsScene1001Hammer(_vm, _asDoor));
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- return 0;
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param._point.x == 0 && _vm->getGlobalVar(0xA4014072)) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x000D:
+ if (param._integer == 0x188B2105) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ messageResult = 1;
+ }
+ break;
+ case 0x100D:
+ if (param._integer == 0x00342624) {
+ // TODO _playerSprite->sendMessage(0x1014, _asLever, this);
+ // TODO setMessageList2(0x004B4910, true, false);
+ messageResult = 1;
+ } else if (param._integer == 0x21E64A00) {
+ if (_vm->getGlobalVar(0xD217189D)) {
+ // TODO setMessageList(0x004B48A8, true, false);
+ messageResult = 1;
+ } else {
+ // TODO setMessageList(0x004B48C8, true, false);
+ messageResult = 1;
+ }
+ } else if (param._integer == 0x040424D0) {
+ // TODO _playerSprite->sendMessage(0x1014, _ssButton, this);
+ } else if (param._integer == 0x80006358) {
+ if (_vm->getGlobalVar(0x03C698DA)) {
+ // TODO setMessageList(0x004B4938, true, false);
+ } else {
+ // TODO setMessageList(0x004B4960, true, false);
+ }
+ }
+ break;
+ case 0x2002:
+ // TODO setRectList(0x004B49F0);
+ break;
+ case 0x480B:
+ if (_asWindow) {
+ _asWindow->sendMessage(0x2001, 0, this);
+ }
+ break;
+ case 0x480F:
+ if (_asHammer) {
+ _asHammer->sendMessage(0x2000, 0, this);
+ }
+ break;
+ }
+ return messageResult;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 219448a..82c2fea 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -55,9 +55,9 @@ protected:
// Scene1001
-class Class509 : public AnimatedSprite {
+class AsScene1001Door : public AnimatedSprite {
public:
- Class509(NeverhoodEngine *vm);
+ AsScene1001Door(NeverhoodEngine *vm);
protected:
SoundResource _soundResource1;
SoundResource _soundResource2;
@@ -68,24 +68,53 @@ protected:
void callback3();
};
-class Class511 : public AnimatedSprite {
+class AsScene1001Hammer : public AnimatedSprite {
public:
- Class511(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType);
+ AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor);
+protected:
+ Sprite *_asDoor;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene1001Window : public AnimatedSprite {
+public:
+ AsScene1001Window(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene1001Lever : public AnimatedSprite {
+public:
+ AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType);
protected:
Scene *_parentScene;
SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class SsCommonButtonSprite : public StaticSprite {
+public:
+ SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, int surfacePriority, uint32 soundFileHash);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 _soundFileHash;
+ int16 _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene1001 : public Scene {
public:
Scene1001(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_class508;
- Sprite *_class509;
- Sprite *_class510;
- Sprite *_class511;
- Sprite *_class608;
+ Sprite *_asHammer;
+ Sprite *_asDoor;
+ Sprite *_asWindow;
+ Sprite *_asLever;
+ Sprite *_ssButton;
int16 _fieldE4;
int16 _fieldE6;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 1ba2c98..4c80c40 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -133,7 +133,7 @@ Common::Error NeverhoodEngine::run() {
_gameModule = new GameModule(this);
// Preliminary main loop, needs some more work but works for testing
- while (1) {
+ while (!shouldQuit()) {
Common::Event event;
Common::EventManager *eventMan = _system->getEventManager();
@@ -141,6 +141,9 @@ Common::Error NeverhoodEngine::run() {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_keyState = event.kbd.keycode;
+
+ // DEBUG gameModule->sendMessage(0x480F, 0, NULL);
+
break;
case Common::EVENT_KEYUP:
_keyState = Common::KEYCODE_INVALID;
Commit: 88d2759f85443541ecdd2f50bef3492a99209309
https://github.com/scummvm/scummvm/commit/88d2759f85443541ecdd2f50bef3492a99209309
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Start with the Klayman class (this is quite some horrible code, also, it doesn't work yet and isn't used yet)
Changed paths:
A engines/neverhood/klayman.cpp
A engines/neverhood/klayman.h
engines/neverhood/entity.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 18b9cba..317672c 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -28,14 +28,18 @@
namespace Neverhood {
+class Entity;
+
struct MessageParam {
union {
uint32 _integer;
NPoint _point;
+ Entity *_entity;
// TODO: Other types...
};
MessageParam(uint32 value) { _integer = value; }
MessageParam(NPoint value) { _point = value; }
+ MessageParam(Entity *entity) { _entity = entity; }
// TODO: Constructors for the param types...
};
@@ -61,13 +65,17 @@ public:
uint32 sendMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
}
- // Overloaded for various message parameter types
+ // NOTE: These were overloaded before for the various message parameter types
+ // it caused some problems so each type gets its own sendMessage variant now
uint32 sendMessage(int messageNum, uint32 param, Entity *sender) {
return sendMessage(messageNum, MessageParam(param), sender);
}
- uint32 sendMessage(int messageNum, NPoint param, Entity *sender) {
+ uint32 sendPointMessage(int messageNum, NPoint param, Entity *sender) {
return sendMessage(messageNum, MessageParam(param), sender);
}
+ uint32 sendEntityMessage(int messageNum, Entity *param, Entity *sender) {
+ return sendMessage(messageNum, MessageParam((Entity*)param), sender);
+ }
int getPriority() const { return _priority; }
protected:
void (Entity::*_updateHandlerCb)();
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
new file mode 100644
index 0000000..49c6093
--- /dev/null
+++ b/engines/neverhood/klayman.cpp
@@ -0,0 +1,457 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/klayman.h"
+#include "neverhood/resourceman.h"
+
+namespace Neverhood {
+
+static const KlaymanTableItem klaymanTable1[] = {
+ {1, &Klayman::sub41FD30},
+ {1, &Klayman::sub41FDA0},
+ {1, &Klayman::sub41FDF0},
+ {1, &Klayman::sub41FE60},
+ {1, &Klayman::sub41FEB0}
+};
+
+static const KlaymanTableItem klaymanTable2[] = {
+ {1, &Klayman::sub41FD30},
+ {1, &Klayman::sub41FDA0},
+ {1, &Klayman::sub41FE60},
+ {1, &Klayman::sub41FEB0}
+};
+
+#if 0
+static const KlaymanTableItem klaymanTable3[] = {
+ {1, &Klayman::sub421430},
+ {1, &Klayman::sub421480}
+};
+#endif
+
+Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority)
+ : AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
+ _counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
+ _counter2(0), /*_field118(0), */_status2(0), _flagE5(true), _attachedSprite(NULL), _flagE1(false),
+ _status(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
+ _flagFA(false), _statusE0(0) /*, _field114(0)*/, _resourceHandle(-1), _soundFlag(false) {
+
+ // TODO
+ createSurface(surfacePriority, 320, 200);
+ _x = x;
+ _y = y;
+ _x4 = x;
+ _y4 = y;
+ _flags = 2;
+ setKlaymanTable1();
+ sub41FC80();
+ SetUpdateHandler(&Klayman::update);
+}
+
+void Klayman::xUpdate() {
+}
+
+uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ return 0;
+}
+
+void Klayman::update() {
+}
+
+void Klayman::setKlaymanTable(const KlaymanTableItem *table, int tableCount) {
+ _table = table;
+ _tableCount = tableCount;
+ _tableMaxValue = 0;
+ for (int i = 0; i < tableCount; i++) {
+ _tableMaxValue += table[i].value;
+ }
+}
+
+void Klayman::setKlaymanTable1() {
+ setKlaymanTable(klaymanTable1, ARRAYSIZE(klaymanTable1));
+}
+
+void Klayman::setKlaymanTable2() {
+ setKlaymanTable(klaymanTable2, ARRAYSIZE(klaymanTable2));
+}
+
+void Klayman::setKlaymanTable3() {
+ // TODO setKlaymanTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
+}
+
+void Klayman::sub41FD30() {
+ sub41D320(0x5B20C814, AnimationCallback(&Klayman::sub41FD40));
+}
+
+void Klayman::sub41FD40() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x5B20C814, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB10);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub41FCF0);
+ // TODO AnimatedSprite_setCallback1(AnimationCallback(&Klayman::sub41FD90));
+}
+
+uint32 Klayman::handleMessage41EB10(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x04DBC02C) {
+#if 0
+ _soundResource1.set(0x44528AA1);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FD90() {
+ // TODO _soundResource1.stop(0);
+}
+
+void Klayman::sub41FDA0() {
+ sub41D320(0xD122C137, AnimationCallback(&Klayman::sub41FDB0));
+}
+
+void Klayman::sub41FDB0() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0xD122C137, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E980);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub41FCF0);
+}
+
+uint32 Klayman::handleMessage41E980(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x808A0008) {
+#if 0
+ _soundResource1.set(0xD948A340);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FDF0() {
+ sub41D320(0x543CD054, AnimationCallback(&Klayman::sub41FE00));
+}
+
+void Klayman::sub41FE00() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x543CD054, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E9E0);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub41FCF0);
+ // TODO AnimatedSprite_setCallback1(AnimationCallback(&Klayman::sub41FE50));
+}
+
+void Klayman::sub41FE50() {
+ // TODO _soundResource1.stop(0);
+}
+
+uint32 Klayman::handleMessage41E9E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x5A0F0104) {
+#if 0
+ _soundResource1.set(0x7970A100);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ } else if (param._integer == 0x9A9A0109) {
+#if 0
+ _soundResource1.set(0xD170CF04);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ } else if (param._integer == 0x989A2169) {
+#if 0
+ _soundResource1.set(0xD073CF14);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FE60() {
+ sub41D320(0x40A0C034, AnimationCallback(&Klayman::sub41FE70));
+}
+
+void Klayman::sub41FE70() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x40A0C034, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EF80);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub41FCF0);
+}
+
+uint32 Klayman::handleMessage41EF80(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x0D2A0288) {
+#if 0
+ _soundResource1.set(0xD192A368);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FEB0() {
+ sub41D320(0x5120E137, AnimationCallback(&Klayman::sub41FEC0));
+}
+
+void Klayman::sub41FEC0() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x5120E137, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EFE0);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub41FCF0);
+}
+
+uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0xC006000C) {
+#if 0
+ _soundResource1.set(0x9D406340);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ } else if (param._integer == 0x2E4A2940) {
+#if 0
+ _soundResource1.set(0x53A4A1D4);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ } else if (param._integer == 0xAA0A0860) {
+#if 0
+ _soundResource1.set(0x5BE0A3C6);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ } else if (param._integer == 0xC0180260) {
+#if 0
+ _soundResource1.set(0x5D418366);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ }
+ break;
+ }
+ return messageResult;
+}
+
+/////////////////////////////////////////////////////////////////
+
+void Klayman::sub41D320(uint32 fileHash, AnimationCb callback) {
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ if (_resourceHandle != -1) {
+ // TODO _vm->_res->moveToFront(_resourceHandle);
+ SetAnimationCallback3(callback);
+ SetUpdateHandler(&Klayman::update41D2B0);
+ }
+}
+
+void Klayman::update41D2B0() {
+ // TODO Check if this odd stuff is needed or just some cache optimization
+ if (_vm->_res->isResourceDataValid(_resourceHandle)) {
+ sub41C7B0();
+ // TODO _vm->_res->moveToBack(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ } else {
+ // TODO _vm->_res->moveToFront(_resourceHandle);
+ }
+ update();
+}
+
+bool Klayman::sub41CF10(AnimationCb callback) {
+ if (_status2 != 2)
+ return false;
+ _status2 = 1;
+ setFileHash(0x9A7020B8, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41F140);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(callback);
+ _flagE5 = false;
+ return true;
+}
+
+void Klayman::sub41C7B0() {
+ if (_callback1Cb) {
+ (this->*_callback1Cb)();
+ _callback1Cb = NULL;
+ }
+ if (_callback3Cb) {
+ AnimationCb cb = _callback3Cb;
+ _callback3Cb = NULL;
+ (this->*cb)();
+#if 0 // TODO
+ } else if (_callbackList) {
+ removeCallbackList();
+#endif
+ } else {
+ _parentScene->sendMessage(0x1006, 0, this);
+ }
+}
+
+void Klayman::sub41C770() {
+ _flagFA = false;
+ _status = 1;
+}
+
+void Klayman::sub41C790() {
+ if (_flagFA)
+ _status = 0;
+}
+
+void Klayman::sub41FC80() {
+ if (!sub41CF10(AnimationCallback(&Klayman::sub41FC80))) {
+ setFileHash(0x5420E254, 0, -1);
+ _counter = 0;
+ _counter3 = 0;
+ _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ SetUpdateHandler(&Klayman::update41D0F0);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(NULL);
+ }
+}
+
+void Klayman::update41D0F0() {
+ update();
+ _counter++;
+ if (_counter >= 720) {
+ _counter = 0;
+ if (_table) {
+ int randomValue = _vm->_rnd->getRandomNumber(_tableMaxValue);
+ for (int i = 0; i < _tableCount; i++) {
+ if (randomValue < _table[_tableCount].value) {
+ (this->*(_table[_tableCount].callback))();
+ break;
+ }
+ randomValue -= _table[_tableCount].value;
+ }
+ }
+ } else {
+ _counter3++;
+ if (_counter3 >= _counter3Max) {
+ _counter3 = 0;
+ _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ sub41FF00();
+ }
+ }
+}
+
+uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Sprite::handleMessage(messageNum, param, sender);
+ uint32 messageResult = xHandleMessage(messageNum, param);
+ switch (messageNum) {
+ case 0x1008:
+ messageResult = _flagE5;
+ break;
+ case 0x1014:
+ _attachedSprite = param._entity;
+ break;
+ case 0x1019:
+ sub41C7B0();
+ break;
+ case 0x101C:
+ sub41C770();
+ break;
+ case 0x1021:
+ sub41C790();
+ break;
+ case 0x481C:
+ _status = param._integer;
+ _flagFA = true;
+ messageResult = 1;
+ break;
+ case 0x482C:
+ if (param._integer != 0) {
+ // TODO _rectResource.getRectangle2(param._integer, &_field118, &_field114,);
+ } else {
+ // TODO _field114 = 0;
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FF00() {
+ setFileHash(0x5900C41E, 0, -1);
+ _status2 = 1;
+ _flagE5 = true;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub41FCF0);
+}
+
+uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ sub41C7B0();
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FCF0() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update41D0F0);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(NULL);
+}
+
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
new file mode 100644
index 0000000..d953f55
--- /dev/null
+++ b/engines/neverhood/klayman.h
@@ -0,0 +1,132 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_KLAYMAN_H
+#define NEVERHOOD_KLAYMAN_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/sprite.h"
+#include "neverhood/graphics.h"
+#include "neverhood/resource.h"
+
+namespace Neverhood {
+
+// TODO: This code is horrible and weird and a lot of stuff needs renaming once a better name is found
+
+class Klayman;
+
+struct KlaymanTableItem {
+ int value;
+ void (Klayman::*callback)();
+};
+
+class Klayman : public AnimatedSprite {
+public:
+ Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority);
+
+ void sub41FD30();
+ void sub41FDA0();
+ void sub41FDF0();
+ void sub41FE60();
+ void sub41FEB0();
+
+protected:
+ Entity *_parentScene;
+ Entity *_attachedSprite;
+ int _statusE0;
+ bool _flagE1;
+ bool _flagE2;
+ bool _flagE3;
+ bool _flagE4;
+ bool _flagE5;
+ int16 _x4, _y4;
+ int16 _counter, _counterMax;
+ int16 _counter3, _counter3Max;
+ int16 _counter1;
+ int16 _counter2;
+ bool _flagF6;
+ bool _flagF7;
+ bool _flagF8;
+ int _status2;
+ bool _flagFA;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ int _status;
+ const KlaymanTableItem *_table;
+ int _tableCount;
+ int _tableMaxValue;
+ /*
+ 00000114 field114 dd ?
+ 00000118 field118 dw ?
+ */
+ bool _soundFlag;
+ int _resourceHandle;
+ virtual void xUpdate();
+ virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void update();
+
+ void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
+ void setKlaymanTable1();
+ void setKlaymanTable2();
+ void setKlaymanTable3();
+
+ void sub41FD40();
+ void sub41FD90();
+ uint32 handleMessage41EB10(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41FDB0();
+ uint32 handleMessage41E980(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41FE00();
+ void sub41FE50();
+ uint32 handleMessage41E9E0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41FE70();
+ uint32 handleMessage41EF80(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41FEC0();
+ uint32 handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41D320(uint32 fileHash, AnimationCb callback);
+ void update41D2B0();
+
+ bool sub41CF10(AnimationCb callback);
+ void sub41C7B0();
+ void sub41C770();
+ void sub41C790();
+
+ void sub41FC80();
+ void update41D0F0();
+ uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41FF00();
+ uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41FCF0();
+
+ uint32 handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender);
+
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index f139268..2058db9 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -8,6 +8,7 @@ MODULE_OBJS = \
entity.o \
gamemodule.o \
graphics.o \
+ klayman.o \
module.o \
module1000.o \
module1500.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index d5b7b03..7ee1090 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -469,6 +469,10 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
+Scene1001::~Scene1001() {
+ // TODO _vm->setGlobalVar(0xC0418A02, _playerSprite->_doDeltaX);
+}
+
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 82c2fea..21be948 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -109,6 +109,7 @@ protected:
class Scene1001 : public Scene {
public:
Scene1001(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene1001();
protected:
Sprite *_asHammer;
Sprite *_asDoor;
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 1239a30..ce21527 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -456,7 +456,7 @@ void AnimatedSprite::removeCallbacks() {
if (_callback1Cb) {
// _callback1Cb has to be cleared before it's called
- AnimationCallback cb = _callback1Cb;
+ AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
debug("Fire _callback1Cb");
(this->*cb)();
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 71067fa..b3809a8 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -30,7 +30,7 @@
namespace Neverhood {
-#define SetSpriteCallback(callback) _spriteCallbackCb = static_cast <void (Sprite::*)(void)> (callback)
+#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback)
#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback)
#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback)
@@ -91,6 +91,7 @@ protected:
#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
+#define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback)
class AnimatedSprite : public Sprite {
public:
@@ -98,7 +99,7 @@ public:
AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y);
void update();
protected:
- typedef void (AnimatedSprite::*AnimationCallback)();
+ typedef void (AnimatedSprite::*AnimationCb)();
AnimResource _animResource;
uint32 _fileHash1;
uint32 _fileHash2;
@@ -124,9 +125,9 @@ protected:
callbackListCount dw ?
callbackList dd ?
*/
- AnimationCallback _callback1Cb;
- AnimationCallback _callback2Cb;
- AnimationCallback _callback3Cb;
+ AnimationCb _callback1Cb;
+ AnimationCb _callback2Cb;
+ AnimationCb _callback3Cb;
void init();
void updateDeltaXY();
void updateAnim();
Commit: 3131cc6f1899b3eaa5f234d95801a8bff77144e0
https://github.com/scummvm/scummvm/commit/3131cc6f1899b3eaa5f234d95801a8bff77144e0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:58-07:00
Commit Message:
NEVERHOOD: Implement Klayman::update
Changed paths:
engines/neverhood/klayman.cpp
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 49c6093..836b2e0 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -74,6 +74,8 @@ uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void Klayman::update() {
+ AnimatedSprite::update();
+ xUpdate();
}
void Klayman::setKlaymanTable(const KlaymanTableItem *table, int tableCount) {
Commit: c694ce8505529478c60d23603bd9dc217dd7afb0
https://github.com/scummvm/scummvm/commit/c694ce8505529478c60d23603bd9dc217dd7afb0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:30:59-07:00
Commit Message:
NEVERHOOD: More work on Klayman
- Rename Scene::_playerSprite to _klayman
- Send mouse clicks to the scene object (has not effect yet)
Changed paths:
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 317672c..64c1181 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -70,7 +70,7 @@ public:
uint32 sendMessage(int messageNum, uint32 param, Entity *sender) {
return sendMessage(messageNum, MessageParam(param), sender);
}
- uint32 sendPointMessage(int messageNum, NPoint param, Entity *sender) {
+ uint32 sendPointMessage(int messageNum, const NPoint ¶m, Entity *sender) {
return sendMessage(messageNum, MessageParam(param), sender);
}
uint32 sendEntityMessage(int messageNum, Entity *param, Entity *sender) {
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 93687f9..c63131d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -22,6 +22,7 @@
#include "neverhood/gamemodule.h"
+#include "neverhood/graphics.h"
#include "neverhood/module1000.h"
#include "neverhood/module1500.h"
@@ -57,6 +58,16 @@ GameModule::~GameModule() {
}
+void GameModule::handleMouseDown(int16 x, int16 y) {
+ if (_childObject) {
+ NPoint mousePos;
+ mousePos.x = x;
+ mousePos.y = y;
+ debug("GameModule::handleMouseDown(%d, %d)", x, y);
+ _childObject->sendPointMessage(1, mousePos, this);
+ }
+}
+
uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 6d65895..7fce9eb 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -34,6 +34,7 @@ class GameModule : public Module {
public:
GameModule(NeverhoodEngine *vm);
virtual ~GameModule();
+ void handleMouseDown(int16 x, int16 y);
protected:
Entity *_prevChildObject;
bool _someFlag1;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 836b2e0..7a775bc 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -67,9 +67,22 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
}
void Klayman::xUpdate() {
+ // Empty
}
uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param._point.x, false);
+ break;
+ case 0x4004:
+ // TODO AnimatedSprite_setCallback2(AnimationCallback(&sub41FC80));
+ break;
+ case 0x4818:
+ // TODO sub41C930(_rectResource.getRectangle1(param._integer).x, false);
+ break;
+ }
return 0;
}
@@ -455,5 +468,57 @@ void Klayman::sub41FCF0() {
SetSpriteCallback(NULL);
}
+uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param._integer == 0x271AA210) {
+#if 0
+ _soundResource1.set(0x4924AAC4);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ } else if (param._integer == 0x2B22AA81) {
+#if 0
+ _soundResource1.set(0x0A2AA8E0);
+ _soundResource1.load();
+ _soundResource1.play(false);
+#endif
+ }
+ break;
+ }
+ return messageResult;
+}
+
+
+void Klayman::sub41C930(int16 x, bool flag) {
+ int16 xdiff = ABS(x - _x);
+ if (xdiff == 0) {
+ _x4 = x;
+ if (_flagE1 || _flagE2 || _flagE3) {
+ // TODO AnimatedSprite_setCallback2(NULL);
+ sub41C7B0();
+ }
+ } else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
+ _x4 = x;
+ // TODO AnimatedSprite_setCallback2(NULL);
+ sub41C7B0();
+ } else if (xdiff <= 42 && _status != 3) {
+ if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
+ _x4 = x;
+ } else {
+ _x4 = x;
+ // TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub41FB40));
+ }
+ } else if (_flagE1 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _x4 = x;
+ } else if (flag) {
+ _x4 = x;
+ // TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
+ } else {
+ _x4 = x;
+ // TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub41F950));
+ }
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index d953f55..69f9a34 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -124,6 +124,8 @@ protected:
void sub41FCF0();
uint32 handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41C930(int16 x, bool flag);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 7ee1090..8580620 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -400,41 +400,45 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Mouse
+ //DEBUG so he's here at least
+ _klayman = new Klayman(_vm, this, 200, 433, 1000, 1000);
+ addSprite(_klayman);
+
#if 0
// TODO: Player sprites...
if (which < 0) {
setRectList(0x004B49F0);
- _playerSprite = new Class572(_vm, this, 200, 433, 1000, 1000);
+ _klayman = new Class572(_vm, this, 200, 433, 1000, 1000);
setMessageList(0x004B4888);
} else if (which == 1) {
setRectList(0x004B49F0);
- _playerSprite = new Class572(_vm, this, 640, 433, 1000, 1000);
+ _klayman = new Class572(_vm, this, 640, 433, 1000, 1000);
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
if (_vm->getGlobalVar(0xC0418A02)) {
- _playerSprite = new Class572(_vm, this, 390, 433, 1000, 1000);
- _playerSprite->setDoDeltaX(1);
+ _klayman = new Class572(_vm, this, 390, 433, 1000, 1000);
+ _klayman->setDoDeltaX(1);
} else {
- _playerSprite = new Class572(_vm, this, 300, 433, 1000, 1000);
+ _klayman = new Class572(_vm, this, 300, 433, 1000, 1000);
}
setMessageList(0x004B4970);
} else {
setRectList(0x004B4A00);
- _playerSprite = new Class572(_vm, this, 200, 433, 1000, 1000);
+ _klayman = new Class572(_vm, this, 200, 433, 1000, 1000);
setMessageList(0x004B4890);
}
- addSprite(_playerSprite);
+ addSprite(_klayman);
#endif
staticSprite1 = addSprite(new StaticSprite(_vm, 0x2080A3A8, 1300));
#if 0
// TODO: This sucks somehow, find a better way
- _playerSprite->getSurface()->getClipRect().x1 = 0;
- _playerSprite->getSurface()->getClipRect().y1 = 0;
- _playerSprite->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
- _playerSprite->getSurface()->getClipRect().y2 = 480;
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
#endif
if (_vm->getGlobalVar(0xD217189D) == 0) {
@@ -470,7 +474,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1001::~Scene1001() {
- // TODO _vm->setGlobalVar(0xC0418A02, _playerSprite->_doDeltaX);
+ // TODO _vm->setGlobalVar(0xC0418A02, _klayman->_doDeltaX);
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -490,7 +494,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x100D:
if (param._integer == 0x00342624) {
- // TODO _playerSprite->sendMessage(0x1014, _asLever, this);
+ // TODO _klayman->sendMessage(0x1014, _asLever, this);
// TODO setMessageList2(0x004B4910, true, false);
messageResult = 1;
} else if (param._integer == 0x21E64A00) {
@@ -502,7 +506,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageResult = 1;
}
} else if (param._integer == 0x040424D0) {
- // TODO _playerSprite->sendMessage(0x1014, _ssButton, this);
+ // TODO _klayman->sendMessage(0x1014, _ssButton, this);
} else if (param._integer == 0x80006358) {
if (_vm->getGlobalVar(0x03C698DA)) {
// TODO setMessageList(0x004B4938, true, false);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 4c80c40..73e7c5f 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -152,14 +152,18 @@ Common::Error NeverhoodEngine::run() {
_mouseX = event.mouse.x;
_mouseY = event.mouse.y;
break;
- /*
+
case Common::EVENT_LBUTTONDOWN:
+ case Common::EVENT_RBUTTONDOWN:
+ _gameModule->handleMouseDown(event.mouse.x, event.mouse.y);
+ break;
+
+ /*
_buttonState |= kLeftButton;
break;
case Common::EVENT_LBUTTONUP:
_buttonState &= ~kLeftButton;
break;
- case Common::EVENT_RBUTTONDOWN:
_buttonState |= kRightButton;
break;
case Common::EVENT_RBUTTONUP:
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index b06caee..9b7b35d 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -37,7 +37,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_mouseClicked = false;
// TODO _rectList = NULL;
// TODO _someRects = NULL;
- // TODO _playerSprite = NULL;
+ _klayman = NULL;
// TODO _mouseSprite = NULL;
_palette = NULL;
_background = NULL;
@@ -193,15 +193,15 @@ void Scene::update() {
if (_mouseClicked) {
//** ALL TODO
#if 0
- if (_playerSprite) {
+ if (_klayman) {
// TODO: Merge later
- if (_playerSprite->hasMessageHandler() &&
- _playerSprite->sendMessage(0x1008, 0, this) != 0 &&
+ if (_klayman->hasMessageHandler() &&
+ _klayman->sendMessage(0x1008, 0, this) != 0 &&
_messageListFlag &&
queryPositionClass400(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
- } else if (_playerSprite->hasMessageHandler() &&
- _playerSprite->sendMessage(0x1008, 0, this) != 0 &&
+ } else if (_klayman->hasMessageHandler() &&
+ _klayman->sendMessage(0x1008, 0, this) != 0 &&
_messageListFlag) {
_mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
}
@@ -223,12 +223,13 @@ void Scene::update() {
uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
// TODO
-#if 0
switch (messageNum) {
case 0: // mouse moved
+#if 0
if (_mouseSprite && _mouseSprite->hasMessageHandler())
_mouseSprite->sendMessage(0x4002, param, this);
queryPositionSomeRects(param._point.x, param._point.y);
+#endif
break;
case 1: // mouse clicked
_mouseClicked = true;
@@ -245,7 +246,9 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
break;
*/
case 5:
+#if 0
broadcastObjectMessage5();
+#endif
break;
case 6:
_parentModule->sendMessage(0x1009, param, this);
@@ -254,35 +257,39 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
if (_messageListFlag1) {
_messageListFlag1 = false;
if (_messageListIndex == _messageListCount)
- _playerSprite->sendMessage(0x4004, 0, this);
- else
- runMessageList();
+ _klayman->sendMessage(0x4004, 0, this);
+ else {
+ // TODO runMessageList();
+ }
}
break;
case 0x1007:
if (_messageListFlag1) {
_messageListFlag1 = false;
_messageList = NULL;
- _playerSprite->sendMessage(0x4004, 0, this);
+ _klayman->sendMessage(0x4004, 0, this);
}
break;
case 0x101D:
+#if 0
if (_mouseSprite) {
_prevVisible = _mouseSprite->_drawSurface->_visible;
_mouseSprite->_drawSurface->_visible = false;
}
+#endif
break;
case 0x101E:
+#if 0
if (_prevVisible && _mouseSprite) {
_mouseSprite->_drawSurface->_visible = true;
_mouseSprite->sendMessage(0x4002, g_Screen->_mousePos, this);
}
+#endif
break;
case 0x1022:
- setSurfacePriority(((Sprite*)sender)->_surface, param._integer);
+ setSurfacePriority(((Sprite*)sender)->getSurface(), param._integer);
break;
}
-#endif
return 0;
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 108adba..4928d20 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -28,6 +28,7 @@
#include "neverhood/background.h"
#include "neverhood/entity.h"
#include "neverhood/graphics.h"
+#include "neverhood/klayman.h"
#include "neverhood/module.h"
#include "neverhood/palette.h"
#include "neverhood/smackerplayer.h"
@@ -67,8 +68,8 @@ protected:
// TODO 00000088 someRects dd ?
// TODO 0000008C someRectsCount dw ?
// TODO 0000008E field_8E dw ?
- // TODO 00000090 playerSprite dd ?
// TODO 00000094 mouseSprite dd ?
+ Klayman *_klayman;
Palette *_palette;
Background *_background;
bool _surfaceFlag;
Commit: 78d632b0eda3c7be13a265cfb9fa5d16c7b418eb
https://github.com/scummvm/scummvm/commit/78d632b0eda3c7be13a265cfb9fa5d16c7b418eb
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:39-07:00
Commit Message:
NEVERHOOD: Commit of create_neverhood and neverhood.dat
Changed paths:
A devtools/create_neverhood/create_neverhood.cpp
A devtools/create_neverhood/create_neverhood.h
A devtools/create_neverhood/module.mk
A devtools/create_neverhood/tables.h
A devtools/create_neverhood/util.cpp
A devtools/create_neverhood/util.h
A dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
new file mode 100644
index 0000000..951a2f0
--- /dev/null
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -0,0 +1,257 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+
+// HACK to allow building with the SDL backend on MinGW
+// see bug #1800764 "TOOLS: MinGW tools building broken"
+#ifdef main
+#undef main
+#endif // main
+
+#include <vector>
+#include "create_neverhood.h"
+#include "tables.h"
+
+const int DAT_VERSION = 0;
+
+uint32 dataSize;
+byte *data;
+uint32 dataStart = 0x004AE000;
+uint32 fileStart = 0x000AC600;
+
+void loadExe(const char *filename) {
+ FILE *exe = fopen(filename, "rb");
+ dataSize = fileSize(exe);
+ data = new byte[dataSize];
+ fread(data, dataSize, 1, exe);
+ fclose(exe);
+}
+
+struct HitRect {
+ int16 x1, y1, x2, y2;
+ uint16 messageNum;
+};
+
+typedef std::vector<HitRect> HitRects;
+
+struct SubRectItem {
+ int16 x1, y1, x2, y2;
+ uint32 messageListCount;
+ uint32 messageListOffset;
+};
+
+typedef std::vector<SubRectItem> SubRectItems;
+
+struct RectItem {
+ int16 x1, y1, x2, y2;
+ uint32 subRectListCount;
+ uint32 subRectListOffset;
+ SubRectItems subRectItems;
+};
+
+typedef std::vector<RectItem> RectItems;
+
+struct MessageItem {
+ uint16 messageNum;
+ uint32 messageParam;
+};
+
+typedef std::vector<MessageItem> MessageItems;
+
+struct HitRectList {
+ uint32 id;
+ HitRects hitRects;
+};
+
+struct RectList {
+ uint32 id;
+ RectItems rectItems;
+};
+
+struct MessageList {
+ uint32 id;
+ MessageItems messageItems;
+};
+
+std::vector<HitRectList*> hitRectLists;
+std::vector<RectList*> rectLists;
+std::vector<MessageList*> messageLists;
+
+byte *getData(uint32 offset) {
+ return data + offset - dataStart + fileStart;
+}
+
+void addHitRect(uint32 offset) {
+ HitRectList *hitRectList = new HitRectList();
+ hitRectList->id = offset;
+ byte *item = getData(offset);
+ uint32 count = READ_LE_UINT32(item);
+ //printf("count = %d\n", count);
+ // Align to 16 bytes
+ item = data + ((offset + 4 + 16) & 0xFFFFFFF0) - dataStart + fileStart;
+ for (uint32 i = 0; i < count; i++) {
+ HitRect hitRect;
+ hitRect.x1 = READ_LE_UINT16(item + 0);
+ hitRect.y1 = READ_LE_UINT16(item + 2);
+ hitRect.x2 = READ_LE_UINT16(item + 4);
+ hitRect.y2 = READ_LE_UINT16(item + 6);
+ hitRect.messageNum = READ_LE_UINT16(item + 8);
+ item += 10;
+ //printf("(%d, %d, %d, %d) -> %04X\n", hitRect.x1, hitRect.y1, hitRect.x2, hitRect.y2, hitRect.messageNum);
+ hitRectList->hitRects.push_back(hitRect);
+ }
+ hitRectLists.push_back(hitRectList);
+}
+
+void addMessage(uint32 count, uint32 offset) {
+ MessageList *messageList = new MessageList();
+ messageList->id = offset;
+ byte *item = getData(offset);
+ for (uint32 i = 0; i < count; i++) {
+ MessageItem messageItem;
+ messageItem.messageNum = READ_LE_UINT16(item + 0);
+ messageItem.messageParam = READ_LE_UINT32(item + 4);
+ //printf("%04X, %08X\n", messageItem.messageNum, messageItem.messageParam);
+ item += 8;
+ messageList->messageItems.push_back(messageItem);
+ }
+ messageLists.push_back(messageList);
+}
+
+void addRect(uint32 count, uint32 offset) {
+ RectList *rectList = new RectList();
+ rectList->id = offset;
+ byte *item = getData(offset);
+ for (uint32 i = 0; i < count; i++) {
+ RectItem rectItem;
+ byte *subItem;
+ rectItem.x1 = READ_LE_UINT16(item + 0);
+ rectItem.y1 = READ_LE_UINT16(item + 2);
+ rectItem.x2 = READ_LE_UINT16(item + 4);
+ rectItem.y2 = READ_LE_UINT16(item + 6);
+ rectItem.subRectListCount = READ_LE_UINT32(item + 8);
+ rectItem.subRectListOffset = READ_LE_UINT32(item + 12);
+ //printf("(%d, %d, %d, %d), %d, %08X\n", rectItem.x1, rectItem.y1, rectItem.x2, rectItem.y2, rectItem.subRectListCount, rectItem.subRectListOffset);
+ subItem = getData(rectItem.subRectListOffset);
+ for (uint32 j = 0; j < rectItem.subRectListCount; j++) {
+ SubRectItem subRectItem;
+ subRectItem.x1 = READ_LE_UINT16(subItem + 0);
+ subRectItem.y1 = READ_LE_UINT16(subItem + 2);
+ subRectItem.x2 = READ_LE_UINT16(subItem + 4);
+ subRectItem.y2 = READ_LE_UINT16(subItem + 6);
+ subRectItem.messageListCount = READ_LE_UINT32(subItem + 8);
+ subRectItem.messageListOffset = READ_LE_UINT32(subItem + 12);
+ subItem += 16;
+ //printf("(%d, %d, %d, %d), %d, %08X\n", subRectItem.x1, subRectItem.y1, subRectItem.x2, subRectItem.y2, subRectItem.messageListCount, subRectItem.messageListOffset);
+ addMessage(subRectItem.messageListCount, subRectItem.messageListOffset);
+ rectItem.subRectItems.push_back(subRectItem);
+ }
+ item += 16;
+ rectList->rectItems.push_back(rectItem);
+ }
+ rectLists.push_back(rectList);
+}
+
+int main(int argc, char *argv[]) {
+
+ FILE *datFile;
+
+ loadExe("nhc.exe");
+
+ for (int i = 0; hitRectListOffsets[i] != 0; i++) {
+ addHitRect(hitRectListOffsets[i]);
+ }
+
+ for (int i = 0; rectListOffsets[i] != 0; i += 2) {
+ addRect(rectListOffsets[i], rectListOffsets[i + 1]);
+ }
+
+ for (int i = 0; messageListOffsets[i] != 0; i += 2) {
+ addMessage(messageListOffsets[i], messageListOffsets[i + 1]);
+ }
+
+ datFile = fopen("neverhood.dat", "wb");
+
+ writeUint32LE(datFile, 0x11223344); // Some magic
+ writeUint32LE(datFile, DAT_VERSION);
+
+ // Write all message lists
+ writeUint32LE(datFile, messageLists.size());
+ for (std::vector<MessageList*>::iterator it = messageLists.begin(); it != messageLists.end(); it++) {
+ MessageList *messageList = *it;
+ writeUint32LE(datFile, messageList->id);
+ writeUint32LE(datFile, messageList->messageItems.size());
+ for (uint32 i = 0; i < messageList->messageItems.size(); i++) {
+ writeUint16LE(datFile, messageList->messageItems[i].messageNum);
+ writeUint32LE(datFile, messageList->messageItems[i].messageParam);
+ }
+ }
+
+ // Write all rect lists
+ writeUint32LE(datFile, rectLists.size());
+ for (std::vector<RectList*>::iterator it = rectLists.begin(); it != rectLists.end(); it++) {
+ RectList *rectList = *it;
+ writeUint32LE(datFile, rectList->id);
+ writeUint32LE(datFile, rectList->rectItems.size());
+ for (uint32 i = 0; i < rectList->rectItems.size(); i++) {
+ const RectItem &rectItem = rectList->rectItems[i];
+ writeUint16LE(datFile, rectItem.x1);
+ writeUint16LE(datFile, rectItem.y1);
+ writeUint16LE(datFile, rectItem.x2);
+ writeUint16LE(datFile, rectItem.y2);
+ writeUint32LE(datFile, rectItem.subRectItems.size());
+ for (uint32 j = 0; j < rectItem.subRectItems.size(); j++) {
+ const SubRectItem &subRectItem = rectItem.subRectItems[j];
+ writeUint16LE(datFile, subRectItem.x1);
+ writeUint16LE(datFile, subRectItem.y1);
+ writeUint16LE(datFile, subRectItem.x2);
+ writeUint16LE(datFile, subRectItem.y2);
+ writeUint32LE(datFile, subRectItem.messageListOffset);
+ }
+ }
+ }
+
+ // Write all hit rect lists
+ writeUint32LE(datFile, hitRectLists.size());
+ for (std::vector<HitRectList*>::iterator it = hitRectLists.begin(); it != hitRectLists.end(); it++) {
+ HitRectList *hitRectList = *it;
+ writeUint32LE(datFile, hitRectList->id);
+ writeUint32LE(datFile, hitRectList->hitRects.size());
+ for (uint32 i = 0; i < hitRectList->hitRects.size(); i++) {
+ const HitRect &hitRect = hitRectList->hitRects[i];
+ writeUint16LE(datFile, hitRect.x1);
+ writeUint16LE(datFile, hitRect.y1);
+ writeUint16LE(datFile, hitRect.x2);
+ writeUint16LE(datFile, hitRect.y2);
+ writeUint16LE(datFile, hitRect.messageNum);
+ }
+ }
+
+ fclose(datFile);
+
+ printf("Done.\n");
+
+ return 0;
+}
diff --git a/devtools/create_neverhood/create_neverhood.h b/devtools/create_neverhood/create_neverhood.h
new file mode 100644
index 0000000..6382c87
--- /dev/null
+++ b/devtools/create_neverhood/create_neverhood.h
@@ -0,0 +1,28 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef CREATE_NEVERHOOD_H
+#define CREATE_NEVERHOOD_H
+
+#include "util.h"
+
+#endif
diff --git a/devtools/create_neverhood/module.mk b/devtools/create_neverhood/module.mk
new file mode 100644
index 0000000..284e191
--- /dev/null
+++ b/devtools/create_neverhood/module.mk
@@ -0,0 +1,12 @@
+
+MODULE := devtools/create_neverhood
+
+MODULE_OBJS := \
+ create_neverhood.o \
+ util.o
+
+# Set the name of the executable
+TOOL_EXECUTABLE := create_neverhood
+
+# Include common rules
+include $(srcdir)/rules.mk
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
new file mode 100644
index 0000000..6f1fc482
--- /dev/null
+++ b/devtools/create_neverhood/tables.h
@@ -0,0 +1,49 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+static const uint32 hitRectListOffsets[] = {
+ // Scene1001
+ 0x004B4858,
+ 0
+};
+
+static const uint32 rectListOffsets[] = {
+ // Scene1001
+ 1, 0x004B49F0,
+ 1, 0x004B4A00,
+ 0, 0
+};
+
+static const uint32 messageListOffsets[] = {
+ // Scene1001
+ 1, 0x004B4888,
+ 2, 0x004B4898,
+ 1, 0x004B4970,
+ 1, 0x004B4890,
+ 3, 0x004B4910,
+ 5, 0x004B4938,
+ 1, 0x004B4960,
+ 4, 0x004B48A8,
+ 3, 0x004B48C8,
+ 0, 0
+};
+
diff --git a/devtools/create_neverhood/util.cpp b/devtools/create_neverhood/util.cpp
new file mode 100644
index 0000000..5ce8237
--- /dev/null
+++ b/devtools/create_neverhood/util.cpp
@@ -0,0 +1,152 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "util.h"
+#include <stdarg.h>
+
+#ifdef _MSC_VER
+ #define vsnprintf _vsnprintf
+#endif
+
+void error(const char *s, ...) {
+ char buf[1024];
+ va_list va;
+
+ va_start(va, s);
+ vsnprintf(buf, 1024, s, va);
+ va_end(va);
+
+ fprintf(stderr, "ERROR: %s!\n", buf);
+
+ exit(1);
+}
+
+void warning(const char *s, ...) {
+ char buf[1024];
+ va_list va;
+
+ va_start(va, s);
+ vsnprintf(buf, 1024, s, va);
+ va_end(va);
+
+ fprintf(stderr, "WARNING: %s!\n", buf);
+}
+
+int scumm_stricmp(const char *s1, const char *s2) {
+ byte l1, l2;
+ do {
+ // Don't use ++ inside tolower, in case the macro uses its
+ // arguments more than once.
+ l1 = (byte)*s1++;
+ l1 = tolower(l1);
+ l2 = (byte)*s2++;
+ l2 = tolower(l2);
+ } while (l1 == l2 && l1 != 0);
+ return l1 - l2;
+}
+
+void debug(int level, const char *s, ...) {
+ char buf[1024];
+ va_list va;
+
+ va_start(va, s);
+ vsnprintf(buf, 1024, s, va);
+ va_end(va);
+
+ fprintf(stderr, "DEBUG: %s!\n", buf);
+}
+
+uint8 readByte(FILE *fp) {
+ return fgetc(fp);
+}
+
+uint16 readUint16BE(FILE *fp) {
+ uint16 ret = 0;
+ ret |= fgetc(fp) << 8;
+ ret |= fgetc(fp);
+ return ret;
+}
+
+uint16 readUint16LE(FILE *fp) {
+ uint16 ret = 0;
+ ret |= fgetc(fp);
+ ret |= fgetc(fp) << 8;
+ return ret;
+}
+
+uint32 readUint32BE(FILE *fp) {
+ uint32 ret = 0;
+ ret |= fgetc(fp) << 24;
+ ret |= fgetc(fp) << 16;
+ ret |= fgetc(fp) << 8;
+ ret |= fgetc(fp);
+ return ret;
+}
+
+uint32 readUint32LE(FILE *fp) {
+ uint32 ret = 0;
+ ret |= fgetc(fp);
+ ret |= fgetc(fp) << 8;
+ ret |= fgetc(fp) << 16;
+ ret |= fgetc(fp) << 24;
+ return ret;
+}
+
+void writeByte(FILE *fp, uint8 b) {
+ fwrite(&b, 1, 1, fp);
+}
+
+void writeUint16BE(FILE *fp, uint16 value) {
+ writeByte(fp, (uint8)(value >> 8));
+ writeByte(fp, (uint8)(value));
+}
+
+void writeUint16LE(FILE *fp, uint16 value) {
+ writeByte(fp, (uint8)(value));
+ writeByte(fp, (uint8)(value >> 8));
+}
+
+void writeUint32BE(FILE *fp, uint32 value) {
+ writeByte(fp, (uint8)(value >> 24));
+ writeByte(fp, (uint8)(value >> 16));
+ writeByte(fp, (uint8)(value >> 8));
+ writeByte(fp, (uint8)(value));
+}
+
+void writeUint32LE(FILE *fp, uint32 value) {
+ writeByte(fp, (uint8)(value));
+ writeByte(fp, (uint8)(value >> 8));
+ writeByte(fp, (uint8)(value >> 16));
+ writeByte(fp, (uint8)(value >> 24));
+}
+
+uint32 fileSize(FILE *fp) {
+ uint32 sz;
+ uint32 pos = ftell(fp);
+ fseek(fp, 0, SEEK_END);
+ sz = ftell(fp);
+ fseek(fp, pos, SEEK_SET);
+ return sz;
+}
diff --git a/devtools/create_neverhood/util.h b/devtools/create_neverhood/util.h
new file mode 100644
index 0000000..a2783cc
--- /dev/null
+++ b/devtools/create_neverhood/util.h
@@ -0,0 +1,57 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#include "common/scummsys.h"
+#include "common/endian.h"
+#include "common/util.h"
+
+#ifdef WIN32
+#include <io.h>
+#include <process.h>
+#endif
+
+
+/* File I/O */
+uint8 readByte(FILE *fp);
+uint16 readUint16BE(FILE *fp);
+uint16 readUint16LE(FILE *fp);
+uint32 readUint32BE(FILE *fp);
+uint32 readUint32LE(FILE *fp);
+void writeByte(FILE *fp, uint8 b);
+void writeUint16BE(FILE *fp, uint16 value);
+void writeUint16LE(FILE *fp, uint16 value);
+void writeUint32BE(FILE *fp, uint32 value);
+void writeUint32LE(FILE *fp, uint32 value);
+uint32 fileSize(FILE *fp);
+
+/* Misc stuff */
+void NORETURN_PRE error(const char *s, ...) NORETURN_POST;
+void warning(const char *s, ...);
+void debug(int level, const char *s, ...);
+int scumm_stricmp(const char *s1, const char *s2);
+
+using namespace Common;
+
+#endif
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
new file mode 100644
index 0000000..bbd7419
Binary files /dev/null and b/dists/engine-data/neverhood.dat differ
Commit: 5c69ae21ddf535f862585a4fa5892a9a1146618f
https://github.com/scummvm/scummvm/commit/5c69ae21ddf535f862585a4fa5892a9a1146618f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:46-07:00
Commit Message:
NEVERHOOD: More work on Klayman (still eye cancerous code)
- Start to implement KmScene1001
- Implement queryPositionSprite and queryPositionRectList
- Implement message list related code (setting and running them)
- Access to message params now with accessors (so compatible types can be converted)
Changed paths:
engines/neverhood/collisionman.h
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/collisionman.h b/engines/neverhood/collisionman.h
index 426dca0..1558599 100644
--- a/engines/neverhood/collisionman.h
+++ b/engines/neverhood/collisionman.h
@@ -42,6 +42,8 @@ public:
void clearSprites();
void save();
void restore();
+ uint getSpriteCount() const { return _sprites.size(); }
+ Sprite *getSprite(uint index) const { return _sprites[index]; }
protected:
NeverhoodEngine *_vm;
HitRectList *_hitRects;
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 64c1181..29bf6be 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -30,16 +30,43 @@ namespace Neverhood {
class Entity;
+enum MessageParamType {
+ mptInteger,
+ mptPoint,
+ mptEntity
+};
+
struct MessageParam {
+public:
+ MessageParam(uint32 value) : _type(mptInteger), _integer(value) {}
+ MessageParam(NPoint value) : _type(mptPoint), _point(value) {}
+ MessageParam(Entity *entity) : _type(mptEntity), _entity(entity) {}
+ uint32 asInteger() const {
+ assert(_type == mptInteger);
+ return _integer;
+ }
+ NPoint asPoint() const {
+ assert(_type == mptInteger || _type == mptPoint);
+ if (_type == mptInteger) {
+ NPoint pt;
+ pt.x = (_integer >> 16) & 0xFFFF;
+ pt.y = _integer & 0xFFFF;
+ return pt;
+ }
+ return _point;
+ }
+ Entity *asEntity() const {
+ assert(_type == mptEntity);
+ return _entity;
+ }
+protected:
union {
uint32 _integer;
NPoint _point;
Entity *_entity;
// TODO: Other types...
};
- MessageParam(uint32 value) { _integer = value; }
- MessageParam(NPoint value) { _point = value; }
- MessageParam(Entity *entity) { _entity = entity; }
+ MessageParamType _type;
// TODO: Constructors for the param types...
};
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c63131d..47fff17 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -78,17 +78,17 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
_field24 = -1;
_field26 = -1;
_field28 = -1;
- _field20 = param._integer;
+ _field20 = param.asInteger();
_done = true;
return messageResult;
case 0x100A:
- _field24 = (int16)param._integer;
+ _field24 = (int16)param.asInteger();
return messageResult;
case 0x101F:
_field2C = true;
return messageResult;
case 0x1023:
- _field26 = (int16)param._integer;
+ _field26 = (int16)param.asInteger();
return messageResult;
}
return messageResult;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 7a775bc..eca8e02 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -21,7 +21,9 @@
*/
#include "neverhood/klayman.h"
+#include "neverhood/collisionman.h"
#include "neverhood/resourceman.h"
+#include "neverhood/staticdata.h"
namespace Neverhood {
@@ -52,7 +54,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
_counter2(0), /*_field118(0), */_status2(0), _flagE5(true), _attachedSprite(NULL), _flagE1(false),
_status(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
- _flagFA(false), _statusE0(0) /*, _field114(0)*/, _resourceHandle(-1), _soundFlag(false) {
+ _flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
// TODO
createSurface(surfacePriority, 320, 200);
@@ -74,13 +76,13 @@ uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param._point.x, false);
+ sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- // TODO AnimatedSprite_setCallback2(AnimationCallback(&sub41FC80));
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
break;
case 0x4818:
- // TODO sub41C930(_rectResource.getRectangle1(param._integer).x, false);
+ // TODO sub41C930(_rectResource.getRectangle1(param.asInteger()).x, false);
break;
}
return 0;
@@ -124,19 +126,15 @@ void Klayman::sub41FD40() {
SetMessageHandler(&Klayman::handleMessage41EB10);
SetSpriteCallback(NULL);
SetAnimationCallback3(&Klayman::sub41FCF0);
- // TODO AnimatedSprite_setCallback1(AnimationCallback(&Klayman::sub41FD90));
+ setCallback1(AnimationCallback(&Klayman::sub41FD90));
}
uint32 Klayman::handleMessage41EB10(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x04DBC02C) {
-#if 0
- _soundResource1.set(0x44528AA1);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ if (param.asInteger() == 0x04DBC02C) {
+ _soundResource1.play(0x44528AA1);
}
break;
}
@@ -165,12 +163,8 @@ uint32 Klayman::handleMessage41E980(int messageNum, const MessageParam ¶m, E
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x808A0008) {
-#if 0
- _soundResource1.set(0xD948A340);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ if (param.asInteger() == 0x808A0008) {
+ _soundResource1.play(0xD948A340);
}
break;
}
@@ -189,7 +183,7 @@ void Klayman::sub41FE00() {
SetMessageHandler(&Klayman::handleMessage41E9E0);
SetSpriteCallback(NULL);
SetAnimationCallback3(&Klayman::sub41FCF0);
- // TODO AnimatedSprite_setCallback1(AnimationCallback(&Klayman::sub41FE50));
+ setCallback1(AnimationCallback(&Klayman::sub41FE50));
}
void Klayman::sub41FE50() {
@@ -200,24 +194,12 @@ uint32 Klayman::handleMessage41E9E0(int messageNum, const MessageParam ¶m, E
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x5A0F0104) {
-#if 0
- _soundResource1.set(0x7970A100);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- } else if (param._integer == 0x9A9A0109) {
-#if 0
- _soundResource1.set(0xD170CF04);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- } else if (param._integer == 0x989A2169) {
-#if 0
- _soundResource1.set(0xD073CF14);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ if (param.asInteger() == 0x5A0F0104) {
+ _soundResource1.play(0x7970A100);
+ } else if (param.asInteger() == 0x9A9A0109) {
+ _soundResource1.play(0xD170CF04);
+ } else if (param.asInteger() == 0x989A2169) {
+ _soundResource1.play(0xD073CF14);
}
break;
}
@@ -242,12 +224,8 @@ uint32 Klayman::handleMessage41EF80(int messageNum, const MessageParam ¶m, E
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x0D2A0288) {
-#if 0
- _soundResource1.set(0xD192A368);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ if (param.asInteger() == 0x0D2A0288) {
+ _soundResource1.play(0xD192A368);
}
break;
}
@@ -272,30 +250,14 @@ uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, E
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0xC006000C) {
-#if 0
- _soundResource1.set(0x9D406340);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- } else if (param._integer == 0x2E4A2940) {
-#if 0
- _soundResource1.set(0x53A4A1D4);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- } else if (param._integer == 0xAA0A0860) {
-#if 0
- _soundResource1.set(0x5BE0A3C6);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- } else if (param._integer == 0xC0180260) {
-#if 0
- _soundResource1.set(0x5D418366);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ if (param.asInteger() == 0xC006000C) {
+ _soundResource1.play(0x9D406340);
+ } else if (param.asInteger() == 0x2E4A2940) {
+ _soundResource1.play(0x53A4A1D4);
+ } else if (param.asInteger() == 0xAA0A0860) {
+ _soundResource1.play(0x5BE0A3C6);
+ } else if (param.asInteger() == 0xC0180260) {
+ _soundResource1.play(0x5D418366);
}
break;
}
@@ -405,6 +367,7 @@ void Klayman::update41D0F0() {
}
uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41D360(%04X)", messageNum);
Sprite::handleMessage(messageNum, param, sender);
uint32 messageResult = xHandleMessage(messageNum, param);
switch (messageNum) {
@@ -412,7 +375,7 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
messageResult = _flagE5;
break;
case 0x1014:
- _attachedSprite = param._entity;
+ _attachedSprite = param.asEntity();
break;
case 0x1019:
sub41C7B0();
@@ -424,13 +387,13 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
sub41C790();
break;
case 0x481C:
- _status = param._integer;
+ _status = param.asInteger();
_flagFA = true;
messageResult = 1;
break;
case 0x482C:
- if (param._integer != 0) {
- // TODO _rectResource.getRectangle2(param._integer, &_field118, &_field114,);
+ if (param.asInteger() != 0) {
+ // TODO _rectResource.getRectangle2(param.asInteger(), &_field118, &_field114,);
} else {
// TODO _field114 = 0;
}
@@ -440,9 +403,9 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FF00() {
- setFileHash(0x5900C41E, 0, -1);
_status2 = 1;
_flagE5 = true;
+ setFileHash(0x5900C41E, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -472,18 +435,10 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x271AA210) {
-#if 0
- _soundResource1.set(0x4924AAC4);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
- } else if (param._integer == 0x2B22AA81) {
-#if 0
- _soundResource1.set(0x0A2AA8E0);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ if (param.asInteger() == 0x271AA210) {
+ _soundResource1.play(0x4924AAC4);
+ } else if (param.asInteger() == 0x2B22AA81) {
+ _soundResource1.play(0x0A2AA8E0);
}
break;
}
@@ -492,33 +447,323 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
void Klayman::sub41C930(int16 x, bool flag) {
+ debug("Klayman::sub41C930(%d, %d)", x, flag);
int16 xdiff = ABS(x - _x);
if (xdiff == 0) {
_x4 = x;
if (_flagE1 || _flagE2 || _flagE3) {
- // TODO AnimatedSprite_setCallback2(NULL);
+ setCallback2(NULL);
sub41C7B0();
}
} else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
_x4 = x;
- // TODO AnimatedSprite_setCallback2(NULL);
+ setCallback2(NULL);
sub41C7B0();
} else if (xdiff <= 42 && _status != 3) {
if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
_x4 = x;
} else {
_x4 = x;
- // TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub41FB40));
+ setCallback2(AnimationCallback(&Klayman::sub41FB40));
}
} else if (_flagE1 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
_x4 = x;
} else if (flag) {
_x4 = x;
+ debug("#### 1");
// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
} else {
_x4 = x;
- // TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub41F950));
+ setCallback2(AnimationCallback(&Klayman::sub41F950));
+ }
+}
+
+void Klayman::sub4211F0() {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x527AC970, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub4211B0() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x5A38C110, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E920);
+ SetSpriteCallback(NULL);
+}
+
+uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x03060012) {
+ _soundResource1.play(0xC0238244);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+bool Klayman::sub41CEB0(AnimationCb callback3) {
+ if (_status2 == 1) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x5C7080D4, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41F140);
+ SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetAnimationCallback3(callback3);
+ return true;
+ } else {
+ _x = _x4;
+ return false;
+ }
+}
+
+void Klayman::spriteUpdate41F250() {
+ debug("Klayman::spriteUpdate41F250()");
+}
+
+void Klayman::spriteUpdate41F5F0() {
+ debug("Klayman::spriteUpdate41F5F0()");
+}
+
+void Klayman::sub41FB40() {
+ _status2 = 1;
+ _flagE2 = true;
+ _flagE5 = true;
+ setDoDeltaX(_x4 < _x);
+ setFileHash(0x5C48C506, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DD80);
+ SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
+ setCallback1(AnimationCallback(&Klayman::sub41FBB0));
+}
+
+void Klayman::sub41FBB0() {
+ _flagE2 = false;
+}
+
+uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0A2AA8E0);
+ } else if (param.asInteger() == 0x32188010) {
+ if (_soundFlag) {
+ _soundResource1.play(0x48498E46);
+ } else {
+ _soundResource1.play(0x405002D8);
+ }
+ } else if (param.asInteger() == 0x02A2909C) {
+ if (_soundFlag) {
+ _soundResource1.play(0x50399F64);
+ } else {
+ _soundResource1.play(0x0460E2FA);
+ }
+ }
+ break;
+ case 0x3002:
+ _x = _x4;
+ sub41C7B0();
+ break;
}
+ return messageResult;
+}
+
+void Klayman::sub41CD70(int16 x) {
+ if (x > _x) {
+ if (ABS(x - _x) <= 105) {
+ debug("// TODO sub41CAC0(x);");
+ // TODO sub41CAC0(x);
+ } else {
+ sub41C930(x, false);
+ }
+ } else if (x == _x) {
+ _x4 = x;
+ setCallback2(NULL);
+ sub41C7B0();
+ } else {
+ sub41C930(x, false);
+ }
+}
+
+void Klayman::sub41F950() {
+ if (!sub41CF10(AnimationCallback(&Klayman::sub41F950))) {
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setDoDeltaX(_x4 < _x);
+ setFileHash(0x242C0198, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EC70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F320);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ SetAnimationCallback3(&Klayman::sub41F9E0);
+ }
+}
+
+void Klayman::sub41FB30() {
+ _flagE1 = false;
+}
+
+uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ if (_soundFlag) {
+ _soundResource1.play(0x48498E46);
+ } else {
+ _soundResource1.play(0x405002D8);
+ }
+ } else if (param.asInteger() == 0x0A2A9098) {
+ if (_soundFlag) {
+ _soundResource1.play(0x50399F64);
+ } else {
+ _soundResource1.play(0x0460E2FA);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41F9E0() {
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setFileHash(0x1A249001, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ SetAnimationCallback3(&Klayman::sub41FA40);
+}
+
+void Klayman::spriteUpdate41F300() {
+ SetSpriteCallback(&Klayman::spriteUpdate41F320);
+ _deltaX = 0;
+}
+
+uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ if (_soundFlag) {
+ _soundResource1.play(0x48498E46);
+ } else {
+ _soundResource1.play(0x405002D8);
+ }
+ } else if (param.asInteger() == 0x0A2A9098) {
+ if (_soundFlag) {
+ _soundResource1.play(0x50399F64);
+ } else {
+ _soundResource1.play(0x0460E2FA);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub41FA40() {
+ if (_status == 2) {
+ sub41C7B0();
+ } else if (_status == 3) {
+ debug("// TODO sub420F20();");
+ // TODO sub420F20();
+ } else {
+ _flagE2 = true;
+ if (ABS(_x4 - _x) <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
+ if (_status == 0) {
+ _status2 = 1;
+ setFileHash(0xF234EE31, 0, -1);
+ } else {
+ _status2 = 2;
+ setFileHash(0xF135CC21, 0, -1);
+ }
+ } else if (ABS(_x4 - _x) <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
+ if (_status == 0) {
+ _status2 = 1;
+ setFileHash(0x8604A152, 0, -1);
+ } else {
+ _status2 = 2;
+ setFileHash(0xA246A132, 0, -1);
+ }
+ }
+ _flagE5 = true;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DD80);
+ SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
+ setCallback1(AnimationCallback(&Klayman::sub41FBB0));
+ }
+}
+
+void Klayman::spriteUpdate41F320() {
+ int16 xdiff = ABS(_x4 - _x);
+ int16 xdelta = _x4 - _x;
+
+ if (xdelta > _deltaX)
+ xdelta = _deltaX;
+ else if (xdelta < _deltaX)
+ xdelta = -_deltaX;
+
+ _deltaX = 0;
+
+ if (xdiff == 0) {
+ sendMessage(0x1019, 0, this);
+ } else if (_status != 2 && _status != 3 && xdiff <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
+ sendMessage(0x1019, 0, this);
+ } else if (_status != 2 && _status != 3 && xdiff <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
+ sendMessage(0x1019, 0, this);
+ } else if (_status == 3 && xdiff < 30) {
+ sendMessage(0x1019, 0, this);
+ } else if (_status == 3 && xdiff < 150 && _frameIndex >= 6) {
+ sendMessage(0x1019, 0, this);
+ } else {
+ HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ _x += xdelta;
+ if (_field114) {
+ debug("_field114");
+ // TODO KlaymanSprite_sub_41CF70
+ } else {
+ HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ if (hitRectNext->type == 0x5002) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
+ } else if (hitRectNext->type == 0x5003) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
+ } else if (hitRectPrev->type == 0x5002) {
+ if (xdelta > 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ } else if (hitRectPrev->type == 0x5003) {
+ if (xdelta < 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ } else if (_flagF6 && xdelta != 0) {
+ if (hitRectNext->type == 0x5000) {
+ _y++;
+ } else if (hitRectNext->type == 0x5001 && _y > hitRectNext->rect.y1) {
+ _y--;
+ }
+ }
+ }
+ processDelta();
+ }
+
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 69f9a34..50a12ae 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -41,13 +41,21 @@ struct KlaymanTableItem {
class Klayman : public AnimatedSprite {
public:
- Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority);
+ Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000);
+
+ void update();
void sub41FD30();
void sub41FDA0();
void sub41FDF0();
void sub41FE60();
void sub41FEB0();
+ void sub41FC80();
+ void sub4211F0();
+ void sub4211B0();
+
+ void spriteUpdate41F250();
+ void spriteUpdate41F5F0();
protected:
Entity *_parentScene;
@@ -74,15 +82,14 @@ protected:
const KlaymanTableItem *_table;
int _tableCount;
int _tableMaxValue;
+ uint32 _field114;
/*
- 00000114 field114 dd ?
00000118 field118 dw ?
*/
bool _soundFlag;
int _resourceHandle;
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void update();
void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
void setKlaymanTable1();
@@ -114,7 +121,6 @@ protected:
void sub41C770();
void sub41C790();
- void sub41FC80();
void update41D0F0();
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -126,6 +132,24 @@ protected:
uint32 handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41C930(int16 x, bool flag);
+
+ uint32 handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ bool sub41CEB0(AnimationCb callback3);
+
+ void sub41FB40();
+ void sub41FBB0();
+ uint32 handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub41CD70(int16 x);
+ void sub41F950();
+ void sub41FB30();
+ uint32 handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub41F9E0();
+ void spriteUpdate41F300();
+ uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub41FA40();
+
+ void spriteUpdate41F320();
};
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index c46aa79..03109c0 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -52,17 +52,17 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
_field24 = -1;
_field26 = -1;
_field28 = -1;
- _field20 = param._integer;
+ _field20 = param.asInteger();
_done = true;
return 0;
case 0x100A:
- _field24 = (int16)param._integer;
+ _field24 = (int16)param.asInteger();
return 0;
case 0x1023:
- _field26 = (int16)param._integer;
+ _field26 = (int16)param.asInteger();
return 0;
case 0x1024:
- _field28 = (int16)param._integer;
+ _field28 = (int16)param.asInteger();
return 0;
default:
if (_childObject && sender == _parentModule)
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 8580620..eea0d99 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -132,6 +132,74 @@ void Module1000::updateScene1005() {
// Scene1001
+KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+}
+
+uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ debug("KmScene1001::xHandleMessage() messageNum = %04X", messageNum);
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub4211B0));
+ }
+ break;
+ case 0x480D:
+ debug("########### A");
+ // TODO setCallback2(AnimationCallback(&Klayman::sub44FA50));
+ break;
+ case 0x4812:
+ debug("########### B");
+ // TODO setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ break;
+
+ case 0x4836:
+ if (param.asInteger() == 1) {
+ _parentScene->sendMessage(0x2002, 0, this);
+ setCallback2(AnimationCallback(&Klayman::sub4211F0));
+ }
+ break;
+
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+
+ // TODO
+
+ return 0;
+}
+
+void KmScene1001::sub44FA50() {
+ if (!sub41CEB0(AnimationCallback(&KmScene1001::sub44FA50))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x00648953, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1001::handleMessage44FA00);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ }
+}
+
+uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x480F, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm) {
@@ -165,18 +233,12 @@ void AsScene1001Door::handleMessage2000h() {
switch (_vm->getGlobalVar(0x52371C95)) {
case 0:
case 1:
-#if 0
- _soundResource1.set(0x65482F03);
- _soundResource1.load();
- _soundResource1.play(false);
-#endif
+ _soundResource1.play(0x65482F03);
setFileHash(0x624C0498, 1, 3);
SetAnimationCallback3(&AsScene1001Door::callback1);
break;
case 2:
-#if 0
- _soundResource2.play(false);
-#endif
+ _soundResource2.play();
setFileHash(0x624C0498, 6, 6);
SetAnimationCallback3(&AsScene1001Door::callback2);
break;
@@ -216,9 +278,7 @@ void AsScene1001Door::callback2() {
}
void AsScene1001Door::callback3() {
-#if 0
- _soundResource1.play(false);
-#endif
+ _soundResource1.play();
setFileHash1();
_surface->setVisible(false);
}
@@ -239,25 +299,17 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x00352100) {
+ if (param.asInteger() == 0x00352100) {
if (_asDoor) {
_asDoor->sendMessage(0x2000, 0, this);
}
- } else if (param._integer == 0x0A1A0109) {
-#if 0
- _soundResource.set(0x66410886);
- _soundResource.load();
- _soundResource.play(false);
-#endif
+ } else if (param.asInteger() == 0x0A1A0109) {
+ _soundResource.play(0x66410886);
}
break;
case 0x2000:
setFileHash(0x022C90D4, 1, -1);
-#if 0
- _soundResource.set(0xE741020A);
- _soundResource.load();
- _soundResource.play(false);
-#endif
+ _soundResource.play(0xE741020A);
_newHashListIndex = -2;
break;
}
@@ -280,12 +332,8 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x0E0A1410) {
-#if 0
- _soundResource.set(0x60803F10);
- _soundResource.load();
- _soundResource.play(false);
-#endif
+ if (param.asInteger() == 0x0E0A1410) {
+ _soundResource.play(0x60803F10);
}
break;
case 0x2001:
@@ -317,17 +365,14 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param._integer == 0x00C0C444) {
+ if (param.asInteger() == 0x00C0C444) {
_parentScene->sendMessage(0x480F, 0, this);
- } else if (param._integer == 0xC41A02C0) {
-#if 0
- _soundResource.set(0x40581882);
- _soundResource.load();
- _soundResource.play(false);
-#endif
+ } else if (param.asInteger() == 0xC41A02C0) {
+ _soundResource.play(0x40581882);
}
break;
case 0x1011:
+ debug("Click lever");
_parentScene->sendMessage(0x4826, 0, this);
messageResult = 1;
break;
@@ -371,11 +416,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
_parentScene->sendMessage(0x480B, 0, this);
_surface->setVisible(true);
_countdown = 8;
-#if 0
- _soundResource.set(_soundFileHash);
- _soundResource.load();
- _soundResource.play(false);
-#endif
+ _soundResource.play(_soundFileHash);
break;
}
return messageResult;
@@ -386,8 +427,6 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_name = "Scene1001";
- // TODO: Implement Sprite classes
-
Sprite *staticSprite1;
SetMessageHandler(&Scene1001::handleMessage);
@@ -400,46 +439,37 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Mouse
- //DEBUG so he's here at least
- _klayman = new Klayman(_vm, this, 200, 433, 1000, 1000);
- addSprite(_klayman);
-
-#if 0
- // TODO: Player sprites...
if (which < 0) {
setRectList(0x004B49F0);
- _klayman = new Class572(_vm, this, 200, 433, 1000, 1000);
+ _klayman = new KmScene1001(_vm, this, 200, 433);
setMessageList(0x004B4888);
} else if (which == 1) {
setRectList(0x004B49F0);
- _klayman = new Class572(_vm, this, 640, 433, 1000, 1000);
+ _klayman = new KmScene1001(_vm, this, 640, 433);
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
if (_vm->getGlobalVar(0xC0418A02)) {
- _klayman = new Class572(_vm, this, 390, 433, 1000, 1000);
+ _klayman = new KmScene1001(_vm, this, 390, 433);
_klayman->setDoDeltaX(1);
} else {
- _klayman = new Class572(_vm, this, 300, 433, 1000, 1000);
+ _klayman = new KmScene1001(_vm, this, 300, 433);
}
setMessageList(0x004B4970);
} else {
setRectList(0x004B4A00);
- _klayman = new Class572(_vm, this, 200, 433, 1000, 1000);
+ _klayman = new KmScene1001(_vm, this, 200, 433);
setMessageList(0x004B4890);
}
addSprite(_klayman);
-#endif
staticSprite1 = addSprite(new StaticSprite(_vm, 0x2080A3A8, 1300));
-#if 0
// TODO: This sucks somehow, find a better way
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
_klayman->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
-#endif
if (_vm->getGlobalVar(0xD217189D) == 0) {
_asDoor = addSprite(new AsScene1001Door(_vm));
@@ -478,45 +508,47 @@ Scene1001::~Scene1001() {
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Scene1001::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param._point.x == 0 && _vm->getGlobalVar(0xA4014072)) {
+ if (param.asPoint().x == 0 && _vm->getGlobalVar(0xA4014072)) {
_parentModule->sendMessage(0x1009, 0, this);
}
break;
case 0x000D:
- if (param._integer == 0x188B2105) {
+ if (param.asInteger() == 0x188B2105) {
_parentModule->sendMessage(0x1009, 0, this);
messageResult = 1;
}
break;
case 0x100D:
- if (param._integer == 0x00342624) {
- // TODO _klayman->sendMessage(0x1014, _asLever, this);
- // TODO setMessageList2(0x004B4910, true, false);
+ if (param.asInteger() == 0x00342624) {
+ _klayman->sendMessage(0x1014, _asLever, this);
+ setMessageList2(0x004B4910);
messageResult = 1;
- } else if (param._integer == 0x21E64A00) {
+ } else if (param.asInteger() == 0x21E64A00) {
if (_vm->getGlobalVar(0xD217189D)) {
- // TODO setMessageList(0x004B48A8, true, false);
+ setMessageList(0x004B48A8);
messageResult = 1;
} else {
- // TODO setMessageList(0x004B48C8, true, false);
+ setMessageList(0x004B48C8);
messageResult = 1;
}
- } else if (param._integer == 0x040424D0) {
- // TODO _klayman->sendMessage(0x1014, _ssButton, this);
- } else if (param._integer == 0x80006358) {
+ } else if (param.asInteger() == 0x040424D0) {
+ _klayman->sendMessage(0x1014, _ssButton, this);
+ } else if (param.asInteger() == 0x80006358) {
if (_vm->getGlobalVar(0x03C698DA)) {
- // TODO setMessageList(0x004B4938, true, false);
+ setMessageList(0x004B4938);
} else {
- // TODO setMessageList(0x004B4960, true, false);
+ setMessageList(0x004B4960);
}
}
break;
case 0x2002:
- // TODO setRectList(0x004B49F0);
+ debug("########## setRectList(0x004B49F0);");
+ setRectList(0x004B49F0);
break;
case 0x480B:
if (_asWindow) {
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 21be948..d74a0e1 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -55,6 +55,15 @@ protected:
// Scene1001
+class KmScene1001 : public Klayman {
+public:
+ KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub44FA50();
+ uint32 handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class AsScene1001Door : public AnimatedSprite {
public:
AsScene1001Door(NeverhoodEngine *vm);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 73e7c5f..0e3e0a3 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -78,6 +78,8 @@ Common::Error NeverhoodEngine::run() {
_res->addArchive("s.blb");
_res->addArchive("t.blb");
+ CursorMan.showMouse(true);
+
#if 0
BlbArchive *blb = new BlbArchive();
blb->open("m.blb");
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 5fc167c..e3a29c5 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -198,7 +198,7 @@ bool AnimResource::load(uint32 fileHash) {
animList = resourceData + 12;
for (animListIndex = 0; animListIndex < animListCount; animListIndex++) {
- debug("hash: %08X", READ_LE_UINT32(animList));
+ debug(8, "hash: %08X", READ_LE_UINT32(animList));
if (READ_LE_UINT32(animList) == fileHash)
break;
animList += 8;
@@ -218,7 +218,7 @@ bool AnimResource::load(uint32 fileHash) {
frameCount = READ_LE_UINT16(animList + 4);
frameListStartOfs = READ_LE_UINT16(animList + 6);
- debug("frameCount = %d; frameListStartOfs = %04X; animInfoStartOfs = %04X", frameCount, frameListStartOfs, animInfoStartOfs);
+ debug(8, "frameCount = %d; frameListStartOfs = %04X; animInfoStartOfs = %04X", frameCount, frameListStartOfs, animInfoStartOfs);
frameList = resourceData + animInfoStartOfs + frameListStartOfs;
@@ -241,7 +241,7 @@ bool AnimResource::load(uint32 fileHash) {
frameInfo.deltaRect.height = READ_LE_UINT16(frameList + 24);
frameInfo.field_1A = READ_LE_UINT16(frameList + 26);
frameInfo.spriteDataOffs = READ_LE_UINT32(frameList + 28);
- debug("frameHash = %08X; counter = %d; rect = (%d,%d,%d,%d); deltaX = %d; deltaY = %d; deltaRect = (%d,%d,%d,%d); field_1A = %04X; spriteDataOffs = %08X",
+ debug(8, "frameHash = %08X; counter = %d; rect = (%d,%d,%d,%d); deltaX = %d; deltaY = %d; deltaRect = (%d,%d,%d,%d); field_1A = %04X; spriteDataOffs = %08X",
frameInfo.frameHash, frameInfo.counter,
frameInfo.rect.x, frameInfo.rect.y, frameInfo.rect.width, frameInfo.rect.height,
frameInfo.deltaX, frameInfo.deltaY,
@@ -299,4 +299,18 @@ int16 AnimResource::getFrameIndex(uint32 frameHash) {
return -1;
}
+SoundResource::SoundResource(NeverhoodEngine *vm)
+ : _vm(vm) {
+}
+
+bool SoundResource::isPlaying() {
+ return false;
+}
+
+void SoundResource::play(uint32 fileHash, bool looping) {
+}
+
+void SoundResource::play() {
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 969f46d..7540956 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -103,8 +103,10 @@ protected:
class SoundResource {
public:
- SoundResource(NeverhoodEngine *vm) : _vm(vm) {}
- bool isPlaying() const { return false; }
+ SoundResource(NeverhoodEngine *vm);
+ bool isPlaying();
+ void play(uint32 fileHash, bool looping = false);
+ void play();
protected:
NeverhoodEngine *_vm;
};
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 9b7b35d..9d7d550 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -31,11 +31,11 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_messageListFlag1 = false;
_systemCallbackFlag = false;
_messageList = NULL;
- // TODO _rectType = 0;
+ _rectType = 0;
_mouseClickPos.x = 0;
_mouseClickPos.y = 0;
_mouseClicked = false;
- // TODO _rectList = NULL;
+ _rectList = NULL;
// TODO _someRects = NULL;
_klayman = NULL;
// TODO _mouseSprite = NULL;
@@ -191,27 +191,24 @@ void Scene::update() {
_smkFileHash = 0;
} else {
if (_mouseClicked) {
- //** ALL TODO
-#if 0
if (_klayman) {
// TODO: Merge later
if (_klayman->hasMessageHandler() &&
_klayman->sendMessage(0x1008, 0, this) != 0 &&
_messageListFlag &&
- queryPositionClass400(_mouseClickPos.x, _mouseClickPos.y)) {
+ queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
} else if (_klayman->hasMessageHandler() &&
_klayman->sendMessage(0x1008, 0, this) != 0 &&
_messageListFlag) {
_mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
}
- } else if (queryPositionClass400(_mouseClickPos.x, _mouseClickPos.y)) {
+ } else if (queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
}
-#endif
}
-
- // TODO runMessageList();
+
+ runMessageList();
// Update all entities
for (Common::Array<Entity*>::iterator iter = _entities.begin(); iter != _entities.end(); iter++)
@@ -228,12 +225,13 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
#if 0
if (_mouseSprite && _mouseSprite->hasMessageHandler())
_mouseSprite->sendMessage(0x4002, param, this);
- queryPositionSomeRects(param._point.x, param._point.y);
+ queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
#endif
break;
case 1: // mouse clicked
+ debug("mouse clicked");
_mouseClicked = true;
- _mouseClickPos = param._point;
+ _mouseClickPos = param.asPoint();
break;
/* ORIGINAL DEBUG
case 3:
@@ -259,7 +257,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
if (_messageListIndex == _messageListCount)
_klayman->sendMessage(0x4004, 0, this);
else {
- // TODO runMessageList();
+ runMessageList();
}
}
break;
@@ -287,7 +285,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
#endif
break;
case 0x1022:
- setSurfacePriority(((Sprite*)sender)->getSurface(), param._integer);
+ setSurfacePriority(((Sprite*)sender)->getSurface(), param.asInteger());
break;
}
return 0;
@@ -311,9 +309,187 @@ void Scene::smackerUpdate() {
}
uint32 Scene::smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- if (messageNum == 0x3002)
+ switch (messageNum) {
+ case 0x3002:
_smackerDone = true;
+ break;
+ }
return 0;
}
+bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
+ debug("Scene::queryPositionSprite(%d, %d)", mouseX, mouseY);
+ for (uint i = 0; i < _vm->_collisionMan->getSpriteCount(); i++) {
+ Sprite *sprite = _vm->_collisionMan->getSprite(i);
+ if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
+ sprite->sendPointMessage(0x1011, _mouseClickPos, this) != 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
+ if (_rectType == 1) {
+ RectList &rectList = *_rectList;
+ int16 klaymanX = _klayman->getX();
+ int16 klaymanY = _klayman->getY();
+ for (uint i = 0; i < rectList.size(); i++) {
+ debug("(%d, %d) ? (%d, %d, %d, %d)", klaymanX, klaymanY, rectList[i].rect.x1, rectList[i].rect.y1, rectList[i].rect.x2, rectList[i].rect.y2);
+ if (klaymanX >= rectList[i].rect.x1 && klaymanX <= rectList[i].rect.x2 &&
+ klaymanY >= rectList[i].rect.y1 && klaymanY <= rectList[i].rect.y2) {
+ for (uint j = 0; j < rectList[i].subRects.size(); j++) {
+ debug(" (%d, %d) ? (%d, %d, %d, %d)", mouseX, mouseY, rectList[i].subRects[j].rect.x1, rectList[i].subRects[j].rect.y1, rectList[i].subRects[j].rect.x2, rectList[i].subRects[j].rect.y2);
+ if (mouseX >= rectList[i].subRects[j].rect.x1 && mouseX <= rectList[i].subRects[j].rect.x2 &&
+ mouseY >= rectList[i].subRects[j].rect.y1 && mouseY <= rectList[i].subRects[j].rect.y2) {
+ debug("Scene::queryPositionRectList() -> %08X", rectList[i].subRects[j].messageListId);
+ return setMessageList2(rectList[i].subRects[j].messageListId);
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+void Scene::setMessageList(uint32 id, bool messageListFlag, bool systemCallbackFlag) {
+ setMessageList(_vm->_staticData->getMessageList(id), messageListFlag, systemCallbackFlag);
+}
+
+void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
+ _messageList = messageList;
+ _messageListCount = _messageList ? _messageList->size() : 0;
+ _messageListIndex = 0;
+ _messageListFlag1 = false;
+ _messageListFlag = messageListFlag;
+ _systemCallbackFlag = systemCallbackFlag;
+ _messageListStatus = 1;
+ _klayman->sendMessage(0x101C, 0, this);
+}
+
+bool Scene::setMessageList2(uint32 id, bool messageListFlag, bool systemCallbackFlag) {
+ return setMessageList2(_vm->_staticData->getMessageList(id), messageListFlag, systemCallbackFlag);
+}
+
+bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
+ bool result = false;
+
+ debug("Scene::setMessageList2(%p)", (void*)messageList);
+
+ if (_messageListStatus == 1) {
+ if (messageList != _messageList2) {
+ if (_messageValue >= 0) {
+ _parentModule->sendMessage(0x1023, _messageValue, this);
+ _messageValue = -1;
+ }
+ _messageList2 = messageList;
+ setMessageList(messageList, messageListFlag, systemCallbackFlag);
+ result = true;
+ }
+ } else if (_messageListStatus == 2) {
+ if (messageList == _messageList2) {
+ if (_messageValue >= 0) {
+ _parentModule->sendMessage(0x1023, _messageValue, this);
+ _messageValue = -1;
+ }
+ _messageList2 = messageList;
+ setMessageList(messageList, messageListFlag, systemCallbackFlag);
+ result = true;
+ }
+ } else {
+ if (_messageValue >= 0) {
+ _parentModule->sendMessage(0x1023, _messageValue, this);
+ _messageValue = -1;
+ }
+ _messageList2 = messageList;
+ setMessageList(messageList, messageListFlag, systemCallbackFlag);
+ }
+ return result;
+}
+
+void Scene::runMessageList() {
+
+ //debug("_messageListFlag2 = %d", _messageListFlag2);
+
+ if (_messageListFlag2)
+ return;
+
+ _messageListFlag2 = true;
+
+ if (_messageListFlag1) {
+ _messageListFlag2 = false;
+ return;
+ }
+
+ if (!_messageList) {
+ _messageList2 = NULL;
+ _messageListStatus = 0;
+ }
+
+ if (_messageList && _klayman) {
+
+ while (_messageList && _messageListIndex < _messageListCount && !_messageListFlag1) {
+ int messageNum = (*_messageList)[_messageListIndex].messageNum;
+ uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
+
+ debug("$$$$$$$$$$$ Scene::runMessageList() %04X, %08X", messageNum, messageParam);
+
+ _messageListIndex++;
+ if (_messageListIndex == _messageListCount) {
+ _klayman->sendMessage(0x1021, 0, this);
+ }
+ if (_systemCallbackFlag) {
+ // TODO messageNum = systemConvertMessageCb(messageNum);
+ }
+ if (messageNum != 0x4003) {
+ if (messageNum == 0x1009 || messageNum == 0x1024) {
+ _parentModule->sendMessage(messageNum, messageParam, this);
+ } else if (messageNum == 0x100A) {
+ _messageValue = messageParam;
+ _parentModule->sendMessage(messageNum, messageParam, this);
+ } else if (messageNum == 0x4001) {
+ _messageListFlag1 = true;
+ _klayman->sendPointMessage(0x4001, _mouseClickPos, this);
+ } else if (messageNum == 0x100D) {
+ if (this->hasMessageHandler() && this->sendMessage(0x100D, messageParam, this) != 0)
+ continue;
+ } else if (messageNum == 0x101A) {
+ _messageListStatus = 0;
+ } else if (messageNum == 0x101B) {
+ _messageListStatus = 2;
+ } else if (messageNum == 0x1020) {
+ _messageListFlag = false;
+ } else if (messageNum >= 0x2000 && messageNum <= 0x2FFF) {
+ if (this->hasMessageHandler() && this->sendMessage(messageNum, messageParam, this) != 0) {
+ _messageListFlag2 = false;
+ return;
+ }
+ } else {
+ _messageListFlag1 = true;
+ if (_klayman->hasMessageHandler() && _klayman->sendMessage(messageNum, messageParam, this) != 0) {
+ _messageListFlag1 = false;
+ }
+ }
+ }
+ if (_messageListIndex == _messageListCount) {
+ _messageListFlag = true;
+ _messageList = NULL;
+ }
+ }
+ }
+
+ _messageListFlag2 = false;
+
+}
+
+void Scene::setRectList(uint32 id) {
+ setRectList(_vm->_staticData->getRectList(id));
+}
+
+void Scene::setRectList(RectList *rectList) {
+ _rectList = rectList;
+ _rectType = 1;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 4928d20..34f3c1e 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -56,15 +56,15 @@ protected:
Common::Array<BaseSurface*> _surfaces;
bool _systemCallbackFlag;
MessageList *_messageList;
- int _messageListIndex;
- int _messageListCount;
+ uint _messageListCount;
+ uint _messageListIndex;
bool _messageListFlag1;
NPoint _mouseClickPos;
bool _mouseClicked;
// TODO RectResource _rectResource;
- // TODO 00000080 rectList dd ?
- // TODO 00000084 rectType dw ?
- // TODO 00000086 rectListCount dw ?
+ RectList *_rectList;
+ int _rectType;
+ // rectListCount
// TODO 00000088 someRects dd ?
// TODO 0000008C someRectsCount dw ?
// TODO 0000008E field_8E dw ?
@@ -93,6 +93,15 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void smackerUpdate();
uint32 smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ bool queryPositionSprite(int16 mouseX, int16 mouseY);
+ bool queryPositionRectList(int16 mouseX, int16 mouseY);
+ void setMessageList(uint32 id, bool messageListFlag = true, bool systemCallbackFlag = false);
+ void setMessageList(MessageList *messageList, bool messageListFlag = true, bool systemCallbackFlag = false);
+ bool setMessageList2(uint32 id, bool messageListFlag = true, bool systemCallbackFlag = false);
+ bool setMessageList2(MessageList *messageList, bool messageListFlag = true, bool systemCallbackFlag = false);
+ void runMessageList();
+ void setRectList(uint32 id);
+ void setRectList(RectList *rectList);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index ce21527..d925750 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -384,7 +384,7 @@ void AnimatedSprite::updateFrameIndex() {
}
void AnimatedSprite::updateFrameInfo() {
- debug("AnimatedSprite::updateFrameInfo()");
+ debug(8, "AnimatedSprite::updateFrameInfo()");
const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_frameIndex);
@@ -452,20 +452,44 @@ void AnimatedSprite::setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fil
_hashListIndex = -1;
}
+void AnimatedSprite::setCallback1(AnimationCb callback1) {
+ if (_callback1Cb) {
+ (this->*_callback1Cb)();
+ }
+ SetAnimationCallback1(callback1);
+}
+
+void AnimatedSprite::setCallback2(AnimationCb callback2) {
+
+ if (_callback1Cb) {
+ // _callback1Cb has to be cleared before it's called
+ AnimationCb cb = _callback1Cb;
+ _callback1Cb = NULL;
+ (this->*cb)();
+ }
+
+ // TODO _callbackList = NULL;
+ _callback3Cb = NULL;
+ _callback2Cb = callback2;
+
+ if (_callback2Cb) {
+ (this->*_callback2Cb)();
+ }
+
+}
+
void AnimatedSprite::removeCallbacks() {
if (_callback1Cb) {
// _callback1Cb has to be cleared before it's called
AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
- debug("Fire _callback1Cb");
(this->*cb)();
}
if (_callback3Cb) {
_callback2Cb = _callback3Cb;
_callback3Cb = NULL;
- debug("Fire _callback3Cb");
(this->*_callback2Cb)();
#if 0 // TODO
} else if (_callbackList) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index b3809a8..160bfe1 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -45,6 +45,8 @@ public:
void setDoDeltaX(int type);
void setDoDeltaY(int type);
bool isPointInside(int16 x, int16 y);
+ int16 getX() const { return _x; }
+ int16 getY() const { return _y; }
protected:
void (Sprite::*_spriteUpdateCb)();
int16 (Sprite::*_filterXCb)(int16);
@@ -98,6 +100,7 @@ public:
AnimatedSprite(NeverhoodEngine *vm, int objectPriority);
AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y);
void update();
+ void updateDeltaXY();
protected:
typedef void (AnimatedSprite::*AnimationCb)();
AnimResource _animResource;
@@ -129,7 +132,6 @@ protected:
AnimationCb _callback2Cb;
AnimationCb _callback3Cb;
void init();
- void updateDeltaXY();
void updateAnim();
void updatePosition();
void updateFrameIndex();
@@ -139,6 +141,8 @@ protected:
void setFileHash1();
void setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5);
void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
+ void setCallback1(AnimationCb callback1);
+ void setCallback2(AnimationCb callback2);
int16 getHashListIndex(uint32 fileHash) { return 0; } // TODO !!!
void removeCallbacks();
};
Commit: 222cd4a6513770914d09630d1001a8159ba3d0f9
https://github.com/scummvm/scummvm/commit/222cd4a6513770914d09630d1001a8159ba3d0f9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:46-07:00
Commit Message:
NEVERHOOD: More work on Scene1001 and Klayman
- Fix a bug in Klayman's walking
- The lever can now be used
- Other stuff is still missing
- Remove entity.cpp since it's not needed
Changed paths:
R engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/scene.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
deleted file mode 100644
index 9070d5c..0000000
--- a/engines/neverhood/entity.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/entity.h"
-
-namespace Neverhood {
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 29bf6be..c570084 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -49,8 +49,8 @@ public:
assert(_type == mptInteger || _type == mptPoint);
if (_type == mptInteger) {
NPoint pt;
- pt.x = (_integer >> 16) & 0xFFFF;
- pt.y = _integer & 0xFFFF;
+ pt.x = _integer & 0xFFFF;
+ pt.y = (_integer >> 16) & 0xFFFF;
return pt;
}
return _point;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index eca8e02..4a40b2f 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -53,7 +53,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
_counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
_counter2(0), /*_field118(0), */_status2(0), _flagE5(true), _attachedSprite(NULL), _flagE1(false),
- _status(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
+ _status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
_flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
// TODO
@@ -289,22 +289,24 @@ void Klayman::update41D2B0() {
}
bool Klayman::sub41CF10(AnimationCb callback) {
- if (_status2 != 2)
- return false;
- _status2 = 1;
- setFileHash(0x9A7020B8, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41F140);
- SetSpriteCallback(NULL);
- SetAnimationCallback3(callback);
- _flagE5 = false;
- return true;
+ if (_status2 == 2) {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x9A7020B8, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41F140);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(callback);
+ return true;
+ }
+ return false;
}
-void Klayman::sub41C7B0() {
+ void Klayman::sub41C7B0() {
if (_callback1Cb) {
- (this->*_callback1Cb)();
+ AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
+ (this->*cb)();
}
if (_callback3Cb) {
AnimationCb cb = _callback3Cb;
@@ -321,16 +323,18 @@ void Klayman::sub41C7B0() {
void Klayman::sub41C770() {
_flagFA = false;
- _status = 1;
+ _status3 = 1;
}
void Klayman::sub41C790() {
if (_flagFA)
- _status = 0;
+ _status3 = 0;
}
void Klayman::sub41FC80() {
if (!sub41CF10(AnimationCallback(&Klayman::sub41FC80))) {
+ _status2 = 1;
+ _flagE5 = true;
setFileHash(0x5420E254, 0, -1);
_counter = 0;
_counter3 = 0;
@@ -387,7 +391,7 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
sub41C790();
break;
case 0x481C:
- _status = param.asInteger();
+ _status3 = param.asInteger();
_flagFA = true;
messageResult = 1;
break;
@@ -413,6 +417,7 @@ void Klayman::sub41FF00() {
}
uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41D480(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -432,6 +437,7 @@ void Klayman::sub41FCF0() {
}
uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41F140(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -449,9 +455,9 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
void Klayman::sub41C930(int16 x, bool flag) {
debug("Klayman::sub41C930(%d, %d)", x, flag);
int16 xdiff = ABS(x - _x);
- if (xdiff == 0) {
+ if (x == _x) {
_x4 = x;
- if (_flagE1 || _flagE2 || _flagE3) {
+ if (!_flagE1 && !_flagE2 && !_flagE3) {
setCallback2(NULL);
sub41C7B0();
}
@@ -459,7 +465,7 @@ void Klayman::sub41C930(int16 x, bool flag) {
_x4 = x;
setCallback2(NULL);
sub41C7B0();
- } else if (xdiff <= 42 && _status != 3) {
+ } else if (xdiff <= 42 && _status3 != 3) {
if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
_x4 = x;
} else {
@@ -470,7 +476,6 @@ void Klayman::sub41C930(int16 x, bool flag) {
_x4 = x;
} else if (flag) {
_x4 = x;
- debug("#### 1");
// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
} else {
_x4 = x;
@@ -497,6 +502,7 @@ void Klayman::sub4211B0() {
}
uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41E920(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -526,10 +532,82 @@ bool Klayman::sub41CEB0(AnimationCb callback3) {
void Klayman::spriteUpdate41F250() {
debug("Klayman::spriteUpdate41F250()");
+
+ int16 xdiff = _x4 - _x;
+
+ if (_doDeltaX) {
+ _x -= _deltaX;
+ } else {
+ _x += _deltaX;
+ }
+ _deltaX = 0;
+
+ if (_doDeltaY) {
+ _y -= _deltaY;
+ } else {
+ _y += _deltaY;
+ }
+ _deltaY = 0;
+
+ if (_flag) {
+ if (xdiff > 6)
+ _x += 6;
+ else if (xdiff < -6)
+ _x -= 6;
+ else
+ _x = _x4;
+ }
+
+ processDelta();
+
}
void Klayman::spriteUpdate41F5F0() {
debug("Klayman::spriteUpdate41F5F0()");
+
+ int16 xdiff = _x4 - _x;
+
+ if (_frameIndex == 9) {
+ if (xdiff > 26)
+ _deltaX += xdiff - 26;
+ else if (xdiff < -26)
+ _deltaX -= xdiff + 26;
+ }
+
+ if (xdiff > _deltaX)
+ xdiff = _deltaX;
+ else if (xdiff < -_deltaX)
+ xdiff = -_deltaX;
+ _deltaX = 0;
+
+ if (_x4 != _x) {
+ HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ _x += xdiff;
+ if (_field114) {
+ // TODO KlaymanSprite_sub_41CF70
+ } else {
+ HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ if (hitRectNext->type == 0x5002) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
+ } else if (hitRectNext->type == 0x5003) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
+ } else if (hitRectPrev->type == 0x5002) {
+ if (xdiff > 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ } else if (hitRectPrev->type == 0x5003) {
+ if (xdiff < 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ }
+ }
+ processDelta();
+ }
+
}
void Klayman::sub41FB40() {
@@ -549,6 +627,7 @@ void Klayman::sub41FBB0() {
}
uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41DD80(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -579,6 +658,7 @@ uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41CD70(int16 x) {
+ debug("Klayman::sub41CD70(%d)", x);
if (x > _x) {
if (ABS(x - _x) <= 105) {
debug("// TODO sub41CAC0(x);");
@@ -615,7 +695,8 @@ void Klayman::sub41FB30() {
}
uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ debug("Klayman::handleMessage41EC70(%04X)", messageNum);
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -654,6 +735,7 @@ void Klayman::spriteUpdate41F300() {
}
uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41EB70(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -676,15 +758,16 @@ uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FA40() {
- if (_status == 2) {
+ if (_status3 == 2) {
sub41C7B0();
- } else if (_status == 3) {
- debug("// TODO sub420F20();");
+ } else if (_status3 == 3) {
+ debug("/////////////////////////////////////////////////// TODO sub420F20();");
// TODO sub420F20();
} else {
_flagE2 = true;
+ _flagE5 = true;
if (ABS(_x4 - _x) <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
- if (_status == 0) {
+ if (_status3 == 0) {
_status2 = 1;
setFileHash(0xF234EE31, 0, -1);
} else {
@@ -692,7 +775,7 @@ void Klayman::sub41FA40() {
setFileHash(0xF135CC21, 0, -1);
}
} else if (ABS(_x4 - _x) <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
- if (_status == 0) {
+ if (_status3 == 0) {
_status2 = 1;
setFileHash(0x8604A152, 0, -1);
} else {
@@ -700,7 +783,6 @@ void Klayman::sub41FA40() {
setFileHash(0xA246A132, 0, -1);
}
}
- _flagE5 = true;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DD80);
SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
@@ -714,20 +796,20 @@ void Klayman::spriteUpdate41F320() {
if (xdelta > _deltaX)
xdelta = _deltaX;
- else if (xdelta < _deltaX)
+ else if (xdelta < -_deltaX)
xdelta = -_deltaX;
_deltaX = 0;
if (xdiff == 0) {
sendMessage(0x1019, 0, this);
- } else if (_status != 2 && _status != 3 && xdiff <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
+ } else if (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
sendMessage(0x1019, 0, this);
- } else if (_status != 2 && _status != 3 && xdiff <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
+ } else if (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
sendMessage(0x1019, 0, this);
- } else if (_status == 3 && xdiff < 30) {
+ } else if (_status3 == 3 && xdiff < 30) {
sendMessage(0x1019, 0, this);
- } else if (_status == 3 && xdiff < 150 && _frameIndex >= 6) {
+ } else if (_status3 == 3 && xdiff < 150 && _frameIndex >= 6) {
sendMessage(0x1019, 0, this);
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
@@ -766,4 +848,18 @@ void Klayman::spriteUpdate41F320() {
}
+uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+ } else if (param.asInteger() == 0x88001184) {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 50a12ae..7b65e8d 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -78,7 +78,7 @@ protected:
bool _flagFA;
SoundResource _soundResource1;
SoundResource _soundResource2;
- int _status;
+ int _status3;
const KlaymanTableItem *_table;
int _tableCount;
int _tableMaxValue;
@@ -151,6 +151,8 @@ protected:
void spriteUpdate41F320();
+ uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
+
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 2058db9..eb656de 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -5,7 +5,6 @@ MODULE_OBJS = \
blbarchive.o \
collisionman.o \
detection.o \
- entity.o \
gamemodule.o \
graphics.o \
klayman.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index eea0d99..c631dc0 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -152,14 +152,17 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x480D:
- debug("########### A");
- // TODO setCallback2(AnimationCallback(&Klayman::sub44FA50));
+ setCallback2(AnimationCallback(&KmScene1001::sub44FA50));
break;
case 0x4812:
debug("########### B");
// TODO setCallback2(AnimationCallback(&Klayman::sub41FF80));
break;
-
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+
case 0x4836:
if (param.asInteger() == 1) {
_parentScene->sendMessage(0x2002, 0, this);
@@ -169,7 +172,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4840:
sub41CD70(param.asInteger());
- break;
+ break;
}
// TODO
@@ -189,7 +192,8 @@ void KmScene1001::sub44FA50() {
}
uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage(messageNum, param, sender);
+ debug("KmScene1001::handleMessage44FA00(%04X)", messageNum);
+ uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -372,7 +376,6 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
}
break;
case 0x1011:
- debug("Click lever");
_parentScene->sendMessage(0x4826, 0, this);
messageResult = 1;
break;
@@ -531,11 +534,10 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x21E64A00) {
if (_vm->getGlobalVar(0xD217189D)) {
setMessageList(0x004B48A8);
- messageResult = 1;
} else {
setMessageList(0x004B48C8);
- messageResult = 1;
}
+ messageResult = 1;
} else if (param.asInteger() == 0x040424D0) {
_klayman->sendMessage(0x1014, _ssButton, this);
} else if (param.asInteger() == 0x80006358) {
@@ -547,7 +549,6 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2002:
- debug("########## setRectList(0x004B49F0);");
setRectList(0x004B49F0);
break;
case 0x480B:
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 0e3e0a3..9c02919 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -79,6 +79,11 @@ Common::Error NeverhoodEngine::run() {
_res->addArchive("t.blb");
CursorMan.showMouse(true);
+ {
+ byte buffer[2*2];
+ memset(buffer, 255, 4);
+ CursorMan.replaceCursor(buffer, 2, 2, 0, 0, 0);
+ }
#if 0
BlbArchive *blb = new BlbArchive();
@@ -143,9 +148,6 @@ Common::Error NeverhoodEngine::run() {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_keyState = event.kbd.keycode;
-
- // DEBUG gameModule->sendMessage(0x480F, 0, NULL);
-
break;
case Common::EVENT_KEYUP:
_keyState = Common::KEYCODE_INVALID;
@@ -186,7 +188,7 @@ Common::Error NeverhoodEngine::run() {
_screen->wait();
_screen->update();
- //debug("---------------------------------------");
+ debug("---------------------------------------");
}
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index e3a29c5..83078af 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -267,8 +267,6 @@ void AnimResource::unload() {
void AnimResource::clear() {
_resourceHandle = -1;
- // _count = 0;
- // _infoStructs = NULL;
_currSpriteData = NULL;
_fileHash = 0;
_paletteData = NULL;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 9d7d550..9e1f06b 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -180,13 +180,13 @@ void Scene::update() {
if (_smkFileHash != 0) {
// TODO
//**** ALL TODO
- //_smackerPlayer = new SmackerPlayer(this, _smkFileHash, true, 0);
+ _smackerPlayer = new SmackerPlayer(_vm, this, _smkFileHash, true, 0);
_savedUpdateHandlerCb = _updateHandlerCb;
_savedMessageHandlerCb = _messageHandlerCb;
SetUpdateHandler(&Scene::smackerUpdate);
SetMessageHandler(&Scene::smackerHandleMessage);
_smackerDone = false;
- // smackerUpdate();
+ smackerUpdate();
// g_screen->smackerPlayer = _smackerPlayer;
_smkFileHash = 0;
} else {
@@ -219,7 +219,6 @@ void Scene::update() {
}
uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- // TODO
switch (messageNum) {
case 0: // mouse moved
#if 0
@@ -348,9 +347,8 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
}
}
}
- return true;
}
- return false;
+ return true;
}
void Scene::setMessageList(uint32 id, bool messageListFlag, bool systemCallbackFlag) {
@@ -358,6 +356,7 @@ void Scene::setMessageList(uint32 id, bool messageListFlag, bool systemCallbackF
}
void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
+ debug("Scene::setMessageList(%p)", (void*)messageList);
_messageList = messageList;
_messageListCount = _messageList ? _messageList->size() : 0;
_messageListIndex = 0;
@@ -366,6 +365,13 @@ void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool
_systemCallbackFlag = systemCallbackFlag;
_messageListStatus = 1;
_klayman->sendMessage(0x101C, 0, this);
+
+ // DEBUG: Show message list
+ for (uint i = 0; i < messageList->size(); i++) {
+ debug("%02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
+ }
+ debug("================================================================");
+
}
bool Scene::setMessageList2(uint32 id, bool messageListFlag, bool systemCallbackFlag) {
@@ -404,24 +410,19 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
}
_messageList2 = messageList;
setMessageList(messageList, messageListFlag, systemCallbackFlag);
+ result = true;
}
return result;
}
void Scene::runMessageList() {
+ debug("Scene::runMessageList() _messageListFlag2 = %d; _messageListFlag1 = %d", _messageListFlag2, _messageListFlag1);
- //debug("_messageListFlag2 = %d", _messageListFlag2);
-
- if (_messageListFlag2)
+ if (_messageListFlag2 || _messageListFlag1)
return;
_messageListFlag2 = true;
- if (_messageListFlag1) {
- _messageListFlag2 = false;
- return;
- }
-
if (!_messageList) {
_messageList2 = NULL;
_messageListStatus = 0;
@@ -433,7 +434,7 @@ void Scene::runMessageList() {
int messageNum = (*_messageList)[_messageListIndex].messageNum;
uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
- debug("$$$$$$$$$$$ Scene::runMessageList() %04X, %08X", messageNum, messageParam);
+ //debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
_messageListIndex++;
if (_messageListIndex == _messageListCount) {
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index d925750..713bfef 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -73,10 +73,12 @@ bool Sprite::isPointInside(int16 x, int16 y) {
}
uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- if (messageNum == 5) {
+ switch (messageNum) {
+ case 0x0005:
// TODO: Draw debug marker (?)
// TODO g_Screen->drawLine(_x - 5, _y, _x + 6, _y);
// TODO g_Screen->drawLine(_x, _y - 5, _x, _y + 6);
+ break;
}
return 0;
}
@@ -268,14 +270,16 @@ void AnimatedSprite::updateAnim() {
if (_animResource.loadInternal(_fileHash2)) {
_fileHash3 = _fileHash2;
} else {
+ debug("TODO");
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
if (_replNewByte != _replOldByte) {
+ debug("TODO");
// TODO _animResource.setRepl(_replOldByte, _replNewByte);
}
_fileHash2 = 0;
- if (_status != 0) {
+ if (_animStatus != 0) {
_frameIndex = _fileHash6 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash6)) : 0;
_frameIndex2 = _fileHash5 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash5)) : _animResource.getFrameCount() - 1;
} else {
@@ -292,17 +296,19 @@ void AnimatedSprite::updateAnim() {
}
if (_fileHash1 != 0) {
- if (_status == 2) {
+ if (_animStatus == 2) {
_hashListIndex = _frameIndex;
} else {
- if (_status == 1) {
+ if (_animStatus == 1) {
if (_animResource.loadInternal(_fileHash1)) {
_fileHash3 = _fileHash1;
} else {
+ debug("TODO");
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
if (_replNewByte != _replOldByte) {
+ debug("TODO");
// TODO _animResource.setRepl(_replOldByte, _replNewByte);
}
_fileHash1 = 0;
@@ -312,10 +318,12 @@ void AnimatedSprite::updateAnim() {
if (_animResource.loadInternal(_fileHash1)) {
_fileHash3 = _fileHash1;
} else {
+ debug("TODO");
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
if (_replNewByte != _replOldByte) {
+ debug("TODO");
// TODO _animResource.setRepl(_replOldByte, _replNewByte);
}
_fileHash1 = 0;
@@ -419,7 +427,7 @@ void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frame
_frameIndex3 = frameIndex3;
_frameIndex4 = frameIndex4;
_fileHash4 = 0;
- _status = 0;
+ _animStatus = 0;
_playBackwards = false;
_newHashListIndex = -1;
_hashListIndex = -1;
@@ -427,7 +435,7 @@ void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frame
void AnimatedSprite::setFileHash1() {
_fileHash1 = 1;
- _status = 2;
+ _animStatus = 2;
}
void AnimatedSprite::setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5) {
@@ -435,7 +443,7 @@ void AnimatedSprite::setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 file
_fileHash6 = fileHash6;
_fileHash5 = fileHash5;
_fileHash4 = 0;
- _status = 1;
+ _animStatus = 1;
_playBackwards = false;
_newHashListIndex = -1;
_hashListIndex = -1;
@@ -446,7 +454,7 @@ void AnimatedSprite::setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fil
_fileHash6 = fileHash6;
_fileHash5 = fileHash5;
_fileHash4 = 0;
- _status = 1;
+ _animStatus = 1;
_playBackwards = false;
_newHashListIndex = -1;
_hashListIndex = -1;
@@ -456,13 +464,12 @@ void AnimatedSprite::setCallback1(AnimationCb callback1) {
if (_callback1Cb) {
(this->*_callback1Cb)();
}
- SetAnimationCallback1(callback1);
+ _callback1Cb = callback1;
}
void AnimatedSprite::setCallback2(AnimationCb callback2) {
if (_callback1Cb) {
- // _callback1Cb has to be cleared before it's called
AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
(this->*cb)();
@@ -481,7 +488,6 @@ void AnimatedSprite::setCallback2(AnimationCb callback2) {
void AnimatedSprite::removeCallbacks() {
if (_callback1Cb) {
- // _callback1Cb has to be cleared before it's called
AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
(this->*cb)();
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 160bfe1..16f741a 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -113,7 +113,7 @@ protected:
int16 _frameIndex4;
uint32 _fileHash6;
uint32 _fileHash5;
- int16 _status;
+ int16 _animStatus;
int16 _counter;
int _hashListIndex;
int _newHashListIndex;
@@ -143,7 +143,6 @@ protected:
void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
void setCallback1(AnimationCb callback1);
void setCallback2(AnimationCb callback2);
- int16 getHashListIndex(uint32 fileHash) { return 0; } // TODO !!!
void removeCallbacks();
};
Commit: ed863b65b506fac9b55b83a4afa0a30c4bb8da8a
https://github.com/scummvm/scummvm/commit/ed863b65b506fac9b55b83a4afa0a30c4bb8da8a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:46-07:00
Commit Message:
NEVERHOOD: More work on Scene1001/Klayman
- The button can now be used, but looking at the open window doesn't work yet since game variables aren't implemented yet.
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 4a40b2f..a256495 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -476,6 +476,7 @@ void Klayman::sub41C930(int16 x, bool flag) {
_x4 = x;
} else if (flag) {
_x4 = x;
+ error("// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));");
// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
} else {
_x4 = x;
@@ -661,8 +662,7 @@ void Klayman::sub41CD70(int16 x) {
debug("Klayman::sub41CD70(%d)", x);
if (x > _x) {
if (ABS(x - _x) <= 105) {
- debug("// TODO sub41CAC0(x);");
- // TODO sub41CAC0(x);
+ sub41CAC0(x);
} else {
sub41C930(x, false);
}
@@ -761,7 +761,7 @@ void Klayman::sub41FA40() {
if (_status3 == 2) {
sub41C7B0();
} else if (_status3 == 3) {
- debug("/////////////////////////////////////////////////// TODO sub420F20();");
+ error("// TODO sub420F20();");
// TODO sub420F20();
} else {
_flagE2 = true;
@@ -862,4 +862,244 @@ uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub41FF80() {
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x);
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub41FF80))) {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x1C28C178, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D4C0);
+ SetSpriteCallback(NULL);
+ }
+}
+
+uint32 Klayman::handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41D4C0(%04X)", messageNum);
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC1380080) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x4806, 0, this);
+ }
+ _soundResource1.play(0x40208200);
+ } else if (param.asInteger() == 0x02B20220) {
+ _soundResource1.play(0xC5408620);
+ } else if (param.asInteger() == 0x03020231) {
+ _soundResource1.play(0xD4C08010);
+ } else if (param.asInteger() == 0x67221A03) {
+ _soundResource1.play(0x44051000);
+ } else if (param.asInteger() == 0x2EAE0303) {
+ _soundResource1.play(0x03630300);
+ } else if (param.asInteger() == 0x61CE4467) {
+ _soundResource1.play(0x03630300);
+ }
+ break;
+ }
+ return messageResult;
+
+}
+
+void Klayman::sub420120() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420120))) {
+ _status2 = 2;
+ _flagE5 = true;
+ setFileHash(0x1C02B03D, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DAD0);
+ SetSpriteCallback(NULL);
+ }
+}
+
+uint32 Klayman::handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41DAD0(%04X)", messageNum);
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x0D01B294) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x480B, 0, this);
+ }
+ } else if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub420170() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420170))) {
+ _status2 = 2;
+ _flagE5 = true;
+ setFileHash(0x1C16B033, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DAD0);
+ SetSpriteCallback(NULL);
+ }
+}
+
+void Klayman::sub4200D0() {
+ if (!sub41CF10(AnimationCallback(&Klayman::sub4200D0))) {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x1CD89029, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DAD0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ }
+}
+
+void Klayman::sub41CD00(int16 x) {
+ if (_x > x) {
+ if (_x - x <= 105) {
+ sub41CAC0(x);
+ } else {
+ sub41C930(x, false);
+ }
+ } else if (_x < x) {
+ sub41C930(x, false);
+ } else {
+ _x4 = x;
+ setCallback2(NULL);
+ sub41C7B0();
+ }
+}
+
+void Klayman::sub41CC40(int16 x1, int16 x2) {
+ if (_x > x1) {
+ if (_x == x1 + x2) {
+ _x4 = x1 + x2;
+ setCallback2(NULL);
+ sub41C7B0();
+ } else if (_x < x1 + x2) {
+ sub41CAC0(x1 + x2);
+ } else {
+ sub41C930(x1 + x2, false);
+ }
+ } else {
+ if (_x == x1 - x2) {
+ _x4 = x1 - x2;
+ setCallback2(NULL);
+ sub41C7B0();
+ } else if (_x > x1 - x2) {
+ sub41CAC0(x1 - x2);
+ } else {
+ sub41C930(x1 - x2, false);
+ }
+ }
+}
+
+void Klayman::sub41CAC0(int16 x) {
+ debug("Klayman::sub41CAC0(%d)", x);
+ int16 xdiff = ABS(x - _x);
+ if (x == _x) {
+ _x4 = x;
+ if (!_flagE1 && !_flagE2 && !_flagE3) {
+ setCallback2(NULL);
+ sub41C7B0();
+ }
+ } else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
+ _x4 = x;
+ setCallback2(NULL);
+ sub41C7B0();
+ } else if (xdiff <= 42 && _status3 != 3) {
+ if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
+ _x4 = x;
+ } else {
+ _x4 = x;
+ setCallback2(AnimationCallback(&Klayman::sub41FB40));
+ }
+ } else if (_flagE3 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _x4 = x;
+ } else {
+ _x4 = x;
+ setCallback2(AnimationCallback(&Klayman::sub41FBC0));
+ }
+}
+
+void Klayman::sub41FBC0() {
+ _status2 = 2;
+ _flagE3 = true;
+ _flagE5 = true;
+ setDoDeltaX(_x4 >= _x);
+ setFileHash(0x08B28116, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DF10);
+ SetSpriteCallback(&Klayman::spriteUpdate41F780);
+ setCallback1(AnimationCallback(&Klayman::sub41FC30));
+}
+
+void Klayman::sub41FC30() {
+ _flagE3 = false;
+}
+
+void Klayman::spriteUpdate41F780() {
+ int16 xdiff = _x4 - _x;
+
+ if (_doDeltaX) {
+ _deltaX = -_deltaX;
+ }
+
+ if (_frameIndex == 7) {
+ _deltaX = xdiff;
+ }
+
+ if ((xdiff > 0 && xdiff > _deltaX) || (xdiff < 0 && xdiff < _deltaX))
+ xdiff = _deltaX;
+
+ _deltaX = 0;
+
+ if (_x != _x4) {
+ HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ _x += xdiff;
+ if (_field114) {
+ debug("// TODO KlaymanSprite_sub_41CF70();");
+ // TODO KlaymanSprite_sub_41CF70();
+ } else {
+ HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ if (hitRectNext->type == 0x5002) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
+ } else if (hitRectNext->type == 0x5003) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
+ } else if (hitRectPrev->type == 0x5002) {
+ if (xdiff > 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ } else if (hitRectPrev->type == 0x5003) {
+ if (xdiff < 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ }
+ }
+ processDelta();
+ }
+}
+
+uint32 Klayman::handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41DF10(%04X)", messageNum);
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0A2AA8E0);
+ }
+ break;
+ case 0x3002:
+ _x = _x4;
+ sub41C7B0();
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 7b65e8d..860368a 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -53,9 +53,15 @@ public:
void sub41FC80();
void sub4211F0();
void sub4211B0();
+ void sub41FF80();
+ void sub420120();
+ void sub420170();
+ void sub4200D0();
+ void sub41FBC0();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
+ void spriteUpdate41F780();
protected:
Entity *_parentScene;
@@ -152,6 +158,17 @@ protected:
void spriteUpdate41F320();
uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ uint32 handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ uint32 handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub41CD00(int16 x);
+ void sub41CC40(int16 x1, int16 x2);
+ void sub41CAC0(int16 x);
+ void sub41FC30();
+
+ uint32 handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index c631dc0..0d727ba 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -155,14 +155,32 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&KmScene1001::sub44FA50));
break;
case 0x4812:
- debug("########### B");
- // TODO setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ }else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
sub41C7B0();
break;
+ case 0x481B:
+ // TODO: It's not really a point but an x1/x2 pair
+ if (param.asPoint().x != 0) {
+ sub41CC40(param.asPoint().x, param.asPoint().y);
+ } else {
+ error("// TODO sub41CCE0(param.asPoint().y);");
+ // TODO sub41CCE0(param.asPoint().y);
+ }
+ break;
+
case 0x4836:
if (param.asInteger() == 1) {
_parentScene->sendMessage(0x2002, 0, this);
@@ -170,6 +188,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+
case 0x4840:
sub41CD70(param.asInteger());
break;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 9e1f06b..ebf92d8 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -368,9 +368,9 @@ void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool
// DEBUG: Show message list
for (uint i = 0; i < messageList->size(); i++) {
- debug("%02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
+ debug("A: %02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
}
- debug("================================================================");
+ debug("A: ================================================================");
}
@@ -382,6 +382,12 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
bool result = false;
debug("Scene::setMessageList2(%p)", (void*)messageList);
+
+ // DEBUG: Show message list
+ for (uint i = 0; i < messageList->size(); i++) {
+ debug("B: %02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
+ }
+ debug("B: ================================================================");
if (_messageListStatus == 1) {
if (messageList != _messageList2) {
Commit: 6d81ef0199e3213a97c4ff8856322341ac231022
https://github.com/scummvm/scummvm/commit/6d81ef0199e3213a97c4ff8856322341ac231022
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Implement game vars
Changed paths:
A engines/neverhood/gamevars.cpp
A engines/neverhood/gamevars.h
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index c570084..7538b36 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -24,6 +24,7 @@
#define NEVERHOOD_ENTITY_H
#include "neverhood/neverhood.h"
+#include "neverhood/gamevars.h"
#include "neverhood/graphics.h"
namespace Neverhood {
@@ -104,6 +105,22 @@ public:
return sendMessage(messageNum, MessageParam((Entity*)param), sender);
}
int getPriority() const { return _priority; }
+ // Shortcuts for game variable access
+ uint32 getGlobalVar(uint32 nameHash) {
+ return _vm->_gameVars->getGlobalVar(nameHash);
+ }
+ void setGlobalVar(uint32 nameHash, uint32 value) {
+ _vm->_gameVars->setGlobalVar(nameHash, value);
+ }
+ uint32 getSubVar(uint32 nameHash, uint32 subNameHash) {
+ return _vm->_gameVars->getSubVar(nameHash, subNameHash);
+ }
+ void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
+ _vm->_gameVars->setSubVar(nameHash, subNameHash, value);
+ }
+ void incGlobalVar(uint32 nameHash, int incrValue) {
+ setGlobalVar(nameHash, getGlobalVar(nameHash) + incrValue);
+ }
protected:
void (Entity::*_updateHandlerCb)();
uint32 (Entity::*_messageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 47fff17..9989bba 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -103,7 +103,7 @@ void GameModule::startup() {
void GameModule::createModule1500(int which) {
_someFlag1 = false;
- _vm->setGlobalVar(0x91080831, 0x00F10114);
+ setGlobalVar(0x91080831, 0x00F10114);
_childObject = new Module1500(_vm, this, which, true);
SetUpdateHandler(&GameModule::updateModule1500);
}
@@ -122,7 +122,7 @@ void GameModule::updateModule1500() {
}
void GameModule::createModule1000(int which) {
- _vm->setGlobalVar(0x91080831, 0x03294419);
+ setGlobalVar(0x91080831, 0x03294419);
_childObject = new Module1000(_vm, this, which);
SetUpdateHandler(&GameModule::updateModule1000);
}
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
new file mode 100644
index 0000000..98ae709
--- /dev/null
+++ b/engines/neverhood/gamevars.cpp
@@ -0,0 +1,105 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/gamevars.h"
+
+namespace Neverhood {
+
+GameVars::GameVars() {
+ addVar(0, 0);
+}
+
+GameVars::~GameVars() {
+}
+
+uint32 GameVars::getGlobalVar(uint32 nameHash) {
+ debug("GameVars::getGlobalVar(%08X)", nameHash);
+ int16 varIndex = findSubVarIndex(0, nameHash);
+ return varIndex != -1 ? _vars[varIndex].value : 0;
+}
+
+void GameVars::setGlobalVar(uint32 nameHash, uint32 value) {
+ debug("GameVars::setGlobalVar(%08X, %d)", nameHash, value);
+ _vars[getSubVarIndex(0, nameHash)].value = value;
+}
+
+uint32 GameVars::getSubVar(uint32 nameHash, uint32 subNameHash) {
+ debug("GameVars::getSubVar(%08X, %08X)", nameHash, subNameHash);
+ uint32 value = 0;
+ int16 varIndex = findSubVarIndex(0, nameHash);
+ if (varIndex != -1) {
+ int16 subVarIndex = findSubVarIndex(varIndex, subNameHash);
+ if (subVarIndex != -1) {
+ value = _vars[subVarIndex].value;
+ }
+ }
+ return value;
+}
+
+void GameVars::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
+ debug("GameVars::setSubVar(%08X, %08X, %d)", nameHash, subNameHash, value);
+ _vars[getSubVarIndex(getSubVarIndex(0, nameHash), subNameHash)].value = value;
+}
+
+int16 GameVars::addVar(uint32 nameHash, uint32 value) {
+ debug("GameVars::addVar(%08X, %d)", nameHash, value);
+ GameVar gameVar;
+ gameVar.nameHash = nameHash;
+ gameVar.value = value;
+ gameVar.firstIndex = -1;
+ gameVar.nextIndex = -1;
+ _vars.push_back(gameVar);
+ return _vars.size() - 1;
+}
+
+int16 GameVars::findSubVarIndex(int16 varIndex, uint32 subNameHash) {
+ debug("GameVars::findSubVarIndex(%d, %08X)", varIndex, subNameHash);
+ for (int16 nextIndex = _vars[varIndex].firstIndex; nextIndex != -1; nextIndex = _vars[nextIndex].nextIndex) {
+ if (_vars[nextIndex].nameHash == subNameHash)
+ return nextIndex;
+ }
+ return -1;
+}
+
+int16 GameVars::addSubVar(int16 varIndex, uint32 subNameHash, uint32 value) {
+ debug("GameVars::addSubVar(%d, %08X, %d)", varIndex, subNameHash, value);
+ int16 nextIndex = _vars[varIndex].firstIndex;
+ if (nextIndex == -1) {
+ _vars[varIndex].firstIndex = addVar(subNameHash, value);
+ return _vars[varIndex].firstIndex;
+ } else {
+ while (_vars[nextIndex].nextIndex != -1)
+ nextIndex = _vars[nextIndex].nextIndex;
+ _vars[nextIndex].nextIndex = addVar(subNameHash, value);
+ return _vars[nextIndex].nextIndex;
+ }
+}
+
+int16 GameVars::getSubVarIndex(int16 varIndex, uint32 subNameHash) {
+ debug("GameVars::getSubVarIndex(%d, %08X)", varIndex, subNameHash);
+ int16 subVarIndex = findSubVarIndex(varIndex, subNameHash);
+ if (subVarIndex == -1)
+ subVarIndex = addSubVar(varIndex, subNameHash, 0);
+ return subVarIndex;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
new file mode 100644
index 0000000..863aa1b
--- /dev/null
+++ b/engines/neverhood/gamevars.h
@@ -0,0 +1,57 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_GAMEVARS_H
+#define NEVERHOOD_GAMEVARS_H
+
+#include "common/array.h"
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+struct GameVar {
+ uint32 nameHash;
+ uint32 value;
+ int16 firstIndex, nextIndex;
+};
+
+class GameVars {
+public:
+ GameVars();
+ ~GameVars();
+ // TODO void load(???);
+ // TODO void save(???);
+ uint32 getGlobalVar(uint32 nameHash);
+ void setGlobalVar(uint32 nameHash, uint32 value);
+ uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
+ void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value);
+protected:
+ Common::Array<GameVar> _vars;
+ int16 addVar(uint32 nameHash, uint32 value);
+ int16 findSubVarIndex(int16 varIndex, uint32 subNameHash);
+ int16 addSubVar(int16 varIndex, uint32 subNameHash, uint32 value);
+ int16 getSubVarIndex(int16 varIndex, uint32 subNameHash);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_GAMEVARS_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index eb656de..7961bc9 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -6,6 +6,7 @@ MODULE_OBJS = \
collisionman.o \
detection.o \
gamemodule.o \
+ gamevars.o \
graphics.o \
klayman.o \
module.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 0d727ba..b3c07c9 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -29,7 +29,7 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Create Module1000(%d)", which);
- _musicFileHash = _vm->getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144;
+ _musicFileHash = getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144;
// TODO Music18hList_add(0x03294419, 0x061880C6);
// TODO Music18hList_add(0x03294419, _musicFileHash);
@@ -256,7 +256,7 @@ uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m,
}
void AsScene1001Door::handleMessage2000h() {
- switch (_vm->getGlobalVar(0x52371C95)) {
+ switch (getGlobalVar(0x52371C95)) {
case 0:
case 1:
_soundResource1.play(0x65482F03);
@@ -272,11 +272,11 @@ void AsScene1001Door::handleMessage2000h() {
// Nothing
break;
}
- _vm->incGlobalVar(0x52371C95, 1);
+ incGlobalVar(0x52371C95, 1);
}
void AsScene1001Door::callback1() {
- switch (_vm->getGlobalVar(0x52371C95)) {
+ switch (getGlobalVar(0x52371C95)) {
case 1:
setFileHash(0x624C0498, 4, -1);
_newHashListIndex = 4;
@@ -297,7 +297,7 @@ void AsScene1001Door::callback1() {
}
void AsScene1001Door::callback2() {
- _vm->setGlobalVar(0xD217189D, 1);
+ setGlobalVar(0xD217189D, 1);
setFileHash(0x624C0498, 6, 6);
SetAnimationCallback3(&AsScene1001Door::callback3);
_x = 30;
@@ -367,7 +367,7 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
break;
case 0x3002:
SetMessageHandler(NULL);
- _vm->setGlobalVar(0x03C698DA, 1);
+ setGlobalVar(0x03C698DA, 1);
_surface->setVisible(false);
break;
}
@@ -474,7 +474,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
- if (_vm->getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(0xC0418A02)) {
_klayman = new KmScene1001(_vm, this, 390, 433);
_klayman->setDoDeltaX(1);
} else {
@@ -496,7 +496,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
- if (_vm->getGlobalVar(0xD217189D) == 0) {
+ if (getGlobalVar(0xD217189D) == 0) {
_asDoor = addSprite(new AsScene1001Door(_vm));
_asDoor->getSurface()->getClipRect().x1 = 0;
_asDoor->getSurface()->getClipRect().y1 = 0;
@@ -513,7 +513,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x15288120, 100, 0));
- if (_vm->getGlobalVar(0x03C698DA) == 0) {
+ if (getGlobalVar(0x03C698DA) == 0) {
staticSprite1 = addSprite(new StaticSprite(_vm, 0x8C066150, 200));
_asWindow = addSprite(new AsScene1001Window(_vm));
_asWindow->getSurface()->getClipRect().x1 = staticSprite1->getSurface()->getDrawRect().x;
@@ -529,7 +529,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1001::~Scene1001() {
- // TODO _vm->setGlobalVar(0xC0418A02, _klayman->_doDeltaX);
+ // TODO setGlobalVar(0xC0418A02, _klayman->_doDeltaX);
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -538,7 +538,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x == 0 && _vm->getGlobalVar(0xA4014072)) {
+ if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
_parentModule->sendMessage(0x1009, 0, this);
}
break;
@@ -554,7 +554,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList2(0x004B4910);
messageResult = 1;
} else if (param.asInteger() == 0x21E64A00) {
- if (_vm->getGlobalVar(0xD217189D)) {
+ if (getGlobalVar(0xD217189D)) {
setMessageList(0x004B48A8);
} else {
setMessageList(0x004B48C8);
@@ -563,7 +563,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x040424D0) {
_klayman->sendMessage(0x1014, _ssButton, this);
} else if (param.asInteger() == 0x80006358) {
- if (_vm->getGlobalVar(0x03C698DA)) {
+ if (getGlobalVar(0x03C698DA)) {
setMessageList(0x004B4938);
} else {
setMessageList(0x004B4960);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 9c02919..77483c5 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -30,6 +30,7 @@
#include "neverhood/blbarchive.h"
#include "neverhood/collisionman.h"
#include "neverhood/gamemodule.h"
+#include "neverhood/gamevars.h"
#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
#include "neverhood/resource.h"
@@ -67,6 +68,8 @@ Common::Error NeverhoodEngine::run() {
_staticData = new StaticData();
_staticData->load("neverhood.dat");
+ _gameVars = new GameVars();
+
_screen = new Screen(this);
_res = new ResourceMan();
@@ -198,6 +201,7 @@ Common::Error NeverhoodEngine::run() {
delete _res;
delete _screen;
+ delete _gameVars;
delete _staticData;
debug("Ok.");
@@ -205,26 +209,4 @@ Common::Error NeverhoodEngine::run() {
return Common::kNoError;
}
-uint32 NeverhoodEngine::getGlobalVar(uint32 nameHash) {
- // TODO
- return 0;
-}
-
-void NeverhoodEngine::setGlobalVar(uint32 nameHash, uint32 value) {
- // TODO
-}
-
-void NeverhoodEngine::incGlobalVar(uint32 nameHash, int incrValue) {
- setGlobalVar(nameHash, getGlobalVar(nameHash) - incrValue);
-}
-
-uint32 NeverhoodEngine::getSubVar(uint32 nameHash, uint32 subNameHash) {
- // TODO
- return 0;
-}
-
-void NeverhoodEngine::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
- // TODO
-}
-
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 952a99d..0070f08 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -41,6 +41,7 @@ struct NeverhoodGameDescription;
class CollisionMan;
class GameModule;
+class GameVars;
class ResourceMan;
class Screen;
class StaticData;
@@ -73,6 +74,7 @@ public:
uint16 _buttonState;
GameState _gameState;
+ GameVars *_gameVars;
Screen *_screen;
ResourceMan *_res;
GameModule *_gameModule;
@@ -114,11 +116,6 @@ public:
#endif
GameState& gameState() { return _gameState; }
- uint32 getGlobalVar(uint32 nameHash);
- void setGlobalVar(uint32 nameHash, uint32 value);
- void incGlobalVar(uint32 nameHash, int incrValue);
- uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
- void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value);
public:
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index d47dbb0..1584ac3 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -32,7 +32,7 @@ SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubl
// NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags)
- if (_vm->getGlobalVar(0x06C02850)) {
+ if (getGlobalVar(0x06C02850)) {
_flag1 = true;
_canAbort = true;
}
@@ -76,9 +76,9 @@ void SmackerScene::nextVideo() {
_parentModule->sendMessage(0x1009, 0, this);
return;
}
- _fieldDF = _vm->getSubVar(0x00800410, smackerFileHash);
+ _fieldDF = getSubVar(0x00800410, smackerFileHash);
if (!_fieldDF) {
- _vm->setSubVar(0x00800410, smackerFileHash, 1);
+ setSubVar(0x00800410, smackerFileHash, 1);
}
if (_fileHashListIndex == 0) {
_smackerPlayer = new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false);
Commit: c39fb81951dd1a442c9811ba7ce202fa3619be70
https://github.com/scummvm/scummvm/commit/c39fb81951dd1a442c9811ba7ce202fa3619be70
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: More work on Scene1001/Klayman
- Looking through the open window now works (mostly).
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index a256495..db88daf 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -1102,4 +1102,64 @@ uint32 Klayman::handleMessage41DF10(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub420870() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0xD820A114, 0, 10);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub4208B0() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0xD820A114, 30, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub4208F0() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x9B250AD2, 0, 7);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EEF0);
+ SetSpriteCallback(NULL);
+}
+
+uint32 Klayman::handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Klayman::handleMessage41EEF0(%04X)", messageNum);
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub420930() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x98F88391, 4, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EEF0);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub420830() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0xD820A114, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 860368a..4d883c3 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -58,6 +58,11 @@ public:
void sub420170();
void sub4200D0();
void sub41FBC0();
+ void sub420870();
+ void sub4208B0();
+ void sub4208F0();
+ void sub420930();
+ void sub420830();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -170,6 +175,8 @@ protected:
uint32 handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender);
+
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index b3c07c9..d31044c 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -65,7 +65,6 @@ Module1000::~Module1000() {
}
void Module1000::createScene1001(int which) {
- debug("createScene1501");
_vm->gameState().sceneNum = 0;
_childObject = new Scene1001(_vm, this, which);
// TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3);
@@ -77,6 +76,10 @@ void Module1000::createScene1002(int which) {
}
void Module1000::createScene1003(int which) {
+ _vm->gameState().sceneNum = 2;
+ _childObject = new Class152(_vm, this, 0xC084110C, 0x41108C00);
+ SetUpdateHandler(&Module1000::updateScene1003);
+ // TODO Music18hList_play(0x061880C6, 0, 0);
}
void Module1000::createScene1004(int which) {
@@ -89,12 +92,15 @@ void Module1000::updateScene1001() {
_childObject->handleUpdate();
if (_done) {
+
+ debug("SCENE 1001 DONE; _field20 = %d", _field20);
+
_done = false;
delete _childObject;
_childObject = NULL;
if (_field20 == 2) {
- // TODO createScene1003();
- // TODO _childObject->handleUpdate();
+ createScene1003(0);
+ _childObject->handleUpdate();
} else {
// TODO createScene1002();
// TODO _childObject->handleUpdate();
@@ -122,6 +128,14 @@ void Module1000::updateScene1002() {
}
void Module1000::updateScene1003() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1001(2);
+ _childObject->handleUpdate();
+ }
}
void Module1000::updateScene1004() {
@@ -181,6 +195,25 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger());
+ sub41C7B0();
+ break;
+
case 0x4836:
if (param.asInteger() == 1) {
_parentScene->sendMessage(0x2002, 0, this);
@@ -197,8 +230,6 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
}
- // TODO
-
return 0;
}
@@ -461,9 +492,8 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_background = addBackground(new DirtyBackground(_vm, 0x4086520E, 0, 0));
_palette = new Palette(_vm, 0x4086520E);
_palette->usePalette();
+ // TODO _mouseCursor = addSprite(new Class433(_vm, 6520A400, 0));
- // TODO Mouse
-
if (which < 0) {
setRectList(0x004B49F0);
_klayman = new KmScene1001(_vm, this, 200, 433);
@@ -587,4 +617,32 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+// Class152
+
+Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
+ : Scene(vm, parentModule, true), _fieldD0(-1), _fieldD2(-1) {
+
+ _surfaceFlag = false;
+
+ SetMessageHandler(&Class152::handleMessage);
+
+ _background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
+ _palette = new Palette(_vm, backgroundFileHash);
+ _palette->usePalette();
+ // TODO _mouseCursor = addSprite(new Class435(_vm, cursorFileHash, 20, 620));
+
+}
+
+uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index d74a0e1..c1c7c8e 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -130,6 +130,18 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// TODO: Move this to some common file since it's used several times
+
+class Class152 : public Scene {
+public:
+ Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash);
+protected:
+ // TODO: Are these used?
+ int16 _fieldD0;
+ int16 _fieldD2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1000_H */
Commit: 9f6e6c6f7fde2e1c927deee732cb03cf34d18455
https://github.com/scummvm/scummvm/commit/9f6e6c6f7fde2e1c927deee732cb03cf34d18455
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Implement MouseCursorResource and Mouse433 mouse cursor
Changed paths:
A engines/neverhood/mouse.cpp
A engines/neverhood/mouse.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 9989bba..c2d3e6d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -58,6 +58,16 @@ GameModule::~GameModule() {
}
+void GameModule::handleMouseMove(int16 x, int16 y) {
+ if (_childObject) {
+ NPoint mousePos;
+ mousePos.x = x;
+ mousePos.y = y;
+ debug("GameModule::handleMouseMove(%d, %d)", x, y);
+ _childObject->sendPointMessage(0, mousePos, this);
+ }
+}
+
void GameModule::handleMouseDown(int16 x, int16 y) {
if (_childObject) {
NPoint mousePos;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 7fce9eb..876506c 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -34,6 +34,7 @@ class GameModule : public Module {
public:
GameModule(NeverhoodEngine *vm);
virtual ~GameModule();
+ void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
protected:
Entity *_prevChildObject;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index f6ae118..68134bd 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -101,6 +101,12 @@ void BaseSurface::drawAnimResource(AnimResource &animResource, uint frameIndex,
}
}
+void BaseSurface::drawMouseCursorResource(MouseCursorResource &mouseCursorResource, int frameNum) {
+ if (frameNum < 3) {
+ mouseCursorResource.draw(frameNum, (byte*)_surface->pixels, _surface->pitch);
+ }
+}
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 59db1e5..2bddea3 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -52,6 +52,7 @@ struct NDrawRect {
class AnimResource;
class SpriteResource;
+class MouseCursorResource;
// NOTE: "Restore" methods aren't need in the reimplementation as they're DirectDraw-specific
@@ -65,6 +66,7 @@ public:
void drawSpriteResource(SpriteResource &spriteResource);
void drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height);
void drawAnimResource(AnimResource &animResource, uint frameIndex, bool flipX, bool flipY, int16 width, int16 height);
+ void drawMouseCursorResource(MouseCursorResource &mouseCursorResource, int frameNum);
int getPriority() const { return _priority; }
void setPriority(int priority) { _priority = priority; }
NDrawRect& getDrawRect() { return _drawRect; }
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 7911e44..790130a 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -30,6 +30,7 @@
#include "neverhood/collisionman.h"
#include "neverhood/entity.h"
#include "neverhood/graphics.h"
+#include "neverhood/mouse.h"
#include "neverhood/palette.h"
#include "neverhood/screen.h"
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 7961bc9..e39041e 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS = \
module.o \
module1000.o \
module1500.o \
+ mouse.o \
neverhood.o \
palette.o \
resource.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index d31044c..547f8c1 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -492,7 +492,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_background = addBackground(new DirtyBackground(_vm, 0x4086520E, 0, 0));
_palette = new Palette(_vm, 0x4086520E);
_palette->usePalette();
- // TODO _mouseCursor = addSprite(new Class433(_vm, 6520A400, 0));
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x6520A400, NULL));
if (which < 0) {
setRectList(0x004B49F0);
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
new file mode 100644
index 0000000..5693048
--- /dev/null
+++ b/engines/neverhood/mouse.cpp
@@ -0,0 +1,131 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/mouse.h"
+
+namespace Neverhood {
+
+// TODO: Use CursorMan
+
+Mouse433::Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect)
+ : StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0) {
+
+ debug("Mouse433::Mouse433(%08X)", fileHash);
+
+ if (mouseRect) {
+ _mouseRect = *mouseRect;
+ } else {
+ _mouseRect.x1 = -1;
+ _mouseRect.y1 = -1;
+ _mouseRect.x2 = -1;
+ _mouseRect.y2 = -1;
+ }
+ _mouseCursorResource.load(fileHash);
+ _x = _vm->getMouseX();
+ _y = _vm->getMouseY();
+ if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 &&
+ _y >= _mouseRect.y1 && _y <= _mouseRect.y2) {
+ _mouseCursorResource.setCursorNum(1);
+ } else {
+ _mouseCursorResource.setCursorNum(4);
+ }
+ createSurface(2000, 32, 32);
+ SetUpdateHandler(&Mouse433::update);
+ SetMessageHandler(&Mouse433::handleMessage);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = 32;
+ _drawRect.height = 32;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = 32;
+ _deltaRect.height = 32;
+ processDelta();
+ _needRefresh = true;
+ updateCursor();
+}
+
+void Mouse433::load(uint32 fileHash) {
+ _mouseCursorResource.load(fileHash);
+ _needRefresh = true;
+}
+
+void Mouse433::update() {
+ debug("Mouse433::update()");
+ updateCursor();
+ _frameNum++;
+ if (_frameNum >= 6)
+ _frameNum = 0;
+ _needRefresh = _frameNum % 2 == 0;
+}
+
+uint32 Mouse433::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Mouse433::handleMessage(%04X)", messageNum);
+ uint32 messageResult = 0;
+ if (messageNum != 5) {
+ messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4002:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 &&
+ _y >= _mouseRect.y1 && _y <= _mouseRect.y2) {
+ _mouseCursorResource.setCursorNum(1);
+ } else {
+ _mouseCursorResource.setCursorNum(4);
+ }
+ processDelta();
+ break;
+ }
+ } else {
+ // TODO: Debug stuff
+ }
+ return messageResult;
+}
+
+void Mouse433::updateCursor() {
+ debug("Mouse433::updateCursor()");
+
+ if (!_surface)
+ return;
+
+ if (_doDeltaX) {
+ _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
+ } else {
+ _surface->getDrawRect().x = filterX(_x + _drawRect.x);
+ }
+
+ if (_doDeltaY) {
+ _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
+ } else {
+ _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ }
+
+ if (_needRefresh) {
+ _needRefresh = false;
+ _drawRect = _mouseCursorResource.getRect();
+ _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
+ }
+
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
new file mode 100644
index 0000000..d03588f
--- /dev/null
+++ b/engines/neverhood/mouse.h
@@ -0,0 +1,48 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MOUSE_H
+#define NEVERHOOD_MOUSE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/sprite.h"
+#include "neverhood/graphics.h"
+#include "neverhood/resource.h"
+
+namespace Neverhood {
+
+class Mouse433 : public StaticSprite {
+public:
+ Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect);
+ void load(uint32 fileHash);
+protected:
+ MouseCursorResource _mouseCursorResource;
+ int _frameNum;
+ NRect _mouseRect;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void updateCursor();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MOUSE_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 77483c5..ab3cdc6 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -158,6 +158,7 @@ Common::Error NeverhoodEngine::run() {
case Common::EVENT_MOUSEMOVE:
_mouseX = event.mouse.x;
_mouseY = event.mouse.y;
+ _gameModule->handleMouseMove(event.mouse.x, event.mouse.y);
break;
case Common::EVENT_LBUTTONDOWN:
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 0070f08..4f6131a 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -69,7 +69,7 @@ public:
Common::RandomSource *_rnd;
- int _mouseX, _mouseY;
+ int16 _mouseX, _mouseY;
Common::KeyCode _keyState;
uint16 _buttonState;
@@ -116,6 +116,8 @@ public:
#endif
GameState& gameState() { return _gameState; }
+ int16 getMouseX() const { return _mouseX; }
+ int16 getMouseY() const { return _mouseY; }
public:
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 83078af..841827a 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -297,6 +297,58 @@ int16 AnimResource::getFrameIndex(uint32 frameHash) {
return -1;
}
+MouseCursorResource::MouseCursorResource(NeverhoodEngine *vm)
+ : _cursorSprite(vm), _cursorNum(4), _currFileHash(0) {
+
+ _rect.width = 32;
+ _rect.height = 32;
+}
+
+void MouseCursorResource::load(uint32 fileHash) {
+ if (_currFileHash != fileHash) {
+ if (_cursorSprite.load(fileHash) && !_cursorSprite.isRle() &&
+ _cursorSprite.getDimensions().width == 96 && _cursorSprite.getDimensions().height == 224) {
+ debug("load ok");
+ _currFileHash = fileHash;
+ } else {
+ unload();
+ }
+ }
+}
+
+void MouseCursorResource::unload() {
+ _cursorSprite.unload();
+ _currFileHash = 0;
+ _cursorNum = 4;
+}
+
+NDrawRect& MouseCursorResource::getRect() {
+ static const NPoint kCursorHotSpots[] = {
+ {-15, -5},
+ {-17, -25},
+ {-17, -30},
+ {-14, -1},
+ {-3, -7},
+ {-30, -18},
+ {-1, -18}
+ };
+ _rect.x = kCursorHotSpots[_cursorNum].x;
+ _rect.y = kCursorHotSpots[_cursorNum].y;
+ return _rect;
+}
+
+void MouseCursorResource::draw(int frameNum, byte *dest, int destPitch) {
+ if (_cursorSprite.getPixels()) {
+ int sourcePitch = (_cursorSprite.getDimensions().width + 3) & 0xFFFC; // 4 byte alignment
+ byte *source = _cursorSprite.getPixels() + _cursorNum * (sourcePitch * 32) + frameNum * 32;
+ for (int16 yc = 0; yc < 32; yc++) {
+ memcpy(dest, source, 32);
+ source += sourcePitch;
+ dest += destPitch;
+ }
+ }
+}
+
SoundResource::SoundResource(NeverhoodEngine *vm)
: _vm(vm) {
}
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 7540956..b2a98c7 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -38,6 +38,8 @@ public:
void unload();
const NDimensions& getDimensions() { return _dimensions; }
NPoint& getPosition() { return _position; }
+ bool isRle() const { return _rle; }
+ byte *getPixels() const { return _pixels; }
protected:
NeverhoodEngine *_vm;
int _resourceHandle;
@@ -99,6 +101,22 @@ protected:
Common::Array<AnimFrameInfo> _frames;
};
+class MouseCursorResource {
+public:
+ MouseCursorResource(NeverhoodEngine *vm);
+ void load(uint32 fileHash);
+ void unload();
+ NDrawRect& getRect();
+ void draw(int frameNum, byte *dest, int destPitch);
+ int getCursorNum() const { return _cursorNum; }
+ void setCursorNum(int value) { _cursorNum = value; }
+protected:
+ int _cursorNum;
+ SpriteResource _cursorSprite;
+ NDrawRect _rect;
+ uint32 _currFileHash;
+};
+
// TODO: Dummy class atm
class SoundResource {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index ebf92d8..3851cfa 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -38,7 +38,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_rectList = NULL;
// TODO _someRects = NULL;
_klayman = NULL;
- // TODO _mouseSprite = NULL;
+ _mouseCursor = NULL;
_palette = NULL;
_background = NULL;
// TODO _field_8E = -1;
@@ -221,11 +221,9 @@ void Scene::update() {
uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0: // mouse moved
-#if 0
- if (_mouseSprite && _mouseSprite->hasMessageHandler())
- _mouseSprite->sendMessage(0x4002, param, this);
- queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
-#endif
+ if (_mouseCursor && _mouseCursor->hasMessageHandler())
+ _mouseCursor->sendMessage(0x4002, param, this);
+ // TODO queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
break;
case 1: // mouse clicked
debug("mouse clicked");
@@ -268,20 +266,16 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
}
break;
case 0x101D:
-#if 0
- if (_mouseSprite) {
- _prevVisible = _mouseSprite->_drawSurface->_visible;
- _mouseSprite->_drawSurface->_visible = false;
+ if (_mouseCursor) {
+ _prevVisible = _mouseCursor->getSurface()->getVisible();
+ _mouseCursor->getSurface()->setVisible(false);
}
-#endif
break;
case 0x101E:
-#if 0
- if (_prevVisible && _mouseSprite) {
- _mouseSprite->_drawSurface->_visible = true;
- _mouseSprite->sendMessage(0x4002, g_Screen->_mousePos, this);
+ if (_prevVisible && _mouseCursor) {
+ _mouseCursor->getSurface()->setVisible(false);
+ // TODO _mouseCursor->sendMessage(0x4002, g_Screen->_mousePos, this);
}
-#endif
break;
case 0x1022:
setSurfacePriority(((Sprite*)sender)->getSurface(), param.asInteger());
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 34f3c1e..0878380 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -68,7 +68,7 @@ protected:
// TODO 00000088 someRects dd ?
// TODO 0000008C someRectsCount dw ?
// TODO 0000008E field_8E dw ?
- // TODO 00000094 mouseSprite dd ?
+ Sprite *_mouseCursor;
Klayman *_klayman;
Palette *_palette;
Background *_background;
Commit: 626cea6d1c516d4da1f8c6aad1bdb0552e54bf91
https://github.com/scummvm/scummvm/commit/626cea6d1c516d4da1f8c6aad1bdb0552e54bf91
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Implement Mouse435
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/mouse.cpp
engines/neverhood/mouse.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 547f8c1..bc52cfd 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -629,7 +629,7 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF
_background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
_palette = new Palette(_vm, backgroundFileHash);
_palette->usePalette();
- // TODO _mouseCursor = addSprite(new Class435(_vm, cursorFileHash, 20, 620));
+ _mouseCursor = addSprite(new Mouse435(_vm, cursorFileHash, 20, 620));
}
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 5693048..c753183 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -112,7 +112,103 @@ void Mouse433::updateCursor() {
_surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
} else {
_surface->getDrawRect().x = filterX(_x + _drawRect.x);
- }
+ }
+
+ if (_doDeltaY) {
+ _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
+ } else {
+ _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ }
+
+ if (_needRefresh) {
+ _needRefresh = false;
+ _drawRect = _mouseCursorResource.getRect();
+ _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
+ }
+
+}
+
+Mouse435::Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
+ : StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {
+
+ debug("Mouse435::Mouse435(%08X)", fileHash);
+
+ _mouseCursorResource.load(fileHash);
+ _x = _vm->getMouseX();
+ _y = _vm->getMouseY();
+ if (_x <= _x1) {
+ _mouseCursorResource.setCursorNum(6);
+ } else if (_x >= _x2) {
+ _mouseCursorResource.setCursorNum(5);
+ } else {
+ _mouseCursorResource.setCursorNum(4);
+ }
+ createSurface(2000, 32, 32);
+ SetUpdateHandler(&Mouse435::update);
+ SetMessageHandler(&Mouse435::handleMessage);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = 32;
+ _drawRect.height = 32;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = 32;
+ _deltaRect.height = 32;
+ processDelta();
+ _needRefresh = true;
+ updateCursor();
+}
+
+void Mouse435::load(uint32 fileHash) {
+ _mouseCursorResource.load(fileHash);
+ _needRefresh = true;
+}
+
+void Mouse435::update() {
+ debug("Mouse435::update()");
+ updateCursor();
+ _frameNum++;
+ if (_frameNum >= 6)
+ _frameNum = 0;
+ _needRefresh = _frameNum % 2 == 0;
+}
+
+uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Mouse435::handleMessage(%04X)", messageNum);
+ uint32 messageResult = 0;
+ if (messageNum != 5) {
+ messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4002:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ if (_x <= _x1) {
+ _mouseCursorResource.setCursorNum(6);
+ } else if (_x >= _x2) {
+ _mouseCursorResource.setCursorNum(5);
+ } else {
+ _mouseCursorResource.setCursorNum(4);
+ }
+ processDelta();
+ break;
+ }
+ } else {
+ // TODO: Debug stuff
+ }
+ return messageResult;
+}
+
+void Mouse435::updateCursor() {
+ debug("Mouse435::updateCursor()");
+
+ if (!_surface)
+ return;
+
+ if (_doDeltaX) {
+ _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
+ } else {
+ _surface->getDrawRect().x = filterX(_x + _drawRect.x);
+ }
if (_doDeltaY) {
_surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index d03588f..4bda936 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -43,6 +43,20 @@ protected:
void updateCursor();
};
+class Mouse435 : public StaticSprite {
+public:
+ Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2);
+ void load(uint32 fileHash);
+protected:
+ MouseCursorResource _mouseCursorResource;
+ int _frameNum;
+ int16 _x1;
+ int16 _x2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void updateCursor();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MOUSE_H */
Commit: be8d542264288343a4d60936f73f94906fc0e181
https://github.com/scummvm/scummvm/commit/be8d542264288343a4d60936f73f94906fc0e181
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Updated tables.h with data from Scene1002
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 6f1fc482..d6e230a 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -23,6 +23,8 @@
static const uint32 hitRectListOffsets[] = {
// Scene1001
0x004B4858,
+ // Scene1002
+ 0x004B4134,
0
};
@@ -30,6 +32,10 @@ static const uint32 rectListOffsets[] = {
// Scene1001
1, 0x004B49F0,
1, 0x004B4A00,
+ // Scene1002
+ 3, 0x004B43A0,
+ 1, 0x004B4418,
+ 3, 0x004B43A0,
0, 0
};
@@ -44,6 +50,20 @@ static const uint32 messageListOffsets[] = {
1, 0x004B4960,
4, 0x004B48A8,
3, 0x004B48C8,
+ // Scene1002
+ 1, 0x004B4270,
+ 1, 0x004B4478,
+ 3, 0x004B4298,
+ 1, 0x004B4470,
+ 4, 0x004B4428,
+ 5, 0x004B4448,
+ 1, 0x004B44B8,
+ 2, 0x004B44A8,
+ 1, 0x004B44A0,
+ 2, 0x004B43D0,
+ 4, 0x004B4480,
+ 2, 0x004B41E0,
+ 5, 0x004B4148,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index bbd7419..99e3fcc 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 92e08f21edfe48e6eb2a6c0b4f2a481f9df9827d
https://github.com/scummvm/scummvm/commit/92e08f21edfe48e6eb2a6c0b4f2a481f9df9827d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Start with Scene1002 (a lot incomplete)
Changed paths:
engines/neverhood/background.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/background.cpp b/engines/neverhood/background.cpp
index c47acd1..0c522db 100644
--- a/engines/neverhood/background.cpp
+++ b/engines/neverhood/background.cpp
@@ -65,7 +65,6 @@ DirtyBackground::DirtyBackground(NeverhoodEngine *vm, const char *fileName, int
// TODO _spriteResource.load(calcHash(fileName));
createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_surface->drawSpriteResource(_spriteResource);
-
}
DirtyBackground::DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority)
@@ -74,7 +73,6 @@ DirtyBackground::DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objec
_spriteResource.load(fileHash);
createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_surface->drawSpriteResource(_spriteResource);
-
}
void DirtyBackground::createSurface(int surfacePriority, int16 width, int16 height) {
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index db88daf..9acda93 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -49,6 +49,8 @@ static const KlaymanTableItem klaymanTable3[] = {
};
#endif
+// Klayman
+
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority)
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
_counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
@@ -1162,4 +1164,118 @@ void Klayman::sub420830() {
SetSpriteCallback(NULL);
}
+// KmScene1001
+
+KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+}
+
+uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ debug("KmScene1001::xHandleMessage() messageNum = %04X", messageNum);
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub4211B0));
+ }
+ break;
+ case 0x480D:
+ setCallback2(AnimationCallback(&KmScene1001::sub44FA50));
+ break;
+ case 0x4812:
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ }else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+
+ case 0x481B:
+ // TODO: It's not really a point but an x1/x2 pair
+ if (param.asPoint().x != 0) {
+ sub41CC40(param.asPoint().x, param.asPoint().y);
+ } else {
+ error("// TODO sub41CCE0(param.asPoint().y);");
+ // TODO sub41CCE0(param.asPoint().y);
+ }
+ break;
+
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger());
+ sub41C7B0();
+ break;
+
+ case 0x4836:
+ if (param.asInteger() == 1) {
+ _parentScene->sendMessage(0x2002, 0, this);
+ setCallback2(AnimationCallback(&Klayman::sub4211F0));
+ }
+ break;
+
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+
+ return 0;
+}
+
+void KmScene1001::sub44FA50() {
+ if (!sub41CEB0(AnimationCallback(&KmScene1001::sub44FA50))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x00648953, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1001::handleMessage44FA00);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ }
+}
+
+uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("KmScene1001::handleMessage44FA00(%04X)", messageNum);
+ uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x480F, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 4d883c3..24f70e1 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -179,6 +179,15 @@ protected:
};
+class KmScene1001 : public Klayman {
+public:
+ KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub44FA50();
+ uint32 handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index bc52cfd..f4b1694 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -53,7 +53,9 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
break;
}
} else if (which == 0) {
- createScene1001(0);
+ //createScene1001(0);
+ // DEBUG: Jump to room
+ createScene1002(0);
} else if (which == 1) {
createScene1002(1);
}
@@ -73,6 +75,11 @@ void Module1000::createScene1001(int which) {
}
void Module1000::createScene1002(int which) {
+ _vm->gameState().sceneNum = 1;
+ _childObject = new Scene1002(_vm, this, which);
+ // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
+ // TODO Music18hList_play(0x061880C6, 0, 0, 1);
+ SetUpdateHandler(&Module1000::updateScene1002);
}
void Module1000::createScene1003(int which) {
@@ -125,6 +132,51 @@ void Module1000::updateScene1001() {
}
void Module1000::updateScene1002() {
+
+ _childObject->handleUpdate();
+
+ if (_done) {
+
+ debug("SCENE 1002 DONE; _field20 = %d", _field20);
+
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else if (_field20 == 2) {
+ // TODO createScene1004(0);
+ // TODO _childObject->handleUpdate();
+ } else {
+ createScene1001(1);
+ _childObject->handleUpdate();
+ }
+ }
+
+ if (_field24 >= 0) {
+ if (_field24 == 1) {
+ _parentModule->sendMessage(0x100A, 0, this);
+ } else if (_field24 == 2) {
+ // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1);
+ } else {
+ // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable3);
+ }
+ _field24 = -1;
+ }
+
+ if (_field26 >= 0) {
+ if (_field26 == 1) {
+ _parentModule->sendMessage(0x1023, 0, this);
+ } else {
+ // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
+ }
+ _field26 = -1;
+ }
+
+ if (_field28 >= 0) {
+ _field28 = -1;
+ }
+
}
void Module1000::updateScene1003() {
@@ -146,117 +198,6 @@ void Module1000::updateScene1005() {
// Scene1001
-KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-}
-
-uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
- debug("KmScene1001::xHandleMessage() messageNum = %04X", messageNum);
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- sub41C930(param.asPoint().x, false);
- break;
- case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
- break;
- case 0x4804:
- if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub4211B0));
- }
- break;
- case 0x480D:
- setCallback2(AnimationCallback(&KmScene1001::sub44FA50));
- break;
- case 0x4812:
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
- break;
- case 0x4816:
- if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
- } else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
- }else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- sub41C7B0();
- break;
-
- case 0x481B:
- // TODO: It's not really a point but an x1/x2 pair
- if (param.asPoint().x != 0) {
- sub41CC40(param.asPoint().x, param.asPoint().y);
- } else {
- error("// TODO sub41CCE0(param.asPoint().y);");
- // TODO sub41CCE0(param.asPoint().y);
- }
- break;
-
- case 0x481F:
- if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
- } else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
- } else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
- } else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
- } else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
- }
- break;
-
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger());
- sub41C7B0();
- break;
-
- case 0x4836:
- if (param.asInteger() == 1) {
- _parentScene->sendMessage(0x2002, 0, this);
- setCallback2(AnimationCallback(&Klayman::sub4211F0));
- }
- break;
-
- case 0x483F:
- sub41CD00(param.asInteger());
- break;
-
- case 0x4840:
- sub41CD70(param.asInteger());
- break;
- }
-
- return 0;
-}
-
-void KmScene1001::sub44FA50() {
- if (!sub41CEB0(AnimationCallback(&KmScene1001::sub44FA50))) {
- _status2 = 2;
- _flagE5 = false;
- setFileHash(0x00648953, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1001::handleMessage44FA00);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- }
-}
-
-uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("KmScene1001::handleMessage44FA00(%04X)", messageNum);
- uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x480F, 0, this);
- }
- break;
- }
- return messageResult;
-}
-
AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm) {
@@ -483,7 +424,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_name = "Scene1001";
- Sprite *staticSprite1;
+ Sprite *tempSprite;
SetMessageHandler(&Scene1001::handleMessage);
@@ -518,19 +459,19 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
addSprite(_klayman);
- staticSprite1 = addSprite(new StaticSprite(_vm, 0x2080A3A8, 1300));
+ tempSprite = addSprite(new StaticSprite(_vm, 0x2080A3A8, 1300));
// TODO: This sucks somehow, find a better way
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
if (getGlobalVar(0xD217189D) == 0) {
_asDoor = addSprite(new AsScene1001Door(_vm));
_asDoor->getSurface()->getClipRect().x1 = 0;
_asDoor->getSurface()->getClipRect().y1 = 0;
- _asDoor->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
+ _asDoor->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
_asDoor->getSurface()->getClipRect().y2 = 480;
} else {
_asDoor = NULL;
@@ -544,12 +485,12 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x15288120, 100, 0));
if (getGlobalVar(0x03C698DA) == 0) {
- staticSprite1 = addSprite(new StaticSprite(_vm, 0x8C066150, 200));
+ tempSprite = addSprite(new StaticSprite(_vm, 0x8C066150, 200));
_asWindow = addSprite(new AsScene1001Window(_vm));
- _asWindow->getSurface()->getClipRect().x1 = staticSprite1->getSurface()->getDrawRect().x;
- _asWindow->getSurface()->getClipRect().y1 = staticSprite1->getSurface()->getDrawRect().y;
- _asWindow->getSurface()->getClipRect().x2 = staticSprite1->getSurface()->getDrawRect().x + staticSprite1->getSurface()->getDrawRect().width;
- _asWindow->getSurface()->getClipRect().y2 = staticSprite1->getSurface()->getDrawRect().y + staticSprite1->getSurface()->getDrawRect().height;
+ _asWindow->getSurface()->getClipRect().x1 = tempSprite->getSurface()->getDrawRect().x;
+ _asWindow->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
+ _asWindow->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
+ _asWindow->getSurface()->getClipRect().y2 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
} else {
_asWindow = NULL;
}
@@ -559,7 +500,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1001::~Scene1001() {
- // TODO setGlobalVar(0xC0418A02, _klayman->_doDeltaX);
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX());
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -617,6 +558,335 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+// Scene1002
+
+SsScene1002LadderArch::SsScene1002LadderArch(NeverhoodEngine *vm, Scene *parentScene)
+ : StaticSprite(vm, 0x152C1313, 1015), _parentScene(parentScene) {
+
+ SetMessageHandler(&SsScene1002LadderArch::handleMessage);
+}
+
+uint32 SsScene1002LadderArch::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 995, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1015, this);
+ break;
+ }
+ return messageResult;
+}
+
+Class599::Class599(NeverhoodEngine *vm, Scene *parentScene)
+ : StaticSprite(vm, 0x316C4BB4, 1015), _parentScene(parentScene) {
+
+ SetMessageHandler(&Class599::handleMessage);
+}
+
+uint32 Class599::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 995, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1015, this);
+ break;
+ }
+ return messageResult;
+}
+
+Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
+ _flag1B4(false), _flag1BE(false) {
+
+ static const uint32 kClass426FileHashList[] = {
+ 0x00412692,
+ 0x140B60BE
+ };
+
+ NRect tempClipRect;
+ Sprite *tempSprite;
+
+ // TODO _field1B6 = -1;
+ // TODO _resourceTable8.setResourceList(0x004B4110);
+ // TODO _resourceTable7.setResourceList(0x004B4100);
+ // TODO _resourceTable6.setResourceList(0x004B40E8);
+ // TODO _resourceTable5.setResourceList(0x004B40C0);
+ // TODO _resourceTable4.setResourceList(0x004B4080);
+ // TODO _resourceTable3.setResourceList(0x004B4060);
+ // TODO _resourceTable2.setResourceList(0x004B4000, true);
+ // TODO _resourceTable1.setResourceList(0x004B3F90, true);
+ // TODO _resourceTable1.loadSome(3000);
+
+ SetUpdateHandler(&Scene1002::update);
+ SetMessageHandler(&Scene1002::handleMessage);
+
+ _vm->_collisionMan->setHitRects(0x004B4134);
+
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x12C23307, 0, 0));
+ _palette = new Palette(_vm, 0x12C23307);
+ _palette->usePalette();
+
+ _flag = false;
+
+ addSprite(new StaticSprite(_vm, 0x06149428, 1100));
+ addSprite(new StaticSprite(_vm, 0x312C8774, 1100));
+
+ _ssLadderArch = addSprite(new SsScene1002LadderArch(_vm, this));
+ _ssLadderArchPart1 = addSprite(new StaticSprite(_vm, 0x060000A0, 1200));
+ _ssLadderArchPart2 = addSprite(new StaticSprite(_vm, 0xB2A423B0, 1100));
+ _ssLadderArchPart3 = addSprite(new StaticSprite(_vm, 0x316E0772, 1100));
+
+ _class599 = addSprite(new Class599(_vm, this));
+
+// _ssLadderArchPart3->getSurface()->getDrawRect().x = 200;
+
+#if 0
+ if (which < 0) {
+ if (_vm->_gameState.field2 == 0) {
+ _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226));
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4270);
+ // TODO
+ // TODO _klayman->setRepl(64, 0);
+ } else {
+ _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435));
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4270);
+ // TODO
+ }
+ } else {
+ if (which == 1) {
+ _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435));
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4478);
+ // TODO
+ _vm->_gameState.field2 = 1;
+ } else if (which == 2) {
+ _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645));
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4298);
+ // TODO
+ _vm->_gameState.field2 = 1;
+ _klayman->sendMessage(0x4820, 0, this);
+ } else {
+ _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226));
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4470);
+ // TODO
+ _class479 = addSprite(new Class479(_vm, this, _klayman));
+ // TODO
+ // TODO _klayman->setRepl(64, 0);
+ _vm->_gameState.field2 = 0;
+ }
+ }
+#endif
+
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL));
+
+ // TODO
+
+ addSprite(new StaticSprite(_vm, 0xB3242310, 825));
+
+ // TODO
+
+#if 0
+
+ _class502_1 = addSprite(new Class502(_vm, this, false, 258, 191, _class599->getSurface()->getDrawRect().y, false);
+ _class502_2 = addSprite(new Class502(_vm, this, false, 297, 189, _class599->getSurface()->getDrawRect().y, false);
+ _class502_3 = addSprite(new Class502(_vm, this, true, 201, 370, _class599->getSurface()->getDrawRect().y, getGlobalVar(0x8306F218) != 0);
+ _class502_4 = addSprite(new Class502(_vm, this, false, 334, 191, _class599->getSurface()->getDrawRect().y, false);
+ _class502_5 = addSprite(new Class502(_vm, this, false, 425, 184, _class599->getSurface()->getDrawRect().y, false);
+
+ _class431 = addSprite(new Class431(_vm, tempClipRect));
+
+ tempSprite = addSprite(new Class505(_vm, tempClipRect));
+
+ _class504 = addSprite(new Class504(_vm, tempClipRect, this, _class431, tempSprite));
+ _class426 = addSprite(new Class426(_vm, this, kClass426FileHashList, 800, 0));
+ _class503 = addSprite(new Class503(_vm, this, _klayman, false));
+
+ _vm->_collisionMan->addSprite(_class503);
+ _klayman->sendEntityMessage(0x2007, _class503, this);
+
+ _class506 = addSprite(new Class506(_vm));
+
+ setRectList(0x004B43A0);
+
+#endif
+
+#if 0 // TODO
+ _soundResource2.load(0x60755842);
+ _soundResource3.load(0x616D5821);
+#endif
+
+}
+
+Scene1002::~Scene1002() {
+}
+
+void Scene1002::update() {
+ Scene::update();
+#if 0 // TODO: Waiting for Klayman...
+ if (!_flag1B4 && _klayman->getY() > 230) {
+ // TODO
+ deleteSprite(&_ssLadderArchPart3);
+ _klayman->clearRepl();
+ _flag1B4 = true;
+ _vm->_gameState.field2 = 1;
+ }
+
+ if (_flag1BE && _klayman->getY() > 422) {
+ _parentModule->sendMessage(0x1024, 1, this);
+ _flag1BE = false;
+ }
+
+#endif
+
+}
+
+uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
+ setGlobalVar(0x8306F218, 1);
+ setGlobalVar(0x1B144052, 3);
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+ break;
+ case 0x000D:
+ if (param.asInteger() == 0x48848178) {
+ setGlobalVar(0x8306F218, 1);
+ setGlobalVar(0x1B144052, 3);
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+ messageResult = 1;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0xE6EE60E1) {
+ if (getGlobalVar(0x8306F218)) {
+ setMessageList(0x004B4428);
+ } else {
+ // TODO _resourceTable3.load();
+ setMessageList(0x004B4448);
+ }
+ messageResult = 1;
+ } else if (param.asInteger() == 0x4A845A00) {
+ // TODO _resourceTable4.load();
+ _klayman->sendEntityMessage(0x1014, _class502_1, this);
+ } else if (param.asInteger() == 0x43807801) {
+ // TODO _resourceTable4.load();
+ _klayman->sendEntityMessage(0x1014, _class502_2, this);
+ } else if (param.asInteger() == 0x46C26A01) {
+ if (getGlobalVar(0x8306F218)) {
+ setMessageList(0x004B44B8);
+ } else {
+ _klayman->sendEntityMessage(0x1014, _class502_3, this);
+ if (_class503->getX() - 10 < 366 && _class503->getX() + 10 > 366) {
+ setGlobalVar(0x2B514304, 1);
+ setMessageList(0x004B44A8);
+ } else {
+ // TODO _resourceTable5.load();
+ setMessageList(0x004B44A0);
+ }
+ }
+ messageResult = 1;
+ } else if (param.asInteger() == 0x468C7B11) {
+ // TODO _resourceTable4.load();
+ _klayman->sendEntityMessage(0x1014, _class502_4, this);
+ } else if (param.asInteger() == 0x42845B19) {
+ // TODO _resourceTable4.load();
+ _klayman->sendEntityMessage(0x1014, _class502_5, this);
+ } else if (param.asInteger() == 0xC0A07458) {
+ _klayman->sendEntityMessage(0x1014, _class426, this);
+ }
+ break;
+ case 0x1024:
+ if (param.asInteger() == 1) {
+ // TODO _resourceTable3.load();
+ } else if (param.asInteger() == 3) {
+ // TODO _resourceTable2.load();
+ }
+ _parentModule->sendMessage(0x1024, param, this);
+ break;
+ case 0x2000:
+ if (_flag) {
+ setMessageList2(0x004B43D0);
+ } else {
+ if (_klayman->getY() > 420) {
+ _klayman->sendEntityMessage(0x1014, _class503, this);
+ setMessageList2(0x004B4480);
+ } else if (_klayman->getY() > 227) {
+ setMessageList2(0x004B41E0);
+ } else {
+ setMessageList2(0x004B4148);
+ }
+ }
+ break;
+ case 0x2002:
+ _messageList = NULL;
+ break;
+ case 0x2005:
+ _flag = true;
+ setRectList(0x004B4418);
+ break;
+ case 0x2006:
+ _flag = false;
+ setRectList(0x004B43A0);
+ break;
+ case 0x4806:
+ _parentModule->sendMessage(0x1024, 2, this);
+ _flag1BE = true;
+ if (sender == _class502_1) {
+ setGlobalVar(0x4DE80AC0, 0);
+ _soundResource1.play(0x665198C0);
+ } else if (sender == _class502_2) {
+ setGlobalVar(0x4DE80AC0, 0);
+ _soundResource1.play(0xE2D389C0);
+ } else if (sender == _class502_3) {
+ setGlobalVar(0x4DE80AC0, 0);
+ _soundResource2.play();
+ _class431->sendMessage(0x4808, 0, this);
+ _class506->sendMessage(0x4808, 0, this);
+ } else if (sender == _class502_4) {
+ setGlobalVar(0x4DE80AC0, 0);
+ _soundResource1.play(0xE0558848);
+ } else if (sender == _class502_5) {
+ setGlobalVar(0x4DE80AC0, 1);
+ _soundResource1.play(0x44014282);
+ }
+ break;
+ case 0x4807:
+ if (sender == _class502_3) {
+ _soundResource3.play();
+ _class431->sendMessage(0x4809, 0, this);
+ _class506->sendMessage(0x4809, 0, this);
+ } else if (sender == _class503) {
+ if (getGlobalVar(0x8306F218)) {
+ _class502_3->sendMessage(0x4807, 0, this);
+ }
+ }
+ break;
+ case 0x480B:
+ _klayman->sendEntityMessage(0x1014, _class504, this);
+ break;
+ case 0x480F:
+ setGlobalVar(0x4DE80AC0, 0);
+ _soundResource2.play();
+ _class431->sendMessage(0x4808, 0, this);
+ _class506->sendMessage(0x4808, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
// Class152
Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
@@ -630,7 +900,6 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF
_palette = new Palette(_vm, backgroundFileHash);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse435(_vm, cursorFileHash, 20, 620));
-
}
uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index c1c7c8e..c5c03b5 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -55,15 +55,6 @@ protected:
// Scene1001
-class KmScene1001 : public Klayman {
-public:
- KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub44FA50();
- uint32 handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
class AsScene1001Door : public AnimatedSprite {
public:
AsScene1001Door(NeverhoodEngine *vm);
@@ -142,6 +133,64 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// Scene1002
+
+class SsScene1002LadderArch : public StaticSprite {
+public:
+ SsScene1002LadderArch(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Class599 : public StaticSprite {
+public:
+ Class599(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1002 : public Scene {
+public:
+ Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene1002();
+protected:
+ // TODO ResourceTable _resourceTable1;
+ // TODO ResourceTable _resourceTable2;
+ // TODO ResourceTable _resourceTable3;
+ // TODO ResourceTable _resourceTable4;
+ // TODO ResourceTable _resourceTable5;
+ // TODO ResourceTable _resourceTable6;
+ // TODO ResourceTable _resourceTable7;
+ // TODO ResourceTable _resourceTable8;
+ Sprite *_class502_1;
+ Sprite *_class502_2;
+ Sprite *_class502_3;
+ Sprite *_class502_4;
+ Sprite *_class502_5;
+ Sprite *_class431;
+ Sprite *_class504;
+ Sprite *_class503;
+ Sprite *_ssLadderArch;
+ Sprite *_ssLadderArchPart1;
+ Sprite *_ssLadderArchPart2;
+ Sprite *_ssLadderArchPart3;
+ Sprite *_class599;
+ Sprite *_class478;
+ Sprite *_class479;
+ Sprite *_class506;
+ Sprite *_class426;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ bool _flag1B4;
+ bool _flag1BE;
+ bool _flag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1000_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index ab3cdc6..abae6eb 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -65,6 +65,12 @@ Common::Error NeverhoodEngine::run() {
_isSaveAllowed = false;
+ _mouseX = 0;
+ _mouseY = 0;
+
+ _gameState.sceneNum = 0;
+ _gameState.field2 = 0;
+
_staticData = new StaticData();
_staticData->load("neverhood.dat");
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 4f6131a..38d773a 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -48,6 +48,7 @@ class StaticData;
struct GameState {
int sceneNum;
+ int field2;
};
class NeverhoodEngine : public ::Engine {
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 713bfef..222368c 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -106,10 +106,12 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfac
StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
+
+ debug("StaticSprite::StaticSprite(%08X)", fileHash);
_name = "StaticSprite";
init(fileHash, surfacePriority, x, y, width, height);
-
+
}
void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 16f741a..0368d2d 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -47,6 +47,8 @@ public:
bool isPointInside(int16 x, int16 y);
int16 getX() const { return _x; }
int16 getY() const { return _y; }
+ bool isDoDeltaX() const { return _doDeltaX; }
+ bool isDoDeltaY() const { return _doDeltaY; }
protected:
void (Sprite::*_spriteUpdateCb)();
int16 (Sprite::*_filterXCb)(int16);
Commit: ffe024844b2f97fe4e735603308e505a7bcd982d
https://github.com/scummvm/scummvm/commit/ffe024844b2f97fe4e735603308e505a7bcd982d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: More work on Scene1002
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/scene.cpp
engines/neverhood/screen.cpp
engines/neverhood/smackerplayer.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c2d3e6d..4354797 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -33,7 +33,7 @@ GameModule::GameModule(NeverhoodEngine *vm)
// Other initializations moved to actual engine class
- // TODO
+ // TODO .text:0048AD96
// TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 9acda93..562624d 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -58,7 +58,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
_flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
- // TODO
+ // TODO .text:0041C4D3 DirtySurface
createSurface(surfacePriority, 320, 200);
_x = x;
_y = y;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index f4b1694..703796e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -598,6 +598,230 @@ uint32 Class599::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
+AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _flag1(flag1) {
+
+ SetUpdateHandler(&AsScene1002Ring::update);
+
+ if (flag1) {
+ createSurface(990, 68, 314);
+ if (flag2) {
+ setFileHash(0x04103090, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ } else {
+ setFileHash(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
+ }
+ } else {
+ createSurface(990, 68, 138);
+ setFileHash(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
+ }
+
+ debug("clipY1 = %d", clipY1);
+
+ _surface->getClipRect().x1 = 0;
+ _surface->getClipRect().y1 = clipY1;
+ _surface->getClipRect().x2 = 640;
+ _surface->getClipRect().y2 = 480;
+
+ _x = x;
+ _y = y;
+
+ setDoDeltaX(_vm->_rnd->getRandomNumber(1));
+
+}
+
+void AsScene1002Ring::update() {
+ AnimatedSprite::updateAnim();
+ AnimatedSprite::updatePosition();
+}
+
+uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4806:
+ setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
+ _parentScene->sendMessage(0x4806, 0, this);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447760);
+ if (_flag1) {
+ setFileHash(0x87502558, 0, -1);
+ } else {
+ setFileHash(0x80DD4010, 0, -1);
+ }
+ break;
+ case 0x480F:
+ setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
+ _parentScene->sendMessage(0x480F, 0, this);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447890);
+ setFileHash(0x861A2020, 0, -1);
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002Ring::handleMessage447760(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ if (_flag1) {
+ setFileHash(0x78D0A812, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ } else {
+ setFileHash(0xB85D2A10, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ }
+ break;
+ case 0x4807:
+ _parentScene->sendMessage(0x4807, 0, this);
+ setDoDeltaX(_vm->_rnd->getRandomNumber(1));
+ setFileHash(0x8258A030, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002Ring::handleMessage447890(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ setFileHash(0x04103090, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002Ring::handleMessage447930(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4807:
+ _parentScene->sendMessage(0x4807, 0, this);
+ setDoDeltaX(_vm->_rnd->getRandomNumber(1));
+ setFileHash(0x8258A030, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002Ring::handleMessage447A00(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage4475E0(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x05410F72) {
+ _soundResource.play(0x21EE40A9);
+ }
+ break;
+ case 0x3002:
+ setFileHash(0xA85C4011, 0, -1);
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
+ : StaticSprite(vm, 1200) {
+
+ _spriteResource.load2(0x1052370F);
+ createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _surface->getClipRect() = clipRect;
+
+ _x = 526;
+
+ if (getGlobalVar(0x8306F218)) {
+ _y = 49;
+ } else {
+ _y = 239;
+ }
+
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+
+ _needRefresh = true;
+
+ SetUpdateHandler(&AsScene1002Door::update);
+ SetMessageHandler(&AsScene1002Door::handleMessage);
+ SetSpriteCallback(NULL);
+ StaticSprite::update();
+
+}
+
+void AsScene1002Door::update() {
+ handleSpriteUpdate();
+ StaticSprite::update();
+}
+
+uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4808:
+ setGlobalVar(0x8306F218, 1);
+ SetSpriteCallback(&AsScene1002Door::spriteUpdate447D10);
+ break;
+ case 0x4809:
+ setGlobalVar(0x8306F218, 0);
+ SetSpriteCallback(&AsScene1002Door::spriteUpdate447D40);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1002Door::spriteUpdate447D10() {
+ if (_y > 49) {
+ _y -= 8;
+ if (_y < 49) {
+ SetSpriteCallback(NULL);
+ _y = 49;
+ }
+ _needRefresh = true;
+ }
+}
+
+void AsScene1002Door::spriteUpdate447D40() {
+ if (_y < 239) {
+ _y += 8;
+ if (_y > 239) {
+ SetSpriteCallback(NULL);
+ _y = 239;
+ }
+ _needRefresh = true;
+ }
+}
+
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
_flag1B4(false), _flag1BE(false) {
@@ -644,28 +868,26 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class599 = addSprite(new Class599(_vm, this));
-// _ssLadderArchPart3->getSurface()->getDrawRect().x = 200;
-
#if 0
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
_klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
- // TODO
+ // TODO
// TODO _klayman->setRepl(64, 0);
} else {
_klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
- // TODO
+ // TODO
}
} else {
if (which == 1) {
_klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
- // TODO
+ // TODO
_vm->_gameState.field2 = 1;
} else if (which == 2) {
_klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645));
@@ -689,25 +911,25 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL));
- // TODO
-
- addSprite(new StaticSprite(_vm, 0xB3242310, 825));
+ tempSprite = addSprite(new StaticSprite(_vm, 0xB3242310, 825));
+ tempClipRect.x1 = tempSprite->getSurface()->getDrawRect().x;
+ tempClipRect.y1 = tempSprite->getSurface()->getDrawRect().y;
+ tempClipRect.x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ tempClipRect.y2 = _ssLadderArchPart2->getSurface()->getDrawRect().y + _ssLadderArchPart2->getSurface()->getDrawRect().height;
- // TODO
+ _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 258, 191, _class599->getSurface()->getDrawRect().y, false));
+ _asRing2 = addSprite(new AsScene1002Ring(_vm, this, false, 297, 189, _class599->getSurface()->getDrawRect().y, false));
+ _asRing3 = addSprite(new AsScene1002Ring(_vm, this, true, 370, 201, _class599->getSurface()->getDrawRect().y, getGlobalVar(0x8306F218) != 0));
+ _asRing4 = addSprite(new AsScene1002Ring(_vm, this, false, 334, 191, _class599->getSurface()->getDrawRect().y, false));
+ _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 425, 184, _class599->getSurface()->getDrawRect().y, false));
+ _asDoor = addSprite(new AsScene1002Door(_vm, tempClipRect));
+
#if 0
- _class502_1 = addSprite(new Class502(_vm, this, false, 258, 191, _class599->getSurface()->getDrawRect().y, false);
- _class502_2 = addSprite(new Class502(_vm, this, false, 297, 189, _class599->getSurface()->getDrawRect().y, false);
- _class502_3 = addSprite(new Class502(_vm, this, true, 201, 370, _class599->getSurface()->getDrawRect().y, getGlobalVar(0x8306F218) != 0);
- _class502_4 = addSprite(new Class502(_vm, this, false, 334, 191, _class599->getSurface()->getDrawRect().y, false);
- _class502_5 = addSprite(new Class502(_vm, this, false, 425, 184, _class599->getSurface()->getDrawRect().y, false);
-
- _class431 = addSprite(new Class431(_vm, tempClipRect));
-
tempSprite = addSprite(new Class505(_vm, tempClipRect));
- _class504 = addSprite(new Class504(_vm, tempClipRect, this, _class431, tempSprite));
+ _class504 = addSprite(new Class504(_vm, tempClipRect, this, _asDoor, tempSprite));
_class426 = addSprite(new Class426(_vm, this, kClass426FileHashList, 800, 0));
_class503 = addSprite(new Class503(_vm, this, _klayman, false));
@@ -780,15 +1002,15 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageResult = 1;
} else if (param.asInteger() == 0x4A845A00) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _class502_1, this);
+ _klayman->sendEntityMessage(0x1014, _asRing1, this);
} else if (param.asInteger() == 0x43807801) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _class502_2, this);
+ _klayman->sendEntityMessage(0x1014, _asRing2, this);
} else if (param.asInteger() == 0x46C26A01) {
if (getGlobalVar(0x8306F218)) {
setMessageList(0x004B44B8);
} else {
- _klayman->sendEntityMessage(0x1014, _class502_3, this);
+ _klayman->sendEntityMessage(0x1014, _asRing3, this);
if (_class503->getX() - 10 < 366 && _class503->getX() + 10 > 366) {
setGlobalVar(0x2B514304, 1);
setMessageList(0x004B44A8);
@@ -800,10 +1022,10 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageResult = 1;
} else if (param.asInteger() == 0x468C7B11) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _class502_4, this);
+ _klayman->sendEntityMessage(0x1014, _asRing4, this);
} else if (param.asInteger() == 0x42845B19) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _class502_5, this);
+ _klayman->sendEntityMessage(0x1014, _asRing5, this);
} else if (param.asInteger() == 0xC0A07458) {
_klayman->sendEntityMessage(0x1014, _class426, this);
}
@@ -844,33 +1066,33 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x4806:
_parentModule->sendMessage(0x1024, 2, this);
_flag1BE = true;
- if (sender == _class502_1) {
+ if (sender == _asRing1) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource1.play(0x665198C0);
- } else if (sender == _class502_2) {
+ } else if (sender == _asRing2) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource1.play(0xE2D389C0);
- } else if (sender == _class502_3) {
+ } else if (sender == _asRing3) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource2.play();
- _class431->sendMessage(0x4808, 0, this);
+ _asDoor->sendMessage(0x4808, 0, this);
_class506->sendMessage(0x4808, 0, this);
- } else if (sender == _class502_4) {
+ } else if (sender == _asRing4) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource1.play(0xE0558848);
- } else if (sender == _class502_5) {
+ } else if (sender == _asRing5) {
setGlobalVar(0x4DE80AC0, 1);
_soundResource1.play(0x44014282);
}
break;
case 0x4807:
- if (sender == _class502_3) {
+ if (sender == _asRing3) {
_soundResource3.play();
- _class431->sendMessage(0x4809, 0, this);
+ _asDoor->sendMessage(0x4809, 0, this);
_class506->sendMessage(0x4809, 0, this);
} else if (sender == _class503) {
if (getGlobalVar(0x8306F218)) {
- _class502_3->sendMessage(0x4807, 0, this);
+ _asRing3->sendMessage(0x4807, 0, this);
}
}
break;
@@ -880,7 +1102,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x480F:
setGlobalVar(0x4DE80AC0, 0);
_soundResource2.play();
- _class431->sendMessage(0x4808, 0, this);
+ _asDoor->sendMessage(0x4808, 0, this);
_class506->sendMessage(0x4808, 0, this);
break;
}
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index c5c03b5..c78658f 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -151,6 +151,31 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class AsScene1002Ring : public AnimatedSprite {
+public:
+ AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2);
+protected:
+ Scene *_parentScene;
+ bool _flag1;
+ SoundResource _soundResource;
+ void update();
+ uint32 handleMessage4475E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage447760(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage447890(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage447930(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage447A00(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene1002Door : public StaticSprite {
+public:
+ AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect);
+protected:
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate447D10();
+ void spriteUpdate447D40();
+};
+
class Scene1002 : public Scene {
public:
Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -164,12 +189,12 @@ protected:
// TODO ResourceTable _resourceTable6;
// TODO ResourceTable _resourceTable7;
// TODO ResourceTable _resourceTable8;
- Sprite *_class502_1;
- Sprite *_class502_2;
- Sprite *_class502_3;
- Sprite *_class502_4;
- Sprite *_class502_5;
- Sprite *_class431;
+ Sprite *_asRing1;
+ Sprite *_asRing2;
+ Sprite *_asRing3;
+ Sprite *_asRing4;
+ Sprite *_asRing5;
+ Sprite *_asDoor;
Sprite *_class504;
Sprite *_class503;
Sprite *_ssLadderArch;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 3851cfa..1aee786 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -178,7 +178,7 @@ Background *Scene::addBackground(Background *background) {
void Scene::update() {
if (_smkFileHash != 0) {
- // TODO
+ // TODO .text:0040138D
//**** ALL TODO
_smackerPlayer = new SmackerPlayer(_vm, this, _smkFileHash, true, 0);
_savedUpdateHandlerCb = _updateHandlerCb;
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index db1c16a..7b3d4bc 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -148,22 +148,6 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
}
}
- #if 0
- if ( ddRect.right > ddRect.left )
- {
- if ( ddRect.top < ddRect.bottom )
- {
- (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD, LPDIRECTDRAWSURFACE, struct tagRECT *, unsigned int))(**(_DWORD **)(this + 8) + 28))(
- *(_DWORD *)(this + 8),
- destX,
- destY,
- ddSurface,
- &ddRect,
- blitFlags | (unsigned int)DDBLTFAST_WAIT);
- }
- }
- #endif
-
}
void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect) {
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index bbb0db1..a13276a 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -146,7 +146,7 @@ void SmackerPlayer::update() {
}
if (_doubleSurface) {
- // TODO
+ // TODO .text:0046422D mov byte ptr [eax+28h], 1
}
// TODO _vm->_screen->_skipUpdate = true;
Commit: b611b65bf42a3f2d710199fa69428ec1012a0108
https://github.com/scummvm/scummvm/commit/b611b65bf42a3f2d710199fa69428ec1012a0108
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Change addHitRect to use an explicit count
- This is since the alignment stuff didn't work and it's not worth it to investigate
- Add possibility to write out hardcoded message lists instead of reading from the exe for special lists
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/scene.cpp
engines/neverhood/smackerplayer.cpp
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 951a2f0..84f3f74 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -76,6 +76,7 @@ typedef std::vector<RectItem> RectItems;
struct MessageItem {
uint16 messageNum;
uint32 messageParam;
+ MessageItem(uint16 msgNum, uint32 msgParam) : messageNum(msgNum), messageParam(msgParam) {}
};
typedef std::vector<MessageItem> MessageItems;
@@ -103,14 +104,10 @@ byte *getData(uint32 offset) {
return data + offset - dataStart + fileStart;
}
-void addHitRect(uint32 offset) {
+void addHitRect(uint32 count, uint32 offset) {
HitRectList *hitRectList = new HitRectList();
hitRectList->id = offset;
byte *item = getData(offset);
- uint32 count = READ_LE_UINT32(item);
- //printf("count = %d\n", count);
- // Align to 16 bytes
- item = data + ((offset + 4 + 16) & 0xFFFFFFF0) - dataStart + fileStart;
for (uint32 i = 0; i < count; i++) {
HitRect hitRect;
hitRect.x1 = READ_LE_UINT16(item + 0);
@@ -128,15 +125,43 @@ void addHitRect(uint32 offset) {
void addMessage(uint32 count, uint32 offset) {
MessageList *messageList = new MessageList();
messageList->id = offset;
- byte *item = getData(offset);
- for (uint32 i = 0; i < count; i++) {
- MessageItem messageItem;
- messageItem.messageNum = READ_LE_UINT16(item + 0);
- messageItem.messageParam = READ_LE_UINT32(item + 4);
- //printf("%04X, %08X\n", messageItem.messageNum, messageItem.messageParam);
- item += 8;
- messageList->messageItems.push_back(messageItem);
+
+ // Special code for message lists which are set at runtime (but otherwise constant)
+ switch (offset) {
+ // Scene 1002 rings
+ case 0x004B4200:
+ messageList->messageItems.push_back(MessageItem(0x4800, 258));
+ messageList->messageItems.push_back(MessageItem(0x100D, 0x4A845A00));
+ messageList->messageItems.push_back(MessageItem(0x4805, 1));
+ break;
+ case 0x004B4218:
+ messageList->messageItems.push_back(MessageItem(0x4800, 297));
+ messageList->messageItems.push_back(MessageItem(0x100D, 0x43807801));
+ messageList->messageItems.push_back(MessageItem(0x4805, 2));
+ break;
+ case 0x004B4230:
+ messageList->messageItems.push_back(MessageItem(0x4800, 370));
+ messageList->messageItems.push_back(MessageItem(0x100D, 0x46C26A01));
+ break;
+ case 0x004B4240:
+ messageList->messageItems.push_back(MessageItem(0x4800, 334));
+ messageList->messageItems.push_back(MessageItem(0x100D, 0x468C7B11));
+ messageList->messageItems.push_back(MessageItem(0x4805, 1));
+ break;
+ case 0x004B4258:
+ messageList->messageItems.push_back(MessageItem(0x4800, 425));
+ messageList->messageItems.push_back(MessageItem(0x100D, 0x42845B19));
+ messageList->messageItems.push_back(MessageItem(0x4805, 1));
+ break;
+ default:
+ // Read message list from the exe
+ byte *item = getData(offset);
+ for (uint32 i = 0; i < count; i++) {
+ messageList->messageItems.push_back(MessageItem(READ_LE_UINT16(item + 0), READ_LE_UINT32(item + 4)));
+ item += 8;
+ }
}
+
messageLists.push_back(messageList);
}
@@ -180,8 +205,8 @@ int main(int argc, char *argv[]) {
loadExe("nhc.exe");
- for (int i = 0; hitRectListOffsets[i] != 0; i++) {
- addHitRect(hitRectListOffsets[i]);
+ for (int i = 0; hitRectListOffsets[i] != 0; i += 2) {
+ addHitRect(hitRectListOffsets[i], hitRectListOffsets[i + 1]);
}
for (int i = 0; rectListOffsets[i] != 0; i += 2) {
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index d6e230a..7aba996 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -22,10 +22,10 @@
static const uint32 hitRectListOffsets[] = {
// Scene1001
- 0x004B4858,
+ 1, 0x004B4860,
// Scene1002
- 0x004B4134,
- 0
+ 1, 0x004B4138,
+ 0, 0
};
static const uint32 rectListOffsets[] = {
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 99e3fcc..f02d72c 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 4354797..c2d3e6d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -33,7 +33,7 @@ GameModule::GameModule(NeverhoodEngine *vm)
// Other initializations moved to actual engine class
- // TODO .text:0048AD96
+ // TODO
// TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 562624d..9acda93 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -58,7 +58,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
_flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
- // TODO .text:0041C4D3 DirtySurface
+ // TODO
createSurface(surfacePriority, 320, 200);
_x = x;
_y = y;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 1aee786..3851cfa 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -178,7 +178,7 @@ Background *Scene::addBackground(Background *background) {
void Scene::update() {
if (_smkFileHash != 0) {
- // TODO .text:0040138D
+ // TODO
//**** ALL TODO
_smackerPlayer = new SmackerPlayer(_vm, this, _smkFileHash, true, 0);
_savedUpdateHandlerCb = _updateHandlerCb;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index a13276a..bbb0db1 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -146,7 +146,7 @@ void SmackerPlayer::update() {
}
if (_doubleSurface) {
- // TODO .text:0046422D mov byte ptr [eax+28h], 1
+ // TODO
}
// TODO _vm->_screen->_skipUpdate = true;
Commit: 436f8952bbd168c53481bd19f9d79372dd0561c9
https://github.com/scummvm/scummvm/commit/436f8952bbd168c53481bd19f9d79372dd0561c9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: More work on Scene1002, Klayman and the rest
- Add "heavy debug" output to Entity (display which update/message handler is called)
- Also add more debug output
- Error out when a StaticData resource could not be found
Changed paths:
engines/neverhood/collisionman.cpp
engines/neverhood/collisionman.h
engines/neverhood/entity.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/mouse.cpp
engines/neverhood/resource.cpp
engines/neverhood/scene.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
engines/neverhood/staticdata.cpp
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index 31bc16d..87ec0cd 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -39,6 +39,16 @@ void CollisionMan::setHitRects(uint32 id) {
void CollisionMan::setHitRects(HitRectList *hitRects) {
_hitRects = hitRects;
+
+ // DEBUG
+ if (_hitRects) {
+ debug("CollisionMan::setHitRects() count = %d", _hitRects->size());
+ for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++) {
+ HitRect *hitRect = &(*it);
+ debug("(%d, %d, %d, %d) -> %04X", hitRect->rect.x1, hitRect->rect.y1, hitRect->rect.x2, hitRect->rect.y2, hitRect->type);
+ }
+ }
+
}
void CollisionMan::clearHitRects() {
@@ -79,6 +89,15 @@ void CollisionMan::clearSprites() {
_sprites.clear();
}
+void CollisionMan::checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam) {
+ for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
+ Sprite *collSprite = *iter;
+ if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getRect())) {
+ collSprite->sendMessage(messageNum, messageParam, sprite);
+ }
+ }
+}
+
void CollisionMan::save() {
// TODO
}
diff --git a/engines/neverhood/collisionman.h b/engines/neverhood/collisionman.h
index 1558599..8635952 100644
--- a/engines/neverhood/collisionman.h
+++ b/engines/neverhood/collisionman.h
@@ -40,6 +40,7 @@ public:
void addSprite(Sprite *sprite);
void removeSprite(Sprite *sprite);
void clearSprites();
+ void checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam);
void save();
void restore();
uint getSpriteCount() const { return _sprites.size(); }
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 7538b36..18c6b7e 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -23,6 +23,7 @@
#ifndef NEVERHOOD_ENTITY_H
#define NEVERHOOD_ENTITY_H
+#include "common/str.h"
#include "neverhood/neverhood.h"
#include "neverhood/gamevars.h"
#include "neverhood/graphics.h"
@@ -71,12 +72,16 @@ protected:
// TODO: Constructors for the param types...
};
-#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler)
-#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler)
+// TODO: Disable heavy debug stuff in release mode
+
+#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); debug("SetUpdateHandler(" #handler ")"); _updateHandlerCbName = #handler
+#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug("SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
class Entity {
public:
Common::String _name; // Entity name for debugging purposes
+ Common::String _updateHandlerCbName;
+ Common::String _messageHandlerCbName;
Entity(NeverhoodEngine *vm, int priority)
: _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _name("Entity") {
}
@@ -86,11 +91,13 @@ public:
}
void handleUpdate() {
//debug("Entity(%s).handleUpdate", _name.c_str());
+ debug(2, "handleUpdate() -> [%s]", _updateHandlerCbName.c_str());
if (_updateHandlerCb)
(this->*_updateHandlerCb)();
}
bool hasMessageHandler() const { return _messageHandlerCb != NULL; }
uint32 sendMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug(2, "sendMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
}
// NOTE: These were overloaded before for the various message parameter types
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 9acda93..51dde55 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -58,7 +58,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
_flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
- // TODO
+ // TODO DirtySurface
createSurface(surfacePriority, 320, 200);
_x = x;
_y = y;
@@ -84,6 +84,7 @@ uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&Klayman::sub41FC80));
break;
case 0x4818:
+ debug("TODO sub41C930");
// TODO sub41C930(_rectResource.getRectangle1(param.asInteger()).x, false);
break;
}
@@ -304,7 +305,8 @@ bool Klayman::sub41CF10(AnimationCb callback) {
return false;
}
- void Klayman::sub41C7B0() {
+void Klayman::sub41C7B0() {
+ debug("Klayman::sub41C7B0()");
if (_callback1Cb) {
AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
@@ -334,6 +336,7 @@ void Klayman::sub41C790() {
}
void Klayman::sub41FC80() {
+ //ok
if (!sub41CF10(AnimationCallback(&Klayman::sub41FC80))) {
_status2 = 1;
_flagE5 = true;
@@ -430,6 +433,7 @@ uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FCF0() {
+ //ok
_status2 = 1;
_flagE5 = true;
setFileHash(0x5420E254, 0, -1);
@@ -505,6 +509,7 @@ void Klayman::sub4211B0() {
}
uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
debug("Klayman::handleMessage41E920(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
@@ -587,7 +592,8 @@ void Klayman::spriteUpdate41F5F0() {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdiff;
if (_field114) {
- // TODO KlaymanSprite_sub_41CF70
+ error("// TODO Klayman_sub_41CF70");
+ // TODO Klayman_sub_41CF70
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
@@ -818,7 +824,7 @@ void Klayman::spriteUpdate41F320() {
_x += xdelta;
if (_field114) {
debug("_field114");
- // TODO KlaymanSprite_sub_41CF70
+ // TODO Klayman_sub_41CF70
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
@@ -1059,8 +1065,8 @@ void Klayman::spriteUpdate41F780() {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdiff;
if (_field114) {
- debug("// TODO KlaymanSprite_sub_41CF70();");
- // TODO KlaymanSprite_sub_41CF70();
+ error("// TODO Klayman_sub_41CF70();");
+ // TODO Klayman_sub_41CF70();
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
@@ -1164,6 +1170,405 @@ void Klayman::sub420830() {
SetSpriteCallback(NULL);
}
+void Klayman::sub41FC40() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0xAC20C012, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E3C0);
+ SetSpriteCallback(NULL);
+}
+
+uint32 Klayman::handleMessage41E3C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x1008:
+ debug("case 0x1008");
+#if 0 // TODO
+ if (_frameIndex < getHashListIndexByString("SpeedUp")) {
+ setFileHash(0xAC20C012, getHashListIndexByString("SpeedUp"), -1)
+ _y = 435;
+ }
+#endif
+ return 0;
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0460E2FA);
+ }
+ break;
+ }
+ return handleMessage41D480(messageNum, param, sender);
+}
+
+void Klayman::sub420210() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420210))) {
+ _status2 = 0;
+ setFileHash(0xD82890BA, 0, -1);
+ sub4201C0();
+ }
+}
+
+void Klayman::sub4201C0() {
+ _flagE5 = false;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D790);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetAnimationCallback3(&Klayman::sub420340);
+ _attachedSprite->sendMessage(0x482B, 0, this);
+}
+
+uint32 Klayman::handleMessage41D790(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x4806, 0, this);
+ }
+ _flagE5 = true;
+ } else if (param.asInteger() == 0x320AC306) {
+ _soundResource1.play(0x5860C640);
+ } else if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+ } else if (param.asInteger() == 0x88001184) {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::spriteUpdate41F230() {
+ AnimatedSprite::updateDeltaXY();
+ _x4 = _x;
+}
+
+void Klayman::sub420340() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x4829E0B8, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub420250() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420250))) {
+ _status2 = 0;
+ setFileHash(0x900980B2, 0, -1);
+ sub4201C0();
+ }
+}
+
+void Klayman::sub420290() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420290))) {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xBA1910B2, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D880);
+ SetAnimationCallback3(&Klayman::sub420380);
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ }
+}
+
+uint32 Klayman::handleMessage41D880(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x4806, 0, this);
+ }
+ } else if (param.asInteger() == 0x320AC306) {
+ _soundResource1.play(0x5860C640);
+ } else if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+ } else if (param.asInteger() == 0x88001184) {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub420380() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x4A293FB0, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DAA0);
+ SetSpriteCallback(NULL);
+}
+
+uint32 Klayman::handleMessage41DAA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ if (messageNum == 0x1008) {
+ sub4203C0();
+ return 0;
+ }
+ return handleMessage41D360(messageNum, param, sender);
+}
+
+void Klayman::sub4203C0() {
+ _status2 = 1;
+ _flagE5 = false;
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x4807, 0, this);
+ _attachedSprite = NULL;
+ }
+ setFileHash(0xB869A4B9, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub420300() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420300))) {
+ _status2 = 0;
+ setFileHash(0xB8699832, 0, -1);
+ sub4201C0();
+ }
+}
+
+void Klayman::sub41CCE0(int16 x) {
+ sub41CC40(((Sprite*)_attachedSprite)->getX(), x);
+}
+
+void Klayman::sub420970() {
+ _status2 = 0;
+ _flagE5 = true;
+ _statusE0 = 3;
+ setFileHash2(0x3A292504, 0x01084280, 0);
+ _fileHash4 = 0x01084280;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(NULL);
+ sub41C7B0();
+}
+
+void Klayman::sub4209D0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub4209D0))) {
+ _status2 = 0;
+ if (_y4 < _y) {
+ if (_statusE0 == 1) {
+ _statusE0 = 2;
+ sub420BC0();
+ } else {
+ sub41C7B0();
+ }
+ } else if (_statusE0 == 0) {
+ _statusE0 = 2;
+ _flagE5 = false;
+ setFileHash(0x122D1505, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ } else if (_statusE0 == 3) {
+ _statusE0 = 2;
+ _flagE5 = false;
+ setFileHash2(0x122D1505, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ } else if (_statusE0 == 1) {
+ _statusE0 = 2;
+ _flagE5 = true;
+ setFileHash(0x122D1505, 29 - _frameIndex, -1);
+ }
+ }
+}
+
+void Klayman::sub420BC0() {
+ _status2 = 2;
+ if (_statusE0 == 1) {
+ _statusE0 = 0;
+ _flagE5 = false;
+ setFileHash2(0x3A292504, 0x02421405, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DFD0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ } else if (_statusE0 == 1) {
+ _statusE0 = 0;
+ _flagE5 = false;
+ setFileHash2(0x122D1505, 0x02421405, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41DFD0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ } else {
+ sub41C7B0();
+ }
+}
+
+uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x489B025C) {
+ _soundResource1.play(0x52C4C2D7);
+ } else if (param.asInteger() == 0x400A0E64) {
+ _soundResource1.play(0x50E081D9);
+ } else if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ _flagE5 = true;
+ } else if (param.asInteger() == 0x489B025C) {
+ _soundResource1.play(0x52C4C2D7);
+ } else if (param.asInteger() == 0x400A0E64) {
+ _soundResource1.play(0x50E081D9);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_statusE0 == 1) {
+ setFileHash2(0x3A292504, 0x01084280, 0);
+ } else {
+ setFileHash2(0x122D1505, 0x01084280, 0);
+ }
+ if (_statusE0 == 1) {
+ if (_y4 >= _y - 30) {
+ sendMessage(0x1019, 0, this);
+ }
+ } else {
+ if (_y4 <= _y) {
+ sendMessage(0x1019, 0, this);
+ }
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub420AD0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420AD0))) {
+ _status2 = 0;
+ if (_y4 >= _y - 30) {
+ sub41C7B0();
+ } else if (_statusE0 == 0) {
+ _statusE0 = 1;
+ _flagE5 = false;
+ setFileHash(0x3A292504, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ } else if (_statusE0 == 3) {
+ _statusE0 = 1;
+ _flagE5 = true;
+ setFileHash2(0x3A292504, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ } else if (_statusE0 == 2) {
+ _statusE0 = 1;
+ _flagE5 = true;
+ setFileHash(0x3A292504, 29 - _frameIndex, -1);
+ }
+ }
+}
+
+void Klayman::sub421030() {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash2(0xF229C003, 0x14884392, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E490);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+}
+
+uint32 Klayman::handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5) {
+ _parentScene->sendMessage(0x482A, 0, this);
+ } else if (param.asInteger() == 0x110010D1) {
+ _parentScene->sendMessage(0x482B, 0, this);
+ } else if (param.asInteger() == 0x32180101) {
+ if (_soundFlag) {
+ _soundResource1.play(0x48498E46);
+ } else {
+ _soundResource1.play(0x405002D8);
+ }
+ } else if (param.asInteger() == 0x0A2A9098) {
+ if (_soundFlag) {
+ _soundResource1.play(0x50399F64);
+ } else {
+ _soundResource1.play(0x0460E2FA);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub420FE0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420FE0))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0xF229C003, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E490);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ }
+}
+
+void Klayman::sub4210C0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub4210C0))) {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash2(0xCA221107, 0x8520108C, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E490);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ }
+}
+
+void Klayman::sub421070() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub421070))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0xCA221107, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E490);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ }
+}
+
+void Klayman::sub420420() {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x18118554, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E290);
+ SetSpriteCallback(NULL);
+}
+
+uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender) {
+
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x320AC306) {
+ _soundResource1.play(0x5860C640);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+//##############################################################################
+
// KmScene1001
KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -1210,8 +1615,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asPoint().x != 0) {
sub41CC40(param.asPoint().x, param.asPoint().y);
} else {
- error("// TODO sub41CCE0(param.asPoint().y);");
- // TODO sub41CCE0(param.asPoint().y);
+ sub41CCE0(param.asPoint().y);
}
break;
@@ -1277,5 +1681,532 @@ uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶
return messageResult;
}
+// KmScene1002
+
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, Sprite *class599, Sprite *ssLadderArch, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _class599(class599), _ssLadderArch(ssLadderArch), _otherSprite(NULL),
+ _status(0) {
+
+ setKlaymanTable1();
+
+}
+
+void KmScene1002::xUpdate() {
+ if (_x >= 250 && _x <= 435 && _y >= 420) {
+ if (_status == 0) {
+ // TODO setKlaymanTable(stru_4B44C8);
+ _status = 1;
+ }
+ } else if (_status == 1) {
+ setKlaymanTable1();
+ _status = 0;
+ }
+}
+
+uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ //ok
+ debug("KmScene1002::xHandleMessage(%04X)", messageNum);
+ if (messageNum == 0x100D)
+ debug("-> %08X", param.asInteger());
+ switch (messageNum) {
+ case 0x2001:
+ setCallback2(AnimationCallback(&KmScene1002::sub449E90));
+ break;
+ case 0x2007:
+ _otherSprite = (Sprite*)param.asEntity();
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4803:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&KmScene1002::sub44A250));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&KmScene1002::sub44A2C0));
+ }
+ break;
+ case 0x4804:
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ break;
+ case 0x4805:
+ switch (param.asInteger()) {
+ case 1:
+ setCallback2(AnimationCallback(&Klayman::sub420210));
+ break;
+ case 2:
+ setCallback2(AnimationCallback(&Klayman::sub420250));
+ break;
+ case 3:
+ setCallback2(AnimationCallback(&Klayman::sub420290));
+ break;
+ case 4:
+ setCallback2(AnimationCallback(&Klayman::sub420300));
+ break;
+ }
+ break;
+ case 0x480A:
+ setCallback2(AnimationCallback(&KmScene1002::sub44A3E0));
+ break;
+ case 0x480D:
+ setCallback2(AnimationCallback(&KmScene1002::sub449E20));
+ break;
+ case 0x4816:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&KmScene1002::sub44A330));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ sub41CCE0(param.asInteger());
+ break;
+ case 0x4820:
+ _parentScene->sendMessage(0x2005, 0, this);
+ setCallback2(AnimationCallback(&Klayman::sub420970));
+ break;
+ case 0x4821:
+ _parentScene->sendMessage(0x2005, 0, this);
+ _y4 = param.asInteger();
+ setCallback2(AnimationCallback(&Klayman::sub4209D0));
+ break;
+ case 0x4822:
+ _parentScene->sendMessage(0x2005, 0, this);
+ _y4 = param.asInteger();
+ setCallback2(AnimationCallback(&Klayman::sub420AD0));
+ break;
+ case 0x4823:
+ _parentScene->sendMessage(0x2006, 0, this);
+ setCallback2(AnimationCallback(&Klayman::sub420BC0));
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub421030));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub421070));
+ }
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+void KmScene1002::update4497D0() {
+ debug("KmScene1002::update4497D0()");
+ Klayman::update();
+ if (_counter1 != 0 && (--_counter1 == 0)) {
+ _surface->setVisible(true);
+ SetUpdateHandler(&Klayman::update);
+ }
+}
+
+uint32 KmScene1002::handleMessage449800(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x480F, 0, this);
+ }
+ } else if (param.asInteger() == 0x586B0300) {
+ if (_otherSprite) {
+ _otherSprite->sendMessage(0x480E, 1, this);
+ }
+ } else if (param.asInteger() == 0x4AB28209) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+ }
+ } else if (param.asInteger() == 0x88001184) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
+ switch (messageNum) {
+ case 0x4811:
+ _soundResource1.play(0x5252A0E4);
+ setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
+ if (_doDeltaX) {
+ _x = ((Sprite*)sender)->getX() - 75;
+ } else {
+ _x = ((Sprite*)sender)->getX() + 75;
+ }
+ _y = ((Sprite*)sender)->getY() - 200;
+
+ debug("&&&&&&&&&&& param.asInteger() = %d", param.asInteger());
+
+ if (param.asInteger() == 0) {
+ sub449EF0();
+ } else if (param.asInteger() == 1) {
+ sub44A0D0();
+ } else if (param.asInteger() == 2) {
+ sub44A050();
+ }
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene1002::handleMessage449990(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x942D2081) {
+ _flagE5 = false;
+ _attachedSprite->sendMessage(0x2003, 0, this);
+ } else if (param.asInteger() == 0xDA600012) {
+ sub44A370();
+ } else if (param.asInteger() == 0x0D01B294) {
+ _flagE5 = false;
+ _attachedSprite->sendMessage(0x480B, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene1002::handleMessage449A30(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x480B, (uint32)_doDeltaX, this);
+ }
+ } else if (param.asInteger() == 0x02421405) {
+ if (_flagE4) {
+ if (_attachedSprite) {
+ if (_attachedSprite->sendMessage(0x480C, (uint32)_doDeltaX, this) != 0) {
+ sub44A460();
+ }
+ }
+ } else {
+ SetMessageHandler(&KmScene1002::handleMessage449BA0);
+ }
+ } else if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+ } else if (param.asInteger() == 0x88001184) {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ } else if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0460E2FA);
+ }
+ break;
+ case 0x480A:
+ _flagE4 = true;
+ return 0;
+ }
+ return handleMessage41D480(messageNum, param, sender);
+}
+
+uint32 KmScene1002::handleMessage449BA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+ } else if (param.asInteger() == 0x88001184) {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ } else if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1008:
+ debug("case 0x1008");
+#if 0 // TODO
+ if (_frameIndex < getHashListIndexByString("SpeedUp")) {
+ setFileHash(0x35AA8059, getHashListIndexByString("SpeedUp"), -1)
+ _y = 435;
+ }
+#endif
+ messageResult = 0;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x1A1A0785) {
+ _soundResource1.play(0x40F0A342);
+ } else if (param.asInteger() == 0x60428026) {
+ _soundResource1.play(0x40608A59);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene1002::handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender) {
+ //ok
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x1307050A) {
+ _soundResource1.play(0x40428A09);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1002::spriteUpdate449DC0() {
+ debug("KmScene1002::spriteUpdate449DC0()");
+ AnimatedSprite::updateDeltaXY();
+ HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
+ debug("$$$ hitRect->type = %04X", hitRect->type);
+ if (hitRect->type == 0x5001) {
+ _y = hitRect->rect.y1;
+ processDelta();
+ sendMessage(0x1019, 0, this);
+ }
+ _vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
+}
+
+void KmScene1002::sub449E20() {
+ debug("KmScene1002::sub449E20()");
+ if (!sub41CEB0(AnimationCallback(&KmScene1002::sub449E20))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x584984B4, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene1002::handleMessage449800);
+ SetAnimationCallback3(&Klayman::sub420420);
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ }
+}
+
+void KmScene1002::sub449E90() {
+ debug("KmScene1002::sub449E90()");
+ _soundResource1.play(0x56548280);
+ _status2 = 0;
+ _flagE5 = false;
+ _surface->setVisible(false);
+ setFileHash(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1002::handleMessage4498E0);
+}
+
+void KmScene1002::sub449EF0() {
+ //ok
+ debug("KmScene1002::sub449EF0()");
+ _counter1 = 1;
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x000BAB02, 0, -1);
+ SetUpdateHandler(&KmScene1002::update4497D0);
+
+ // Weird stuff happening
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ //SetMessageHandler(&Klayman::handleMessage41D480);
+
+ SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
+ SetAnimationCallback3(&KmScene1002::sub449F70);
+ _class599->sendMessage(0x482A, 0, this);
+ _ssLadderArch->sendMessage(0x482A, 0, this);
+}
+
+void KmScene1002::sub449F70() {
+ //ok
+ debug("KmScene1002::sub449F70()");
+ _parentScene->sendMessage(0x1024, 1, this);
+ _soundResource1.play(0x41648271);
+ _status2 = 1;
+ _flagE5 = false;
+ _flagE1 = false;
+ setFileHash2(0x000BAB02, 0x88003000, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1002::handleMessage41D480);
+ SetAnimationCallback3(&KmScene1002::sub44A230);
+ _parentScene->sendMessage(0x2002, 0, this);
+ // TODO _callbackList = NULL;
+ _attachedSprite = NULL;
+ _class599->sendMessage(0x482B, 0, this);
+ _ssLadderArch->sendMessage(0x482B, 0, this);
+}
+
+void KmScene1002::sub44A050() {
+ //ok
+ debug("KmScene1002::sub44A050()");
+ _counter1 = 1;
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x9308C132, 0, -1);
+ SetUpdateHandler(&KmScene1002::update4497D0);
+ SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetAnimationCallback3(&KmScene1002::sub449F70);
+ _class599->sendMessage(0x482A, 0, this);
+ _ssLadderArch->sendMessage(0x482A, 0, this);
+}
+
+void KmScene1002::sub44A0D0() {
+ //ok
+ debug("KmScene1002::sub44A0D0()");
+ _counter1 = 1;
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x0013A206, 0, -1);
+ SetUpdateHandler(&KmScene1002::update4497D0);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
+ SetAnimationCallback3(&KmScene1002::sub44A150);
+ _class599->sendMessage(0x482A, 0, this);
+ _ssLadderArch->sendMessage(0x482A, 0, this);
+}
+
+void KmScene1002::sub44A150() {
+ //ok
+ debug("KmScene1002::sub44A150()");
+ _parentScene->sendMessage(0x1024, 1, this);
+ _soundResource1.play(0x41648271);
+ _status2 = 1;
+ _flagE5 = false;
+ _flagE1 = false;
+ setFileHash2(0x0013A206, 0x88003000, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage41D480);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&KmScene1002::sub44A230);
+ _parentScene->sendMessage(0x2002, 0, this);
+ // TODO _callbackList = NULL;
+ _attachedSprite = NULL;
+ _class599->sendMessage(0x482B, 0, this);
+ _ssLadderArch->sendMessage(0x482B, 0, this);
+}
+
+void KmScene1002::sub44A230() {
+ //ok
+ debug("KmScene1002::sub44A230()");
+ setDoDeltaX(2);
+ sub41FC80();
+}
+
+void KmScene1002::sub44A250() {
+ //ok
+ debug("KmScene1002::sub44A250()");
+ if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A250))) {
+ _parentScene->sendMessage(0x1024, 3, this);
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0xB93AB151, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage449D60);
+ SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
+ SetAnimationCallback3(&Klayman::sub420420);
+ }
+}
+
+void KmScene1002::sub44A2C0() {
+ //ok
+ debug("KmScene1002::sub44A2C0()");
+ if (_attachedSprite) {
+ _x = ((Sprite*)_attachedSprite)->getX();
+ _attachedSprite->sendMessage(0x4807, 0, this);
+ _attachedSprite = NULL;
+ }
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x586984B1, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage41D360);
+ SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
+ SetAnimationCallback3(&Klayman::sub420420);
+}
+
+void KmScene1002::sub44A330() {
+ //ok
+ debug("KmScene1002::sub44A330()");
+ _status2 = 2;
+ _flagE5 = true;
+ setDoDeltaX(0);
+ setFileHash(0x1CD89029, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage449990);
+ SetSpriteCallback(&Klayman::spriteUpdate41F250);
+}
+
+void KmScene1002::sub44A370() {
+ //ok
+ debug("KmScene1002::sub44A370()");
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x35AA8059, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage449C90);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ setCallback1(AnimationCallback(&KmScene1002::sub44A3C0));
+}
+
+void KmScene1002::sub44A3C0() {
+ debug("KmScene1002::sub44A3C0()");
+ _parentScene->sendMessage(0x1024, 1, this);
+}
+
+void KmScene1002::sub44A3E0() {
+ //ok
+ debug("KmScene1002::sub44A3E0()");
+ if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A3E0))) {
+ _status2 = 2;
+ _flagE4 = false;
+ _flagE5 = true;
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ setFileHash(0x5C01A870, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage449A30);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ setCallback1(AnimationCallback(&KmScene1002::sub44A4B0));
+ }
+}
+
+void KmScene1002::sub44A460() {
+ //ok
+ debug("KmScene1002::sub44A460()");
+ _flagE4 = false;
+ _flagE5 = true;
+ setFileHash2(0x5C01A870, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1002::handleMessage449A30);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ setCallback1(AnimationCallback(&KmScene1002::sub44A4B0));
+}
+
+void KmScene1002::sub44A4B0() {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 24f70e1..20d0e88 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -63,10 +63,32 @@ public:
void sub4208F0();
void sub420930();
void sub420830();
+ void sub41FC40();
+ void sub420210();
+ void sub4201C0();
+ void sub420340();
+ void sub420250();
+ void sub420290();
+ void sub420380();
+ void sub4203C0();
+ void sub420300();
+ void sub420970();
+ void sub4209D0();
+ void sub420BC0();
+ void sub420AD0();
+ void sub421030();
+ void sub420FE0();
+ void sub4210C0();
+ void sub421070();
+ void sub420420();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
void spriteUpdate41F780();
+ void spriteUpdate41F230();
+
+ uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
protected:
Entity *_parentScene;
@@ -133,10 +155,8 @@ protected:
void sub41C790();
void update41D0F0();
- uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41FF00();
- uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41FCF0();
@@ -171,11 +191,19 @@ protected:
void sub41CD00(int16 x);
void sub41CC40(int16 x1, int16 x2);
void sub41CAC0(int16 x);
+ void sub41CCE0(int16 x);
void sub41FC30();
uint32 handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender);
-
uint32 handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41E3C0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41D790(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41D880(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41DAA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -188,6 +216,43 @@ protected:
uint32 handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class KmScene1002 : public Klayman {
+public:
+ KmScene1002(NeverhoodEngine *vm, Entity *parentScene, Sprite *class599, Sprite *ssLadderArch, int16 x, int16 y);
+protected:
+ Sprite *_class599;
+ Sprite *_ssLadderArch;
+ Sprite *_otherSprite;
+ int _status;
+ void xUpdate();
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void update4497D0();
+ uint32 handleMessage449800(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage449990(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage449A30(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage449BA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate449DC0();
+ void sub449E20();
+ void sub449E90();
+ void sub449EF0();
+ void sub449F70();
+ void sub44A050();
+ void sub44A0D0();
+ void sub44A150();
+ void sub44A230();
+ void sub44A250();
+ void sub44A2C0();
+ void sub44A330();
+ void sub44A370();
+ void sub44A3C0();
+ void sub44A3E0();
+ void sub44A460();
+ void sub44A4B0();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 703796e..529cbea 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -381,10 +381,10 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
setFileHash(0x04A98C36, 0, -1);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 0x3DE, this);
+ _parentScene->sendMessage(0x1022, 990, this);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 0x3F2, this);
+ _parentScene->sendMessage(0x1022, 1010, this);
break;
}
return messageResult;
@@ -428,7 +428,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1001::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B4858);
+ _vm->_collisionMan->setHitRects(0x004B4860);
_surfaceFlag = false;
_background = addBackground(new DirtyBackground(_vm, 0x4086520E, 0, 0));
_palette = new Palette(_vm, 0x4086520E);
@@ -822,15 +822,520 @@ void AsScene1002Door::spriteUpdate447D40() {
}
}
+Class505::Class505(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1400) {
+
+ createSurface(1025, 88, 165);
+ _surface->setVisible(false);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class505::handleMessage);
+}
+
+uint32 Class505::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2004:
+ _x = ((Sprite*)sender)->getX() - 98;
+ _y = ((Sprite*)sender)->getY() - 111;
+ setFileHash(0x0422255A, 0, -1);
+ _surface->setVisible(true);
+ break;
+ case 0x3002:
+ setFileHash1();
+ _surface->setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *class505)
+ : AnimatedSprite(vm, 1300), _rect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _class505(class505),
+ _soundResource(vm) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
+ SetSpriteCallback(&AsScene1002DoorSpy::spriteUpdate448AA0);
+
+ createSurface(800, 136, 147);
+ _surface->getClipRect() = clipRect;
+
+ spriteUpdate448AA0();
+
+ // TODO _soundResource.load(0xC0C40298);
+
+ setFileHash(0x586C1D48, 0, 0);
+
+}
+
+uint32 AsScene1002DoorSpy::handleMessage4489D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xA61CA1C2) {
+ _class505->sendMessage(0x2004, 0, this);
+ } else if (param.asInteger() == 0x14CE0620) {
+ // TODO _soundResource.play();
+ }
+ break;
+ case 0x2003:
+ sub448B10();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002DoorSpy::handleMessage448A60(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage4489D0(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1002DoorSpy::spriteUpdate448AA0() {
+ _x = _asDoor->getX() + 34;
+ _y = _asDoor->getY() + 175;
+}
+
+void AsScene1002DoorSpy::sub448AC0() {
+ _surface->getClipRect() = _rect;
+ _parentScene->setSurfacePriority(getSurface(), 800);
+ setFileHash(0x586C1D48, 0, 0);
+ SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
+}
+
+void AsScene1002DoorSpy::sub448B10() {
+ _surface->getClipRect().x1 = 0;
+ _surface->getClipRect().y1 = 0;
+ _surface->getClipRect().x2 = 640;
+ _surface->getClipRect().y2 = 480;
+ _parentScene->setSurfacePriority(getSurface(), 1200);
+ setFileHash(0x586C1D48, 1, -1);
+ SetMessageHandler(&AsScene1002DoorSpy::handleMessage448A60);
+ SetAnimationCallback3(&AsScene1002DoorSpy::sub448AC0);
+}
+
+Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
+ : StaticSprite(vm, 1100), _parentScene(parentScene), _soundResource(vm), _status(0) {
+
+ _soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
+
+ _fileHashes[0] = fileHash1;
+ _fileHashes[1] = fileHash2;
+
+ _spriteResource.load2(fileHash1);
+ createSurface(surfacePriority, 40, 40);
+
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+
+ _surface->setVisible(false);
+ _needRefresh = true;
+
+ SetUpdateHandler(&Class426::update);
+ SetMessageHandler(&Class426::handleMessage);
+
+}
+
+void Class426::update() {
+ if (_countdown != 0 && (--_countdown) == 0) {
+ if (_status == 1) {
+ _status = 2;
+ _spriteResource.load2(_fileHashes[1]);
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+ _countdown = 4;
+ } else if (_status == 2) {
+ _status = 3;
+ _spriteResource.load2(_fileHashes[0]);
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+ _countdown = 4;
+ } else if (_status == 3) {
+ _status = 0;
+ _surface->setVisible(false);
+ }
+ }
+}
+
+uint32 Class426::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x480B:
+ _parentScene->sendMessage(0x480B, 0, this);
+ _status = 1;
+ _countdown = 4;
+ _surface->setVisible(true);
+ _soundResource.play(_soundFileHash);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool flag)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _klayman(klayman),
+ _flag(flag), _countdown(0) {
+
+ createSurface(995, 175, 195);
+
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+
+ if (!flag) {
+ if (getGlobalVar(0x8306F218)) {
+ setDoDeltaX(1);
+ _x = 366;
+ _y = 435;
+ sub4485F0();
+ } else {
+ _x = 174 + getGlobalVar(0x1B144052) * 32;
+ _y = 435;
+ sub448660();
+ }
+ } else {
+ _x = 186 + getGlobalVar(0x86341E88) * 32;
+ _y = 364;
+ if (getGlobalVar(0x13206309) || getGlobalVar(0x80101B1E)) {
+ sub4485F0();
+ } else {
+ sub448660();
+ }
+ }
+
+ _flags = 4;
+}
+
+void AsScene1002VenusFlyTrap::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ removeCallbacks();
+ }
+ AnimatedSprite::update();
+}
+
+void AsScene1002VenusFlyTrap::update447FB0() {
+ if (_countdown == 0 && _klayman->getX() - 20 > _x) {
+ setDoDeltaX(1);
+ } else if (_klayman->getX() + 20 < _x) {
+ setDoDeltaX(0);
+ }
+ update();
+}
+
+uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x000890C4) {
+ _soundResource.play(0xC21190D8);
+ } else if (param.asInteger() == 0x522200A0) {
+ _soundResource.play(0x931080C8);
+ }
+ break;
+ case 0x1011:
+ if (_flag) {
+ if (_x >= 154 && _x <= 346) {
+ _parentScene->sendMessage(0x2000, 0, this);
+ messageResult = 1;
+ }
+ } else {
+ if (_x >= 174 && _x <= 430) {
+ _parentScene->sendMessage(0x2000, 0, this);
+ messageResult = 1;
+ }
+ }
+ break;
+ case 0x480B:
+ setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
+ if (_flag) {
+ if (getGlobalVar(0x8306F218)) {
+ sub448560();
+ } else {
+ sub448530();
+ }
+ } else {
+ if (getGlobalVar(0x13206309) || getGlobalVar(0x80101B1E)) {
+ sub448560();
+ } else {
+ sub448530();
+ }
+ }
+ break;
+ case 0x480C:
+ if (_flag) {
+ if (_x >= 154 && _x <= 346)
+ messageResult = 1;
+ else
+ messageResult = 0;
+ } else {
+ if (_x >= 174 && _x <= 430)
+ messageResult = 1;
+ else
+ messageResult = 0;
+ }
+ break;
+ case 0x480E:
+ if (param.asInteger() == 1) {
+ sub4485B0();
+ }
+ break;
+ case 0x4810:
+ debug("trap collision");
+ sub448780();
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 995, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1015, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002VenusFlyTrap::handleMessage4482E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage448000(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x000890C4) {
+ _soundResource.play(0xC21190D8);
+ } else if (param.asInteger() == 0x41881801) {
+ if (_flag) {
+ if (_x > 330) {
+ _klayman->sendMessage(0x4811, 2, this);
+ } else if (_x > 265) {
+ _klayman->sendMessage(0x4811, 0, this);
+ } else {
+ _klayman->sendMessage(0x4811, 0, this);
+ }
+ } else {
+ _klayman->sendMessage(0x4811, 0, this);
+ }
+ } else if (param.asInteger() == 0x522200A0) {
+ _soundResource.play(0x931080C8);
+ }
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 995, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1015, this);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1002VenusFlyTrap::sub4484F0() {
+ //ok
+ setDoDeltaX(2);
+ setFileHash(0xC4080034, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+}
+
+void AsScene1002VenusFlyTrap::sub448530() {
+ //ok
+ setFileHash(0xC4080034, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+}
+
+void AsScene1002VenusFlyTrap::sub448560() {
+ //ok
+ _parentScene->sendMessage(0x4807, 0, this);
+ setFileHash(0x82292851, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+}
+
+void AsScene1002VenusFlyTrap::sub4485B0() {
+ //ok
+ setDoDeltaX(1);
+ setFileHash(0x86A82A11, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub4485F0);
+}
+
+void AsScene1002VenusFlyTrap::sub4485F0() {
+ //ok
+ setFileHash(0xB5A86034, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
+}
+
+void AsScene1002VenusFlyTrap::sub448620() {
+ //ok
+ setFileHash(0x31303094, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(NULL);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448720);
+ _countdown = 24;
+}
+
+void AsScene1002VenusFlyTrap::sub448660() {
+ setFileHash(0xC8204250, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update447FB0);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
+ if (_flag) {
+ if (_x >= 154 && _x <= 346) {
+ setGlobalVar(0x86341E88, (_x - 186) / 32);
+ } else {
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub4484F0);
+ _countdown = 12;
+ }
+ } else {
+ if (_x >= 174 && _x <= 430) {
+ setGlobalVar(0x1B144052, (_x - 174) / 32);
+ } else {
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub4484F0);
+ _countdown = 12;
+ }
+ }
+}
+
+void AsScene1002VenusFlyTrap::sub448720() {
+ //ok
+ setFileHash(0x152920C4, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448750);
+}
+
+void AsScene1002VenusFlyTrap::sub448750() {
+ //ok
+ setFileHash(0x84001117, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+}
+
+void AsScene1002VenusFlyTrap::sub448780() {
+debug("AsScene1002VenusFlyTrap::sub448780()");
+ if (_x - 15 < _klayman->getX() && _x + 15 > _klayman->getX()) {
+ if (_flag) {
+ setDoDeltaX(_x > 265 && _x < 330 ? 1 : 0);
+ } else {
+ setDoDeltaX(_x > 320 ? 1 : 0);
+ }
+ _klayman->sendMessage(0x2001, 0, this);
+ setFileHash(0x8C2C80D4, 0, -1);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
+ SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448620);
+ }
+}
+
+Class506::Class506(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _countdown(0) {
+
+ createSurface(850, 186, 212);
+ _x = 320;
+ _y = 240;
+ if (getGlobalVar(0x8306F218)) {
+ setFileHash(0x004A4495, -1, -1);
+ _newHashListIndex = -2;
+ } else {
+ _surface->setVisible(false);
+ }
+ SetUpdateHandler(&Class506::update);
+ SetMessageHandler(&Class506::handleMessage4491B0);
+}
+
+void Class506::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ if (_flag) {
+ sub449280();
+ } else {
+ sub449250();
+ }
+ }
+ AnimatedSprite::update();
+}
+
+uint32 Class506::handleMessage4491B0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageResult) {
+ case 0x4808:
+ _flag = false;
+ _countdown = 2;
+ break;
+ case 0x4809:
+ _flag = true;
+ _countdown = 2;
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class506::handleMessage449210(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage4491B0(messageNum, param, sender);
+ switch (messageResult) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class506::sub449250() {
+ setFileHash(0x004A4495, 0, -1);
+ SetMessageHandler(&Class506::handleMessage4491B0);
+ _newHashListIndex = -2;
+ _surface->setVisible(true);
+}
+
+void Class506::sub449280() {
+ setFileHash(0x004A4495, -1, -1);
+ _playBackwards = true;
+ SetMessageHandler(&Class506::handleMessage449210);
+ SetAnimationCallback3(&Class506::sub4492C0);
+ _surface->setVisible(true);
+}
+
+void Class506::sub4492C0() {
+ _surface->setVisible(false);
+ setFileHash1();
+}
+
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
_flag1B4(false), _flag1BE(false) {
- static const uint32 kClass426FileHashList[] = {
- 0x00412692,
- 0x140B60BE
- };
-
NRect tempClipRect;
Sprite *tempSprite;
@@ -848,7 +1353,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1002::update);
SetMessageHandler(&Scene1002::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B4134);
+ _vm->_collisionMan->setHitRects(0x004B4138);
_surfaceFlag = true;
@@ -868,46 +1373,46 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class599 = addSprite(new Class599(_vm, this));
-#if 0
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
- _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
+ //_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
// TODO
// TODO _klayman->setRepl(64, 0);
} else {
- _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435);
+ //_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
// TODO
}
} else {
if (which == 1) {
- _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435);
+ //_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
// TODO
_vm->_gameState.field2 = 1;
} else if (which == 2) {
- _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645);
+ //_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4298);
// TODO
_vm->_gameState.field2 = 1;
_klayman->sendMessage(0x4820, 0, this);
} else {
- _klayman = addSprite(new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
+ //_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4470);
// TODO
- _class479 = addSprite(new Class479(_vm, this, _klayman));
+ //_class479 = addSprite(new Class479(_vm, this, _klayman));
// TODO
// TODO _klayman->setRepl(64, 0);
_vm->_gameState.field2 = 0;
}
}
-#endif
+
+ addSprite(_klayman);
_mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL));
@@ -925,22 +1430,21 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asDoor = addSprite(new AsScene1002Door(_vm, tempClipRect));
-#if 0
+ tempSprite = addSprite(new Class505(_vm));
- tempSprite = addSprite(new Class505(_vm, tempClipRect));
-
- _class504 = addSprite(new Class504(_vm, tempClipRect, this, _asDoor, tempSprite));
- _class426 = addSprite(new Class426(_vm, this, kClass426FileHashList, 800, 0));
- _class503 = addSprite(new Class503(_vm, this, _klayman, false));
+ _asDoorSpy = addSprite(new AsScene1002DoorSpy(_vm, tempClipRect, this, _asDoor, tempSprite));
+
+ _class426 = addSprite(new Class426(_vm, this, 0x00412692, 0x140B60BE, 800, 0));
+ _asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, false));
- _vm->_collisionMan->addSprite(_class503);
- _klayman->sendEntityMessage(0x2007, _class503, this);
+ _vm->_collisionMan->addSprite(_asVenusFlyTrap);
+
+ _klayman->sendEntityMessage(0x2007, _asVenusFlyTrap, this);
_class506 = addSprite(new Class506(_vm));
setRectList(0x004B43A0);
-#endif
#if 0 // TODO
_soundResource2.load(0x60755842);
@@ -954,11 +1458,10 @@ Scene1002::~Scene1002() {
void Scene1002::update() {
Scene::update();
-#if 0 // TODO: Waiting for Klayman...
if (!_flag1B4 && _klayman->getY() > 230) {
// TODO
deleteSprite(&_ssLadderArchPart3);
- _klayman->clearRepl();
+ // TODO _klayman->clearRepl();
_flag1B4 = true;
_vm->_gameState.field2 = 1;
}
@@ -968,11 +1471,10 @@ void Scene1002::update() {
_flag1BE = false;
}
-#endif
-
}
uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Scene1002::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -1011,7 +1513,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList(0x004B44B8);
} else {
_klayman->sendEntityMessage(0x1014, _asRing3, this);
- if (_class503->getX() - 10 < 366 && _class503->getX() + 10 > 366) {
+ if (_asVenusFlyTrap->getX() - 10 < 366 && _asVenusFlyTrap->getX() + 10 > 366) {
setGlobalVar(0x2B514304, 1);
setMessageList(0x004B44A8);
} else {
@@ -1043,7 +1545,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList2(0x004B43D0);
} else {
if (_klayman->getY() > 420) {
- _klayman->sendEntityMessage(0x1014, _class503, this);
+ _klayman->sendEntityMessage(0x1014, _asVenusFlyTrap, this);
setMessageList2(0x004B4480);
} else if (_klayman->getY() > 227) {
setMessageList2(0x004B41E0);
@@ -1090,14 +1592,14 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
_soundResource3.play();
_asDoor->sendMessage(0x4809, 0, this);
_class506->sendMessage(0x4809, 0, this);
- } else if (sender == _class503) {
+ } else if (sender == _asVenusFlyTrap) {
if (getGlobalVar(0x8306F218)) {
_asRing3->sendMessage(0x4807, 0, this);
}
}
break;
case 0x480B:
- _klayman->sendEntityMessage(0x1014, _class504, this);
+ _klayman->sendEntityMessage(0x1014, _asDoorSpy, this);
break;
case 0x480F:
setGlobalVar(0x4DE80AC0, 0);
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index c78658f..79a4985 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -176,6 +176,84 @@ protected:
void spriteUpdate447D40();
};
+class Class505 : public AnimatedSprite {
+public:
+ Class505(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene1002DoorSpy : public AnimatedSprite {
+public:
+ AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *class505);
+protected:
+ Scene *_parentScene;
+ Sprite *_asDoor;
+ Sprite *_class505;
+ SoundResource _soundResource;
+ NRect _rect;
+ uint32 handleMessage4489D0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage448A60(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate448AA0();
+ void sub448AC0();
+ void sub448B10();
+};
+
+class Class426 : public StaticSprite {
+public:
+ Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
+ // TODO Class426_sub433660 (not used yet)
+protected:
+ Scene *_parentScene;
+ int _countdown;
+ uint32 _fileHashes[2];
+ int _status;
+ SoundResource _soundResource;
+ uint32 _soundFileHash;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene1002VenusFlyTrap : public AnimatedSprite {
+public:
+ AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool flag);
+protected:
+ Scene *_parentScene;
+ Sprite *_klayman;
+ int _countdown;
+ SoundResource _soundResource;
+ bool _flag;
+ void update();
+ void update447FB0();
+ uint32 handleMessage448000(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage4482E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage448320(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub4484F0();
+ void sub448530();
+ void sub448560();
+ void sub4485B0();
+ void sub4485F0();
+ void sub448620();
+ void sub448660();
+ void sub448720();
+ void sub448750();
+ void sub448780();
+};
+
+class Class506 : public AnimatedSprite {
+public:
+ Class506(NeverhoodEngine *vm);
+protected:
+ int _countdown;
+ bool _flag;
+ void update();
+ uint32 handleMessage4491B0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage449210(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub449250();
+ void sub449280();
+ void sub4492C0();
+};
+
class Scene1002 : public Scene {
public:
Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -195,8 +273,8 @@ protected:
Sprite *_asRing4;
Sprite *_asRing5;
Sprite *_asDoor;
- Sprite *_class504;
- Sprite *_class503;
+ Sprite *_asDoorSpy;
+ Sprite *_asVenusFlyTrap;
Sprite *_ssLadderArch;
Sprite *_ssLadderArchPart1;
Sprite *_ssLadderArchPart2;
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index c753183..381f4a7 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -29,7 +29,7 @@ namespace Neverhood {
Mouse433::Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect)
: StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0) {
- debug("Mouse433::Mouse433(%08X)", fileHash);
+ debug(7, "Mouse433::Mouse433(%08X)", fileHash);
if (mouseRect) {
_mouseRect = *mouseRect;
@@ -70,7 +70,7 @@ void Mouse433::load(uint32 fileHash) {
}
void Mouse433::update() {
- debug("Mouse433::update()");
+ debug(7, "Mouse433::update()");
updateCursor();
_frameNum++;
if (_frameNum >= 6)
@@ -79,7 +79,7 @@ void Mouse433::update() {
}
uint32 Mouse433::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Mouse433::handleMessage(%04X)", messageNum);
+ debug(7, "Mouse433::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
if (messageNum != 5) {
messageResult = Sprite::handleMessage(messageNum, param, sender);
@@ -103,7 +103,7 @@ uint32 Mouse433::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Mouse433::updateCursor() {
- debug("Mouse433::updateCursor()");
+ debug(7, "Mouse433::updateCursor()");
if (!_surface)
return;
@@ -131,7 +131,7 @@ void Mouse433::updateCursor() {
Mouse435::Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
: StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {
- debug("Mouse435::Mouse435(%08X)", fileHash);
+ debug(7, "Mouse435::Mouse435(%08X)", fileHash);
_mouseCursorResource.load(fileHash);
_x = _vm->getMouseX();
@@ -165,7 +165,7 @@ void Mouse435::load(uint32 fileHash) {
}
void Mouse435::update() {
- debug("Mouse435::update()");
+ debug(7, "Mouse435::update()");
updateCursor();
_frameNum++;
if (_frameNum >= 6)
@@ -174,7 +174,7 @@ void Mouse435::update() {
}
uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Mouse435::handleMessage(%04X)", messageNum);
+ debug(7, "Mouse435::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
if (messageNum != 5) {
messageResult = Sprite::handleMessage(messageNum, param, sender);
@@ -199,7 +199,7 @@ uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Mouse435::updateCursor() {
- debug("Mouse435::updateCursor()");
+ debug(7, "Mouse435::updateCursor()");
if (!_surface)
return;
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 841827a..dde80eb 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -291,10 +291,14 @@ void AnimResource::unloadInternal() {
}
int16 AnimResource::getFrameIndex(uint32 frameHash) {
+ int16 frameIndex = -1;
for (uint i = 0; i < _frames.size(); i++)
- if (_frames[i].frameHash == frameHash)
- return (int16)i;
- return -1;
+ if (_frames[i].frameHash == frameHash) {
+ frameIndex = (int16)i;
+ break;
+ }
+ debug("AnimResource::getFrameIndex(%08X) -> %d", frameHash, frameIndex);
+ return frameIndex;
}
MouseCursorResource::MouseCursorResource(NeverhoodEngine *vm)
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 3851cfa..7252e39 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -416,7 +416,7 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
}
void Scene::runMessageList() {
- debug("Scene::runMessageList() _messageListFlag2 = %d; _messageListFlag1 = %d", _messageListFlag2, _messageListFlag1);
+ debug(7, "Scene::runMessageList() _messageListFlag2 = %d; _messageListFlag1 = %d", _messageListFlag2, _messageListFlag1);
if (_messageListFlag2 || _messageListFlag1)
return;
@@ -434,7 +434,7 @@ void Scene::runMessageList() {
int messageNum = (*_messageList)[_messageListIndex].messageNum;
uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
- //debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
+ debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
_messageListIndex++;
if (_messageListIndex == _messageListCount) {
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 222368c..155d325 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -72,6 +72,10 @@ bool Sprite::isPointInside(int16 x, int16 y) {
return x >= _rect.x1 && x <= _rect.x2 && y >= _rect.y1 && y <= _rect.y2;
}
+bool Sprite::checkCollision(NRect &rect) {
+ return (_rect.x1 < rect.x2) && (rect.x1 < _rect.x2) && (_rect.y1 < rect.y2) && (rect.y1 < _rect.y2);
+}
+
uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x0005:
@@ -373,6 +377,7 @@ void AnimatedSprite::updatePosition() {
void AnimatedSprite::updateFrameIndex() {
if (!_playBackwards) {
+ debug("%08X ### _frameIndex = %d; _frameIndex2 = %d", _fileHash3, _frameIndex, _frameIndex2);
if (_frameIndex < _frameIndex2) {
_frameIndex++;
} else {
@@ -441,6 +446,7 @@ void AnimatedSprite::setFileHash1() {
}
void AnimatedSprite::setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5) {
+ debug("AnimatedSprite::setFileHash2(%08X, %08X, %08X)", fileHash, fileHash6, fileHash5);
_fileHash1 = fileHash;
_fileHash6 = fileHash6;
_fileHash5 = fileHash5;
@@ -498,6 +504,7 @@ void AnimatedSprite::removeCallbacks() {
if (_callback3Cb) {
_callback2Cb = _callback3Cb;
_callback3Cb = NULL;
+ debug("Fire _callback3Cb '%s'", _callback3CbName.c_str());
(this->*_callback2Cb)();
#if 0 // TODO
} else if (_callbackList) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 0368d2d..996c063 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -30,9 +30,9 @@
namespace Neverhood {
-#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback)
-#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback)
-#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback)
+#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug("SetSpriteCallback(" #callback ")"); _spriteUpdateCbName = #callback
+#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterX(" #callback ")")
+#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterY(" #callback ")")
const int16 kDefPosition = -32768;
@@ -45,12 +45,16 @@ public:
void setDoDeltaX(int type);
void setDoDeltaY(int type);
bool isPointInside(int16 x, int16 y);
+ bool checkCollision(NRect &rect);
int16 getX() const { return _x; }
int16 getY() const { return _y; }
+ uint16 getFlags() const { return _flags; }
bool isDoDeltaX() const { return _doDeltaX; }
bool isDoDeltaY() const { return _doDeltaY; }
+ NRect& getRect() { return _rect; }
protected:
void (Sprite::*_spriteUpdateCb)();
+ Common::String _spriteUpdateCbName; // For debugging purposes
int16 (Sprite::*_filterXCb)(int16);
int16 (Sprite::*_filterYCb)(int16);
BaseSurface *_surface;
@@ -92,9 +96,9 @@ protected:
void update();
};
-#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
-#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
-#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback)
+#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
+#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback2(" #callback ")"); _callback2CbName = #callback
+#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback3(" #callback ")"); _callback3CbName = #callback
#define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback)
class AnimatedSprite : public Sprite {
@@ -133,6 +137,10 @@ protected:
AnimationCb _callback1Cb;
AnimationCb _callback2Cb;
AnimationCb _callback3Cb;
+ // For debugging purposes
+ Common::String _callback1CbName;
+ Common::String _callback2CbName;
+ Common::String _callback3CbName;
void init();
void updateAnim();
void updatePosition();
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 4cd1d30..b9ac232 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -107,14 +107,20 @@ void StaticData::load(const char *filename) {
}
HitRectList *StaticData::getHitRectList(uint32 id) {
+ if (!_hitRectLists[id])
+ error("StaticData::getHitRectList() HitRectList with id %08X not found", id);
return _hitRectLists[id];
}
RectList *StaticData::getRectList(uint32 id) {
+ if (!_rectLists[id])
+ error("StaticData::getRectList() RectList with id %08X not found", id);
return _rectLists[id];
}
MessageList *StaticData::getMessageList(uint32 id) {
+ if (!_messageLists[id])
+ error("StaticData::getMessageList() MessageList with id %08X not found", id);
return _messageLists[id];
}
Commit: 264777893578186cb27113f5918ef5e62fcfb836
https://github.com/scummvm/scummvm/commit/264777893578186cb27113f5918ef5e62fcfb836
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Fix crash/corruption in clipped sprite drawing
Changed paths:
engines/neverhood/neverhood.cpp
engines/neverhood/scene.cpp
engines/neverhood/screen.cpp
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index abae6eb..9e1475f 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -89,6 +89,7 @@ Common::Error NeverhoodEngine::run() {
CursorMan.showMouse(true);
{
+ // DEBUG: Dummy cursor
byte buffer[2*2];
memset(buffer, 255, 4);
CursorMan.replaceCursor(buffer, 2, 2, 0, 0, 0);
@@ -166,22 +167,13 @@ Common::Error NeverhoodEngine::run() {
_mouseY = event.mouse.y;
_gameModule->handleMouseMove(event.mouse.x, event.mouse.y);
break;
-
case Common::EVENT_LBUTTONDOWN:
case Common::EVENT_RBUTTONDOWN:
_gameModule->handleMouseDown(event.mouse.x, event.mouse.y);
break;
-
/*
- _buttonState |= kLeftButton;
- break;
case Common::EVENT_LBUTTONUP:
- _buttonState &= ~kLeftButton;
- break;
- _buttonState |= kRightButton;
- break;
case Common::EVENT_RBUTTONUP:
- _buttonState &= ~kRightButton;
break;
case Common::EVENT_QUIT:
_system->quit();
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 7252e39..2b5c81b 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -179,7 +179,6 @@ void Scene::update() {
if (_smkFileHash != 0) {
// TODO
- //**** ALL TODO
_smackerPlayer = new SmackerPlayer(_vm, this, _smkFileHash, true, 0);
_savedUpdateHandlerCb = _updateHandlerCb;
_savedMessageHandlerCb = _messageHandlerCb;
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 7b3d4bc..a884914 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -104,7 +104,7 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
else
ddRect.x2 = drawRect.width;
- if (drawRect.x <= clipRect.x1) {
+ if (drawRect.x < clipRect.x1) {
destX = clipRect.x1;
ddRect.x1 = clipRect.x1 - drawRect.x;
} else {
@@ -117,7 +117,7 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
else
ddRect.y2 = drawRect.height;
- if (drawRect.y <= clipRect.y1) {
+ if (drawRect.y < clipRect.y1) {
destY = clipRect.y1;
ddRect.y1 = clipRect.y1 - drawRect.y;
} else {
@@ -125,13 +125,16 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
ddRect.y1 = 0;
}
- debug(8, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
-
+ debug(2, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
+
const byte *source = (const byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
int width = ddRect.x2 - ddRect.x1;
int height = ddRect.y2 - ddRect.y1;
+ if (width <= 0 || height <= 0)
+ return;
+
if (!transparent) {
while (height--) {
memcpy(dest, source, width);
@@ -146,8 +149,13 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
source += surface->pitch;
dest += _backScreen->pitch;
}
- }
-
+ }
+
+ // Useful for debugging
+ //_backScreen->frameRect(Common::Rect(clipRect.x1, clipRect.y1, clipRect.x2, clipRect.y2), 250);
+ //_backScreen->frameRect(Common::Rect(destX, destY, destX + ddRect.x2, destY + ddRect.y2), 255);
+ //_backScreen->frameRect(Common::Rect(drawRect.x, drawRect.y, drawRect.x + drawRect.width, drawRect.y + drawRect.height), 255);
+
}
void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect) {
Commit: 8a5c4a84d082074ad7aa47c5f797876b1cb7120f
https://github.com/scummvm/scummvm/commit/8a5c4a84d082074ad7aa47c5f797876b1cb7120f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:47-07:00
Commit Message:
NEVERHOOD: Implement color replace in AnimatedSprite
(used to disable a color in sprite drawing)
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module1000.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 68134bd..b9e2c48 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -197,6 +197,51 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
}
+void unpackSpriteRleRepl(byte *source, int width, int height, byte *dest, int destPitch, byte oldColor, byte newColor, bool flipX, bool flipY) {
+
+ // TODO: Flip Y
+
+ debug("unpackSpriteRleRepl(%d, %d)", oldColor, newColor);
+
+ int16 rows, chunks;
+ int16 skip, copy;
+
+ rows = READ_LE_UINT16(source);
+ chunks = READ_LE_UINT16(source + 2);
+ source += 4;
+
+ do {
+ if (chunks == 0) {
+ dest += rows * destPitch;
+ } else {
+ while (rows-- > 0) {
+ uint16 rowChunks = chunks;
+ while (rowChunks-- > 0) {
+ skip = READ_LE_UINT16(source);
+ copy = READ_LE_UINT16(source + 2);
+ source += 4;
+ if (!flipX) {
+ for (int xc = 0; xc < copy; xc++) {
+ dest[skip + xc] = source[xc] == oldColor ? newColor : source[xc];
+ }
+ } else {
+ byte *flipDest = dest + width - skip - 1;
+ for (int xc = 0; xc < copy; xc++) {
+ *flipDest-- = source[xc] == oldColor ? newColor : source[xc];
+ }
+ }
+ source += copy;
+ }
+ dest += destPitch;
+ }
+ }
+ rows = READ_LE_UINT16(source);
+ chunks = READ_LE_UINT16(source + 2);
+ source += 4;
+ } while (rows > 0);
+
+}
+
void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
// TODO: Flip Y
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 2bddea3..9ac23a8 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -91,6 +91,7 @@ protected:
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels);
void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
+void unpackSpriteRleRepl(byte *source, int width, int height, byte *dest, int destPitch, byte oldColor, byte newColor, bool flipX, bool flipY);
void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 529cbea..04059ca 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -924,10 +924,10 @@ Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, ui
_fileHashes[0] = fileHash1;
_fileHashes[1] = fileHash2;
-
+
_spriteResource.load2(fileHash1);
createSurface(surfacePriority, 40, 40);
-
+
_surface->getDrawRect().x = 0;
_surface->getDrawRect().y = 0;
_surface->getDrawRect().width = _spriteResource.getDimensions().width;
@@ -1379,7 +1379,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
//_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
// TODO
- // TODO _klayman->setRepl(64, 0);
+ _klayman->setRepl(64, 0);
} else {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435);
//_class478 = addSprite(new Class478(_vm, _klayman));
@@ -1407,7 +1407,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO
//_class479 = addSprite(new Class479(_vm, this, _klayman));
// TODO
- // TODO _klayman->setRepl(64, 0);
+ _klayman->setRepl(64, 0);
_vm->_gameState.field2 = 0;
}
}
@@ -1461,7 +1461,7 @@ void Scene1002::update() {
if (!_flag1B4 && _klayman->getY() > 230) {
// TODO
deleteSprite(&_ssLadderArchPart3);
- // TODO _klayman->clearRepl();
+ _klayman->clearRepl();
_flag1B4 = true;
_vm->_gameState.field2 = 1;
}
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index dde80eb..97eae89 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -158,8 +158,10 @@ void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX,
_currSpriteData = _spriteData + frameInfo.spriteDataOffs;
_width = frameInfo.rect.width;
_height = frameInfo.rect.height;
- // TODO: Repl stuff
- unpackSpriteRle(_currSpriteData, _width, _height, dest, destPitch, flipX, flipY);
+ if (_replEnabled && _replOldColor != _replNewColor)
+ unpackSpriteRleRepl(_currSpriteData, _width, _height, dest, destPitch, _replOldColor, _replNewColor, flipX, flipY);
+ else
+ unpackSpriteRle(_currSpriteData, _width, _height, dest, destPitch, flipX, flipY);
}
bool AnimResource::load(uint32 fileHash) {
@@ -276,8 +278,8 @@ void AnimResource::clear() {
void AnimResource::clear2() {
clear();
_replEnabled = true;
- _replOldByte = 0;
- _replNewByte = 0;
+ _replOldColor = 0;
+ _replNewColor = 0;
}
bool AnimResource::loadInternal(uint32 fileHash) {
@@ -301,6 +303,11 @@ int16 AnimResource::getFrameIndex(uint32 frameHash) {
return frameIndex;
}
+void AnimResource::setRepl(byte oldColor, byte newColor) {
+ _replOldColor = oldColor;
+ _replNewColor = newColor;
+}
+
MouseCursorResource::MouseCursorResource(NeverhoodEngine *vm)
: _cursorSprite(vm), _cursorNum(4), _currFileHash(0) {
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index b2a98c7..610973c 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -87,6 +87,8 @@ public:
uint getFrameCount() const { return _frames.size(); }
const AnimFrameInfo& getFrameInfo(int16 index) const { return _frames[index]; }
int16 getFrameIndex(uint32 frameHash);
+ void setReplEnabled(bool value) { _replEnabled = value; }
+ void setRepl(byte oldColor, byte newColor);
protected:
NeverhoodEngine *_vm;
int _resourceHandle;
@@ -96,8 +98,8 @@ protected:
byte *_paletteData;
byte *_spriteData;
bool _replEnabled;
- byte _replOldByte;
- byte _replNewByte;
+ byte _replOldColor;
+ byte _replNewColor;
Common::Array<AnimFrameInfo> _frames;
};
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 155d325..78c780b 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -227,9 +227,9 @@ void AnimatedSprite::init() {
_newHashListIndex = -1;
_fileHash4 = 0;
_flag = false;
- _replOldByte = 0;
- _replNewByte = 0;
- // TODO _animResource.replEnabled = 0;
+ _replOldColor = 0;
+ _replNewColor = 0;
+ _animResource.setReplEnabled(false);
_playBackwards = false;
}
@@ -255,6 +255,18 @@ void AnimatedSprite::updateDeltaXY() {
processDelta();
}
+void AnimatedSprite::setRepl(byte oldColor, byte newColor) {
+ _replOldColor = oldColor;
+ _replNewColor = newColor;
+ _animResource.setReplEnabled(true);
+}
+
+void AnimatedSprite::clearRepl() {
+ _replOldColor = 0;
+ _replNewColor = 0;
+ _animResource.setReplEnabled(false);
+}
+
void AnimatedSprite::updateAnim() {
_flag = false;
@@ -280,9 +292,8 @@ void AnimatedSprite::updateAnim() {
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
- if (_replNewByte != _replOldByte) {
- debug("TODO");
- // TODO _animResource.setRepl(_replOldByte, _replNewByte);
+ if (_replOldColor != _replNewColor) {
+ _animResource.setRepl(_replOldColor, _replNewColor);
}
_fileHash2 = 0;
if (_animStatus != 0) {
@@ -313,9 +324,8 @@ void AnimatedSprite::updateAnim() {
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
- if (_replNewByte != _replOldByte) {
- debug("TODO");
- // TODO _animResource.setRepl(_replOldByte, _replNewByte);
+ if (_replOldColor != _replNewColor) {
+ _animResource.setRepl(_replOldColor, _replNewColor);
}
_fileHash1 = 0;
_frameIndex = _fileHash6 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash6)) : 0;
@@ -328,9 +338,8 @@ void AnimatedSprite::updateAnim() {
// TODO _animResource.loadInternal(calcHash("sqDefault"));
_fileHash3 = 0;
}
- if (_replNewByte != _replOldByte) {
- debug("TODO");
- // TODO _animResource.setRepl(_replOldByte, _replNewByte);
+ if (_replOldColor != _replNewColor) {
+ _animResource.setRepl(_replOldColor, _replNewColor);
}
_fileHash1 = 0;
_frameIndex = _frameIndex3 != -1 ? _frameIndex3 : _animResource.getFrameCount() - 1;
@@ -377,7 +386,7 @@ void AnimatedSprite::updatePosition() {
void AnimatedSprite::updateFrameIndex() {
if (!_playBackwards) {
- debug("%08X ### _frameIndex = %d; _frameIndex2 = %d", _fileHash3, _frameIndex, _frameIndex2);
+ //debug("%08X ### _frameIndex = %d; _frameIndex2 = %d", _fileHash3, _frameIndex, _frameIndex2);
if (_frameIndex < _frameIndex2) {
_frameIndex++;
} else {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 996c063..71660ff 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -107,6 +107,8 @@ public:
AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y);
void update();
void updateDeltaXY();
+ void setRepl(byte oldColor, byte newColor);
+ void clearRepl();
protected:
typedef void (AnimatedSprite::*AnimationCb)();
AnimResource _animResource;
@@ -125,8 +127,8 @@ protected:
int _newHashListIndex;
uint32 _fileHash4;
int16 _deltaX, _deltaY;
- byte _replOldByte;
- byte _replNewByte;
+ byte _replOldColor;
+ byte _replNewColor;
bool _playBackwards;
bool _flag;
/* TODO
Commit: 78365121ea9931eb5973c2dcc0cae278fcc6a58d
https://github.com/scummvm/scummvm/commit/78365121ea9931eb5973c2dcc0cae278fcc6a58d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Add NavigationLists in create_neverhood
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 84f3f74..25ef676 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -81,6 +81,18 @@ struct MessageItem {
typedef std::vector<MessageItem> MessageItems;
+struct NavigationItem {
+ uint32 fileHash;
+ uint32 leftSmackerFileHash;
+ uint32 rightSmackerFileHash;
+ uint32 middleSmackerFileHash;
+ byte interactive;
+ byte middleFlag;
+ uint32 mouseCursorFileHash;
+};
+
+typedef std::vector<NavigationItem> NavigationItems;
+
struct HitRectList {
uint32 id;
HitRects hitRects;
@@ -96,9 +108,15 @@ struct MessageList {
MessageItems messageItems;
};
+struct NavigationList {
+ uint32 id;
+ NavigationItems navigationItems;
+};
+
std::vector<HitRectList*> hitRectLists;
std::vector<RectList*> rectLists;
std::vector<MessageList*> messageLists;
+std::vector<NavigationList*> navigationLists;
byte *getData(uint32 offset) {
return data + offset - dataStart + fileStart;
@@ -125,7 +143,6 @@ void addHitRect(uint32 count, uint32 offset) {
void addMessage(uint32 count, uint32 offset) {
MessageList *messageList = new MessageList();
messageList->id = offset;
-
// Special code for message lists which are set at runtime (but otherwise constant)
switch (offset) {
// Scene 1002 rings
@@ -161,7 +178,6 @@ void addMessage(uint32 count, uint32 offset) {
item += 8;
}
}
-
messageLists.push_back(messageList);
}
@@ -199,6 +215,25 @@ void addRect(uint32 count, uint32 offset) {
rectLists.push_back(rectList);
}
+void addNavigation(uint32 count, uint32 offset) {
+ NavigationList *navigationList = new NavigationList();
+ navigationList->id = offset;
+ byte *item = getData(offset);
+ for (uint32 i = 0; i < count; i++) {
+ NavigationItem navigationItem;
+ navigationItem.fileHash = READ_LE_UINT32(item + 0);
+ navigationItem.leftSmackerFileHash = READ_LE_UINT32(item + 4);
+ navigationItem.rightSmackerFileHash = READ_LE_UINT32(item + 8);
+ navigationItem.middleSmackerFileHash = READ_LE_UINT32(item + 12);
+ navigationItem.interactive = item[16];
+ navigationItem.middleFlag = item[17];
+ navigationItem.mouseCursorFileHash = READ_LE_UINT32(item + 20);
+ item += 24;
+ navigationList->navigationItems.push_back(navigationItem);
+ }
+ navigationLists.push_back(navigationList);
+}
+
int main(int argc, char *argv[]) {
FILE *datFile;
@@ -217,6 +252,10 @@ int main(int argc, char *argv[]) {
addMessage(messageListOffsets[i], messageListOffsets[i + 1]);
}
+ for (int i = 0; navigationListOffsets[i] != 0; i += 2) {
+ addNavigation(navigationListOffsets[i], navigationListOffsets[i + 1]);
+ }
+
datFile = fopen("neverhood.dat", "wb");
writeUint32LE(datFile, 0x11223344); // Some magic
@@ -274,6 +313,24 @@ int main(int argc, char *argv[]) {
}
}
+ // Write all navigation lists
+ writeUint32LE(datFile, navigationLists.size());
+ for (std::vector<NavigationList*>::iterator it = navigationLists.begin(); it != navigationLists.end(); it++) {
+ NavigationList *navigationList = *it;
+ writeUint32LE(datFile, navigationList->id);
+ writeUint32LE(datFile, navigationList->navigationItems.size());
+ for (uint32 i = 0; i < navigationList->navigationItems.size(); i++) {
+ const NavigationItem &navigationItem = navigationList->navigationItems[i];
+ writeUint32LE(datFile, navigationItem.fileHash);
+ writeUint32LE(datFile, navigationItem.leftSmackerFileHash);
+ writeUint32LE(datFile, navigationItem.rightSmackerFileHash);
+ writeUint32LE(datFile, navigationItem.middleSmackerFileHash);
+ writeByte(datFile, navigationItem.interactive);
+ writeByte(datFile, navigationItem.middleFlag);
+ writeUint32LE(datFile, navigationItem.mouseCursorFileHash);
+ }
+ }
+
fclose(datFile);
printf("Done.\n");
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 7aba996..3024197 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -67,3 +67,7 @@ static const uint32 messageListOffsets[] = {
0, 0
};
+static const uint32 navigationListOffsets[] = {
+ // Module2300
+ 2, 0x004B67B8
+};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index f02d72c..a9bd4fd 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: db9e45706caa2a4d2eddcb0c63532b3f6429a73e
https://github.com/scummvm/scummvm/commit/db9e45706caa2a4d2eddcb0c63532b3f6429a73e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: More work on Scene1002
- Implement NavigationMouse and NavigationLists
- Some renaming
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/mouse.cpp
engines/neverhood/mouse.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 04059ca..bb15998 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -790,17 +790,17 @@ uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x4808:
setGlobalVar(0x8306F218, 1);
- SetSpriteCallback(&AsScene1002Door::spriteUpdate447D10);
+ SetSpriteCallback(&AsScene1002Door::suOpenDoor);
break;
case 0x4809:
setGlobalVar(0x8306F218, 0);
- SetSpriteCallback(&AsScene1002Door::spriteUpdate447D40);
+ SetSpriteCallback(&AsScene1002Door::suCloseDoor);
break;
}
return messageResult;
}
-void AsScene1002Door::spriteUpdate447D10() {
+void AsScene1002Door::suOpenDoor() {
if (_y > 49) {
_y -= 8;
if (_y < 49) {
@@ -811,7 +811,7 @@ void AsScene1002Door::spriteUpdate447D10() {
}
}
-void AsScene1002Door::spriteUpdate447D40() {
+void AsScene1002Door::suCloseDoor() {
if (_y < 239) {
_y += 8;
if (_y > 239) {
@@ -1332,6 +1332,36 @@ void Class506::sub4492C0() {
setFileHash1();
}
+Class478::Class478(NeverhoodEngine *vm, Klayman *klayman)
+ : AnimatedSprite(vm, 1200), _klayman(klayman) {
+
+ createSurface(1200, 40, 163);
+ SetUpdateHandler(&Class478::update);
+ SetMessageHandler(&Sprite::handleMessage);
+ _surface->setVisible(false);
+}
+
+void Class478::update() {
+ if (_klayman->getCurrAnimFileHash() == 0x3A292504) {
+ setFileHash(0xBA280522, _frameIndex, -1);
+ _newHashListIndex = _klayman->getFrameIndex();
+ _surface->setVisible(true);
+ _x = _klayman->getX();
+ _y = _klayman->getY();
+ setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
+ } else if (_klayman->getCurrAnimFileHash() == 0x122D1505) {
+ setFileHash(0x1319150C, _frameIndex, -1);
+ _newHashListIndex = _klayman->getFrameIndex();
+ _surface->setVisible(true);
+ _x = _klayman->getX();
+ _y = _klayman->getY();
+ setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
+ } else {
+ _surface->setVisible(false);
+ }
+ AnimatedSprite::update();
+}
+
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
_flag1B4(false), _flag1BE(false) {
@@ -1373,36 +1403,39 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class599 = addSprite(new Class599(_vm, this));
+ // DEBUG/HACK!!!!
+ which = 1; setGlobalVar(0x8306F218, 1);
+
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
- //_class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
// TODO
_klayman->setRepl(64, 0);
} else {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435);
- //_class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
// TODO
}
} else {
if (which == 1) {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435);
- //_class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
// TODO
_vm->_gameState.field2 = 1;
} else if (which == 2) {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645);
- //_class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4298);
// TODO
_vm->_gameState.field2 = 1;
_klayman->sendMessage(0x4820, 0, this);
} else {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
- //_class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4470);
// TODO
//_class479 = addSprite(new Class479(_vm, this, _klayman));
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 79a4985..51cb9a4 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -172,8 +172,8 @@ public:
protected:
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate447D10();
- void spriteUpdate447D40();
+ void suOpenDoor();
+ void suCloseDoor();
};
class Class505 : public AnimatedSprite {
@@ -254,6 +254,14 @@ protected:
void sub4492C0();
};
+class Class478 : public AnimatedSprite {
+public:
+ Class478(NeverhoodEngine *vm, Klayman *klayman);
+protected:
+ Klayman *_klayman;
+ void update();
+};
+
class Scene1002 : public Scene {
public:
Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 381f4a7..63d9866 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -224,4 +224,159 @@ void Mouse435::updateCursor() {
}
+// NavigationMouse
+
+NavigationMouse::NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type)
+ : StaticSprite(vm, 2000), _mouseCursorResource(vm), _type(type), _frameNum(0) {
+
+ _mouseCursorResource.load(fileHash);
+ _mouseCursorResource.setCursorNum(0);
+ _x = _vm->getMouseX();
+ _y = _vm->getMouseY();
+ createSurface(2000, 32, 32);
+ SetUpdateHandler(&NavigationMouse::update);
+ SetMessageHandler(&NavigationMouse::handleMessage);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = 32;
+ _drawRect.height = 32;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = 32;
+ _deltaRect.height = 32;
+ processDelta();
+ _needRefresh = true;
+ updateCursor();
+}
+
+void NavigationMouse::update() {
+ updateCursor();
+ _frameNum++;
+ if (_frameNum >= 6)
+ _frameNum = 0;
+ _needRefresh = _frameNum % 2 == 0;
+}
+
+uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x2064:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ switch (_type) {
+ case 1:
+ if (_x >= 320)
+ messageResult = 1;
+ else
+ messageResult = 0;
+ break;
+ case 2:
+ default:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else
+ messageResult = 2;
+ break;
+ case 3:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else
+ messageResult = 4;
+ break;
+ case 4:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else if (_y >= 150)
+ messageResult = 2;
+ else
+ messageResult = 3;
+ break;
+ case 5:
+ if (_y >= 240)
+ messageResult = 4;
+ else
+ messageResult = 3;
+ break;
+ }
+ break;
+ case 0x4002:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ switch (_type) {
+ case 1:
+ if (_x >= 320)
+ _mouseCursorResource.setCursorNum(6);
+ else
+ _mouseCursorResource.setCursorNum(5);
+ break;
+ case 2:
+ default:
+ if (_x < 100)
+ _mouseCursorResource.setCursorNum(6);
+ else if (_x > 540)
+ _mouseCursorResource.setCursorNum(5);
+ else
+ _mouseCursorResource.setCursorNum(0);
+ break;
+ case 3:
+ if (_x < 100)
+ _mouseCursorResource.setCursorNum(1);
+ else if (_x > 540)
+ _mouseCursorResource.setCursorNum(1);
+ break;
+ case 4:
+ if (_x < 100)
+ _mouseCursorResource.setCursorNum(6);
+ else if (_x > 540)
+ _mouseCursorResource.setCursorNum(5);
+ else if (_y >= 150)
+ _mouseCursorResource.setCursorNum(0);
+ else
+ _mouseCursorResource.setCursorNum(3);
+ break;
+ case 5:
+ if (_y >= 240)
+ _mouseCursorResource.setCursorNum(2);
+ else
+ _mouseCursorResource.setCursorNum(3);
+ break;
+ }
+ _needRefresh = true;
+ processDelta();
+ break;
+ }
+ return messageResult;
+}
+
+void NavigationMouse::updateCursor() {
+
+ if (!_surface)
+ return;
+
+ if (_doDeltaX) {
+ _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
+ } else {
+ _surface->getDrawRect().x = filterX(_x + _drawRect.x);
+ }
+
+ if (_doDeltaY) {
+ _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
+ } else {
+ _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ }
+
+ if (_needRefresh) {
+ _needRefresh = false;
+ _drawRect = _mouseCursorResource.getRect();
+ _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
+ }
+
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index 4bda936..4f27cb4 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -57,6 +57,19 @@ protected:
void updateCursor();
};
+class NavigationMouse : public StaticSprite {
+public:
+ NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type);
+ void load(uint32 fileHash);
+protected:
+ MouseCursorResource _mouseCursorResource;
+ int _frameNum;
+ int _type;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void updateCursor();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MOUSE_H */
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 78c780b..4996bdd 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -286,11 +286,11 @@ void AnimatedSprite::updateAnim() {
if (_fileHash2 != 0) {
if (_animResource.loadInternal(_fileHash2)) {
- _fileHash3 = _fileHash2;
+ _currAnimFileHash = _fileHash2;
} else {
debug("TODO");
// TODO _animResource.loadInternal(calcHash("sqDefault"));
- _fileHash3 = 0;
+ _currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
_animResource.setRepl(_replOldColor, _replNewColor);
@@ -318,11 +318,11 @@ void AnimatedSprite::updateAnim() {
} else {
if (_animStatus == 1) {
if (_animResource.loadInternal(_fileHash1)) {
- _fileHash3 = _fileHash1;
+ _currAnimFileHash = _fileHash1;
} else {
debug("TODO");
// TODO _animResource.loadInternal(calcHash("sqDefault"));
- _fileHash3 = 0;
+ _currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
_animResource.setRepl(_replOldColor, _replNewColor);
@@ -332,11 +332,11 @@ void AnimatedSprite::updateAnim() {
_frameIndex2 = _fileHash5 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash5)) : _animResource.getFrameCount() - 1;
} else {
if (_animResource.loadInternal(_fileHash1)) {
- _fileHash3 = _fileHash1;
+ _currAnimFileHash = _fileHash1;
} else {
debug("TODO");
// TODO _animResource.loadInternal(calcHash("sqDefault"));
- _fileHash3 = 0;
+ _currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
_animResource.setRepl(_replOldColor, _replNewColor);
@@ -386,7 +386,7 @@ void AnimatedSprite::updatePosition() {
void AnimatedSprite::updateFrameIndex() {
if (!_playBackwards) {
- //debug("%08X ### _frameIndex = %d; _frameIndex2 = %d", _fileHash3, _frameIndex, _frameIndex2);
+ //debug("%08X ### _frameIndex = %d; _frameIndex2 = %d", _currAnimFileHash, _frameIndex, _frameIndex2);
if (_frameIndex < _frameIndex2) {
_frameIndex++;
} else {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 71660ff..f1d8a87 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -52,6 +52,7 @@ public:
bool isDoDeltaX() const { return _doDeltaX; }
bool isDoDeltaY() const { return _doDeltaY; }
NRect& getRect() { return _rect; }
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
protected:
void (Sprite::*_spriteUpdateCb)();
Common::String _spriteUpdateCbName; // For debugging purposes
@@ -70,7 +71,6 @@ protected:
//0000004A field4A dw ? // seems to be unused except in ctor
//0000004C rectResource RectResource ?
//void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createSurface(int surfacePriority, int16 width, int16 height);
void handleSpriteUpdate() {
if (_spriteUpdateCb)
@@ -109,12 +109,14 @@ public:
void updateDeltaXY();
void setRepl(byte oldColor, byte newColor);
void clearRepl();
+ uint32 getCurrAnimFileHash() const { return _currAnimFileHash; }
+ int16 getFrameIndex() const { return _frameIndex; }
protected:
typedef void (AnimatedSprite::*AnimationCb)();
AnimResource _animResource;
+ uint32 _currAnimFileHash;
uint32 _fileHash1;
uint32 _fileHash2;
- uint32 _fileHash3;
int16 _frameIndex;
int16 _frameIndex3;
int16 _frameIndex2;
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index b9ac232..42af497 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -104,6 +104,27 @@ void StaticData::load(const char *filename) {
_hitRectLists[id] = hitRectList;
}
+ // Load navigation lists
+ uint32 navigationListsCount = fd.readUint32LE();
+ debug("navigationListsCount: %d", navigationListsCount);
+ for (uint32 i = 0; i < navigationListsCount; i++) {
+ NavigationList *navigationList = new NavigationList();
+ uint32 id = fd.readUint32LE();
+ uint32 itemCount = fd.readUint32LE();
+ for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) {
+ NavigationItem navigationItem;
+ navigationItem.fileHash = fd.readUint32LE();
+ navigationItem.leftSmackerFileHash = fd.readUint32LE();
+ navigationItem.rightSmackerFileHash = fd.readUint32LE();
+ navigationItem.middleSmackerFileHash = fd.readUint32LE();
+ navigationItem.interactive = fd.readByte();
+ navigationItem.middleFlag = fd.readByte();
+ navigationItem.mouseCursorFileHash = fd.readUint32LE();
+ navigationList->push_back(navigationItem);
+ }
+ _navigationLists[id] = navigationList;
+ }
+
}
HitRectList *StaticData::getHitRectList(uint32 id) {
@@ -124,4 +145,10 @@ MessageList *StaticData::getMessageList(uint32 id) {
return _messageLists[id];
}
+NavigationList *StaticData::getNavigationList(uint32 id) {
+ if (!_navigationLists[id])
+ error("StaticData::getNavigationList() NavigationList with id %08X not found", id);
+ return _navigationLists[id];
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index a7d8a65..178e5c9 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -56,6 +56,18 @@ struct MessageItem {
typedef Common::Array<MessageItem> MessageList;
+struct NavigationItem {
+ uint32 fileHash;
+ uint32 leftSmackerFileHash;
+ uint32 rightSmackerFileHash;
+ uint32 middleSmackerFileHash;
+ byte interactive;
+ byte middleFlag;
+ uint32 mouseCursorFileHash;
+};
+
+typedef Common::Array<NavigationItem> NavigationList;
+
class StaticData {
public:
StaticData();
@@ -64,10 +76,12 @@ public:
HitRectList *getHitRectList(uint32 id);
RectList *getRectList(uint32 id);
MessageList *getMessageList(uint32 id);
+ NavigationList *getNavigationList(uint32 id);
protected:
Common::HashMap<uint32, HitRectList*> _hitRectLists;
Common::HashMap<uint32, RectList*> _rectLists;
Common::HashMap<uint32, MessageList*> _messageLists;
+ Common::HashMap<uint32, NavigationList*> _navigationLists;
};
} // End of namespace Neverhood
Commit: 0bfb52df74ac47a4842c66d40fd0ae5efc5d6af6
https://github.com/scummvm/scummvm/commit/0bfb52df74ac47a4842c66d40fd0ae5efc5d6af6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Implement NavigationScene
- Work on the SmackerDecoder, create the surface immediately when a file is opened
Changed paths:
A engines/neverhood/navigationscene.cpp
A engines/neverhood/navigationscene.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index e39041e..af03c07 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -13,6 +13,7 @@ MODULE_OBJS = \
module1000.o \
module1500.o \
mouse.o \
+ navigationscene.o \
neverhood.o \
palette.o \
resource.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index bb15998..bc89862 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/module1000.h"
+#include "neverhood/navigationscene.h"//###
namespace Neverhood {
@@ -77,6 +78,7 @@ void Module1000::createScene1001(int which) {
void Module1000::createScene1002(int which) {
_vm->gameState().sceneNum = 1;
_childObject = new Scene1002(_vm, this, which);
+ // DEBUG _childObject = new NavigationScene(_vm, this, 0x004B67B8, 0, NULL);
// TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
// TODO Music18hList_play(0x061880C6, 0, 0, 1);
SetUpdateHandler(&Module1000::updateScene1002);
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
new file mode 100644
index 0000000..81af71f
--- /dev/null
+++ b/engines/neverhood/navigationscene.cpp
@@ -0,0 +1,212 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/navigationscene.h"
+#include "neverhood/mouse.h"
+
+namespace Neverhood {
+
+NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, byte *itemsTypes)
+ : Scene(vm, parentModule, true), _itemsTypes(itemsTypes), _navigationIndex(navigationIndex), _smackerDone(false),
+ _soundFlag1(false), _soundFlag2(false), _smackerFileHash(0), _interactive(true), _done(false) {
+
+ _navigationList = _vm->_staticData->getNavigationList(navigationListId);
+ for (NavigationList::iterator it = _navigationList->begin(); it != _navigationList->end(); it++) {
+ debug("%08X %08X %08X %08X %d %d %08X", (*it).fileHash, (*it).leftSmackerFileHash, (*it).rightSmackerFileHash,
+ (*it).middleSmackerFileHash, (*it).interactive, (*it).middleFlag, (*it).mouseCursorFileHash);
+ }
+
+ if (_navigationIndex < 0) {
+ _navigationIndex = (int)getGlobalVar(0x4200189E);
+ if (_navigationIndex >= (int)_navigationList->size())
+ _navigationIndex = 0;
+ }
+ setGlobalVar(0x4200189E, _navigationIndex);
+
+ SetUpdateHandler(&NavigationScene::update);
+ SetMessageHandler(&NavigationScene::handleMessage);
+
+ _smackerPlayer = new SmackerPlayer(_vm, this, (*_navigationList)[_navigationIndex].fileHash, true, true);
+
+ addEntity(_smackerPlayer);
+
+ addSurface(_smackerPlayer->getSurface());
+
+ createMouseCursor();
+
+ _vm->_screen->clear();
+
+ _parentModule->sendMessage(0x100A, _navigationIndex, this);
+
+}
+
+NavigationScene::~NavigationScene() {
+ // TODO Sound1ChList_sub_4080B0(0);
+ // TODO Sound1ChList_sub_408110(0);
+}
+
+byte NavigationScene::getNavigationAreaType() {
+ return 0; // TODO
+}
+
+void NavigationScene::update() {
+ if (_smackerFileHash != 0) {
+ _mouseCursor->getSurface()->setVisible(false);
+ _smackerPlayer->open(_smackerFileHash, false);
+ _vm->_screen->clear();
+ _smackerDone = false;
+ _smackerFileHash = 0;
+ } else if (_smackerDone) {
+ if (_done) {
+ _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ } else {
+ const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
+ createMouseCursor();
+ _mouseCursor->getSurface()->setVisible(true);
+ _soundFlag2 = false;
+ _soundFlag1 = false;
+ _interactive = true;
+ // TODO Sound1ChList_sub_4080B0(0);
+ // TODO Sound1ChList_sub_408110(0);
+ _smackerDone = false;
+ _smackerPlayer->open(navigationItem.fileHash, true);
+ _vm->_screen->clear();
+ _parentModule->sendMessage(0x100A, _navigationIndex, this);
+ }
+ }
+ Scene::update();
+}
+
+uint32 NavigationScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x0000:
+ _mouseCursor->sendMessage(0x4002, param, this);
+ break;
+ case 0x0001:
+ handleNavigation(param.asPoint());
+ break;
+ case 0x0009:
+ if (!_interactive)
+ _smackerDone = true;
+ break;
+ case 0x3002:
+ _smackerDone = true;
+ break;
+ }
+ return 0;
+}
+
+void NavigationScene::createMouseCursor() {
+
+ const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
+ uint32 mouseCursorFileHash;
+ int areaType;
+
+ if (_mouseCursor) {
+ deleteSprite(&_mouseCursor);
+ }
+
+ mouseCursorFileHash = navigationItem.mouseCursorFileHash;
+ // TODO: Check the resource...
+ if (mouseCursorFileHash == 0)
+ mouseCursorFileHash = 0x63A40028;
+
+ if (_itemsTypes) {
+ areaType = _itemsTypes[_navigationIndex];
+ } else if (navigationItem.middleSmackerFileHash != 0 || navigationItem.middleFlag) {
+ areaType = 0;
+ } else {
+ areaType = 1;
+ }
+
+ _mouseCursor = addSprite(new NavigationMouse(_vm, mouseCursorFileHash, areaType));
+ _mouseCursor->sendPointMessage(0x4002, _vm->getMousePos(), this);
+
+}
+
+void NavigationScene::handleNavigation(const NPoint &mousePos) {
+
+ const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
+ bool oldSoundFlag1 = _soundFlag1;
+ bool oldSoundFlag2 = _soundFlag2;
+ uint32 direction = _mouseCursor->sendPointMessage(0x2064, mousePos, this);
+
+ switch (direction) {
+ // TODO: Merge cases 0 and 1?
+ case 0:
+ if (navigationItem.leftSmackerFileHash != 0) {
+ _smackerFileHash = navigationItem.leftSmackerFileHash;
+ _interactive = false;
+ _soundFlag1 = false;
+ _soundFlag2 = true;
+ do {
+ _navigationIndex--;
+ if (_navigationIndex < 0)
+ _navigationIndex = _navigationList->size() - 1;
+ } while (!(*_navigationList)[_navigationIndex].interactive);
+ setGlobalVar(0x4200189E, _navigationIndex);
+ } else {
+ _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ }
+ break;
+ case 1:
+ if (navigationItem.rightSmackerFileHash != 0) {
+ _smackerFileHash = navigationItem.rightSmackerFileHash;
+ _interactive = false;
+ _soundFlag1 = false;
+ _soundFlag2 = true;
+ do {
+ _navigationIndex++;
+ if (_navigationIndex >= (int)_navigationList->size())
+ _navigationIndex = 0;
+ } while (!(*_navigationList)[_navigationIndex].interactive);
+ setGlobalVar(0x4200189E, _navigationIndex);
+ } else {
+ _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ }
+ break;
+ case 2:
+ case 3:
+ case 4:
+ if (navigationItem.middleFlag) {
+ _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ } else if (navigationItem.middleSmackerFileHash != 0) {
+ _smackerFileHash = navigationItem.middleSmackerFileHash;
+ _interactive = false;
+ _soundFlag1 = true;
+ _soundFlag2 = false;
+ _done = true;
+ }
+ break;
+ }
+
+ if (oldSoundFlag2 != _soundFlag2) {
+ // TODO Sound1ChList_sub_408110(_soundFlag2);
+ }
+
+ if (oldSoundFlag1 != _soundFlag1) {
+ // TODO Sound1ChList_sub_4080B0(_soundFlag1);
+ }
+
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h
new file mode 100644
index 0000000..08aefb7
--- /dev/null
+++ b/engines/neverhood/navigationscene.h
@@ -0,0 +1,56 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_NAVIGATIONSCENE_H
+#define NEVERHOOD_NAVIGATIONSCENE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+class NavigationScene : public Scene {
+public:
+ NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, byte *itemsTypes);
+ virtual ~NavigationScene();
+ byte getNavigationAreaType();
+protected:
+ SmackerPlayer *_smackerPlayer;
+ bool _smackerDone;
+ NavigationList *_navigationList;
+ int _navigationIndex;
+ uint32 _smackerFileHash;
+ bool _interactive;
+ bool _soundFlag1;
+ bool _soundFlag2;
+ bool _done;
+ byte *_itemsTypes;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createMouseCursor();
+ void handleNavigation(const NPoint &mousePos);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_NAVIGATIONSCENE_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 9e1475f..4440a05 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -208,4 +208,11 @@ Common::Error NeverhoodEngine::run() {
return Common::kNoError;
}
+NPoint NeverhoodEngine::getMousePos() {
+ NPoint pt;
+ pt.x = _mouseX;
+ pt.y = _mouseY;
+ return pt;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 38d773a..86f7a0a 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -45,6 +45,7 @@ class GameVars;
class ResourceMan;
class Screen;
class StaticData;
+struct NPoint;
struct GameState {
int sceneNum;
@@ -119,6 +120,7 @@ public:
GameState& gameState() { return _gameState; }
int16 getMouseX() const { return _mouseX; }
int16 getMouseY() const { return _mouseY; }
+ NPoint getMousePos();
public:
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index bbb0db1..f0b3008 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -20,6 +20,7 @@
*
*/
+#include "graphics/palette.h"
#include "neverhood/smackerplayer.h"
#include "neverhood/palette.h"
#include "neverhood/resourceman.h"
@@ -68,26 +69,37 @@ void SmackerDoubleSurface::draw() {
SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag)
: Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _flag2(false),
- _palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL) {
+ _palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true) {
+
+ debug("_smackerSurface = %p", (void*)_smackerSurface);
SetUpdateHandler(&SmackerPlayer::update);
+
open(fileHash, flag);
}
SmackerPlayer::~SmackerPlayer() {
close();
-}
+}
-void SmackerPlayer::open(uint32 fileHash, bool flag1) {
+void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
debug("SmackerPlayer::open(%08X)", fileHash);
- _flag1 = flag1;
+ _keepLastFrame = keepLastFrame;
close();
+ if (_doubleSurface) {
+ _smackerSurface = new SmackerDoubleSurface(_vm);
+ } else {
+ _smackerSurface = new SmackerSurface(_vm);
+ }
+
+ _smackerFirst = true;
+
_stream = _vm->_res->createStream(fileHash);
- // TODO: _flag1 stuff
+ // TODO: _keepLastFrame stuff
_smackerDecoder = new Video::SmackerDecoder(_vm->_mixer);
_smackerDecoder->loadStream(_stream);
@@ -117,6 +129,8 @@ uint SmackerPlayer::getStatus() {
void SmackerPlayer::update() {
+ debug(8, "SmackerPlayer::update()");
+
if (!_smackerDecoder)
return;
@@ -129,20 +143,17 @@ void SmackerPlayer::update() {
const Graphics::Surface *smackerFrame = _smackerDecoder->decodeNextFrame();
- if (!_smackerSurface) {
+ if (_smackerFirst) {
if (_doubleSurface) {
- // TODO: Use SmackerDoubleSurface
- _smackerSurface = new SmackerDoubleSurface(_vm);
_smackerSurface->getDrawRect().x = 320 - _smackerDecoder->getWidth();
_smackerSurface->getDrawRect().y = 240 - _smackerDecoder->getHeight();
- // TODO DoubleDrawSurface.field_28 = false;
_smackerSurface->setSmackerFrame(smackerFrame);
} else {
- _smackerSurface = new SmackerSurface(_vm);
_smackerSurface->getDrawRect().x = (640 - _smackerDecoder->getWidth()) / 2;
_smackerSurface->getDrawRect().y = (480 - _smackerDecoder->getHeight()) / 2;
_smackerSurface->setSmackerFrame(smackerFrame);
}
+ _smackerFirst = false;
}
if (_doubleSurface) {
@@ -153,10 +164,12 @@ void SmackerPlayer::update() {
_dirtyFlag = true;
if (_smackerDecoder->hasDirtyPalette()) {
+ debug("updatePalette()");
updatePalette();
}
- if (_smackerDecoder->endOfVideo() && !_flag1) {
+ if (_smackerDecoder->endOfVideo() && !_keepLastFrame) {
+ // Inform the scene about the end of the video playback
if (_scene) {
_scene->sendMessage(0x3002, 0, this);
}
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index d923bbd..2262277 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -52,7 +52,7 @@ public:
SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag);
~SmackerPlayer();
BaseSurface *getSurface() { return _smackerSurface; }
- void open(uint32 fileHash, bool flag1);
+ void open(uint32 fileHash, bool keepLastFrame);
void close();
void gotoFrame(uint frameNumber);
uint getStatus();
@@ -61,9 +61,10 @@ protected:
Palette *_palette;
Video::SmackerDecoder *_smackerDecoder;
SmackerSurface *_smackerSurface;
+ bool _smackerFirst;
bool _doubleSurface;
Common::SeekableReadStream *_stream;
- bool _flag1;
+ bool _keepLastFrame;
bool _flag2;
bool _dirtyFlag;
void update();
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 1584ac3..ace77f9 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -92,7 +92,6 @@ void SmackerScene::nextVideo() {
_parentModule->sendMessage(0x1009, 0, this);
}
-
}
void SmackerScene::update() {
Commit: a23b694c94d318b3e06f450189aab82b3908fcc5
https://github.com/scummvm/scummvm/commit/a23b694c94d318b3e06f450189aab82b3908fcc5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Implement Scene1005
- Add FontSurface
- Add DataResource
- Fix NavigationScene, only accept input when interactive
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/navigationscene.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index b9e2c48..e46d4ea 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -107,6 +107,52 @@ void BaseSurface::drawMouseCursorResource(MouseCursorResource &mouseCursorResour
}
}
+void BaseSurface::copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, NDrawRect &sourceRect, bool transparent) {
+ // TODO: Clipping
+ byte *source = (byte*)sourceSurface->getBasePtr(sourceRect.x, sourceRect.y);
+ byte *dest = (byte*)_surface->getBasePtr(x, y);
+ int height = sourceRect.height;
+ if (!transparent) {
+ while (height--) {
+ memcpy(dest, source, sourceRect.width);
+ source += sourceSurface->pitch;
+ dest += _surface->pitch;
+ }
+ } else {
+ while (height--) {
+ for (int xc = 0; xc < sourceRect.width; xc++)
+ if (source[xc] != 0)
+ dest[xc] = source[xc];
+ source += sourceSurface->pitch;
+ dest += _surface->pitch;
+ }
+ }
+}
+
+// FontSurface
+
+FontSurface::FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
+ : BaseSurface(vm, 0, charWidth * 16, charHeight * numRows), _tracking(tracking), _numRows(numRows), _firstChar(firstChar),
+ _charWidth(charWidth), _charHeight(charHeight) {
+}
+
+void FontSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr) {
+ NDrawRect sourceRect;
+ chr -= _firstChar;
+ sourceRect.x = (chr % 16) * _charWidth;
+ sourceRect.y = (chr / 16) * _charHeight;
+ sourceRect.width = _charWidth;
+ sourceRect.height = _charHeight;
+ destSurface->copyFrom(_surface, x, y, sourceRect, true);
+}
+
+void FontSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string) {
+ for (; *string != 0; string++) {
+ drawChar(destSurface, x, y, *string);
+ x += (*_tracking)[*string - _firstChar].x;
+ }
+}
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 9ac23a8..8bdf0af 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -34,6 +34,8 @@ struct NPoint {
int16 x, y;
};
+typedef Common::Array<NPoint> NPointArray;
+
struct NDimensions {
int16 width, height;
};
@@ -44,6 +46,8 @@ struct NRect {
NRect(int16 x01, int16 y01, int16 x02, int16 y02) : x1(x01), y1(y01), x2(x02), y2(y02) {}
};
+typedef Common::Array<NRect> NRectArray;
+
struct NDrawRect {
int16 x, y, width, height;
NDrawRect() : x(0), y(0), width(0), height(0) {}
@@ -67,6 +71,7 @@ public:
void drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height);
void drawAnimResource(AnimResource &animResource, uint frameIndex, bool flipX, bool flipY, int16 width, int16 height);
void drawMouseCursorResource(MouseCursorResource &mouseCursorResource, int frameNum);
+ void copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, NDrawRect &sourceRect, bool transparent);
int getPriority() const { return _priority; }
void setPriority(int priority) { _priority = priority; }
NDrawRect& getDrawRect() { return _drawRect; }
@@ -87,6 +92,19 @@ protected:
bool _transparent;
};
+class FontSurface : public BaseSurface {
+public:
+ FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
+ void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
+ void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string);
+protected:
+ NPointArray *_tracking;
+ uint16 _numRows;
+ byte _firstChar;
+ uint16 _charWidth;
+ uint16 _charHeight;
+};
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index bc89862..6825f62 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -56,7 +56,8 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 0) {
//createScene1001(0);
// DEBUG: Jump to room
- createScene1002(0);
+ //createScene1002(0);
+ createScene1005(0);
} else if (which == 1) {
createScene1002(1);
}
@@ -95,6 +96,11 @@ void Module1000::createScene1004(int which) {
}
void Module1000::createScene1005(int which) {
+ _vm->gameState().sceneNum = 4;
+ _childObject = new Scene1005(_vm, this, which);
+ // TODO Music18hList_stop(0x061880C6, 0, 0);
+ // TODO Music18hList_play(_musicFileHash, 0, 0, 1);
+ SetUpdateHandler(&Module1000::updateScene1002);
}
void Module1000::updateScene1001() {
@@ -196,6 +202,16 @@ void Module1000::updateScene1004() {
}
void Module1000::updateScene1005() {
+ _childObject->handleUpdate();
+ if (_done) {
+ debug("SCENE 1005 DONE");
+ // TODO Music18hList_stop(_musicFileHash, 0, 1);
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1004(1);
+ _childObject->handleUpdate();
+ }
}
// Scene1001
@@ -1673,4 +1689,190 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity
return 0;
}
+// Scene1005
+
+Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ SetMessageHandler(&Scene1005::handleMessage);
+
+ _surfaceFlag = true;
+
+ if (getGlobalVar(0xD0A14D10)) {
+ _background = addBackground(new DirtyBackground(_vm, 0x2800E011, 0, 0));
+ _palette = new Palette(_vm, 0x2800E011);
+ _palette->usePalette();
+ addSprite(new StaticSprite(_vm, 0x492D5AD7, 100));
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x0E015288, 20, 620));
+ } else {
+ _background = addBackground(new DirtyBackground(_vm, 0x8870A546, 0, 0));
+ _palette = new Palette(_vm, 0x8870A546);
+ _palette->usePalette();
+ addSprite(new StaticSprite(_vm, 0x40D1E0A9, 100));
+ addSprite(new StaticSprite(_vm, 0x149C00A6, 100));
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x0A54288F, 20, 620));
+ }
+
+ drawTextToBackground();
+
+}
+
+Scene1005::~Scene1005() {
+}
+
+uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ }
+ return 0;
+}
+
+void Scene1005::drawTextToBackground() {
+ TextResource textResource(_vm);
+ const char *textStart, *textEnd;
+ int16 y = 36;
+ uint32 textIndex = getTextIndex();
+ FontSurface *fontSurface = createFontSurface();
+ textResource.load(0x80283101);
+ textStart = textResource.getString(textIndex, textEnd);
+ while (textStart < textEnd) {
+ fontSurface->drawString(_background->getSurface(), 188, y, (const byte*)textStart);
+ y += 36;
+ textStart += strlen(textStart) + 1;
+ }
+ delete fontSurface;
+}
+
+FontSurface *Scene1005::createFontSurface() {
+ FontSurface *fontSurface;
+ DataResource fontData(_vm);
+ SpriteResource fontSprite(_vm);
+ fontData.load(calcHash("asRecFont"));
+ uint16 numRows = fontData.getPoint(calcHash("meNumRows")).x;
+ uint16 firstChar = fontData.getPoint(calcHash("meFirstChar")).x;
+ uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
+ uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
+ NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
+ fontSurface = new FontSurface(_vm, tracking, numRows, firstChar, charWidth, charHeight);
+ if (getGlobalVar(0xD0A14D10)) {
+ fontSprite.load2(0x283CE401);
+ } else {
+ fontSprite.load2(0xC6604282);
+ }
+ fontSurface->drawSpriteResourceEx(fontSprite, false, false, 0, 0);
+ return fontSurface;
+}
+
+uint32 Scene1005::getTextIndex() {
+ uint32 textIndex;
+ textIndex = getTextIndex1();
+ if (getGlobalVar(0xD0A14D10)) {
+ textIndex = getTextIndex2();
+ }
+ if (getGlobalVar(0x8440001F) && getGlobalVar(0x01830201) == textIndex) {
+ textIndex = getTextIndex3();
+ } else {
+ setGlobalVar(0x8440001F, 1);
+ setGlobalVar(0x01830201, textIndex);
+ }
+ return textIndex;
+}
+
+uint32 Scene1005::getTextIndex1() {
+ uint32 textIndex;
+ if (getGlobalVar(0x98109F12)) {
+ if (!getGlobalVar(0x2090590C))
+ textIndex = 18;
+ else if (!getGlobalVar(0x610210B7))
+ textIndex = 19;
+ else if (getGlobalVar(0x0C0288F4)) {
+ if (!getGlobalVar(0xD0A14D10))
+ textIndex = 23;
+ else if (!getSubVar(0x0090EA95, 0) && !getSubVar(0x08D0AB11, 0))
+ textIndex = 24;
+ else if (!getGlobalVar(0xC0780812))
+ textIndex = 26;
+ else if (!getSubVar(0x0090EA95, 1) && !getSubVar(0x08D0AB11, 1))
+ textIndex = 27;
+ else if (!getGlobalVar(0xC0780812))
+ textIndex = 28;
+ else
+ textIndex = 29;
+ } else if (!getGlobalVar(0xE7498218))
+ textIndex = 20;
+ else if (!getGlobalVar(0x081890D14))
+ textIndex = 21;
+ else
+ textIndex = 22;
+ } else if (getGlobalVar(0x00040153)) {
+ if (!getGlobalVar(0x10938830))
+ textIndex = 12;
+ else if (!getGlobalVar(0x2050861A))
+ textIndex = 13;
+ else if (!getGlobalVar(0x4DE80AC0))
+ textIndex = 50;
+ else if (!getGlobalVar(0x89C669AA))
+ textIndex = 14;
+ else if (!getGlobalVar(0x1C1B8A9A))
+ textIndex = 15;
+ else if (!getGlobalVar(0xCB45DE03))
+ textIndex = 16;
+ else
+ textIndex = 17;
+ } else if (!getGlobalVar(0x2B514304)) {
+ textIndex = 0;
+ } else if (getGlobalVar(0x0A18CA33)) {
+ if (!getGlobalVar(0x404290D5))
+ textIndex = 4;
+ else if (!getGlobalVar(0x45080C38))
+ textIndex = 5;
+ else if (!getSubVar(0x14800353, 0x40119852))
+ textIndex = 6;
+ else if (!getGlobalVar(0x4E0BE910))
+ textIndex = 7;
+ else if (!getGlobalVar(0x86615030))
+ textIndex = 8;
+ else if (!getSubVar(0x14800353, 0x304008D2))
+ textIndex = 9;
+ else if (!getSubVar(0x14800353, 0x01180951))
+ textIndex = 10;
+ else
+ textIndex = 11;
+ } else if (!getGlobalVar(0x0A310817)) {
+ textIndex = 1;
+ } else if (getGlobalVar(0x000CF819)) {
+ textIndex = 3;
+ } else {
+ textIndex = 2;
+ }
+ return textIndex;
+}
+
+uint32 Scene1005::getTextIndex2() {
+ uint32 textIndex = getGlobalVar(0x29408F00);
+ if (textIndex + 1 >= 10) {
+ setGlobalVar(0x29408F00, 0);
+ textIndex = 0;
+ } else {
+ setGlobalVar(0x29408F00, textIndex + 1);
+ }
+ return textIndex + 40;
+}
+
+uint32 Scene1005::getTextIndex3() {
+ uint32 textIndex = getGlobalVar(0x8A140C21);
+ if (textIndex + 1 >= 10) {
+ setGlobalVar(0x8A140C21, 0);
+ textIndex = 0;
+ } else {
+ setGlobalVar(0x8A140C21, textIndex + 1);
+ }
+ return textIndex + 30;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 51cb9a4..4b2121e 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -302,6 +302,22 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// Scene1005
+
+class Scene1005 : public Scene {
+public:
+ Scene1005(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene1005();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void drawTextToBackground();
+ FontSurface *createFontSurface();
+ uint32 getTextIndex();
+ uint32 getTextIndex1();
+ uint32 getTextIndex2();
+ uint32 getTextIndex3();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1000_H */
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 81af71f..f6be668 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -99,10 +99,12 @@ void NavigationScene::update() {
uint32 NavigationScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x0000:
- _mouseCursor->sendMessage(0x4002, param, this);
+ if (_interactive)
+ _mouseCursor->sendMessage(0x4002, param, this);
break;
case 0x0001:
- handleNavigation(param.asPoint());
+ if (_interactive)
+ handleNavigation(param.asPoint());
break;
case 0x0009:
if (!_interactive)
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 4440a05..1f253c0 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -146,6 +146,16 @@ Common::Error NeverhoodEngine::run() {
}
#endif
+#if 0
+ { // Create a new scope
+ DataResource dataResource(this);
+ //dataResource.load(0x01801002);
+ //dataResource.load(0x84500132);
+ dataResource.load(0x81120132);
+ }
+#endif
+
+#if 1
_collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
@@ -196,7 +206,9 @@ Common::Error NeverhoodEngine::run() {
delete _gameModule;
delete _collisionMan;
-
+#endif
+
+
delete _res;
delete _screen;
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 97eae89..1c37610 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -20,11 +20,16 @@
*
*/
+#include "common/memstream.h"
#include "neverhood/resource.h"
#include "neverhood/resourceman.h"
namespace Neverhood {
+// TODO: Since the load() methods are similar in most cases some of the code therein
+// can probably be copied into another method (e.g. inside the resource manager)
+// to reduce code.
+
// SpriteResource
SpriteResource::SpriteResource(NeverhoodEngine *vm)
@@ -360,6 +365,248 @@ void MouseCursorResource::draw(int frameNum, byte *dest, int destPitch) {
}
}
+// TextResource
+
+TextResource::TextResource(NeverhoodEngine *vm)
+ : _vm(vm), _resourceHandle(-1), _textData(NULL), _count(0) {
+
+}
+
+TextResource::~TextResource() {
+ unload();
+}
+
+void TextResource::load(uint32 fileHash) {
+ unload();
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ if (_resourceHandle != -1) {
+ if (_vm->_res->getResourceType(_resourceHandle) == 6) {
+ _textData = _vm->_res->loadResource(_resourceHandle, true);
+ _count = READ_LE_UINT32(_textData);
+ } else {
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ }
+ }
+}
+
+void TextResource::unload() {
+ if (_resourceHandle != -1) {
+ _vm->_res->unloadResource(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ _textData = NULL;
+ _count = 0;
+ }
+}
+
+const char *TextResource::getString(uint index, const char *&textEnd) {
+ const char *textStart = (const char*)(_textData + 4 + _count * 4 + READ_LE_UINT32(_textData + (index + 1) * 4));
+ textEnd = (const char*)(_textData + 4 + _count * 4 + READ_LE_UINT32(_textData + (index + 2) * 4));
+ return textStart;
+}
+
+// DataResource
+
+DataResource::DataResource(NeverhoodEngine *vm)
+ : _vm(vm), _resourceHandle(-1) {
+}
+
+DataResource::~DataResource() {
+ unload();
+}
+
+void DataResource::load(uint32 fileHash) {
+ debug("DataResource::load(%08X)", fileHash);
+ byte *data = NULL;
+ uint32 dataSize = 0;
+ unload();
+ _resourceHandle = _vm->_res->useResource(fileHash);
+ if (_resourceHandle != -1) {
+ if (_vm->_res->getResourceType(_resourceHandle) == 5) {
+ data = _vm->_res->loadResource(_resourceHandle, true);
+ dataSize = _vm->_res->getResourceSize(_resourceHandle);
+ } else {
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ }
+ }
+ if (data && dataSize) {
+ Common::MemoryReadStream dataS(data, dataSize);
+ uint itemCount = dataS.readUint16LE();
+ uint32 itemStartOffs = 2 + itemCount * 8;
+ debug("itemCount = %d", itemCount);
+ for (uint i = 0; i < itemCount; i++) {
+ dataS.seek(2 + i * 8);
+ DRDirectoryItem drDirectoryItem;
+ drDirectoryItem.nameHash = dataS.readUint32LE();
+ drDirectoryItem.offset = dataS.readUint16LE();
+ drDirectoryItem.type = dataS.readUint16LE();
+ debug("%03d nameHash = %08X; offset = %04X; type = %d", i, drDirectoryItem.nameHash, drDirectoryItem.offset, drDirectoryItem.type);
+ dataS.seek(itemStartOffs + drDirectoryItem.offset);
+ switch (drDirectoryItem.type) {
+ case 1:
+ {
+ debug(3, "NPoint");
+ NPoint point;
+ point.x = dataS.readUint16LE();
+ point.y = dataS.readUint16LE();
+ debug(3, "(%d, %d)", point.x, point.y);
+ drDirectoryItem.offset = _points.size();
+ _points.push_back(point);
+ break;
+ }
+ case 2:
+ {
+ uint count = dataS.readUint16LE();
+ NPointArray *pointArray = new NPointArray();
+ debug(3, "NPointArray; count = %d", count);
+ for (uint j = 0; j < count; j++) {
+ NPoint point;
+ point.x = dataS.readUint16LE();
+ point.y = dataS.readUint16LE();
+ debug(3, "(%d, %d)", point.x, point.y);
+ pointArray->push_back(point);
+ }
+ drDirectoryItem.offset = _pointArrays.size();
+ _pointArrays.push_back(pointArray);
+ break;
+ }
+ case 3:
+ {
+ uint count = dataS.readUint16LE();
+ HitRectList *hitRectList = new HitRectList();
+ debug(3, "HitRectList; count = %d", count);
+ for (uint j = 0; j < count; j++) {
+ HitRect hitRect;
+ hitRect.rect.x1 = dataS.readUint16LE();
+ hitRect.rect.y1 = dataS.readUint16LE();
+ hitRect.rect.x2 = dataS.readUint16LE();
+ hitRect.rect.y2 = dataS.readUint16LE();
+ hitRect.type = dataS.readUint16LE();
+ debug(3, "(%d, %d, %d, %d) -> %04d", hitRect.rect.x1, hitRect.rect.y1, hitRect.rect.x2, hitRect.rect.y2, hitRect.type);
+ hitRectList->push_back(hitRect);
+ }
+ drDirectoryItem.offset = _hitRectLists.size();
+ _hitRectLists.push_back(hitRectList);
+ break;
+ }
+ case 4:
+ {
+ uint count = dataS.readUint16LE();
+ MessageList *messageList = new MessageList();
+ debug(3, "MessageList; count = %d", count);
+ for (uint j = 0; j < count; j++) {
+ MessageItem messageItem;
+ messageItem.messageNum = dataS.readUint32LE();
+ messageItem.messageValue = dataS.readUint32LE();
+ debug(3, "(%04X, %08X)", messageItem.messageNum, messageItem.messageValue);
+ messageList->push_back(messageItem);
+ }
+ drDirectoryItem.offset = _messageLists.size();
+ _messageLists.push_back(messageList);
+ break;
+ }
+ case 5:
+ {
+ uint count = dataS.readUint16LE();
+ DRSubRectList *drSubRectList = new DRSubRectList();
+ debug(3, "SubRectList; count = %d", count);
+ for (uint j = 0; j < count; j++) {
+ DRSubRect drSubRect;
+ drSubRect.rect.x1 = dataS.readUint16LE();
+ drSubRect.rect.y1 = dataS.readUint16LE();
+ drSubRect.rect.x2 = dataS.readUint16LE();
+ drSubRect.rect.y2 = dataS.readUint16LE();
+ drSubRect.messageListHash = dataS.readUint32LE();
+ drSubRect.messageListItemIndex = dataS.readUint16LE();
+ debug(3, "(%d, %d, %d, %d) -> %08X (%d)", drSubRect.rect.x1, drSubRect.rect.y1, drSubRect.rect.x2, drSubRect.rect.y2, drSubRect.messageListHash, drSubRect.messageListItemIndex);
+ drSubRectList->push_back(drSubRect);
+ }
+ drDirectoryItem.offset = _drSubRectLists.size();
+ _drSubRectLists.push_back(drSubRectList);
+ break;
+ }
+ case 6:
+ {
+ DRRect drRect;
+ drRect.rect.x1 = dataS.readUint16LE();
+ drRect.rect.y1 = dataS.readUint16LE();
+ drRect.rect.x2 = dataS.readUint16LE();
+ drRect.rect.y2 = dataS.readUint16LE();
+ drRect.subRectIndex = dataS.readUint16LE();
+ debug(3, "(%d, %d, %d, %d) -> %d", drRect.rect.x1, drRect.rect.y1, drRect.rect.x2, drRect.rect.y2, drRect.subRectIndex);
+ drDirectoryItem.offset = _drRects.size();
+ _drRects.push_back(drRect);
+ break;
+ }
+ case 7:
+ {
+ uint count = dataS.readUint16LE();
+ NRectArray *rectArray = new NRectArray();
+ debug(3, "NRectArray; count = %d", count);
+ for (uint j = 0; j < count; j++) {
+ NRect rect;
+ rect.x1 = dataS.readUint16LE();
+ rect.y1 = dataS.readUint16LE();
+ rect.x2 = dataS.readUint16LE();
+ rect.y2 = dataS.readUint16LE();
+ debug(3, "(%d, %d, %d, %d)", rect.x1, rect.y1, rect.x2, rect.y2);
+ rectArray->push_back(rect);
+ }
+ drDirectoryItem.offset = _rectArrays.size();
+ _rectArrays.push_back(rectArray);
+ break;
+ }
+ }
+ _directory.push_back(drDirectoryItem);
+ }
+ }
+}
+
+void DataResource::unload() {
+ if (_resourceHandle != -1) {
+ _vm->_res->unloadResource(_resourceHandle);
+ _vm->_res->unuseResource(_resourceHandle);
+ _resourceHandle = -1;
+ // TODO: Clear arrays
+ }
+}
+
+NPoint DataResource::getPoint(uint32 nameHash) {
+ DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(nameHash, 1);
+ if (drDirectoryItem)
+ return _points[drDirectoryItem->offset];
+ return NPoint();
+}
+
+NPointArray *DataResource::getPointArray(uint32 nameHash) {
+ DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(nameHash, 2);
+ if (drDirectoryItem)
+ return _pointArrays[drDirectoryItem->offset];
+ return NULL;
+}
+
+HitRectList *DataResource::getHitRectList() {
+ // TODO
+ return NULL;
+}
+
+MessageList *DataResource::getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY) {
+ // TODO
+ return NULL;
+}
+
+DataResource::DRDirectoryItem *DataResource::findDRDirectoryItem(uint32 nameHash, uint16 type) {
+ for (Common::Array<DRDirectoryItem>::iterator it = _directory.begin(); it != _directory.end(); it++) {
+ if ((*it).nameHash == nameHash && (*it).type == type)
+ return &(*it);
+ }
+ return NULL;
+}
+
+// SoundResource
+
SoundResource::SoundResource(NeverhoodEngine *vm)
: _vm(vm) {
}
@@ -374,4 +621,20 @@ void SoundResource::play(uint32 fileHash, bool looping) {
void SoundResource::play() {
}
+uint32 calcHash(const char *value) {
+ uint32 hash = 0, shiftValue = 0;
+ while (*value != 0) {
+ char ch = *value++;
+ if (ch >= 'a' && ch <= 'z')
+ ch -= 32;
+ else if (ch >= '0' && ch <= '9')
+ ch += 22;
+ shiftValue += ch - 64;
+ if (shiftValue >= 32)
+ shiftValue -= 32;
+ hash ^= 1 << shiftValue;
+ }
+ return hash;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 610973c..d273e7c 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -23,8 +23,10 @@
#ifndef NEVERHOOD_RESOURCE_H
#define NEVERHOOD_RESOURCE_H
+#include "common/str.h"
#include "neverhood/neverhood.h"
#include "neverhood/graphics.h"
+#include "neverhood/staticdata.h"
namespace Neverhood {
@@ -119,6 +121,74 @@ protected:
uint32 _currFileHash;
};
+class TextResource {
+public:
+ TextResource(NeverhoodEngine *vm);
+ ~TextResource();
+ void load(uint32 fileHash);
+ void unload();
+ const char *getString(uint index, const char *&textEnd);
+ uint getCount() const { return _count;}
+protected:
+ NeverhoodEngine *_vm;
+ int _resourceHandle;
+ byte *_textData;
+ uint _count;
+};
+
+/* DataResource
+ 1 Single NPoint
+ 2 Array of NPoints
+ 3 Array of NRects
+ 4 MessageList
+ 5 SubRectList
+ 6 RectList
+*/
+
+class DataResource {
+public:
+ DataResource(NeverhoodEngine *vm);
+ ~DataResource();
+ void load(uint32 fileHash);
+ void unload();
+ NPoint getPoint(uint32 nameHash);
+ NPointArray *getPointArray(uint32 nameHash);
+ HitRectList *getHitRectList();
+ MessageList *getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY);
+protected:
+
+ struct DRDirectoryItem {
+ uint32 nameHash;
+ uint16 offset;
+ uint16 type;
+ };
+
+ struct DRRect {
+ NRect rect;
+ uint16 subRectIndex;
+ };
+
+ struct DRSubRect {
+ NRect rect;
+ uint32 messageListHash;
+ uint16 messageListItemIndex;
+ };
+
+ typedef Common::Array<DRSubRect> DRSubRectList;
+
+ NeverhoodEngine *_vm;
+ int _resourceHandle;
+ Common::Array<DRDirectoryItem> _directory;
+ Common::Array<NPoint> _points;
+ Common::Array<NPointArray*> _pointArrays;
+ Common::Array<NRectArray*> _rectArrays;
+ Common::Array<HitRectList*> _hitRectLists;
+ Common::Array<MessageList*> _messageLists;
+ Common::Array<DRRect> _drRects;
+ Common::Array<DRSubRectList*> _drSubRectLists;
+ DataResource::DRDirectoryItem *findDRDirectoryItem(uint32 nameHash, uint16 type);
+};
+
// TODO: Dummy class atm
class SoundResource {
@@ -131,6 +201,8 @@ protected:
NeverhoodEngine *_vm;
};
+uint32 calcHash(const char *value);
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_RESOURCE_H */
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 4996bdd..87fd131 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -104,7 +104,7 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfac
: Sprite(vm, 0), _spriteResource(vm) {
_name = "StaticSprite";
- // TODO init(calcHash(filename), surfacePriority, x, y, width, height);
+ init(calcHash(filename), surfacePriority, x, y, width, height);
}
@@ -288,8 +288,7 @@ void AnimatedSprite::updateAnim() {
if (_animResource.loadInternal(_fileHash2)) {
_currAnimFileHash = _fileHash2;
} else {
- debug("TODO");
- // TODO _animResource.loadInternal(calcHash("sqDefault"));
+ _animResource.loadInternal(calcHash("sqDefault"));
_currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
@@ -320,8 +319,7 @@ void AnimatedSprite::updateAnim() {
if (_animResource.loadInternal(_fileHash1)) {
_currAnimFileHash = _fileHash1;
} else {
- debug("TODO");
- // TODO _animResource.loadInternal(calcHash("sqDefault"));
+ _animResource.loadInternal(calcHash("sqDefault"));
_currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
@@ -334,8 +332,7 @@ void AnimatedSprite::updateAnim() {
if (_animResource.loadInternal(_fileHash1)) {
_currAnimFileHash = _fileHash1;
} else {
- debug("TODO");
- // TODO _animResource.loadInternal(calcHash("sqDefault"));
+ _animResource.loadInternal(calcHash("sqDefault"));
_currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
Commit: 71da221507182398a1fe905f4cd293a4ed25eacd
https://github.com/scummvm/scummvm/commit/71da221507182398a1fe905f4cd293a4ed25eacd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Implement Scene1004
- Module1000 is now almost complete
Changed paths:
engines/neverhood/graphics.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 8bdf0af..36bd95e 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -81,6 +81,7 @@ public:
bool getVisible() const { return _visible; }
void setVisible(bool value) { _visible = value; }
void setTransparent(bool value) { _transparent = value; }
+ Graphics::Surface *getSurface() { return _surface; }
protected:
NeverhoodEngine *_vm;
int _priority;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 51dde55..d5c3205 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -1555,7 +1555,6 @@ void Klayman::sub420420() {
}
uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender) {
-
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1567,6 +1566,33 @@ uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub420ED0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420ED0))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x91540140, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E2F0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ }
+}
+
+uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC61A0119) {
+ _soundResource1.play(0x402338C2);
+ } else if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
//##############################################################################
// KmScene1001
@@ -2209,4 +2235,94 @@ void KmScene1002::sub44A4B0() {
_attachedSprite->sendMessage(0x482A, 0, this);
}
+// KmScene1004
+
+KmScene1004::KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ _dataResource.load(0x01900A04);
+}
+
+uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x4818:
+ sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&KmScene1004::sub478170));
+ break;
+ case 0x4820:
+ _parentScene->sendMessage(0x2000, 0, this);
+ setCallback2(AnimationCallback(&Klayman::sub420970));
+ break;
+ case 0x4821:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _y4 = param.asInteger();
+ setCallback2(AnimationCallback(&Klayman::sub4209D0));
+ break;
+ case 0x4822:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _y4 = param.asInteger();
+ setCallback2(AnimationCallback(&Klayman::sub420AD0));
+ break;
+ case 0x4823:
+ _parentScene->sendMessage(0x2001, 0, this);
+ setCallback2(AnimationCallback(&Klayman::sub420BC0));
+ break;
+ case 0x4824:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _y4 = _dataResource.getPoint(param.asInteger()).y;
+ setCallback2(AnimationCallback(&Klayman::sub4209D0));
+ break;
+ case 0x4825:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _y4 = _dataResource.getPoint(param.asInteger()).y;
+ setCallback2(AnimationCallback(&Klayman::sub420AD0));
+ break;
+ case 0x4828:
+ setCallback2(AnimationCallback(&Klayman::sub420ED0));
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene1004::handleMessage478110(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x04684052) {
+ _flagE5 = true;
+ _parentScene->sendMessage(0x2002, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1004::sub478170() {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x123E9C9F, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene1004::handleMessage478110);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 20d0e88..8ec33bc 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -81,6 +81,7 @@ public:
void sub4210C0();
void sub421070();
void sub420420();
+ void sub420ED0();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -204,6 +205,7 @@ protected:
uint32 handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -253,6 +255,15 @@ protected:
void sub44A4B0();
};
+class KmScene1004 : public Klayman {
+public:
+ KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage478110(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub478170();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 6825f62..dc28960 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -56,8 +56,9 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 0) {
//createScene1001(0);
// DEBUG: Jump to room
- //createScene1002(0);
- createScene1005(0);
+ createScene1002(0);
+ //createScene1005(0);
+ //createScene1004(0);
} else if (which == 1) {
createScene1002(1);
}
@@ -93,6 +94,11 @@ void Module1000::createScene1003(int which) {
}
void Module1000::createScene1004(int which) {
+ _vm->gameState().sceneNum = 3;
+ _childObject = new Scene1004(_vm, this, which);
+ SetUpdateHandler(&Module1000::updateScene1004);
+ // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1);
+ // TODO Music18hList_stop(0x061880C6, 0, 2);
}
void Module1000::createScene1005(int which) {
@@ -100,16 +106,13 @@ void Module1000::createScene1005(int which) {
_childObject = new Scene1005(_vm, this, which);
// TODO Music18hList_stop(0x061880C6, 0, 0);
// TODO Music18hList_play(_musicFileHash, 0, 0, 1);
- SetUpdateHandler(&Module1000::updateScene1002);
+ SetUpdateHandler(&Module1000::updateScene1005);
}
void Module1000::updateScene1001() {
_childObject->handleUpdate();
-
if (_done) {
-
debug("SCENE 1001 DONE; _field20 = %d", _field20);
-
_done = false;
delete _childObject;
_childObject = NULL;
@@ -117,11 +120,10 @@ void Module1000::updateScene1001() {
createScene1003(0);
_childObject->handleUpdate();
} else {
- // TODO createScene1002();
- // TODO _childObject->handleUpdate();
+ createScene1002(0);
+ _childObject->handleUpdate();
}
}
-
if (_field24 >= 0) {
if (_field24 == 2) {
// TODO ResourceTable_multiLoad(&_resourceTable2, &_resourceTable1, &_resourceTable3);
@@ -131,36 +133,29 @@ void Module1000::updateScene1001() {
_field24 = -1;
}
}
-
if (_field26 >= 0) {
// TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3);
_field26 = -1;
}
-
}
void Module1000::updateScene1002() {
-
_childObject->handleUpdate();
-
if (_done) {
-
debug("SCENE 1002 DONE; _field20 = %d", _field20);
-
_done = false;
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
_parentModule->sendMessage(0x1009, 0, this);
} else if (_field20 == 2) {
- // TODO createScene1004(0);
- // TODO _childObject->handleUpdate();
+ createScene1004(0);
+ _childObject->handleUpdate();
} else {
createScene1001(1);
_childObject->handleUpdate();
}
}
-
if (_field24 >= 0) {
if (_field24 == 1) {
_parentModule->sendMessage(0x100A, 0, this);
@@ -171,7 +166,6 @@ void Module1000::updateScene1002() {
}
_field24 = -1;
}
-
if (_field26 >= 0) {
if (_field26 == 1) {
_parentModule->sendMessage(0x1023, 0, this);
@@ -180,11 +174,9 @@ void Module1000::updateScene1002() {
}
_field26 = -1;
}
-
if (_field28 >= 0) {
_field28 = -1;
}
-
}
void Module1000::updateScene1003() {
@@ -199,6 +191,30 @@ void Module1000::updateScene1003() {
}
void Module1000::updateScene1004() {
+ _childObject->handleUpdate();
+ if (_done) {
+ debug("SCENE 1004 DONE; _field20 = %d", _field20);
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene1005(0);
+ _childObject->handleUpdate();
+ } else {
+ createScene1002(2);
+ _childObject->handleUpdate();
+ }
+ }
+ if (_field24 >= 0) {
+ if (_field24 == 0) {
+ // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
+ }
+ _field24 = -1;
+ }
+ if (_field26 >= 0) {
+ // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1);
+ _field26 = -1;
+ }
}
void Module1000::updateScene1005() {
@@ -223,11 +239,7 @@ AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
_x = 726;
_y = 440;
callback1();
-#if 0
- _soundResource2.set(0xED403E03);
- _soundResource2.load();
- _soundResource2.createSoundBuffer();
-#endif
+ _soundResource2.load(0xED403E03);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1001Door::handleMessage);
}
@@ -1421,49 +1433,66 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class599 = addSprite(new Class599(_vm, this));
- // DEBUG/HACK!!!!
- which = 1; setGlobalVar(0x8306F218, 1);
-
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
- // TODO
+ _klayman->getSurface()->getClipRect().x1 = 31;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435);
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
- // TODO
+ _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
}
} else {
if (which == 1) {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435);
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
- // TODO
+ _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_vm->_gameState.field2 = 1;
} else if (which == 2) {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645);
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4298);
- // TODO
+ _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_vm->_gameState.field2 = 1;
_klayman->sendMessage(0x4820, 0, this);
} else {
_klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4470);
- // TODO
- //_class479 = addSprite(new Class479(_vm, this, _klayman));
- // TODO
+ _klayman->getSurface()->getClipRect().x1 = 31;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ // TODO _class479 = addSprite(new Class479(_vm, this, _klayman));
+ // TODO _class479->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
_vm->_gameState.field2 = 0;
}
}
- addSprite(_klayman);
+ addSprite(_klayman);
_mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL));
@@ -1496,11 +1525,8 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B43A0);
-
-#if 0 // TODO
_soundResource2.load(0x60755842);
_soundResource3.load(0x616D5821);
-#endif
}
@@ -1510,7 +1536,11 @@ Scene1002::~Scene1002() {
void Scene1002::update() {
Scene::update();
if (!_flag1B4 && _klayman->getY() > 230) {
- // TODO
+ _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
deleteSprite(&_ssLadderArchPart3);
_klayman->clearRepl();
_flag1B4 = true;
@@ -1689,6 +1719,144 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity
return 0;
}
+// Scene1004
+
+AsScene1004TrashCan::AsScene1004TrashCan(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100), _soundResource(vm) {
+
+ _x = 330;
+ _y = 327;
+ createSurface(800, 56, 50);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1004TrashCan::handleMessage);
+ _surface->setVisible(false);
+}
+
+uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x225A8587) {
+ _soundResource.play(0x109AFC4C);
+ }
+ break;
+ case 0x2002:
+ setFileHash(0xEB312C11, 0, -1);
+ _surface->setVisible(true);
+ break;
+ case 0x3002:
+ setFileHash1();
+ _surface->setVisible(false);
+ break;
+ }
+ return 0;
+}
+
+Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _paletteAreaStatus(-1) {
+
+ Palette2 *palette2;
+ Sprite *tempSprite;
+
+ _surfaceFlag = true;
+
+ SetUpdateHandler(&Scene1004::update);
+ SetMessageHandler(&Scene1004::handleMessage);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x50C03005, 0, 0));
+
+ if (getGlobalVar(0x0D0A14D10)) {
+ palette2 = new Palette2(_vm, 0xA30BA329);
+ palette2->addPalette(0xA30BA329, 0, 256, 0);
+ } else {
+ palette2 = new Palette2(_vm, 0x50C03005);
+ palette2->addPalette(0x50C03005, 0, 256, 0);
+ }
+ _palette = palette2;
+ _palette->usePalette();
+ addEntity(_palette);
+
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x03001504, NULL));
+
+ if (which < 0) {
+ setRectList(0x004B7C70);
+ _klayman = new KmScene1004(_vm, this, 330, 327);
+ setMessageList(0x004B7C18);
+ } else if (which == 1) {
+ setRectList(0x004B7C70);
+ _klayman = new KmScene1004(_vm, this, 330, 327);
+ setMessageList(0x004B7C08);
+ } else {
+ loadDataResource(0x01900A04);
+ _klayman = new KmScene1004(_vm, this, _dataResource.getPoint(0x80052A29).x, 27);
+ setMessageList(0x004B7BF0);
+ }
+
+ addSprite(_klayman);
+
+ updatePaletteArea();
+
+ _class478 = addSprite(new Class478(_vm, _klayman));
+
+ addSprite(new StaticSprite(_vm, 0x800034A0, 1100));
+ addSprite(new StaticSprite(_vm, 0x64402020, 1100));
+ addSprite(new StaticSprite(_vm, 0x3060222E, 1300));
+ tempSprite = addSprite(new StaticSprite(_vm, 0x0E002004, 1300));
+
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+
+ _asTrashCan = addSprite(new AsScene1004TrashCan(_vm));
+
+}
+
+void Scene1004::update() {
+ Scene::update();
+ updatePaletteArea();
+}
+
+uint32 Scene1004::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x926500A1) {
+ setMessageList(0x004B7C20);
+ messageResult = 1;
+ }
+ break;
+ case 0x2000:
+ loadDataResource(0x01900A04);
+ break;
+ case 0x2001:
+ setRectList(0x004B7C70);
+ break;
+ case 0x2002:
+ _asTrashCan->sendMessage(0x2002, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+void Scene1004::updatePaletteArea() {
+ if (_klayman->getY() < 150) {
+ if (_paletteAreaStatus != 0) {
+ _paletteAreaStatus = 0;
+ ((Palette2*)_palette)->addPalette(0x406B0D10, 0, 64, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ }
+ } else {
+ if (_paletteAreaStatus != 1) {
+ _paletteAreaStatus = 1;
+ ((Palette2*)_palette)->addPalette(0x24332243, 0, 64, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ }
+ }
+}
+
// Scene1005
Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1717,9 +1885,6 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
}
-Scene1005::~Scene1005() {
-}
-
uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 4b2121e..0e3f950 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -302,12 +302,33 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// Scene1004
+
+class AsScene1004TrashCan : public AnimatedSprite {
+public:
+ AsScene1004TrashCan(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1004 : public Scene {
+public:
+ Scene1004(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_class478;
+ Sprite *_asTrashCan;
+ int _paletteAreaStatus;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void updatePaletteArea();
+};
+
// Scene1005
class Scene1005 : public Scene {
public:
Scene1005(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Scene1005();
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void drawTextToBackground();
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 1c37610..8b2a19c 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -606,6 +606,7 @@ DataResource::DRDirectoryItem *DataResource::findDRDirectoryItem(uint32 nameHash
}
// SoundResource
+// ALL TODO
SoundResource::SoundResource(NeverhoodEngine *vm)
: _vm(vm) {
@@ -615,6 +616,9 @@ bool SoundResource::isPlaying() {
return false;
}
+void SoundResource::load(uint32 fileHash) {
+}
+
void SoundResource::play(uint32 fileHash, bool looping) {
}
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index d273e7c..5d8d5ca 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -195,6 +195,7 @@ class SoundResource {
public:
SoundResource(NeverhoodEngine *vm);
bool isPlaying();
+ void load(uint32 fileHash);
void play(uint32 fileHash, bool looping = false);
void play();
protected:
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 2b5c81b..8f49a00 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -26,7 +26,7 @@
namespace Neverhood {
Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
- : Entity(vm, 0), _parentModule(parentModule) {
+ : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm) {
_messageListFlag1 = false;
_systemCallbackFlag = false;
@@ -94,8 +94,10 @@ void Scene::draw() {
(*iter)->addDirtyRect();
// TODO g_screen->addDirtyRects();
}
- for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
+ for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
+ debug(4, "priority = %d", (*iter)->getPriority());
(*iter)->draw();
+ }
}
}
@@ -492,4 +494,10 @@ void Scene::setRectList(RectList *rectList) {
_rectType = 1;
}
+void Scene::loadDataResource(uint32 fileHash) {
+ _dataResource.load(fileHash);
+ if (_klayman)
+ _klayman->loadDataResource(fileHash);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 0878380..8f0b79a 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -61,7 +61,7 @@ protected:
bool _messageListFlag1;
NPoint _mouseClickPos;
bool _mouseClicked;
- // TODO RectResource _rectResource;
+ DataResource _dataResource;
RectList *_rectList;
int _rectType;
// rectListCount
@@ -102,6 +102,7 @@ protected:
void runMessageList();
void setRectList(uint32 id);
void setRectList(RectList *rectList);
+ void loadDataResource(uint32 fileHash);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 87fd131..2c772d7 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -27,10 +27,8 @@ namespace Neverhood {
// Sprite
Sprite::Sprite(NeverhoodEngine *vm, int objectPriority)
- : Entity(vm, objectPriority), _x(0), _y(0),
- _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
- _doDeltaX(false), _doDeltaY(false), _needRefresh(false),
- _flags(0) {
+ : Entity(vm, objectPriority), _x(0), _y(0), _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
+ _dataResource(vm), _doDeltaX(false), _doDeltaY(false), _needRefresh(false), _flags(0) {
_name = "Sprite";
SetMessageHandler(&Sprite::handleMessage);
@@ -87,6 +85,10 @@ uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *
return 0;
}
+void Sprite::loadDataResource(uint32 fileHash) {
+ _dataResource.load(fileHash);
+}
+
void Sprite::createSurface(int surfacePriority, int16 width, int16 height) {
_surface = new BaseSurface(_vm, surfacePriority, width, height);
}
@@ -138,7 +140,7 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y,
_drawRect.x = 0;
_drawRect.y = 0;
_drawRect.width = width;
- _drawRect.width = height;
+ _drawRect.height = height;
_needRefresh = true;
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index f1d8a87..18c9ae3 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -53,6 +53,7 @@ public:
bool isDoDeltaY() const { return _doDeltaY; }
NRect& getRect() { return _rect; }
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void loadDataResource(uint32 fileHash);
protected:
void (Sprite::*_spriteUpdateCb)();
Common::String _spriteUpdateCbName; // For debugging purposes
@@ -69,7 +70,7 @@ protected:
NRect _rect;
uint16 _flags;
//0000004A field4A dw ? // seems to be unused except in ctor
- //0000004C rectResource RectResource ?
+ DataResource _dataResource;
//void update();
void createSurface(int surfacePriority, int16 width, int16 height);
void handleSpriteUpdate() {
Commit: 438b6bb53c03db915f436a95427b6ab2c9504fce
https://github.com/scummvm/scummvm/commit/438b6bb53c03db915f436a95427b6ab2c9504fce
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Implement Module2300 (just a bunch of NavigationScenes)
- Fix Smacker player by using a SafeSubReadStream
- Fix NavigationMouse (cursors in type 1 were swapped)
Changed paths:
A engines/neverhood/module2300.cpp
A engines/neverhood/module2300.h
engines/neverhood/blbarchive.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module.cpp
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/mouse.cpp
engines/neverhood/resource.cpp
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 3138b91..2e29485 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -110,7 +110,8 @@ byte *BlbArchive::getEntryExtData(uint index) {
Common::SeekableReadStream *BlbArchive::createStream(uint index) {
const BlbArchiveEntry &entry = _entries[index];
- return new Common::SeekableSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
+ //debug("entry.offset = %08X; entry.offset + entry.diskSize = %08X", entry.offset, entry.offset + entry.diskSize);
+ return new Common::SafeSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c2d3e6d..4800923 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -25,6 +25,7 @@
#include "neverhood/graphics.h"
#include "neverhood/module1000.h"
#include "neverhood/module1500.h"
+#include "neverhood/module2300.h"
namespace Neverhood {
@@ -63,7 +64,7 @@ void GameModule::handleMouseMove(int16 x, int16 y) {
NPoint mousePos;
mousePos.x = x;
mousePos.y = y;
- debug("GameModule::handleMouseMove(%d, %d)", x, y);
+ debug(2, "GameModule::handleMouseMove(%d, %d)", x, y);
_childObject->sendPointMessage(0, mousePos, this);
}
}
@@ -73,7 +74,7 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
NPoint mousePos;
mousePos.x = x;
mousePos.y = y;
- debug("GameModule::handleMouseDown(%d, %d)", x, y);
+ debug(2, "GameModule::handleMouseDown(%d, %d)", x, y);
_childObject->sendPointMessage(1, mousePos, this);
}
}
@@ -106,9 +107,29 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
-// createModule1500(0); // Logos and intro video
+// createModule1500(0); // Logos and intro video //Real
+// createModule1000(0);
+ createModule2300(0);
+}
+
+void GameModule::createModule1000(int which) {
+ setGlobalVar(0x91080831, 0x03294419);
+ _childObject = new Module1000(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1000);
+}
- createModule1000(0);
+void GameModule::updateModule1000() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ // TODO _resourceTable3.load();
+ delete _childObject;
+ _childObject = NULL;
+ createModule2300(0);
+ _childObject->handleUpdate();
+ }
}
void GameModule::createModule1500(int which) {
@@ -131,24 +152,47 @@ void GameModule::updateModule1500() {
}
}
-void GameModule::createModule1000(int which) {
- setGlobalVar(0x91080831, 0x03294419);
- _childObject = new Module1000(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1000);
+void GameModule::createModule2300(int which) {
+ setGlobalVar(0x91080831, 0x1A214010);
+ _childObject = new Module2300(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule2300);
}
-void GameModule::updateModule1000() {
+void GameModule::updateModule2300() {
if (!_childObject)
return;
_childObject->handleUpdate();
if (_done) {
_done = false;
- // TODO _resourceTable3.load();
delete _childObject;
_childObject = NULL;
- error("Done...");
- // TODO createModule2300();
- // TODO _childObject->handleUpdate();
+ if (_field20 == 1) {
+ // TODO createModule2200(0);
+ // TODO _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ // TODO createModule1200(0);
+ // TODO _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ // TODO createModule2400(0);
+ // TODO _childObject->handleUpdate();
+ } else if (_field20 == 4) {
+ // TODO createModule3000(0);
+ // TODO _childObject->handleUpdate();
+ } else {
+ createModule1000(1);
+ _childObject->handleUpdate();
+ }
+ }
+ if (_field24 >= 0) {
+ if (_field24 == 2) {
+ // TODO _resourceTable4.load();
+ } else if (_field24 == 0) {
+ // TODO _resourceTable3.load();
+ }
+ _field24 = -1;
+ }
+ if (_field26 >= 0) {
+ _field26 = -1;
}
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 876506c..7977ea5 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -49,10 +49,12 @@ protected:
*/
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void startup();
- void createModule1500(int which);
- void updateModule1500();
void createModule1000(int which);
void updateModule1000();
+ void createModule1500(int which);
+ void updateModule1500();
+ void createModule2300(int which);
+ void updateModule2300();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 03109c0..8f0b556 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -42,7 +42,6 @@ void Module::draw() {
}
uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
-
switch (messageNum) {
case 0x0008:
if (_parentModule)
@@ -68,7 +67,6 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
if (_childObject && sender == _parentModule)
return _childObject->sendMessage(messageNum, param, sender);
}
-
return 0;
}
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index af03c07..ed7077e 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS = \
module.o \
module1000.o \
module1500.o \
+ module2300.o \
mouse.o \
navigationscene.o \
neverhood.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index dc28960..8ee5941 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -21,7 +21,6 @@
*/
#include "neverhood/module1000.h"
-#include "neverhood/navigationscene.h"//###
namespace Neverhood {
@@ -54,9 +53,10 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
break;
}
} else if (which == 0) {
- //createScene1001(0);
+ //createScene1001(0);//Real
// DEBUG: Jump to room
- createScene1002(0);
+ setGlobalVar(0x8306F218, 1);
+ createScene1002(2);
//createScene1005(0);
//createScene1004(0);
} else if (which == 1) {
@@ -80,7 +80,6 @@ void Module1000::createScene1001(int which) {
void Module1000::createScene1002(int which) {
_vm->gameState().sceneNum = 1;
_childObject = new Scene1002(_vm, this, which);
- // DEBUG _childObject = new NavigationScene(_vm, this, 0x004B67B8, 0, NULL);
// TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
// TODO Music18hList_play(0x061880C6, 0, 0, 1);
SetUpdateHandler(&Module1000::updateScene1002);
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
new file mode 100644
index 0000000..32ce2a1
--- /dev/null
+++ b/engines/neverhood/module2300.cpp
@@ -0,0 +1,270 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2300.h"
+#include "neverhood/navigationscene.h"
+#include "neverhood/smackerscene.h"
+
+namespace Neverhood {
+
+Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule), _volume(0) {
+
+ debug("Create Module2300(%d)", which);
+
+ // TODO Sound1ChList_addSoundResources(0x1A214010, dword_4B6938, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B6938, true, 50, 600, 10, 10, 150);
+
+ _flag = getGlobalVar(0x10938830) == 0;
+
+ if (_flag) {
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
+ // TODO Sound1ChList_playLooping(0x90F0D1C3);
+ } else {
+ // TODO Sound1ChList_setSoundValues(0x90F0D1C3, false, 0, 0, 0, 0);
+ }
+
+ // TODO Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_sub_407C70(0x1A214010, 0x41861371, 0x43A2507F, 0);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene2301(-1);
+ break;
+ case 1:
+ createScene2302(-1);
+ break;
+ case 2:
+ createScene2303(-1);
+ break;
+ case 3:
+ createScene2304(-1);
+ break;
+ case 4:
+ createScene2305(-1);
+ break;
+ }
+ } else if (which == 1) {
+ createScene2303(0);
+ } else if (which == 2) {
+ createScene2304(0);
+ } else if (which == 3) {
+ createScene2305(-1);
+ } else if (which == 4) {
+ createScene2302(3);
+ } else {
+ createScene2301(1);
+ }
+
+}
+
+Module2300::~Module2300() {
+ // TODO Sound1ChList_sub_407A50(0x1A214010);
+}
+
+void Module2300::createScene2301(int which) {
+ _vm->gameState().sceneNum = 0;
+ _childObject = new NavigationScene(_vm, this, 0x004B67B8, which, NULL);
+ SetUpdateHandler(&Module2300::updateScene2301);
+}
+
+void Module2300::createScene2302(int which) {
+ _vm->gameState().sceneNum = 1;
+ _childObject = new NavigationScene(_vm, this, 0x004B67E8, which, NULL);
+ SetUpdateHandler(&Module2300::updateScene2302);
+ if (_flag) {
+ _volume = 15;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 15);
+ }
+}
+
+void Module2300::createScene2303(int which) {
+ _vm->gameState().sceneNum = 2;
+ _childObject = new NavigationScene(_vm, this, 0x004B6878, which, NULL);
+ SetUpdateHandler(&Module2300::updateScene2303);
+}
+
+void Module2300::createScene2304(int which) {
+ _vm->gameState().sceneNum = 3;
+ if (getGlobalVar(0x10938830)) {
+ _childObject = new NavigationScene(_vm, this, 0x004B68F0, which, NULL);
+ } else {
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ _childObject = new NavigationScene(_vm, this, 0x004B68A8, which, NULL);
+ if (_flag) {
+ _volume = 87;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 87);
+ }
+ }
+ SetUpdateHandler(&Module2300::updateScene2304);
+}
+
+void Module2300::createScene2305(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 4;
+ // TODO Sound1ChList_sub_4080B0(true);
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x20080A0B);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module2300::updateScene2305);
+}
+
+void Module2300::updateScene2301() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2302(4);
+ _childObject->handleUpdate();
+ } else {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ }
+ if (_field24 >= 0) {
+ if (_field24 == 0) {
+ _parentModule->sendMessage(0x100A, 0, this);
+ }
+ _field24 = -1;
+ }
+ if (_field26 >= 0) {
+ _parentModule->sendMessage(0x1023, 0, this);
+ _field26 = -1;
+ }
+}
+
+void Module2300::updateScene2302() {
+ _childObject->handleUpdate();
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume++;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
+#endif
+#if 0 // TODO
+ if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
+ Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
+ Sound1ChList_setVolume(0x48498E46, 70);
+ Sound1ChList_setVolume(0x50399F64, 70);
+ }
+#endif
+ if (_done) {
+ debug("SCENE 2302 DONE; _field20 = %d", _field20);
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2301(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene2303(1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ createScene2302(3);
+ _childObject->handleUpdate();
+ } else if (_field20 == 4) {
+ createScene2304(1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 5) {
+ _parentModule->sendMessage(0x1009, 3, this);
+ } else {
+ _parentModule->sendMessage(0x1009, 4, this);
+ }
+ }
+}
+
+void Module2300::updateScene2303() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ _parentModule->sendMessage(0x1009, 3, this);
+ } else {
+ createScene2302(5);
+ _childObject->handleUpdate();
+ }
+ }
+ if (_field24 >= 0) {
+ if (_field24 == 1) {
+ // TODO _resourceTable1.setResourceList(ex_sub_479D00(0), true);
+ // TODO _resourceTable2.loadResources();
+ }
+ _field24 = -1;
+ }
+}
+
+void Module2300::updateScene2304() {
+ _childObject->handleUpdate();
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
+ navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume--;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
+#endif
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ _parentModule->sendMessage(0x1009, 2, this);
+ } else {
+ createScene2302(1);
+ _childObject->handleUpdate();
+ }
+ }
+ if (_field24 >= 0) {
+ if (_field24 == 0) {
+ _parentModule->sendMessage(0x100A, 2, this);
+ }
+ _field24 = -1;
+ }
+ if (_field26 >= 0) {
+ if (_field26 == 1) {
+ _parentModule->sendMessage(0x1023, 2, this);
+ }
+ _field26 = -1;
+ }
+}
+
+void Module2300::updateScene2305() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ // TODO Sound1ChList_sub_4080B0(false);
+ createScene2302(2);
+ _childObject->handleUpdate();
+ }
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2300.h b/engines/neverhood/module2300.h
new file mode 100644
index 0000000..9f705db
--- /dev/null
+++ b/engines/neverhood/module2300.h
@@ -0,0 +1,57 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2300_H
+#define NEVERHOOD_MODULE2300_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module2300
+
+class Module2300 : public Module {
+public:
+ Module2300(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2300();
+protected:
+ // TODO ResourceTable _resourceTable1;
+ // TODO ResourceTable _resourceTable2;
+ bool _flag;
+ int _volume;
+ void createScene2301(int which);
+ void createScene2302(int which);
+ void createScene2303(int which);
+ void createScene2304(int which);
+ void createScene2305(int which);
+ void updateScene2301();
+ void updateScene2302();
+ void updateScene2303();
+ void updateScene2304();
+ void updateScene2305();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2300_H */
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 63d9866..1eaf0cb 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -258,6 +258,7 @@ void NavigationMouse::update() {
}
uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("NavigationMouse: _type = %d", _type);
uint32 messageResult = 0;
switch (messageNum) {
case 0x2064:
@@ -311,9 +312,9 @@ uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m,
switch (_type) {
case 1:
if (_x >= 320)
- _mouseCursorResource.setCursorNum(6);
- else
_mouseCursorResource.setCursorNum(5);
+ else
+ _mouseCursorResource.setCursorNum(6);
break;
case 2:
default:
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 8b2a19c..44fef14 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -51,11 +51,11 @@ void SpriteResource::draw(byte *dest, int destPitch, bool flipX, bool flipY) {
}
bool SpriteResource::load(uint32 fileHash) {
- debug("SpriteResource::load(%08X)", fileHash);
+ debug(2, "SpriteResource::load(%08X)", fileHash);
// TODO: Later merge with load2 and make the mode a parameter
unload();
_resourceHandle = _vm->_res->useResource(fileHash);
- debug("SpriteResource::load(0x%08X) _resourceHandle = %d", fileHash, _resourceHandle);
+ debug(2, "SpriteResource::load(0x%08X) _resourceHandle = %d", fileHash, _resourceHandle);
if (_resourceHandle != -1) {
if (_vm->_res->getResourceType(_resourceHandle) == 2) {
byte *spriteData = _vm->_res->loadResource(_resourceHandle, true);
@@ -106,7 +106,7 @@ PaletteResource::~PaletteResource() {
}
bool PaletteResource::load(uint32 fileHash) {
- debug("PaletteResource::load(%08X)", fileHash);
+ debug(2, "PaletteResource::load(%08X)", fileHash);
unload();
_resourceHandle = _vm->_res->useResource(fileHash);
if (_resourceHandle != -1) {
@@ -170,7 +170,7 @@ void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX,
}
bool AnimResource::load(uint32 fileHash) {
- debug("AnimResource::load(%08X)", fileHash);
+ debug(2, "AnimResource::load(%08X)", fileHash);
if (fileHash == _fileHash)
return true;
@@ -304,7 +304,7 @@ int16 AnimResource::getFrameIndex(uint32 frameHash) {
frameIndex = (int16)i;
break;
}
- debug("AnimResource::getFrameIndex(%08X) -> %d", frameHash, frameIndex);
+ debug(2, "AnimResource::getFrameIndex(%08X) -> %d", frameHash, frameIndex);
return frameIndex;
}
@@ -324,7 +324,6 @@ void MouseCursorResource::load(uint32 fileHash) {
if (_currFileHash != fileHash) {
if (_cursorSprite.load(fileHash) && !_cursorSprite.isRle() &&
_cursorSprite.getDimensions().width == 96 && _cursorSprite.getDimensions().height == 224) {
- debug("load ok");
_currFileHash = fileHash;
} else {
unload();
@@ -417,7 +416,7 @@ DataResource::~DataResource() {
}
void DataResource::load(uint32 fileHash) {
- debug("DataResource::load(%08X)", fileHash);
+ debug(2, "DataResource::load(%08X)", fileHash);
byte *data = NULL;
uint32 dataSize = 0;
unload();
@@ -435,14 +434,14 @@ void DataResource::load(uint32 fileHash) {
Common::MemoryReadStream dataS(data, dataSize);
uint itemCount = dataS.readUint16LE();
uint32 itemStartOffs = 2 + itemCount * 8;
- debug("itemCount = %d", itemCount);
+ debug(2, "itemCount = %d", itemCount);
for (uint i = 0; i < itemCount; i++) {
dataS.seek(2 + i * 8);
DRDirectoryItem drDirectoryItem;
drDirectoryItem.nameHash = dataS.readUint32LE();
drDirectoryItem.offset = dataS.readUint16LE();
drDirectoryItem.type = dataS.readUint16LE();
- debug("%03d nameHash = %08X; offset = %04X; type = %d", i, drDirectoryItem.nameHash, drDirectoryItem.offset, drDirectoryItem.type);
+ debug(2, "%03d nameHash = %08X; offset = %04X; type = %d", i, drDirectoryItem.nameHash, drDirectoryItem.offset, drDirectoryItem.type);
dataS.seek(itemStartOffs + drDirectoryItem.offset);
switch (drDirectoryItem.type) {
case 1:
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 2c772d7..d0a6628 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -385,7 +385,6 @@ void AnimatedSprite::updatePosition() {
void AnimatedSprite::updateFrameIndex() {
if (!_playBackwards) {
- //debug("%08X ### _frameIndex = %d; _frameIndex2 = %d", _currAnimFileHash, _frameIndex, _frameIndex2);
if (_frameIndex < _frameIndex2) {
_frameIndex++;
} else {
@@ -437,7 +436,7 @@ void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
}
void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4) {
- debug("AnimatedSprite::setFileHash(%08X, %d, %d)", fileHash, frameIndex3, frameIndex4);
+ debug(2, "AnimatedSprite::setFileHash(%08X, %d, %d)", fileHash, frameIndex3, frameIndex4);
_fileHash1 = fileHash;
_frameIndex3 = frameIndex3;
_frameIndex4 = frameIndex4;
@@ -454,7 +453,7 @@ void AnimatedSprite::setFileHash1() {
}
void AnimatedSprite::setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5) {
- debug("AnimatedSprite::setFileHash2(%08X, %08X, %08X)", fileHash, fileHash6, fileHash5);
+ debug(2, "AnimatedSprite::setFileHash2(%08X, %08X, %08X)", fileHash, fileHash6, fileHash5);
_fileHash1 = fileHash;
_fileHash6 = fileHash6;
_fileHash5 = fileHash5;
Commit: b1377ab153399db3fdca784ef03a040090a59706
https://github.com/scummvm/scummvm/commit/b1377ab153399db3fdca784ef03a040090a59706
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Add entries for Module2300
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 3024197..e6e4d75 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -36,6 +36,8 @@ static const uint32 rectListOffsets[] = {
3, 0x004B43A0,
1, 0x004B4418,
3, 0x004B43A0,
+ // Scene1004
+ 1, 0x004B7C70,
0, 0
};
@@ -64,10 +66,20 @@ static const uint32 messageListOffsets[] = {
4, 0x004B4480,
2, 0x004B41E0,
5, 0x004B4148,
+ // Scene1004
+ 3, 0x004B7BF0,
+ 2, 0x004B7C08,
+ 1, 0x004B7C18,
+ 2, 0x004B7C20,
0, 0
};
static const uint32 navigationListOffsets[] = {
// Module2300
- 2, 0x004B67B8
+ 2, 0x004B67B8,
+ 6, 0x004B67E8,
+ 2, 0x004B6878,
+ 3, 0x004B68F0,
+ 3, 0x004B68A8,
+ 0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index a9bd4fd..6e7c150 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 720050bec1477b1e7df5bb34bb6ecf992d2a8ca1
https://github.com/scummvm/scummvm/commit/720050bec1477b1e7df5bb34bb6ecf992d2a8ca1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Start with Module1200/Scene1201 (not complete yet)
- Fix an odd bug with the game variables (index of newly added subvar was sometimes -1)
Changed paths:
A engines/neverhood/module1200.cpp
A engines/neverhood/module1200.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 4800923..95a6a5f 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -24,6 +24,7 @@
#include "neverhood/graphics.h"
#include "neverhood/module1000.h"
+#include "neverhood/module1200.h"
#include "neverhood/module1500.h"
#include "neverhood/module2300.h"
@@ -108,8 +109,9 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule1500(0); // Logos and intro video //Real
-// createModule1000(0);
- createModule2300(0);
+// createModule1000(-1);
+// createModule2300(0);
+ createModule1200(0);
}
void GameModule::createModule1000(int which) {
@@ -132,6 +134,30 @@ void GameModule::updateModule1000() {
}
}
+void GameModule::createModule1200(int which) {
+ setGlobalVar(0x91080831, 0x00478311);
+ _childObject = new Module1200(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1200);
+}
+
+void GameModule::updateModule1200() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ // TODO createModule2600(0);
+ // TODO _childObject->handleUpdate();
+ } else {
+ createModule2300(2);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
void GameModule::createModule1500(int which) {
_someFlag1 = false;
setGlobalVar(0x91080831, 0x00F10114);
@@ -170,8 +196,8 @@ void GameModule::updateModule2300() {
// TODO createModule2200(0);
// TODO _childObject->handleUpdate();
} else if (_field20 == 2) {
- // TODO createModule1200(0);
- // TODO _childObject->handleUpdate();
+ createModule1200(0);
+ _childObject->handleUpdate();
} else if (_field20 == 3) {
// TODO createModule2400(0);
// TODO _childObject->handleUpdate();
@@ -196,4 +222,14 @@ void GameModule::updateModule2300() {
}
}
+void GameModule::createModule2400(int which) {
+ debug("createModule2400");
+ _vm->_system->quit();
+}
+
+void GameModule::createModule3000(int which) {
+ debug("createModule3000");
+ _vm->_system->quit();
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 7977ea5..d95c31e 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -51,10 +51,15 @@ protected:
void startup();
void createModule1000(int which);
void updateModule1000();
+ void createModule1200(int which);
+ void updateModule1200();
void createModule1500(int which);
void updateModule1500();
+ void createModule2200(int which);
void createModule2300(int which);
void updateModule2300();
+ void createModule2400(int which);
+ void createModule3000(int which);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index 98ae709..caf79b2 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -57,7 +57,16 @@ uint32 GameVars::getSubVar(uint32 nameHash, uint32 subNameHash) {
void GameVars::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
debug("GameVars::setSubVar(%08X, %08X, %d)", nameHash, subNameHash, value);
- _vars[getSubVarIndex(getSubVarIndex(0, nameHash), subNameHash)].value = value;
+
+ int16 varIndex = getSubVarIndex(0, nameHash);
+ debug(" varIndex = %d", varIndex);
+
+ int16 subVarIndex = getSubVarIndex(varIndex, subNameHash);
+ debug(" subVarIndex = %d", subVarIndex);
+
+ _vars[subVarIndex].value = value;
+
+ //_vars[getSubVarIndex(getSubVarIndex(0, nameHash), subNameHash)].value = value;
}
int16 GameVars::addVar(uint32 nameHash, uint32 value) {
@@ -89,16 +98,19 @@ int16 GameVars::addSubVar(int16 varIndex, uint32 subNameHash, uint32 value) {
} else {
while (_vars[nextIndex].nextIndex != -1)
nextIndex = _vars[nextIndex].nextIndex;
- _vars[nextIndex].nextIndex = addVar(subNameHash, value);
- return _vars[nextIndex].nextIndex;
+ int16 index = addVar(subNameHash, value);
+ _vars[nextIndex].nextIndex = index;
+ return index;
}
}
int16 GameVars::getSubVarIndex(int16 varIndex, uint32 subNameHash) {
debug("GameVars::getSubVarIndex(%d, %08X)", varIndex, subNameHash);
int16 subVarIndex = findSubVarIndex(varIndex, subNameHash);
- if (subVarIndex == -1)
+ if (subVarIndex == -1) {
subVarIndex = addSubVar(varIndex, subNameHash, 0);
+ debug("need to create: subVarIndex = %d", subVarIndex);
+ }
return subVarIndex;
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index d5c3205..145d645 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -84,8 +84,7 @@ uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&Klayman::sub41FC80));
break;
case 0x4818:
- debug("TODO sub41C930");
- // TODO sub41C930(_rectResource.getRectangle1(param.asInteger()).x, false);
+ sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
break;
}
return 0;
@@ -461,6 +460,7 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
void Klayman::sub41C930(int16 x, bool flag) {
debug("Klayman::sub41C930(%d, %d)", x, flag);
int16 xdiff = ABS(x - _x);
+ debug("xdiff = %d", xdiff);
if (x == _x) {
_x4 = x;
if (!_flagE1 && !_flagE2 && !_flagE3) {
@@ -485,6 +485,7 @@ void Klayman::sub41C930(int16 x, bool flag) {
error("// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));");
// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
} else {
+ debug("##################################################################");
_x4 = x;
setCallback2(AnimationCallback(&Klayman::sub41F950));
}
@@ -688,6 +689,9 @@ void Klayman::sub41F950() {
_status2 = 0;
_flagE1 = true;
_flagE5 = true;
+
+ debug("222222222222222222222 x = %d; x4 = %d", _x, _x4);
+
setDoDeltaX(_x4 < _x);
setFileHash(0x242C0198, 0, -1);
SetUpdateHandler(&Klayman::update);
@@ -821,9 +825,12 @@ void Klayman::spriteUpdate41F320() {
sendMessage(0x1019, 0, this);
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+
+ debug("xxxxxxxxxxxxxxxxxxxxxxxxx xdelta = %d", xdelta);
+
_x += xdelta;
if (_field114) {
- debug("_field114");
+ error("_field114");
// TODO Klayman_sub_41CF70
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
@@ -980,22 +987,28 @@ void Klayman::sub41CD00(int16 x) {
void Klayman::sub41CC40(int16 x1, int16 x2) {
if (_x > x1) {
if (_x == x1 + x2) {
+ debug("sub41CC40 #1");
_x4 = x1 + x2;
setCallback2(NULL);
sub41C7B0();
} else if (_x < x1 + x2) {
+ debug("sub41CC40 #2");
sub41CAC0(x1 + x2);
} else {
+ debug("sub41CC40 #3");
sub41C930(x1 + x2, false);
}
} else {
if (_x == x1 - x2) {
+ debug("sub41CC40 #4");
_x4 = x1 - x2;
setCallback2(NULL);
sub41C7B0();
} else if (_x > x1 - x2) {
+ debug("sub41CC40 #5");
sub41CAC0(x1 - x2);
} else {
+ debug("sub41CC40 #6");
sub41C930(x1 - x2, false);
}
}
@@ -1593,6 +1606,26 @@ uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub4207A0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub4207A0))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x9B250AD2, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41EEF0);
+ }
+}
+
+void Klayman::sub4207F0() {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x98F88391, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41EEF0);
+}
+
//##############################################################################
// KmScene1001
@@ -1635,16 +1668,14 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
sub41C7B0();
break;
-
case 0x481B:
// TODO: It's not really a point but an x1/x2 pair
- if (param.asPoint().x != 0) {
- sub41CC40(param.asPoint().x, param.asPoint().y);
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
} else {
- sub41CCE0(param.asPoint().y);
+ sub41CCE0(param.asPoint().x);
}
break;
-
case 0x481F:
if (param.asInteger() == 0) {
setCallback2(AnimationCallback(&Klayman::sub420870));
@@ -1658,28 +1689,23 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&Klayman::sub420830));
}
break;
-
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger());
sub41C7B0();
break;
-
case 0x4836:
if (param.asInteger() == 1) {
_parentScene->sendMessage(0x2002, 0, this);
setCallback2(AnimationCallback(&Klayman::sub4211F0));
}
break;
-
case 0x483F:
sub41CD00(param.asInteger());
break;
-
case 0x4840:
sub41CD70(param.asInteger());
break;
}
-
return 0;
}
@@ -2325,4 +2351,206 @@ void KmScene1004::sub478170() {
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
}
+// KmScene1201
+
+KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, Entity *class464, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) {
+
+ // TODO setKlaymanTable(dword_4AEF10, 3);
+ _flagF6 = true;
+
+}
+
+uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480A:
+ setCallback2(AnimationCallback(&KmScene1201::sub40DF00));
+ break;
+ case 0x4812:
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ break;
+ case 0x4813:
+ setCallback2(AnimationCallback(&KmScene1201::sub40DD20));
+ break;
+ case 0x4814:
+ setCallback2(AnimationCallback(&KmScene1201::sub40DFA0));
+ break;
+ case 0x4815:
+ setCallback2(AnimationCallback(&KmScene1201::sub40E040));
+ break;
+ case 0x4816:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x481F:
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+void KmScene1201::update40DBE0() {
+ if (_x >= 380)
+ sub41C7B0();
+ Klayman::update();
+}
+
+uint32 KmScene1201::handleMessage40DC00(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x51281850) {
+ setGlobalVar(0x20A0C516, 1);
+ } else if (param.asInteger() == 0x43000538) {
+ _soundResource1.play(0x21043059);
+ } else if (param.asInteger() == 0x02B20220) {
+ _soundResource1.play(0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ _soundResource1.play(0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ _soundResource1.play(0x44051000);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1201::sub40DD20() {
+ if (!sub41CEB0(AnimationCallback(&KmScene1201::sub40DD20))) {
+ _status2 = 0;
+ _flagE5 = false;
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ setFileHash(0x9CAA0218, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1201::handleMessage40DC00);
+ SetAnimationCallback3(&KmScene1201::sub40DD90);
+ }
+}
+
+void KmScene1201::sub40DD90() {
+ _status2 = 1;
+ _flagE5 = false;
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ setFileHash(0x1222A513, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1201::handleMessage40DC00);
+}
+
+uint32 KmScene1201::handleMessage40DDF0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ _soundResource1.play(0x405002D8);
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x480B, 0, this);
+ }
+ } else if (param.asInteger() == 0x02421405) {
+ if (_countdown != 0) {
+ _countdown--;
+ sub40DF60();
+ } else {
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ }
+ }
+ break;
+ }
+ return Klayman::handleMessage41D480(messageNum, param, sender);
+}
+
+uint32 KmScene1201::handleMessage40DEA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x000F0082) {
+ _soundResource1.play(0x74E2810F);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1201::sub40DF00() {
+ if (!sub41CEB0(AnimationCallback(&KmScene1201::sub40DF00))) {
+ _status2 = 2;
+ _flagE5 = false;
+ _countdown = 8;
+ setDoDeltaX(0);
+ setFileHash(0x0C1CA072, 0, -1);
+ SetUpdateHandler(&KmScene1201::update40DBE0);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene1201::handleMessage40DDF0);
+ }
+}
+
+void KmScene1201::sub40DF60() {
+ _flagE5 = false;
+ setFileHash2(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&KmScene1201::update40DBE0);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene1201::handleMessage40DDF0);
+}
+
+void KmScene1201::sub40DFA0() {
+ if (!sub41CF10(AnimationCallback(&KmScene1201::sub40DFA0))) {
+ _status2 = 1;
+ _flagE5 = false;
+ setDoDeltaX(0);
+ setFileHash(0x2821C590, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene1201::handleMessage40DEA0);
+ SetAnimationCallback3(&Klayman::sub41FC80);
+ _class464->sendMessage(0x2006, 0, this);
+ _soundResource1.play(0x62E0A356);
+ }
+}
+
+void KmScene1201::sub40E040() {
+ if (!sub41CF10(AnimationCallback(&KmScene1201::sub40E040))) {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 8ec33bc..3c87104 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -82,6 +82,8 @@ public:
void sub421070();
void sub420420();
void sub420ED0();
+ void sub4207A0();
+ void sub4207F0();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -264,6 +266,25 @@ protected:
void sub478170();
};
+class KmScene1201 : public Klayman {
+public:
+ KmScene1201(NeverhoodEngine *vm, Entity *parentScene, Entity *class464, int16 x, int16 y);
+protected:
+ Entity *_class464;
+ int _countdown;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void update40DBE0();
+ uint32 handleMessage40DC00(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40DD20();
+ void sub40DD90();
+ uint32 handleMessage40DDF0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40DEA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40DF00();
+ void sub40DF60();
+ void sub40DFA0();
+ void sub40E040();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index ed7077e..1742476 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -11,6 +11,7 @@ MODULE_OBJS = \
klayman.o \
module.o \
module1000.o \
+ module1200.o \
module1500.o \
module2300.o \
mouse.o \
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
new file mode 100644
index 0000000..8075c5c
--- /dev/null
+++ b/engines/neverhood/module1200.cpp
@@ -0,0 +1,772 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1200.h"
+#include "neverhood/smackerscene.h"
+
+namespace Neverhood {
+
+Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule), _moduleDone(false) {
+
+ // TODO _resourceTable.setResourceList(0x004B3E68);
+ SetMessageHandler(&Module1200::handleMessage);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene1201(-1);
+ break;
+ case 1:
+ createScene1202(-1);
+ break;
+ case 2:
+ createScene1203(-1);
+ break;
+ }
+ } else if (which == 1) {
+ createScene1201(2);
+ } else {
+ createScene1201(0);
+ }
+
+ // TODO Music18hList_add(0x00478311, 0x62222CAE);
+ // TODO Music18hList_play(0x62222CAE, 0, 0, 1);
+}
+
+Module1200::~Module1200() {
+ // TODO Music18hList_deleteGroup(0x00478311);
+}
+
+uint32 Module1200::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Module::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1009:
+ _moduleDone = true;
+ _moduleDoneStatus = param.asInteger();
+ break;
+ }
+ return messageResult;
+}
+
+void Module1200::createScene1201(int which) {
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1201(_vm, this, which);
+ SetUpdateHandler(&Module1200::updateScene1201);
+}
+
+void Module1200::createScene1202(int which) {
+ _vm->gameState().sceneNum = 1;
+ //_childObject = new Scene1202(_vm, this, which);
+ //SetUpdateHandler(&Module1200::updateScene1202);
+}
+
+void Module1200::createScene1203(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 2;
+ // TODO Music18hList_stop(0x62222CAE, 0, 0);
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x31890001);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ setGlobalVar(0x2A02C07B, 1);
+ SetUpdateHandler(&Module1200::updateScene1203);
+}
+
+void Module1200::updateScene1201() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_moduleDoneStatus == 1) {
+ createScene1202(0);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 2) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
+ createScene1203(-1);
+ } else {
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+ }
+}
+
+void Module1200::updateScene1202() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1201(1);
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1200::updateScene1203() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1201(3);
+ _childObject->handleUpdate();
+ // TODO Music18hList_play(0x62222CAE, 0, 0, 1);
+ }
+}
+
+// Scene1201
+
+static const uint32 kScene1201InitArray[] = {
+ 1, 0, 2, 4, 5, 3, 6, 7, 8, 10, 9, 11, 13, 14, 12, 16, 17, 15
+};
+
+static const NPoint kScene1201PointArray[] = {
+ {218, 193},
+ {410, 225},
+ {368, 277},
+ {194, 227},
+ {366, 174},
+ {458, 224},
+ {242, 228},
+ {512, 228},
+ {458, 277},
+ {217, 233},
+ {458, 173},
+ {410, 276},
+ {203, 280},
+ {371, 226},
+ {508, 279},
+ {230, 273},
+ {410, 171},
+ {493, 174}
+};
+
+static const uint32 kScene1201SsScene1201TntFileHashList1[] = {
+ 0x2098212D,
+ 0x1600437E,
+ 0x1600437E,
+ 0x00A840E3,
+ 0x1A1830F6,
+ 0x1A1830F6,
+ 0x00212062,
+ 0x384010B6,
+ 0x384010B6,
+ 0x07A01080,
+ 0xD80C2837,
+ 0xD80C2837,
+ 0x03A22092,
+ 0xD8802CB6,
+ 0xD8802CB6,
+ 0x03A93831,
+ 0xDA460476,
+ 0xDA460476
+};
+
+static const uint32 kScene1201SsScene1201TntFileHashList2[] = {
+ 0x3040C676,
+ 0x10914448,
+ 0x10914448,
+ 0x3448A066,
+ 0x1288C049,
+ 0x1288C049,
+ 0x78C0E026,
+ 0x3098D05A,
+ 0x3098D05A,
+ 0x304890E6,
+ 0x1284E048,
+ 0x1284E048,
+ 0xB140A1E6,
+ 0x5088A068,
+ 0x5088A068,
+ 0x74C4C866,
+ 0x3192C059,
+ 0x3192C059
+};
+
+SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2)
+ : StaticSprite(vm, 900), _field7A(-1) {
+
+ int16 x = kScene1201PointArray[pointIndex].x;
+ int16 y = kScene1201PointArray[pointIndex].y;
+ if (x < 300) {
+ _spriteResource.load2(kScene1201SsScene1201TntFileHashList1[elemIndex]);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ } else {
+ _spriteResource.load2(kScene1201SsScene1201TntFileHashList2[elemIndex]);
+ _x = x;
+ _y = y;
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -_spriteResource.getDimensions().height;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+
+ }
+ createSurface(50, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _surface->getClipRect().x1 = 0;
+ _surface->getClipRect().y1 = 0;
+ _surface->getClipRect().x2 = 640;
+ _surface->getClipRect().y2 = clipY2;
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+AsScene1201Tape::AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash)
+ : AnimatedSprite(vm, fileHash, surfacePriority, x, y), _parentScene(parentScene), _nameHash(nameHash) {
+
+ if (!getSubVar(0x02038314, _nameHash) && !getSubVar(0x02720344, _nameHash)) {
+ SetMessageHandler(&AsScene1201Tape::handleMessage);
+ } else {
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ }
+}
+
+uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4806:
+ setSubVar(0x02038314, _nameHash, 1);
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ break;
+ }
+ return messageResult;
+}
+
+Class466::Class466(NeverhoodEngine *vm, bool flag)
+ : AnimatedSprite(vm, 1200), _soundResource(vm) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class466::handleMessage);
+ createSurface(10, 34, 149);
+ _x = 202;
+ _y = -32;
+ if (flag) {
+ sub40D380();
+ } else {
+ sub40D340();
+ }
+}
+
+uint32 Class466::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02060018) {
+ _soundResource.play(0x47900E06);
+ }
+ break;
+ case 0x2006:
+ sub40D360();
+ break;
+ }
+ return messageResult;
+}
+
+void Class466::sub40D340() {
+ setFileHash(0x928F0C10, 0, -1);
+ _newHashListIndex = 0;
+}
+
+void Class466::sub40D360() {
+ setFileHash(0x928F0C10, 1, -1);
+ _newHashListIndex = -2;
+}
+
+void Class466::sub40D380() {
+ setFileHash(0x928F0C10, 15, -1);
+ _newHashListIndex = -2;
+}
+
+Class468::Class468(NeverhoodEngine *vm, Sprite *klayman, bool flag)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _countdown(0) {
+
+ createSurface1(100, 0xD088AC30);
+ _x = 320;
+ _y = 240;
+ SetUpdateHandler(&Class468::update);
+ SetMessageHandler(&Class468::handleMessage);
+ _newHashListIndex = -2;
+ if (flag) {
+ setFileHash(0xD088AC30, -1, -1);
+ _newHashListIndex = -2;
+ _countdown = 25;
+ } else {
+ setFileHash1();
+ _surface->setVisible(false);
+ }
+}
+
+void Class468::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ sub40D830();
+ }
+ AnimatedSprite::update();
+}
+
+uint32 Class468::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4829:
+ sub40D7E0();
+ break;
+ }
+ return messageResult;
+}
+
+void Class468::sub40D7E0() {
+ setFileHash(0xD088AC30, 0, -1);
+ _newHashListIndex = -2;
+ _surface->setVisible(true);
+ _soundResource.play(calcHash("fxDoorOpen20"));
+}
+
+void Class468::sub40D830() {
+ setFileHash(0xD088AC30, -1, -1);
+ _playBackwards = true;
+ _surface->setVisible(true);
+ _soundResource.play(calcHash("fxDoorClose20"));
+ SetAnimationCallback3(&Class468::sub40D880);
+}
+
+void Class468::sub40D880() {
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+Class464::Class464(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200) {
+
+ createSurface(1200, 69, 98);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class464::handleMessage);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ _surface->setVisible(false);
+}
+
+uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2006:
+ _x = 436;
+ _y = 339;
+ setFileHash(0xA060C599, 0, -1);
+ _surface->setVisible(true);
+ break;
+ case 0x3002:
+ setFileHash1();
+ _surface->setVisible(false);
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+Class463::Class463(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _class466(class466),
+ _flag(false) {
+
+ //TODO_field_F0 = -1;
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class463::handleMessage);
+ createSurface(990, 106, 181);
+ _x = 201;
+ if (flag) {
+ _y = 297;
+ sub40CD60();
+ } else {
+ _y = 334;
+ sub40CD30();
+ }
+}
+
+Class463::~Class463() {
+ // TODO Sound1ChList_sub_407AF0(0x01D00560);
+}
+
+uint32 Class463::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x092870C0) {
+ _class466->sendMessage(0x2006, 0, this);
+ } else if (param.asInteger() == 0x11CA0144) {
+ _soundResource.play(0x51800A04);
+ }
+ break;
+ case 0x1011:
+ _parentScene->sendMessage(0x2002, 0, this);
+ messageResult = 1;
+ case 0x480B:
+ if (!_flag) {
+ _sprite = (Sprite*)sender;
+ sub40CD90();
+ }
+ break;
+ }
+ return messageResult;
+
+}
+
+uint32 Class463::handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Class463::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class463::spriteUpdate40CD10() {
+ _x = _sprite->getX() + 100;
+}
+
+void Class463::sub40CD30() {
+ setFileHash(0x654913D0, 0, -1);
+ SetMessageHandler(&Class463::handleMessage);
+ SetSpriteCallback(NULL);
+}
+
+void Class463::sub40CD60() {
+ setFileHash(0x356803D0, 0, -1);
+ SetMessageHandler(&Class463::handleMessage40CCD0);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetAnimationCallback3(&Class463::sub40CD30);
+}
+
+void Class463::sub40CD90() {
+ // TODO Sound1ChList_addSoundResource(0x01D00560, 0x4B044624, true);
+ // TODO Sound1ChList_playLooping(0x4B044624);
+ _flag = true;
+ setFileHash(0x85084190, 0, -1);
+ SetMessageHandler(&Class463::handleMessage);
+ SetSpriteCallback(&Class463::spriteUpdate40CD10);
+ _newHashListIndex = -2;
+}
+
+
+Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _flag(false) {
+
+ int16 topY1, topY2, topY3, topY4;
+ int16 x1, x2;
+ Sprite *tempSprite, *class464;
+
+ // TODO _resourceTable2.setResourceList(ex_sub_41C730(), true);
+ if (getGlobalVar(0x0A18CA33)) {
+ // TODO _resourceTable1.setResourceList(0x004AEA10, true);
+ } else if (getGlobalVar(0x0A310817)) {
+ // TODO _resourceTable1.setResourceList(0x004AEA70, true);
+ } else {
+ // TODO _resourceTable1.setResourceList(0x004AEB18, true);
+ }
+
+ SetUpdateHandler(&Scene1201::update);
+ SetMessageHandler(&Scene1201::handleMessage);
+
+ _vm->_collisionMan->setHitRects(0x004AEBD0);
+
+ _surfaceFlag = true;
+
+ if (!getSubVar(0x40050052, 0xE8058B52)) {
+ setSubVar(0x40050052, 0xE8058B52, 1);
+ for (uint32 index = 0; index < 18; index++) {
+ setSubVar(0x10055D14, index, kScene1201InitArray[index]);
+ }
+ }
+
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x9A2C0409, NULL));
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 3, 1100, 243, 340, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x03C82530, 100));
+ topY1 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x88182069, 200));
+ topY2 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x476014E0, 300));
+ topY3 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x04063110, 500));
+ topY4 = tempSprite->getY() + 1;
+
+ _class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1 ? 1 : 0));
+ _class466->getSurface()->getClipRect().x1 = 0;
+ _class466->getSurface()->getClipRect().y1 = topY4;
+ _class466->getSurface()->getClipRect().x2 = 640;
+ _class466->getSurface()->getClipRect().y2 = 480;
+
+ addSprite(new StaticSprite(_vm, 0x400B04B0, 1200));
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x40295462, 1200));
+ x1 = tempSprite->getX();
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0xA29223FA, 1200));
+ x2 = tempSprite->getX() + tempSprite->getSurface()->getDrawRect().width;
+
+ class464 = addSprite(new Class464(_vm));
+
+ if (which < 0) {
+ _klayman = new KmScene1201(_vm, this, class464, 364, 333);
+ setMessageList(0x004AEC08);
+ } else if (which == 3) {
+ _klayman = new KmScene1201(_vm, this, class464, 400, 329);
+ setMessageList(0x004AEC08);
+ } else if (which == 2) {
+ if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ _klayman = new KmScene1201(_vm, this, class464, 374, 333);
+ setMessageList(0x004AEC08);
+ } else {
+ _klayman = new KmScene1201(_vm, this, class464, 640, 329);
+ setMessageList(0x004AEC20);
+ }
+ } else if (which == 1) {
+ if (getGlobalVar(0xC0418A02)) {
+ _klayman = new KmScene1201(_vm, this, class464, 364, 333);
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmScene1201(_vm, this, class464, 246, 333);
+ }
+ setMessageList(0x004AEC30);
+ } else {
+ _klayman = new KmScene1201(_vm, this, class464, 0, 336);
+ setMessageList(0x004AEC10);
+ }
+
+ _klayman->getSurface()->getClipRect().x1 = x1;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = x2;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setRepl(64, 0);
+
+ addSprite(_klayman);
+
+ if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ _background = addBackground(new DirtyBackground(_vm, 0x4019A2C4, 0, 0));
+ _palette = new Palette(_vm, 0x4019A2C4);
+ _palette->usePalette();
+ _class468 = NULL;
+ } else {
+ _background = addBackground(new DirtyBackground(_vm, 0x40206EC5, 0, 0));
+ _palette = new Palette(_vm, 0x40206EC5);
+ _palette->usePalette();
+ _class468 = addSprite(new Class468(_vm, _klayman, which - 2 != 1)); // CHECKME???
+ }
+
+ if (getGlobalVar(0x000CF819)) {
+ addSprite(new StaticSprite(_vm, 0x10002ED8, 500));
+ if (!getGlobalVar(0x0A18CA33)) {
+ Class463 *class463;
+ class463 = new Class463(_vm, this, _class466, which - 1 != 1);
+ class463->getSurface()->getClipRect().x1 = x1;
+ class463->getSurface()->getClipRect().y1 = 0;
+ class463->getSurface()->getClipRect().x2 = x2;
+ class463->getSurface()->getClipRect().y2 = 480;
+ _vm->_collisionMan->addSprite(_class463);
+ _class463 = addSprite(class463);
+#if 0
+ tempSprite = addSprite(new Class465(_vm, _class463));
+ tempSprite->getSurface()->getClipRect().x1 = x1;
+ tempSprite->getSurface()->getClipRect().y1 = 0;
+ tempSprite->getSurface()->getClipRect().x2 = x2;
+ tempSprite->getSurface()->getClipRect().y2 = 480;
+#endif
+ class463->setRepl(64, 0);
+ }
+
+ uint32 tntIndex = 1;
+ while (tntIndex < 18) {
+ uint32 elemIndex = getSubVar(0x10055D14, tntIndex);
+ int16 clipY2;
+ if (kScene1201PointArray[elemIndex].y < 175)
+ clipY2 = topY1;
+ else if (kScene1201PointArray[elemIndex].y < 230)
+ clipY2 = topY2;
+ else
+ clipY2 = topY3;
+ addSprite(new SsScene1201Tnt(_vm, tntIndex, getSubVar(0x10055D14, tntIndex), clipY2));
+ elemIndex = getSubVar(0x10055D14, tntIndex + 1);
+ if (kScene1201PointArray[elemIndex].y < 175)
+ clipY2 = topY1;
+ else if (kScene1201PointArray[elemIndex].y < 230)
+ clipY2 = topY2;
+ else
+ clipY2 = topY3;
+ addSprite(new SsScene1201Tnt(_vm, tntIndex + 1, getSubVar(0x10055D14, tntIndex + 1), clipY2));
+ tntIndex += 3;
+ }
+
+ if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ setRectList(0x004AEE58);
+ } else {
+ setRectList(0x004AEDC8);
+ }
+
+ } else {
+
+ addSprite(new StaticSprite(_vm, 0x8E8A1981, 900));
+
+ uint32 tntIndex = 0;
+ while (tntIndex < 18) {
+ uint32 elemIndex = getSubVar(0x10055D14, tntIndex);
+ int16 clipY2;
+ if (kScene1201PointArray[elemIndex].x < 300) {
+ clipY2 = 480;
+ } else {
+ if (kScene1201PointArray[elemIndex].y < 175)
+ clipY2 = topY1;
+ else if (kScene1201PointArray[elemIndex].y < 230)
+ clipY2 = topY2;
+ else
+ clipY2 = topY3;
+ }
+ addSprite(new SsScene1201Tnt(_vm, tntIndex, getSubVar(0x10055D14, tntIndex), clipY2));
+ tntIndex++;
+ }
+
+ if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ setRectList(0x004AEE18);
+ } else {
+ setRectList(0x004AED88);
+ }
+
+ }
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x63D400BC, 900));
+
+#if 0
+ _class467 = addSprite(new Class467(_vm, _klayman));
+ _class467->getSurface()->getClipRect().x1 = x1;
+ _class467->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
+ _class467->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
+ _class467->getSurface()->getClipRect().y2 = 480;
+#endif
+
+ if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
+ setGlobalVar(0x0112090A, 1);
+ }
+
+ _class461 = NULL;
+
+#if 0
+ if (getGlobalVar(0x0112090A) < 3) {
+ _class461 = addSprite(new Class461(_vm, this));
+ _vm->_collisionMan->addSprite(_class461);
+ }
+
+ if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ _class462 = addSprite(new Class462(_vm, this, _klayman));
+ _class462->getSurface()->getClipRect().x1 = x1;
+ _class462->getSurface()->getClipRect().y1 = 0;
+ _class462->getSurface()->getClipRect().x2 = x2;
+ _class462->getSurface()->getClipRect().y2 = 480;
+ }
+#endif
+
+}
+
+Scene1201::~Scene1201() {
+}
+
+void Scene1201::update() {
+ Scene::update();
+ if (_class461 && getGlobalVar(0x0112090A)) {
+ deleteSprite(&_class461);
+ }
+}
+
+uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug("Scene1201::handleMessage(%04X)", messageNum);
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x07053000) {
+ _flag = true;
+ _class462->sendMessage(0x2004, 0, this);
+ } else if (param.asInteger() == 0x140E5744) {
+ _class462->sendMessage(0x2005, 0, this);
+ } else if (param.asInteger() == 0x40253C40) {
+ _messageListFlag = false;
+ _class462->sendMessage(0x2006, 0, this);
+ } else if (param.asInteger() == 0x090EB048) {
+ if (_klayman->getX() < 572) {
+ setMessageList2(0x004AEC90);
+ } else {
+ setMessageList2(0x004AEC20);
+ }
+ }
+ break;
+ case 0x2001:
+ if (!getGlobalVar(0x0112090A)) {
+ setMessageList2(0x004AECB0);
+ } else {
+ _klayman->sendEntityMessage(0x1014, _class461, this);
+ setMessageList2(0x004AECC0);
+ }
+ break;
+ case 0x2002:
+ if (getGlobalVar(0x20A0C516)) {
+ _klayman->sendEntityMessage(0x1014, _class463, this);
+ setMessageList2(0x004AECF0);
+ } else if (getGlobalVar(0x0112090A) == 3) {
+ _klayman->sendEntityMessage(0x1014, _class463, this);
+ if (_klayman->getX() > _class463->getX()) {
+ setMessageList(0x004AECD0);
+ } else {
+ setMessageList(0x004AECE0);
+ }
+ }
+ break;
+ case 0x4814:
+ messageList402220();
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ _klayman->sendEntityMessage(0x1014, _asTape, this);
+ setMessageList(0x004AED38);
+ }
+ break;
+ case 0x4829:
+ _class468->sendMessage(0x4829, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
new file mode 100644
index 0000000..bbdfaeb
--- /dev/null
+++ b/engines/neverhood/module1200.h
@@ -0,0 +1,141 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1200_H
+#define NEVERHOOD_MODULE1200_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module1200
+
+class Module1200 : public Module {
+public:
+ Module1200(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1200();
+protected:
+ // TODO ResourceTable _resourceTable;
+ bool _moduleDone;
+ uint32 _moduleDoneStatus;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createScene1201(int which);
+ void createScene1202(int which);
+ void createScene1203(int which);
+ void updateScene1201();
+ void updateScene1202();
+ void updateScene1203();
+};
+
+// Scene1201
+
+class AsScene1201Tape : public AnimatedSprite {
+public:
+ AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash);
+protected:
+ Scene *_parentScene;
+ uint32 _nameHash;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Class466 : public AnimatedSprite {
+public:
+ Class466(NeverhoodEngine *vm, bool flag);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40D340();
+ void sub40D360();
+ void sub40D380();
+};
+
+class Class468 : public AnimatedSprite {
+public:
+ Class468(NeverhoodEngine *vm, Sprite *klayman, bool flag);
+protected:
+ SoundResource _soundResource;
+ Sprite *_klayman;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40D7E0();
+ void sub40D830();
+ void sub40D880();
+};
+
+class Class464 : public AnimatedSprite {
+public:
+ Class464(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Class463 : public AnimatedSprite {
+public:
+ Class463(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag);
+ virtual ~Class463();
+protected:
+ Scene *_parentScene;
+ Sprite *_class466;
+ Sprite *_sprite;
+ SoundResource _soundResource;
+ bool _flag;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate40CD10();
+ void sub40CD30();
+ void sub40CD60();
+ void sub40CD90();
+};
+
+class SsScene1201Tnt : public StaticSprite {
+public:
+ SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2);
+protected:
+ uint32 _elemIndex;
+ int16 _field7A;
+};
+
+class Scene1201 : public Scene {
+public:
+ Scene1201(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene1201();
+protected:
+ // TODO ResourceTable _resourceTable1;
+ // TODO ResourceTable _resourceTable2;
+ Sprite *_class461;
+ Sprite *_class463;
+ Sprite *_class462;
+ Sprite *_class466;
+ Sprite *_class467;
+ Sprite *_class468;
+ Sprite *_asTape;
+ bool _flag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1200_H */
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 8f49a00..43f1ca7 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -485,6 +485,13 @@ void Scene::runMessageList() {
}
+void Scene::messageList402220() {
+ _messageListFlag1 = false;
+ _messageList = NULL;
+ _messageListFlag = true;
+ _klayman->sendMessage(0x4004, 0, this);
+}
+
void Scene::setRectList(uint32 id) {
setRectList(_vm->_staticData->getRectList(id));
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 8f0b79a..4711405 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -102,6 +102,7 @@ protected:
void runMessageList();
void setRectList(uint32 id);
void setRectList(RectList *rectList);
+ void messageList402220();
void loadDataResource(uint32 fileHash);
};
Commit: 0632fc7dda2b0ad97f22105a3fb6fbcd3346feb9
https://github.com/scummvm/scummvm/commit/0632fc7dda2b0ad97f22105a3fb6fbcd3346feb9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1201
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index e6e4d75..016ac73 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -25,6 +25,8 @@ static const uint32 hitRectListOffsets[] = {
1, 0x004B4860,
// Scene1002
1, 0x004B4138,
+ // Scene1201
+ 4, 0x004AEBD0,
0, 0
};
@@ -38,6 +40,11 @@ static const uint32 rectListOffsets[] = {
3, 0x004B43A0,
// Scene1004
1, 0x004B7C70,
+ // Scene1201
+ 1, 0x004AEE58,
+ 1, 0x004AEDC8,
+ 1, 0x004AEE18,
+ 1, 0x004AED88,
0, 0
};
@@ -71,6 +78,18 @@ static const uint32 messageListOffsets[] = {
2, 0x004B7C08,
1, 0x004B7C18,
2, 0x004B7C20,
+ // Scene1201
+ 1, 0x004AEC08,
+ 2, 0x004AEC10,
+ 2, 0x004AEC20,
+ 2, 0x004AEC30,
+ 4, 0x004AEC90,
+ 2, 0x004AECB0,
+ 2, 0x004AECC0,
+ 5, 0x004AECF0,
+ 2, 0x004AECD0,
+ 2, 0x004AECE0,
+ 2, 0x004AED38,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 6e7c150..36a4292 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: f162516f25150cf5ca149986731f7f4e8f7da437
https://github.com/scummvm/scummvm/commit/f162516f25150cf5ca149986731f7f4e8f7da437
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:38:48-07:00
Commit Message:
NEVERHOOD: More work on Scene1201
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 145d645..91de87d 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -485,7 +485,6 @@ void Klayman::sub41C930(int16 x, bool flag) {
error("// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));");
// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
} else {
- debug("##################################################################");
_x4 = x;
setCallback2(AnimationCallback(&Klayman::sub41F950));
}
@@ -773,8 +772,7 @@ void Klayman::sub41FA40() {
if (_status3 == 2) {
sub41C7B0();
} else if (_status3 == 3) {
- error("// TODO sub420F20();");
- // TODO sub420F20();
+ sub420F20();
} else {
_flagE2 = true;
_flagE5 = true;
@@ -1626,6 +1624,23 @@ void Klayman::sub4207F0() {
SetMessageHandler(&Klayman::handleMessage41EEF0);
}
+void Klayman::sub420F20() {
+ _flagF8 = false;
+ _flagE5 = false;
+ setFileHash(0x11A8E012, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F5A0);
+ SetMessageHandler(&Klayman::handleMessage41EC70);
+}
+
+void Klayman::spriteUpdate41F5A0() {
+ if (!_flagF8 && ABS(_x4 - _x) < 80) {
+ _parentScene->sendMessage(0x4829, 0, this);
+ _flagF8 = true;
+ }
+ AnimatedSprite::updateDeltaXY();
+}
+
//##############################################################################
// KmScene1001
@@ -1758,8 +1773,6 @@ void KmScene1002::xUpdate() {
uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
//ok
debug("KmScene1002::xHandleMessage(%04X)", messageNum);
- if (messageNum == 0x100D)
- debug("-> %08X", param.asInteger());
switch (messageNum) {
case 0x2001:
setCallback2(AnimationCallback(&KmScene1002::sub449E90));
@@ -1908,9 +1921,6 @@ uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam ¶
_x = ((Sprite*)sender)->getX() + 75;
}
_y = ((Sprite*)sender)->getY() - 200;
-
- debug("&&&&&&&&&&& param.asInteger() = %d", param.asInteger());
-
if (param.asInteger() == 0) {
sub449EF0();
} else if (param.asInteger() == 1) {
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3c87104..3682d75 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -84,11 +84,13 @@ public:
void sub420ED0();
void sub4207A0();
void sub4207F0();
+ void sub420F20();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
void spriteUpdate41F780();
void spriteUpdate41F230();
+ void spriteUpdate41F5A0();
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 8075c5c..eef5433 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -478,6 +478,69 @@ void Class463::sub40CD90() {
_newHashListIndex = -2;
}
+Class465::Class465(NeverhoodEngine *vm, Sprite *class463)
+ : AnimatedSprite(vm, 1200), _class463(class463) {
+
+ createSurface1(995, 0x828C0411);
+ SetUpdateHandler(&Class465::update);
+ SetMessageHandler(&Sprite::handleMessage);
+ SetSpriteCallback(&Class465::spriteUpdate40D150);
+ setFileHash(0x828C0411, 0, -1);
+ _surface->setVisible(false);
+}
+
+Class465::~Class465() {
+ // TODO Sound1ChList_sub_407AF0(0x041080A4);
+}
+
+void Class465::update() {
+ AnimatedSprite::update();
+ if (getGlobalVar(0x20A0C516)) {
+ _surface->setVisible(true);
+ SetUpdateHandler(&AnimatedSprite::update);
+ // TODO Sound1ChList_addSoundResource(0x041080A4, 0x460A1050, true);
+ // TODO Sound1ChList_playLooping(0x460A1050);
+ }
+}
+
+void Class465::spriteUpdate40D150() {
+ _x = _class463->getX() - 18;
+ _y = _class463->getY() - 158;
+}
+
+AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman) {
+
+ _x = 320;
+ _y = 240;
+ createSurface(800, 55, 199);
+ if (_klayman->getX() < 100) {
+ setFileHash(0x508A111B, 0, -1);
+ _newHashListIndex = -2;
+ _soundResource.play(calcHash("fxDoorOpen03"));
+ } else {
+ setFileHash(0x508A111B, -1, -1);
+ _newHashListIndex = -2;
+ }
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1201LeftDoor::handleMessage);
+}
+
+uint32 AsScene1201LeftDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4809:
+ sub40D590();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1201LeftDoor::sub40D590() {
+ setFileHash(0x508A111B, -1, -1);
+ _playBackwards = true;
+ _newHashListIndex = 0;
+}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _flag(false) {
@@ -600,13 +663,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
class463->getSurface()->getClipRect().y2 = 480;
_vm->_collisionMan->addSprite(_class463);
_class463 = addSprite(class463);
-#if 0
tempSprite = addSprite(new Class465(_vm, _class463));
tempSprite->getSurface()->getClipRect().x1 = x1;
tempSprite->getSurface()->getClipRect().y1 = 0;
tempSprite->getSurface()->getClipRect().x2 = x2;
tempSprite->getSurface()->getClipRect().y2 = 480;
-#endif
class463->setRepl(64, 0);
}
@@ -670,13 +731,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = addSprite(new StaticSprite(_vm, 0x63D400BC, 900));
-#if 0
- _class467 = addSprite(new Class467(_vm, _klayman));
- _class467->getSurface()->getClipRect().x1 = x1;
- _class467->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
- _class467->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
- _class467->getSurface()->getClipRect().y2 = 480;
-#endif
+ _asLeftDoor = addSprite(new AsScene1201LeftDoor(_vm, _klayman));
+ _asLeftDoor->getSurface()->getClipRect().x1 = x1;
+ _asLeftDoor->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
+ _asLeftDoor->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
+ _asLeftDoor->getSurface()->getClipRect().y2 = 480;
if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
setGlobalVar(0x0112090A, 1);
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index bbdfaeb..2a8a933 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -109,6 +109,26 @@ protected:
void sub40CD90();
};
+class Class465 : public AnimatedSprite {
+public:
+ Class465(NeverhoodEngine *vm, Sprite *class463);
+ ~Class465();
+protected:
+ Sprite *_class463;
+ void update();
+ void spriteUpdate40D150();
+};
+
+class AsScene1201LeftDoor : public AnimatedSprite {
+public:
+ AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman);
+protected:
+ Sprite *_klayman;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40D590();
+};
+
class SsScene1201Tnt : public StaticSprite {
public:
SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2);
@@ -128,7 +148,7 @@ protected:
Sprite *_class463;
Sprite *_class462;
Sprite *_class466;
- Sprite *_class467;
+ Sprite *_asLeftDoor;
Sprite *_class468;
Sprite *_asTape;
bool _flag;
Commit: 04d2b9a4028d1f6ac7c5c5e4a6cc95f8532e9cdf
https://github.com/scummvm/scummvm/commit/04d2b9a4028d1f6ac7c5c5e4a6cc95f8532e9cdf
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:31-07:00
Commit Message:
NEVERHOOD: Add entries for Scene1401, Scene1402 and Scene1705
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 016ac73..58e48dc 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -27,6 +27,8 @@ static const uint32 hitRectListOffsets[] = {
1, 0x004B4138,
// Scene1201
4, 0x004AEBD0,
+ // Scene1705
+ 1, 0x004B69D8,
0, 0
};
@@ -45,6 +47,14 @@ static const uint32 rectListOffsets[] = {
1, 0x004AEDC8,
1, 0x004AEE18,
1, 0x004AED88,
+ // Scene1401
+ 1, 0x004B6758,
+ // Scene1402
+ 1, 0x004B0C48,
+ 1, 0x004B0C98,
+ // Scene1705
+ 1, 0x004B6B40,
+ 1, 0x004B6B30,
0, 0
};
@@ -90,10 +100,44 @@ static const uint32 messageListOffsets[] = {
2, 0x004AECD0,
2, 0x004AECE0,
2, 0x004AED38,
+ // Scene1401
+ 1, 0x004B65C8,
+ 1, 0x004B65D0,
+ 1, 0x004B65D8,
+ 1, 0x004B65E8,
+ 3, 0x004B6670,
+ 4, 0x004B6690,
+ 1, 0x004B66B0,
+ 3, 0x004B6658,
+ 2, 0x004B65F0,
+ // Scene1402
+ 1, 0x004B0B48,
+ 1, 0x004B0B50,
+ 1, 0x004B0B58,
+ 1, 0x004B0B60,
+ 2, 0x004B0B68,
+ 3, 0x004B0BB8,
+ 3, 0x004B0BD0,
+ // Scene1705
+ 1, 0x004B69E8,
+ 2, 0x004B6A08,
+ 4, 0x004B6AA0,
+ 2, 0x004B6A18,
+ 1, 0x004B69F0,
+ 2, 0x004B6AC0,
0, 0
};
static const uint32 navigationListOffsets[] = {
+ // Module1700
+ 2, 0x004AE8B8,
+ 3, 0x004AE8E8,
+ // Module1800
+ 4, 0x004AFD38,
+ 1, 0x004AFD98,
+ 2, 0x004AFDB0,
+ 4, 0x004AFDE0,
+ 2, 0x004AFE40,
// Module2300
2, 0x004B67B8,
6, 0x004B67E8,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 36a4292..a76db0a 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: bfd71cff6e73c0be6b2d66f7f71921094f42ca09
https://github.com/scummvm/scummvm/commit/bfd71cff6e73c0be6b2d66f7f71921094f42ca09
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: New modules Module1200, Module1400, Module1700 and Module1800
- Implement CollisionMan::removeSprite
Changed paths:
A engines/neverhood/diskplayerscene.cpp
A engines/neverhood/diskplayerscene.h
A engines/neverhood/module1400.cpp
A engines/neverhood/module1400.h
A engines/neverhood/module1700.cpp
A engines/neverhood/module1700.h
A engines/neverhood/module1800.cpp
A engines/neverhood/module1800.h
engines/neverhood/blbarchive.cpp
engines/neverhood/collisionman.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/graphics.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/navigationscene.cpp
engines/neverhood/navigationscene.h
engines/neverhood/palette.cpp
engines/neverhood/palette.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/resourceman.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 2e29485..6a047ca 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -105,12 +105,11 @@ void BlbArchive::load(uint index, byte *buffer, uint32 size) {
byte *BlbArchive::getEntryExtData(uint index) {
BlbArchiveEntry &entry = _entries[index];
- return _extData && entry.extDataOfs != 0 ? &_extData[entry.extDataOfs - 1] : NULL;
+ return (_extData && entry.extDataOfs != 0) ? &_extData[entry.extDataOfs - 1] : NULL;
}
Common::SeekableReadStream *BlbArchive::createStream(uint index) {
const BlbArchiveEntry &entry = _entries[index];
- //debug("entry.offset = %08X; entry.offset + entry.diskSize = %08X", entry.offset, entry.offset + entry.diskSize);
return new Common::SafeSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
}
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index 87ec0cd..4296b91 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -52,7 +52,7 @@ void CollisionMan::setHitRects(HitRectList *hitRects) {
}
void CollisionMan::clearHitRects() {
- _hitRects = 0;
+ _hitRects = NULL;
}
HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
@@ -82,7 +82,12 @@ void CollisionMan::addSprite(Sprite *sprite) {
}
void CollisionMan::removeSprite(Sprite *sprite) {
- // TODO
+ for (uint index = 0; index < _sprites.size(); index++) {
+ if (_sprites[index] == sprite) {
+ _sprites.remove_at(index);
+ break;
+ }
+ }
}
void CollisionMan::clearSprites() {
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
new file mode 100644
index 0000000..dd2c837
--- /dev/null
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -0,0 +1,563 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/diskplayerscene.h"
+#include "neverhood/mouse.h"
+
+namespace Neverhood {
+
+// TODO: Maybe move hash tables into neverhood.dat
+
+static const uint32 kDiskplayerPaletteFileHashes[] = {
+ 0x03B78240,
+ 0x34B32B08,
+ 0x4F2569D4,
+ 0x07620590,
+ 0x38422401
+};
+
+static const byte kDiskplayerInitArray[] = {
+ 2, 1, 4, 5, 3, 11, 8, 6, 7, 9, 10, 17, 16, 18, 19, 20, 15, 14, 13, 12
+};
+
+static const uint32 kDiskplayerSmackerFileHashes[] = {
+ 0x010A2810,
+ 0x020A2810,
+ 0x040A2810,
+ 0x080A2810,
+ 0x100A2810,
+ 0x200A2810,
+ 0x400A2810,
+ 0x800A2810,
+ 0x000A2811,
+ 0x010C2810,
+ 0x020C2810,
+ 0x040C2810,
+ 0x080C2810,
+ 0x100C2810,
+ 0x200C2810,
+ 0x400C2810,
+ 0x800C2810,
+ 0x000C2811,
+ 0x000C2812,
+ 0x02002810,
+ 0x04002810
+};
+
+static const uint32 kDiskplayerSlotFileHashes1[] = {
+ 0x81312280,
+ 0x01312281,
+ 0x01312282,
+ 0x01312284,
+ 0x01312288,
+ 0x01312290,
+ 0x013122A0,
+ 0x013122C0,
+ 0x01312200,
+ 0x82312280,
+ 0x02312281,
+ 0x02312282,
+ 0x02312284,
+ 0x02312288,
+ 0x02312290,
+ 0x023122A0,
+ 0x023122C0,
+ 0x02312200,
+ 0x02312380,
+ 0x04312281
+};
+
+static const uint32 kDiskplayerSlotFileHashes2[] = {
+ 0x90443A00,
+ 0x90443A18,
+ 0x90443A28,
+ 0x90443A48,
+ 0x90443A88,
+ 0x90443B08,
+ 0x90443808,
+ 0x90443E08,
+ 0x90443208,
+ 0xA0443A00,
+ 0xA0443A18,
+ 0xA0443A28,
+ 0xA0443A48,
+ 0xA0443A88,
+ 0xA0443B08,
+ 0xA0443808,
+ 0xA0443E08,
+ 0xA0443208,
+ 0xA0442A08,
+ 0xC0443A18
+};
+
+static const uint32 kDiskplayerSlotFileHashes3[] = {
+ 0x10357320,
+ 0x10557320,
+ 0x10957320,
+ 0x11157320,
+ 0x12157320,
+ 0x14157320,
+ 0x18157320,
+ 0x00157320,
+ 0x30157320,
+ 0x1035B320,
+ 0x1055B320,
+ 0x1095B320,
+ 0x1115B320,
+ 0x1215B320,
+ 0x1415B320,
+ 0x1815B320,
+ 0x0015B320,
+ 0x3015B320,
+ 0x5015B320,
+ 0x10543320
+};
+
+static const uint32 kDiskplayerSlotFileHashes4[] = {
+ 0xDC8020E4,
+ 0xDC802164,
+ 0xDC802264,
+ 0xDC802464,
+ 0xDC802864,
+ 0xDC803064,
+ 0xDC800064,
+ 0xDC806064,
+ 0xDC80A064,
+ 0xDC8020E7,
+ 0xDC802167,
+ 0xDC802267,
+ 0xDC802467,
+ 0xDC802867,
+ 0xDC803067,
+ 0xDC800067,
+ 0xDC806067,
+ 0xDC80A067,
+ 0xDC812067,
+ 0xDC802161
+};
+
+Class494::Class494(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100) {
+
+ createSurface1(0x100B90B4, 1200);
+ _x = 211;
+ _y = 195;
+ setFileHash(0x100B90B4, 0, -1);
+ _newHashListIndex = 0;
+ _needRefresh = true;
+ updatePosition();
+ _surface->setVisible(false);
+}
+
+uint32 Class494::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class494::sub43BE00() {
+ setFileHash1();
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Sprite::handleMessage);
+ _surface->setVisible(false);
+}
+
+void Class494::sub43BE20() {
+ setFileHash(0x100B90B4, 0, -1);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class494::handleMessage);
+ SetAnimationCallback3(&Class494::sub43BE00);
+ _surface->setVisible(true);
+}
+
+DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene)
+ : StaticSprite(vm, 1400), _soundResource1(vm), _soundResource2(vm),
+ _diskplayerScene(diskplayerScene), _isPlaying(false) {
+
+ _spriteResource.load2(0x24A4A664);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = _spriteResource.getDimensions().width;
+ _deltaRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _surface->setVisible(false);
+ processDelta();
+ _needRefresh = true;
+ StaticSprite::update();
+ _soundResource1.load(0x44043000);
+ _soundResource2.load(0x44045000);
+ SetMessageHandler(&DiskplayerPlayButton::handleMessage);
+}
+
+uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (!_diskplayerScene->getFlag3()) {
+ if (_isPlaying) {
+ _diskplayerScene->sendMessage(0x2001, 0, this);
+ release();
+ } else {
+ _diskplayerScene->sendMessage(0x2000, 0, this);
+ press();
+ }
+ }
+ StaticSprite::update();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void DiskplayerPlayButton::press() {
+ if (!_isPlaying) {
+ _surface->setVisible(true);
+ StaticSprite::update();
+ _soundResource1.play();
+ _isPlaying = true;
+ }
+}
+
+void DiskplayerPlayButton::release() {
+ if (_isPlaying) {
+ _surface->setVisible(false);
+ StaticSprite::update();
+ _soundResource2.play();
+ _isPlaying = false;
+ }
+}
+
+DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int elementIndex, int value)
+ : Entity(vm, 0), _diskplayerScene(diskplayerScene), _soundResource(vm), _elementIndex(elementIndex),
+ _value(value), _flag2(false), _flag(false), _countdown(0), _initialCountdown(2),
+ _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
+
+ if (value != 0 && elementIndex < 20) {
+ _inactiveSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes1[_elementIndex], 1100));
+ _appearSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes2[_elementIndex], 1000));
+ _activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes3[_elementIndex], 1100));
+ _inactiveSlot->getSurface()->setVisible(false);
+ _appearSlot->getSurface()->setVisible(false);
+ _activeSlot->getSurface()->setVisible(false);
+ _soundResource.load(0x46210074);
+ // TODO sound panning stuff
+ } else if (elementIndex != 20) {
+ _activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes4[_elementIndex], 1100));
+ _activeSlot->getSurface()->setVisible(false);
+ }
+ SetUpdateHandler(&DiskplayerSlot::update);
+}
+
+void DiskplayerSlot::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ if (_flag) {
+ if (_inactiveSlot) {
+ _inactiveSlot->getSurface()->setVisible(true);
+ }
+ if (_activeSlot) {
+ _activeSlot->getSurface()->setVisible(false);
+ }
+ _countdown = _initialCountdown / 2;
+ } else {
+ if (_inactiveSlot) {
+ _inactiveSlot->getSurface()->setVisible(false);
+ }
+ if (_activeSlot) {
+ _activeSlot->getSurface()->setVisible(true);
+ }
+ _countdown = _initialCountdown;
+ }
+ _flag = !_flag;
+ }
+}
+
+void DiskplayerSlot::appear() {
+ if (_inactiveSlot) {
+ _inactiveSlot->getSurface()->setVisible(true);
+ }
+ if (_appearSlot) {
+ _appearSlot->getSurface()->setVisible(true);
+ }
+ if (_inactiveSlot) {
+ _soundResource.play();
+ }
+}
+
+void DiskplayerSlot::play() {
+ if (!_flag2) {
+ if (_inactiveSlot) {
+ _inactiveSlot->getSurface()->setVisible(false);
+ }
+ if (_activeSlot) {
+ _activeSlot->getSurface()->setVisible(true);
+ }
+ _flag = true;
+ _countdown = 0;
+ }
+}
+
+void DiskplayerSlot::activate() {
+ if (!_flag2) {
+ _countdown = _initialCountdown;
+ }
+}
+
+void DiskplayerSlot::stop() {
+ if (!_flag2) {
+ if (_inactiveSlot) {
+ _inactiveSlot->getSurface()->setVisible(true);
+ }
+ if (_activeSlot) {
+ _activeSlot->getSurface()->setVisible(false);
+ }
+ _flag = false;
+ _countdown = 0;
+ }
+}
+
+DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _which(which), _diskIndex(0), _appearCountdown(0), _tuneInCountdown(0),
+ _fullFlag(false), _flag3(false), _inputDisabled(true), _updateStatus(0) {
+
+ int count = 0;
+
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x8A000044, 0, 0));
+ _palette = new Palette(_vm, kDiskplayerPaletteFileHashes[_which]);
+ _playButton = new DiskplayerPlayButton(_vm, this);
+ addSprite(_playButton);
+ _vm->_collisionMan->addSprite(_playButton);
+ _class494 = new Class494(_vm);
+ addSprite(_class494);
+
+ // DEBUG: Give all disks
+ for (int i = 0; i < 19; i++) {
+ setSubVar(0x02720344, i, 1);
+ }
+
+ for (int i = 0; i < 20; i++) {
+ _diskAvailable[i] = 0;
+ if (getSubVar(0x02720344, i))
+ count++;
+ }
+
+ for (int i = 0; i < count; i++) {
+ _diskAvailable[kDiskplayerInitArray[i] - 1] = 1;
+ }
+
+ for (int i = 0; i < 20; i++) {
+ _diskSlots[i] = new DiskplayerSlot(_vm, this, i, _diskAvailable[i]);
+ addEntity(_diskSlots[i]);
+ }
+
+ _fullFlag = count == 20;
+
+ if (_fullFlag && !getGlobalVar(0xC0780812))
+ _flag3 = true;
+
+ _flag4 = _flag3;
+
+ _class650 = new DiskplayerSlot(_vm, this, 20, 0);
+ addEntity(_class650);
+
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x000408A8, 20, 620));
+ _mouseCursor->getSurface()->setVisible(false);
+
+ _smackerPlayer = new SmackerPlayer(_vm, this, 0x08288103, false, true);
+ addEntity(_smackerPlayer);
+ addSurface(_smackerPlayer->getSurface());
+ _smackerPlayer->setDrawPos(154, 86);
+ // TODO _smackerPlayer->gotoFrame(0);
+
+ _palette->usePalette();
+
+ SetMessageHandler(&DiskplayerScene::handleMessage);
+ SetUpdateHandler(&DiskplayerScene::update);
+ _appearCountdown = 6;
+
+}
+
+void DiskplayerScene::update() {
+ Scene::update();
+
+ debug("_updateStatus = %d", _updateStatus);
+
+ if (_updateStatus == 1) {
+ if (_smackerPlayer->getFrameNumber() == _smackerPlayer->getFrameCount() - 1) {
+ if (_diskAvailable[_diskIndex]) {
+ playDisk();
+ } else {
+ playStatic();
+ }
+ }
+ } else if (_updateStatus == 2) {
+ if (_smackerPlayer->getFrameNumber() == _smackerPlayer->getFrameCount() - 1) {
+ _diskSlots[_diskIndex]->stop();
+ _diskIndex++;
+ if (_fullFlag) {
+ if (_diskIndex == 20) {
+ if (_flag3) {
+ playDisk();
+ _updateStatus = 3;
+ } else {
+ _diskIndex = 0;
+ stop();
+ }
+ } else {
+ playDisk();
+ }
+ } else {
+ if (_diskIndex == 20) {
+ _diskIndex = 0;
+ stop();
+ } else {
+ tuneIn();
+ }
+ }
+ }
+ } else if (_updateStatus == 3) {
+ if (_smackerPlayer->getFrameNumber() == 133) {
+ _class494->sub43BE20();
+ setGlobalVar(0xC0780812, 1);
+ } else if (_smackerPlayer->getFrameNumber() == _smackerPlayer->getFrameCount() - 1) {
+ for (int i = 0; i < 20; i++) {
+ _diskSlots[i]->setFlag2(false);
+ _diskSlots[i]->stop();
+ }
+ _diskIndex = 0;
+ stop();
+ _mouseCursor->getSurface()->setVisible(true);
+ _flag3 = false;
+ }
+ }
+
+ if (_appearCountdown != 0 && (--_appearCountdown == 0)) {
+ _diskSlots[_diskIndex]->appear();
+ if (_flag3) {
+ _diskSlots[_diskIndex]->activate();
+ _diskSlots[_diskIndex]->setFlag2(true);
+ }
+ _diskIndex++;
+ while (_diskAvailable[_diskIndex] == 0 && _diskIndex < 19)
+ _diskIndex++;
+ if (_diskIndex < 20) {
+ _appearCountdown = 1;
+ } else {
+ _diskIndex = 0;
+ _inputDisabled = false;
+ if (_flag3) {
+ _playButton->press();
+ _tuneInCountdown = 2;
+ } else {
+ _mouseCursor->getSurface()->setVisible(true);
+ _diskSlots[_diskIndex]->activate();
+ }
+ }
+ }
+
+ if (_tuneInCountdown != 0 && (--_tuneInCountdown == 0)) {
+ playDisk();
+ }
+
+}
+
+uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ if (!_inputDisabled) {
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug/Cheat
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else if (!_flag3 &&
+ param.asPoint().x > 38 && param.asPoint().x < 598 &&
+ param.asPoint().y > 400 && param.asPoint().y < 460) {
+
+ _diskSlots[_diskIndex]->stop();
+ _diskIndex = (param.asPoint().x - 38) / 28;
+ _diskSlots[_diskIndex]->activate();
+ if (_updateStatus == 2) {
+ if (_diskAvailable[_diskIndex]) {
+ playDisk();
+ } else {
+ playStatic();
+ }
+ }
+ }
+ break;
+ // case 0x000D: TODO: Debug/Cheat
+ case 0x2000:
+ tuneIn();
+ break;
+ case 0x2001:
+ stop();
+ break;
+ }
+ }
+ return messageResult;
+}
+
+void DiskplayerScene::stop() {
+ _smackerPlayer->open(0x08288103, true);
+ _palette->usePalette();
+ _playButton->release();
+ _updateStatus = 0;
+ _diskSlots[_diskIndex]->activate();
+}
+
+void DiskplayerScene::tuneIn() {
+ _smackerPlayer->open(0x900001C1, false);
+ _palette->usePalette();
+ _playButton->release();
+ _updateStatus = 1;
+ _diskSlots[_diskIndex]->activate();
+}
+
+void DiskplayerScene::playDisk() {
+ _smackerPlayer->open(kDiskplayerSmackerFileHashes[_diskIndex], false);
+ _palette->usePalette();
+ _updateStatus = 2;
+ _diskSlots[_diskIndex]->play();
+}
+
+void DiskplayerScene::playStatic() {
+ _smackerPlayer->open(0x90000101, false);
+ _palette->usePalette();
+ _playButton->release();
+ _updateStatus = 2;
+ _diskSlots[_diskIndex]->activate();
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h
new file mode 100644
index 0000000..7969a7a
--- /dev/null
+++ b/engines/neverhood/diskplayerscene.h
@@ -0,0 +1,110 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_DISKPLAYERSCENE_H
+#define NEVERHOOD_DISKPLAYERSCENE_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
+#include "neverhood/smackerplayer.h"
+
+namespace Neverhood {
+
+class DiskplayerScene;
+
+class Class494 : public AnimatedSprite {
+public:
+ Class494(NeverhoodEngine *vm);
+ void sub43BE20();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub43BE00();
+};
+
+class DiskplayerPlayButton : public StaticSprite {
+public:
+ DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene);
+ void press();
+ void release();
+protected:
+ DiskplayerScene *_diskplayerScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ bool _isPlaying;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class DiskplayerSlot : public Entity {
+public:
+ DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int elementIndex, int value);
+ void activate();
+ void stop();
+ void appear();
+ void play();
+ void setFlag2(bool value) { _flag2 = value; }
+protected:
+ DiskplayerScene *_diskplayerScene;
+ SoundResource _soundResource;
+ Sprite *_inactiveSlot;
+ Sprite *_appearSlot;
+ Sprite *_activeSlot;
+ int _elementIndex;
+ int _initialCountdown;
+ int _countdown;
+ bool _flag2;
+ int _value;
+ bool _flag;
+ void update();
+};
+
+class DiskplayerScene : public Scene {
+public:
+ DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int which);
+ bool getFlag3() const { return _flag3; }
+protected:
+ SmackerPlayer *_smackerPlayer;
+ DiskplayerPlayButton *_playButton;
+ Class494 *_class494;
+ DiskplayerSlot *_diskSlots[20];
+ DiskplayerSlot *_class650;
+ int _updateStatus;
+ byte _diskAvailable[20];
+ bool _flag4;
+ int _which;
+ int _diskIndex;
+ int _appearCountdown;
+ int _tuneInCountdown;
+ bool _fullFlag;
+ bool _inputDisabled;
+ bool _flag3;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stop();
+ void tuneIn();
+ void playDisk();
+ void playStatic();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_DISKPLAYERSCENE_H */
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 95a6a5f..02ae2a7 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -25,7 +25,10 @@
#include "neverhood/graphics.h"
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
+#include "neverhood/module1400.h"
#include "neverhood/module1500.h"
+#include "neverhood/module1700.h"
+#include "neverhood/module1800.h"
#include "neverhood/module2300.h"
namespace Neverhood {
@@ -110,8 +113,13 @@ void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule1500(0); // Logos and intro video //Real
// createModule1000(-1);
-// createModule2300(0);
- createModule1200(0);
+// createModule2300(2);
+ _vm->gameState().sceneNum = 6;
+ //createModule1200(-1);
+ //createModule1800(-1);
+ //createModule1700(-1);
+ //createModule1700(1);
+ createModule1400(-1);
}
void GameModule::createModule1000(int which) {
@@ -149,6 +157,7 @@ void GameModule::updateModule1200() {
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
+ error("// TODO createModule2600(0);");
// TODO createModule2600(0);
// TODO _childObject->handleUpdate();
} else {
@@ -158,6 +167,29 @@ void GameModule::updateModule1200() {
}
}
+void GameModule::createModule1400(int which) {
+ setGlobalVar(0x91080831, 0x00AD0012);
+ _childObject = new Module1400(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1400);
+}
+
+void GameModule::updateModule1400() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ error("WEIRD!");
+ } else {
+ // TODO createModule1600(1);
+ // TODO _childObject->handleUpdate();
+ }
+ }
+}
+
void GameModule::createModule1500(int which) {
_someFlag1 = false;
setGlobalVar(0x91080831, 0x00F10114);
@@ -178,6 +210,61 @@ void GameModule::updateModule1500() {
}
}
+void GameModule::createModule1700(int which) {
+ setGlobalVar(0x91080831, 0x04212331);
+ _childObject = new Module1700(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1700);
+}
+
+void GameModule::updateModule1700() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ debug("Module1700 done; _field20 = %d", _field20);
+ if (_field20 == 1) {
+ // TODO createModule2900(3);
+ // TODO _childObject->handleUpdate();
+ } else {
+ // TODO createModule1600(2);
+ // TODO _childObject->handleUpdate();
+ }
+ }
+}
+
+void GameModule::createModule1800(int which) {
+ setGlobalVar(0x91080831, 0x04A14718);
+ _childObject = new Module1800(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1800);
+}
+
+void GameModule::updateModule1800() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ // TODO GameState_clear();
+ // TODO GameModule_handleKeyEscape();
+ } else if (_field20 == 2) {
+ // TODO createModule2700(0);
+ // TODO _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ // TODO createModule3000(3);
+ // TODO _childObject->handleUpdate();
+ } else {
+ // TODO createModule2800(0);
+ // TODO _childObject->handleUpdate();
+ }
+ }
+}
+
void GameModule::createModule2300(int which) {
setGlobalVar(0x91080831, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
@@ -223,13 +310,11 @@ void GameModule::updateModule2300() {
}
void GameModule::createModule2400(int which) {
- debug("createModule2400");
- _vm->_system->quit();
+ error("createModule2400");
}
void GameModule::createModule3000(int which) {
- debug("createModule3000");
- _vm->_system->quit();
+ error("createModule3000");
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index d95c31e..344a78f 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -53,8 +53,14 @@ protected:
void updateModule1000();
void createModule1200(int which);
void updateModule1200();
+ void createModule1400(int which);
+ void updateModule1400();
void createModule1500(int which);
void updateModule1500();
+ void createModule1700(int which);
+ void updateModule1700();
+ void createModule1800(int which);
+ void updateModule1800();
void createModule2200(int which);
void createModule2300(int which);
void updateModule2300();
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index e46d4ea..204e386 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -43,7 +43,7 @@ BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 h
_clipRect.x2 = 640;
_clipRect.y2 = 480;
_surface = new Graphics::Surface();
- _surface->create(width, height, Graphics::PixelFormat::createFormatCLUT8());
+ _surface->create(_sysRect.width, _sysRect.height, Graphics::PixelFormat::createFormatCLUT8());
}
BaseSurface::~BaseSurface() {
@@ -51,7 +51,6 @@ BaseSurface::~BaseSurface() {
}
void BaseSurface::draw() {
- debug(8, "BaseSurface::draw()");
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
// TODO: _sysRect alternate drawing code (is that used?)
_vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent);
@@ -223,9 +222,9 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
skip = READ_LE_UINT16(source);
copy = READ_LE_UINT16(source + 2);
source += 4;
- if (!flipX)
+ if (!flipX) {
memcpy(dest + skip, source, copy);
- else {
+ } else {
byte *flipDest = dest + width - skip - 1;
for (int xc = 0; xc < copy; xc++) {
*flipDest-- = source[xc];
@@ -247,8 +246,6 @@ void unpackSpriteRleRepl(byte *source, int width, int height, byte *dest, int de
// TODO: Flip Y
- debug("unpackSpriteRleRepl(%d, %d)", oldColor, newColor);
-
int16 rows, chunks;
int16 skip, copy;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 91de87d..b24e3eb 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -266,6 +266,172 @@ uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub421350() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x582EC138, 0, -1);
+ _counter = 0;
+ SetSpriteCallback(NULL);
+ SetUpdateHandler(&Klayman::update41D1C0);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ _counter3 = 0;
+ _counterMax = 8;
+ _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+}
+
+void Klayman::update41D1C0() {
+ update();
+ _counter++;
+ if (_counter >= _counterMax) {
+ _counter = 0;
+ if (_table) {
+ int randomValue = _vm->_rnd->getRandomNumber(_tableMaxValue);
+ for (int i = 0; i < _tableCount; i++) {
+ if (randomValue < _table[_tableCount].value) {
+ (this->*(_table[_tableCount].callback))();
+ _counterMax = _vm->_rnd->getRandomNumber(128) + 24;
+ break;
+ }
+ randomValue -= _table[_tableCount].value;
+ }
+ }
+ } else {
+ _counter3++;
+ if (_counter3 >= _counter3Max) {
+ _counter3 = 0;
+ _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ sub4213F0();
+ }
+ }
+}
+
+void Klayman::sub4213F0() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x5C24C018, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Klayman::sub4213B0);
+}
+
+void Klayman::sub4213B0() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0x5C24C018, 0, -1);
+ SetUpdateHandler(&Klayman::update41D1C0);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub420060() {
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420060))) {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x1449C169, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D4C0);
+ SetSpriteCallback(NULL);
+ }
+}
+
+void Klayman::sub41FFF0() {
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub41FFF0))) {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x0018C032, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D640);
+ SetSpriteCallback(NULL);
+ }
+}
+
+uint32 Klayman::handleMessage41D640(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC1380080) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x4806, 0, this);
+ _soundResource1.play(0xC8004340);
+ }
+ } else if (param.asInteger() == 0x02B20220) {
+ _soundResource1.play(0xC5408620);
+ } else if (param.asInteger() == 0x03020231) {
+ _soundResource1.play(0xD4C08010);
+ } else if (param.asInteger() == 0x67221A03) {
+ _soundResource1.play(0x44051000);
+ } else if (param.asInteger() == 0x925A0C1E) {
+ _soundResource1.play(0x40E5884D);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub4214D0() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xD229823D, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub421510() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x9A2801E0, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(NULL);
+}
+
+void Klayman::sub421160() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub421160))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x004AA310, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EC70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ }
+}
+
+void Klayman::sub4212C0() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub4212C0))) {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x392A0330, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EAB0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ }
+}
+
+uint32 Klayman::handleMessage41EAB0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x001A2832) {
+ _soundResource1.play(0xC0E4884C);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub421310() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x913AB120, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+}
+
/////////////////////////////////////////////////////////////////
void Klayman::sub41D320(uint32 fileHash, AnimationCb callback) {
@@ -460,7 +626,6 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
void Klayman::sub41C930(int16 x, bool flag) {
debug("Klayman::sub41C930(%d, %d)", x, flag);
int16 xdiff = ABS(x - _x);
- debug("xdiff = %d", xdiff);
if (x == _x) {
_x4 = x;
if (!_flagE1 && !_flagE2 && !_flagE3) {
@@ -623,7 +788,7 @@ void Klayman::sub41FB40() {
_status2 = 1;
_flagE2 = true;
_flagE5 = true;
- setDoDeltaX(_x4 < _x);
+ setDoDeltaX(_x4 < _x ? 1 : 0);
setFileHash(0x5C48C506, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DD80);
@@ -688,10 +853,7 @@ void Klayman::sub41F950() {
_status2 = 0;
_flagE1 = true;
_flagE5 = true;
-
- debug("222222222222222222222 x = %d; x4 = %d", _x, _x4);
-
- setDoDeltaX(_x4 < _x);
+ setDoDeltaX(_x4 < _x ? 1 : 0);
setFileHash(0x242C0198, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EC70);
@@ -823,9 +985,6 @@ void Klayman::spriteUpdate41F320() {
sendMessage(0x1019, 0, this);
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
-
- debug("xxxxxxxxxxxxxxxxxxxxxxxxx xdelta = %d", xdelta);
-
_x += xdelta;
if (_field114) {
error("_field114");
@@ -876,7 +1035,7 @@ uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FF80() {
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x);
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
if (!sub41CEB0(AnimationCallback(&Klayman::sub41FF80))) {
_status2 = 1;
_flagE5 = false;
@@ -985,28 +1144,22 @@ void Klayman::sub41CD00(int16 x) {
void Klayman::sub41CC40(int16 x1, int16 x2) {
if (_x > x1) {
if (_x == x1 + x2) {
- debug("sub41CC40 #1");
_x4 = x1 + x2;
setCallback2(NULL);
sub41C7B0();
} else if (_x < x1 + x2) {
- debug("sub41CC40 #2");
sub41CAC0(x1 + x2);
} else {
- debug("sub41CC40 #3");
sub41C930(x1 + x2, false);
}
} else {
if (_x == x1 - x2) {
- debug("sub41CC40 #4");
_x4 = x1 - x2;
setCallback2(NULL);
sub41C7B0();
} else if (_x > x1 - x2) {
- debug("sub41CC40 #5");
sub41CAC0(x1 - x2);
} else {
- debug("sub41CC40 #6");
sub41C930(x1 - x2, false);
}
}
@@ -1044,7 +1197,7 @@ void Klayman::sub41FBC0() {
_status2 = 2;
_flagE3 = true;
_flagE5 = true;
- setDoDeltaX(_x4 >= _x);
+ setDoDeltaX(_x4 >= _x ? 1 : 0);
setFileHash(0x08B28116, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DF10);
@@ -1641,6 +1794,68 @@ void Klayman::spriteUpdate41F5A0() {
AnimatedSprite::updateDeltaXY();
}
+void Klayman::sub420600() {
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ _flagE4 = false;
+ _flagE5 = true;
+ setFileHash2(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D970);
+}
+
+void Klayman::sub420660() {
+ _attachedSprite->sendMessage(0x4807, 0, this);
+}
+
+uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ if (_attachedSprite)
+ _attachedSprite->sendMessage(0x480B, _doDeltaX ? 1 : 0, this);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_flagE4 && _attachedSprite->hasMessageHandler() && _attachedSprite->sendMessage(0x480C, _doDeltaX ? 1 : 0, this) != 0) {
+ sub4205C0();
+ } else {
+ setCallback1(AnimationCallback(&Klayman::sub420660));
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ }
+ } else if (param.asInteger() == 0x32180101) {
+ _soundResource1.play(0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ _soundResource1.play(0x0460E2FA);
+ }
+ break;
+ case 0x480A:
+ _flagE4 = true;
+ return 0;
+ }
+ return handleMessage41D480(messageNum, param, sender);
+}
+
+void Klayman::sub4205C0() {
+ _flagE4 = false;
+ _flagE5 = true;
+ setFileHash2(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D970);
+}
+
+void Klayman::sub420550() {
+ setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420550))) {
+ _status2 = 2;
+ _flagE4 = false;
+ _flagE5 = true;
+ setFileHash(0x0C1CA072, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D970);
+ }
+}
+
//##############################################################################
// KmScene1001
@@ -1705,7 +1920,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger());
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
sub41C7B0();
break;
case 0x4836:
@@ -2401,7 +2616,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4817:
- setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
+ setDoDeltaX(param.asInteger());
sub41C7B0();
break;
case 0x481B:
@@ -2563,4 +2778,271 @@ void KmScene1201::sub40E040() {
}
}
+// KmScene1401
+
+KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // Empty
+}
+
+uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480A:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420600));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420550));
+ }
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub421030));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub421070));
+ }
+ break;
+ }
+ return 0;
+}
+
+// KmScene1402
+
+KmScene1402::KmScene1402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ SetFilterY(&Sprite::defFilterY);
+}
+
+uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480A:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420600));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420550));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ }
+ return 0;
+}
+
+// KmScene1705
+
+KmScene1705::KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _flag(false) {
+
+ // Empty
+}
+
+uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x2000:
+ _flag = param.asInteger() != 0;
+ messageResult = 1;
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_flag) {
+ setCallback2(AnimationCallback(&Klayman::sub421350));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ }
+ break;
+ case 0x4803:
+ setCallback2(AnimationCallback(&KmScene1705::sub468A80));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ if (_flag) {
+ setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ }
+ break;
+ case 0x481E:
+ if (_flag) {
+ setCallback2(AnimationCallback(&Klayman::sub421510));
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x4835:
+ _parentScene->sendMessage(0x2000, 1, this);
+ _flag = true;
+ setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ break;
+ case 0x4836:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _flag = false;
+ setCallback2(AnimationCallback(&Klayman::sub421310));
+ break;
+ case 0x483D:
+ sub468AD0();
+ break;
+ case 0x483E:
+ sub468B10();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene1705::handleMessage4689A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ _soundResource1.play(0x85B10BB8);
+ } else if (param.asInteger() == 0x4E6A0CA0) {
+ _soundResource1.play(0xC5B709B0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1705::spriteUpdate468A30() {
+ updateDeltaXY();
+ HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
+ if (hitRect->type == 0x5001) {
+ _y = hitRect->rect.y1;
+ processDelta();
+ sendMessage(0x1019, 0, this);
+ }
+}
+
+void KmScene1705::sub468A80() {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash2(0xB93AB151, 0x40A100F8, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&KmScene1705::spriteUpdate468A30);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetAnimationCallback3(&Klayman::sub420420);
+}
+
+void KmScene1705::sub468AD0() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x5E0A4905, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1705::handleMessage4689A0);
+}
+
+void KmScene1705::sub468B10() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xD86E4477, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1705::handleMessage4689A0);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3682d75..5cb11ab 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -85,6 +85,20 @@ public:
void sub4207A0();
void sub4207F0();
void sub420F20();
+ void sub421350();
+ void sub4213F0();
+ void sub4213B0();
+ void sub420060();
+ void sub41FFF0();
+ void sub4214D0();
+ void sub421510();
+ void sub421160();
+ void sub4212C0();
+ void sub421310();
+ void sub420600();
+ void sub420660();
+ void sub4205C0();
+ void sub420550();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -95,6 +109,11 @@ public:
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
+ void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
+ void setKlaymanTable1();
+ void setKlaymanTable2();
+ void setKlaymanTable3();
+
protected:
Entity *_parentScene;
Entity *_attachedSprite;
@@ -129,11 +148,6 @@ protected:
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
- void setKlaymanTable1();
- void setKlaymanTable2();
- void setKlaymanTable3();
-
void sub41FD40();
void sub41FD90();
uint32 handleMessage41EB10(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -210,6 +224,11 @@ protected:
uint32 handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41D640(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41EAB0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41D970(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void update41D1C0();
};
@@ -287,6 +306,33 @@ protected:
void sub40E040();
};
+class KmScene1401 : public Klayman {
+public:
+ KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
+class KmScene1402 : public Klayman {
+public:
+ KmScene1402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
+class KmScene1705 : public Klayman {
+public:
+ KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage4689A0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate468A30();
+ void sub468A80();
+ void sub468AD0();
+ void sub468B10();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 1742476..0b3b10c 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -5,6 +5,7 @@ MODULE_OBJS = \
blbarchive.o \
collisionman.o \
detection.o \
+ diskplayerscene.o \
gamemodule.o \
gamevars.o \
graphics.o \
@@ -12,7 +13,10 @@ MODULE_OBJS = \
module.o \
module1000.o \
module1200.o \
+ module1400.o \
module1500.o \
+ module1700.o \
+ module1800.o \
module2300.o \
mouse.o \
navigationscene.o \
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index eef5433..7a09b5f 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -76,8 +76,8 @@ void Module1200::createScene1201(int which) {
void Module1200::createScene1202(int which) {
_vm->gameState().sceneNum = 1;
- //_childObject = new Scene1202(_vm, this, which);
- //SetUpdateHandler(&Module1200::updateScene1202);
+ _childObject = new Scene1202(_vm, this, which);
+ SetUpdateHandler(&Module1200::updateScene1202);
}
void Module1200::createScene1203(int which) {
@@ -161,7 +161,7 @@ static const NPoint kScene1201PointArray[] = {
{493, 174}
};
-static const uint32 kScene1201SsScene1201TntFileHashList1[] = {
+static const uint32 kScene1201TntFileHashList1[] = {
0x2098212D,
0x1600437E,
0x1600437E,
@@ -182,7 +182,7 @@ static const uint32 kScene1201SsScene1201TntFileHashList1[] = {
0xDA460476
};
-static const uint32 kScene1201SsScene1201TntFileHashList2[] = {
+static const uint32 kScene1201TntFileHashList2[] = {
0x3040C676,
0x10914448,
0x10914448,
@@ -209,7 +209,7 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
int16 x = kScene1201PointArray[pointIndex].x;
int16 y = kScene1201PointArray[pointIndex].y;
if (x < 300) {
- _spriteResource.load2(kScene1201SsScene1201TntFileHashList1[elemIndex]);
+ _spriteResource.load2(kScene1201TntFileHashList1[elemIndex]);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_drawRect.x = 0;
@@ -217,7 +217,7 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
} else {
- _spriteResource.load2(kScene1201SsScene1201TntFileHashList2[elemIndex]);
+ _spriteResource.load2(kScene1201TntFileHashList2[elemIndex]);
_x = x;
_y = y;
_drawRect.x = -(_spriteResource.getDimensions().width / 2);
@@ -307,14 +307,14 @@ void Class466::sub40D380() {
_newHashListIndex = -2;
}
-Class468::Class468(NeverhoodEngine *vm, Sprite *klayman, bool flag)
+AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag)
: AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _countdown(0) {
- createSurface1(100, 0xD088AC30);
+ createSurface1(0xD088AC30, 100);
_x = 320;
_y = 240;
- SetUpdateHandler(&Class468::update);
- SetMessageHandler(&Class468::handleMessage);
+ SetUpdateHandler(&AsScene1201RightDoor::update);
+ SetMessageHandler(&AsScene1201RightDoor::handleMessage);
_newHashListIndex = -2;
if (flag) {
setFileHash(0xD088AC30, -1, -1);
@@ -326,14 +326,14 @@ Class468::Class468(NeverhoodEngine *vm, Sprite *klayman, bool flag)
}
}
-void Class468::update() {
+void AsScene1201RightDoor::update() {
if (_countdown != 0 && (--_countdown == 0)) {
sub40D830();
}
AnimatedSprite::update();
}
-uint32 Class468::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -346,22 +346,22 @@ uint32 Class468::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class468::sub40D7E0() {
+void AsScene1201RightDoor::sub40D7E0() {
setFileHash(0xD088AC30, 0, -1);
_newHashListIndex = -2;
_surface->setVisible(true);
_soundResource.play(calcHash("fxDoorOpen20"));
}
-void Class468::sub40D830() {
+void AsScene1201RightDoor::sub40D830() {
setFileHash(0xD088AC30, -1, -1);
_playBackwards = true;
_surface->setVisible(true);
_soundResource.play(calcHash("fxDoorClose20"));
- SetAnimationCallback3(&Class468::sub40D880);
+ SetAnimationCallback3(&AsScene1201RightDoor::sub40D880);
}
-void Class468::sub40D880() {
+void AsScene1201RightDoor::sub40D880() {
setFileHash1();
_surface->setVisible(false);
}
@@ -394,14 +394,14 @@ uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-Class463::Class463(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag)
+AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag)
: AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _class466(class466),
_flag(false) {
-
- //TODO_field_F0 = -1;
+
+ flag = false;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class463::handleMessage);
+ SetMessageHandler(&AsScene1201TntMan::handleMessage);
createSurface(990, 106, 181);
_x = 201;
if (flag) {
@@ -413,11 +413,11 @@ Class463::Class463(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bo
}
}
-Class463::~Class463() {
+AsScene1201TntMan::~AsScene1201TntMan() {
// TODO Sound1ChList_sub_407AF0(0x01D00560);
}
-uint32 Class463::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -441,8 +441,8 @@ uint32 Class463::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
-uint32 Class463::handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Class463::handleMessage(messageNum, param, sender);
+uint32 AsScene1201TntMan::handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = AsScene1201TntMan::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
removeCallbacks();
@@ -451,37 +451,37 @@ uint32 Class463::handleMessage40CCD0(int messageNum, const MessageParam ¶m,
return messageResult;
}
-void Class463::spriteUpdate40CD10() {
+void AsScene1201TntMan::spriteUpdate40CD10() {
_x = _sprite->getX() + 100;
}
-void Class463::sub40CD30() {
+void AsScene1201TntMan::sub40CD30() {
setFileHash(0x654913D0, 0, -1);
- SetMessageHandler(&Class463::handleMessage);
+ SetMessageHandler(&AsScene1201TntMan::handleMessage);
SetSpriteCallback(NULL);
}
-void Class463::sub40CD60() {
+void AsScene1201TntMan::sub40CD60() {
setFileHash(0x356803D0, 0, -1);
- SetMessageHandler(&Class463::handleMessage40CCD0);
+ SetMessageHandler(&AsScene1201TntMan::handleMessage40CCD0);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- SetAnimationCallback3(&Class463::sub40CD30);
+ SetAnimationCallback3(&AsScene1201TntMan::sub40CD30);
}
-void Class463::sub40CD90() {
+void AsScene1201TntMan::sub40CD90() {
// TODO Sound1ChList_addSoundResource(0x01D00560, 0x4B044624, true);
// TODO Sound1ChList_playLooping(0x4B044624);
_flag = true;
setFileHash(0x85084190, 0, -1);
- SetMessageHandler(&Class463::handleMessage);
- SetSpriteCallback(&Class463::spriteUpdate40CD10);
+ SetMessageHandler(&AsScene1201TntMan::handleMessage);
+ SetSpriteCallback(&AsScene1201TntMan::spriteUpdate40CD10);
_newHashListIndex = -2;
}
-Class465::Class465(NeverhoodEngine *vm, Sprite *class463)
- : AnimatedSprite(vm, 1200), _class463(class463) {
+Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
+ : AnimatedSprite(vm, 1200), _asTntMan(asTntMan) {
- createSurface1(995, 0x828C0411);
+ createSurface1(0x828C0411, 995);
SetUpdateHandler(&Class465::update);
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(&Class465::spriteUpdate40D150);
@@ -504,8 +504,251 @@ void Class465::update() {
}
void Class465::spriteUpdate40D150() {
- _x = _class463->getX() - 18;
- _y = _class463->getY() - 158;
+ _x = _asTntMan->getX() - 18;
+ _y = _asTntMan->getY() - 158;
+}
+
+AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+
+ createSurface(1100, 57, 60);
+ SetUpdateHandler(&AsScene1201Match::update);
+ SetMessageHandler(&AsScene1201Match::handleMessage40C2D0);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+
+ switch (getGlobalVar(0x0112090A)) {
+ case 0:
+ _x = 521;
+ _y = 112;
+ _status = 0;
+ sub40C4C0();
+ break;
+ case 1:
+ _x = 521;
+ _y = 112;
+ _status = 2;
+ sub40C470();
+ _soundResource.load(0xD00230CD);
+ break;
+ case 2:
+ setDoDeltaX(1);
+ _x = 403;
+ _y = 337;
+ _status = 0;
+ sub40C4F0();
+ break;
+ }
+}
+
+void AsScene1201Match::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ removeCallbacks();
+ }
+ updateAnim();
+ handleSpriteUpdate();
+ updatePosition();
+}
+
+uint32 AsScene1201Match::handleMessage40C2D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x86668011) {
+ _soundResource.play();
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1201Match::handleMessage40C320(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage40C2D0(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1201Match::handleMessage40C360(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage40C2D0(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x2001, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4806:
+ _surface->setVisible(false);
+ setGlobalVar(0x0112090A, 3);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1201Match::sub40C3E0() {
+ setFileHash(0x00842374, 0, -1);
+ SetMessageHandler(&AsScene1201Match::handleMessage40C320);
+ if (_status == 0) {
+ SetAnimationCallback3(&AsScene1201Match::sub40C420);
+ } else {
+ SetAnimationCallback3(&AsScene1201Match::sub40C470);
+ }
+}
+
+void AsScene1201Match::sub40C420() {
+ setGlobalVar(0x0112090A, 2);
+ _x -= 199;
+ _y += 119;
+ setFileHash(0x018D0240, 0, -1);
+ SetMessageHandler(&AsScene1201Match::handleMessage40C320);
+ SetAnimationCallback3(&AsScene1201Match::sub40C4F0);
+}
+
+void AsScene1201Match::sub40C470() {
+ setFileHash(0x00842374, 0, -1);
+ SetMessageHandler(&AsScene1201Match::handleMessage40C2D0);
+ _newHashListIndex = 0;
+ if (_status != 0) {
+ _countdown = 36;
+ _status--;
+ SetAnimationCallback3(&AsScene1201Match::sub40C3E0);
+ }
+}
+
+void AsScene1201Match::sub40C4C0() {
+ setFileHash(0x00842374, 0, -1);
+ SetMessageHandler(&AsScene1201Match::handleMessage40C360);
+ _newHashListIndex = 0;
+}
+
+void AsScene1201Match::sub40C4F0() {
+ setDoDeltaX(1);
+ _x = 403;
+ _y = 337;
+ setFileHash(0x00842374, 0, -1);
+ SetMessageHandler(&AsScene1201Match::handleMessage40C360);
+ _newHashListIndex = 0;
+}
+
+AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman)
+ : AnimatedSprite(vm, 900), _soundResource(vm), _parentScene(parentScene), _klayman(klayman),
+ _flag(false) {
+
+ createSurface(1100, 203, 199);
+ SetUpdateHandler(&AsScene1201Creature::update);
+ SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
+ _x = 540;
+ _y = 320;
+ sub40C8E0();
+ _countdown3 = 2;
+}
+
+void AsScene1201Creature::update() {
+ bool oldFlag = _flag;
+ _flag = _x >= 385;
+ if (_flag != oldFlag)
+ sub40C8E0();
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ removeCallbacks();
+ }
+ updateAnim();
+ handleSpriteUpdate();
+ updatePosition();
+}
+
+uint32 AsScene1201Creature::handleMessage40C710(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02060018) {
+ _soundResource.play(0xCD298116);
+ }
+ break;
+ case 0x2004:
+ setCallback2(AnimationCallback(&AsScene1201Creature::sub40C960));
+ break;
+ case 0x2006:
+ setCallback2(AnimationCallback(&AsScene1201Creature::sub40C9B0));
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1201Creature::handleMessage40C7B0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage40C710(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02421405) {
+ if (_countdown2 != 0 && (--_countdown2 == 0)) {
+ sub40C990();
+ }
+ }
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1201Creature::handleMessage40C830(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02060018) {
+ _soundResource.play(0xCD298116);
+ _parentScene->sendMessage(0x4814, 0, this);
+ _klayman->sendMessage(0x4814, 0, this);
+ }
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1201Creature::sub40C8E0() {
+ _countdown3--;
+ if (_countdown3 == 0)
+ _countdown3 = 3;
+ setFileHash(0x08081513, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
+ SetAnimationCallback3(&AsScene1201Creature::sub40C930);
+ _countdown1 = 36;
+}
+
+void AsScene1201Creature::sub40C930() {
+ if (!_flag) {
+ setFileHash(0xCA287133, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::handleMessage40C7B0);
+ SetAnimationCallback3(&AsScene1201Creature::sub40C8E0);
+ }
+}
+
+void AsScene1201Creature::sub40C960() {
+ setFileHash(0x08081513, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
+ SetAnimationCallback3(&AsScene1201Creature::sub40C9E0);
+ _countdown1 = 48;
+}
+
+void AsScene1201Creature::sub40C990() {
+ setFileHash2(0x0B6E13FB, 0x01084280, 0);
+}
+
+void AsScene1201Creature::sub40C9B0() {
+ setFileHash(0xCA287133, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::handleMessage40C830);
+ SetAnimationCallback3(&AsScene1201Creature::sub40C8E0);
+ _countdown1 = 0;
+}
+
+void AsScene1201Creature::sub40C9E0() {
+ setFileHash(0x5A201453, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
+ _countdown1 = 0;
}
AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
@@ -543,7 +786,8 @@ void AsScene1201LeftDoor::sub40D590() {
}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false) {
+ : Scene(vm, parentModule, true), _flag(false), _asMatch(NULL), _asTntMan(NULL),
+ _asCreature(NULL), _class466(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
int16 topY1, topY2, topY3, topY4;
int16 x1, x2;
@@ -589,12 +833,12 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = addSprite(new StaticSprite(_vm, 0x04063110, 500));
topY4 = tempSprite->getY() + 1;
- _class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1 ? 1 : 0));
+ _class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1));
_class466->getSurface()->getClipRect().x1 = 0;
_class466->getSurface()->getClipRect().y1 = topY4;
_class466->getSurface()->getClipRect().x2 = 640;
_class466->getSurface()->getClipRect().y2 = 480;
-
+
addSprite(new StaticSprite(_vm, 0x400B04B0, 1200));
tempSprite = addSprite(new StaticSprite(_vm, 0x40295462, 1200));
@@ -644,31 +888,31 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_background = addBackground(new DirtyBackground(_vm, 0x4019A2C4, 0, 0));
_palette = new Palette(_vm, 0x4019A2C4);
_palette->usePalette();
- _class468 = NULL;
+ _asRightDoor = NULL;
} else {
_background = addBackground(new DirtyBackground(_vm, 0x40206EC5, 0, 0));
_palette = new Palette(_vm, 0x40206EC5);
_palette->usePalette();
- _class468 = addSprite(new Class468(_vm, _klayman, which - 2 != 1)); // CHECKME???
+ _asRightDoor = addSprite(new AsScene1201RightDoor(_vm, _klayman, which == 2));
}
if (getGlobalVar(0x000CF819)) {
addSprite(new StaticSprite(_vm, 0x10002ED8, 500));
if (!getGlobalVar(0x0A18CA33)) {
- Class463 *class463;
- class463 = new Class463(_vm, this, _class466, which - 1 != 1);
- class463->getSurface()->getClipRect().x1 = x1;
- class463->getSurface()->getClipRect().y1 = 0;
- class463->getSurface()->getClipRect().x2 = x2;
- class463->getSurface()->getClipRect().y2 = 480;
- _vm->_collisionMan->addSprite(_class463);
- _class463 = addSprite(class463);
- tempSprite = addSprite(new Class465(_vm, _class463));
+ AsScene1201TntMan *asTntMan;
+ asTntMan = new AsScene1201TntMan(_vm, this, _class466, which == 1);
+ asTntMan->getSurface()->getClipRect().x1 = x1;
+ asTntMan->getSurface()->getClipRect().y1 = 0;
+ asTntMan->getSurface()->getClipRect().x2 = x2;
+ asTntMan->getSurface()->getClipRect().y2 = 480;
+ _vm->_collisionMan->addSprite(asTntMan);
+ _asTntMan = addSprite(asTntMan);
+ tempSprite = addSprite(new Class465(_vm, _asTntMan));
tempSprite->getSurface()->getClipRect().x1 = x1;
tempSprite->getSurface()->getClipRect().y1 = 0;
tempSprite->getSurface()->getClipRect().x2 = x2;
tempSprite->getSurface()->getClipRect().y2 = 480;
- class463->setRepl(64, 0);
+ asTntMan->setRepl(64, 0);
}
uint32 tntIndex = 1;
@@ -741,22 +985,20 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(0x0112090A, 1);
}
- _class461 = NULL;
+ _asMatch = NULL;
-#if 0
if (getGlobalVar(0x0112090A) < 3) {
- _class461 = addSprite(new Class461(_vm, this));
- _vm->_collisionMan->addSprite(_class461);
+ _asMatch = addSprite(new AsScene1201Match(_vm, this));
+ _vm->_collisionMan->addSprite(_asMatch);
}
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- _class462 = addSprite(new Class462(_vm, this, _klayman));
- _class462->getSurface()->getClipRect().x1 = x1;
- _class462->getSurface()->getClipRect().y1 = 0;
- _class462->getSurface()->getClipRect().x2 = x2;
- _class462->getSurface()->getClipRect().y2 = 480;
+ _asCreature = addSprite(new AsScene1201Creature(_vm, this, _klayman));
+ _asCreature->getSurface()->getClipRect().x1 = x1;
+ _asCreature->getSurface()->getClipRect().y1 = 0;
+ _asCreature->getSurface()->getClipRect().x2 = x2;
+ _asCreature->getSurface()->getClipRect().y2 = 480;
}
-#endif
}
@@ -765,8 +1007,8 @@ Scene1201::~Scene1201() {
void Scene1201::update() {
Scene::update();
- if (_class461 && getGlobalVar(0x0112090A)) {
- deleteSprite(&_class461);
+ if (_asMatch && getGlobalVar(0x0112090A)) {
+ deleteSprite(&_asMatch);
}
}
@@ -777,12 +1019,12 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x07053000) {
_flag = true;
- _class462->sendMessage(0x2004, 0, this);
+ _asCreature->sendMessage(0x2004, 0, this);
} else if (param.asInteger() == 0x140E5744) {
- _class462->sendMessage(0x2005, 0, this);
+ _asCreature->sendMessage(0x2005, 0, this);
} else if (param.asInteger() == 0x40253C40) {
_messageListFlag = false;
- _class462->sendMessage(0x2006, 0, this);
+ _asCreature->sendMessage(0x2006, 0, this);
} else if (param.asInteger() == 0x090EB048) {
if (_klayman->getX() < 572) {
setMessageList2(0x004AEC90);
@@ -795,17 +1037,17 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (!getGlobalVar(0x0112090A)) {
setMessageList2(0x004AECB0);
} else {
- _klayman->sendEntityMessage(0x1014, _class461, this);
+ _klayman->sendEntityMessage(0x1014, _asMatch, this);
setMessageList2(0x004AECC0);
}
break;
case 0x2002:
if (getGlobalVar(0x20A0C516)) {
- _klayman->sendEntityMessage(0x1014, _class463, this);
+ _klayman->sendEntityMessage(0x1014, _asTntMan, this);
setMessageList2(0x004AECF0);
} else if (getGlobalVar(0x0112090A) == 3) {
- _klayman->sendEntityMessage(0x1014, _class463, this);
- if (_klayman->getX() > _class463->getX()) {
+ _klayman->sendEntityMessage(0x1014, _asTntMan, this);
+ if (_klayman->getX() > _asTntMan->getX()) {
setMessageList(0x004AECD0);
} else {
setMessageList(0x004AECE0);
@@ -822,10 +1064,253 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4829:
- _class468->sendMessage(0x4829, 0, this);
+ _asRightDoor->sendMessage(0x4829, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+// Scene1202
+
+static const uint32 kScene1202Table[] = {
+ 1, 2, 0, 4, 5, 3, 7, 8, 6, 10, 11, 9, 13, 14, 12, 16, 17, 15
+};
+
+static const NPoint kScene1202Points[] = {
+ {203, 140},
+ {316, 212},
+ {277, 264},
+ {176, 196},
+ {275, 159},
+ {366, 212},
+ {230, 195},
+ {412, 212},
+ {368, 263},
+ {204, 192},
+ {365, 164},
+ {316, 262},
+ {191, 255},
+ {280, 213},
+ {406, 266},
+ {214, 254},
+ {316, 158},
+ {402, 161}
+};
+
+static const uint32 kScene1202FileHashes[] = {
+ 0x1AC00B8,
+ 0x1AC14B8,
+ 0x1AC14B8,
+ 0x1AC30B8,
+ 0x1AC14B8,
+ 0x1AC14B8,
+ 0x1AC00B8,
+ 0x1AC14B8,
+ 0x1AC14B8,
+ 0x1AC90B8,
+ 0x1AC18B8,
+ 0x1AC18B8,
+ 0x1AC30B8,
+ 0x1AC14B8,
+ 0x1AC14B8,
+ 0x1AC50B8,
+ 0x1AC14B8,
+ 0x1AC14B8
+};
+
+AsScene1202TntItem::AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int index)
+ : AnimatedSprite(vm, 900), _parentScene(parentScene), _index(index) {
+
+ int positionIndex;
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1202TntItem::handleMessage453FE0);
+ positionIndex = getSubVar(0x10055D14, _index);
+ createSurface(900, 37, 67);
+ _x = kScene1202Points[positionIndex].x;
+ _y = kScene1202Points[positionIndex].y;
+ sub4540A0();
+}
+
+uint32 AsScene1202TntItem::handleMessage453FE0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x2000, _index, this);
+ messageResult = 1;
+ break;
+ case 0x2001:
+ _index2 = (int)param.asInteger();
+ sub4540D0();
break;
}
return messageResult;
}
+uint32 AsScene1202TntItem::handleMessage454060(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1202TntItem::sub4540A0() {
+ setFileHash(kScene1202FileHashes[_index], 0, -1);
+ SetMessageHandler(&AsScene1202TntItem::handleMessage453FE0);
+ _newHashListIndex = 0;
+}
+
+void AsScene1202TntItem::sub4540D0() {
+ setFileHash(kScene1202FileHashes[_index], 0, -1);
+ SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
+ SetAnimationCallback3(&AsScene1202TntItem::sub454100);
+}
+
+void AsScene1202TntItem::sub454100() {
+ _x = kScene1202Points[_index2].x;
+ _y = kScene1202Points[_index2].y;
+ setFileHash(kScene1202FileHashes[_index], 6, -1);
+ SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
+ SetAnimationCallback3(&AsScene1202TntItem::sub454160);
+ _playBackwards = true;
+}
+
+void AsScene1202TntItem::sub454160() {
+ _parentScene->sendMessage(0x2002, _index, this);
+ sub4540A0();
+}
+
+Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _paletteResource(vm), _soundResource1(vm),
+ _soundResource2(vm), _soundResource3(vm), _soundResource4(vm),
+ _flag(true), _soundFlag(false), _counter(0), _index(-1) {
+
+ Palette2 *palette2;
+
+ SetMessageHandler(&Scene1202::handleMessage453C10);
+ SetUpdateHandler(&Scene1202::update);
+
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x60210ED5, 0, 0));
+
+ palette2 = new Palette2(_vm, 0x60210ED5);
+ palette2->usePalette();
+ _palette = palette2;
+ addEntity(_palette);
+
+ _paletteResource.load(0x60250EB5);
+ _paletteResource.copyPalette(_paletteData);
+
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x10ED160A, 20, 620));
+
+ for (int i = 0; i < 18; i++) {
+ _asTntItems[i] = addSprite(new AsScene1202TntItem(_vm, this, i));
+ _vm->_collisionMan->addSprite(_asTntItems[i]);
+ }
+
+ addSprite(new StaticSprite(_vm, 0x8E8419C1, 1100));
+
+ if (getGlobalVar(0x000CF819)) {
+ SetMessageHandler(&Scene1202::handleMessage453D90);
+ }
+
+ _soundResource1.play(0x40106542);
+ _soundResource2.load(0x40005446);
+ _soundResource2.load(0x40005446);
+ _soundResource2.load(0x68E25540);
+
+}
+
+Scene1202::~Scene1202() {
+ if (isSolved()) {
+ setGlobalVar(0x000CF819, 1);
+ }
+}
+
+void Scene1202::update() {
+ Scene::update();
+ if (_soundFlag) {
+ if (!_soundResource4.isPlaying()) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ } else if (_counter == 0 && isSolved()) {
+ SetMessageHandler(&Scene1202::handleMessage453D90);
+ setGlobalVar(0x000CF819, 1);
+ doPaletteEffect();
+ _soundResource4.play();
+ _soundFlag = true;
+ } else if (_index >= 0 && _counter == 0) {
+ int index2 = kScene1202Table[_index];
+ _asTntItems[_index]->sendMessage(0x2001, getSubVar(0x10055D14, index2), this);
+ _asTntItems[index2]->sendMessage(0x2001, getSubVar(0x10055D14, _index), this);
+ int temp = getSubVar(0x10055D14, index2);
+ setSubVar(0x10055D14, index2, getSubVar(0x10055D14, _index));
+ setSubVar(0x10055D14, _index, temp);
+ _counter = 2;
+ _index = -1;
+ if (_flag) {
+ _soundResource2.play();
+ } else {
+ _soundResource3.play();
+ }
+ _flag = !_flag;
+ }
+}
+
+uint32 Scene1202::handleMessage453C10(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug/Cheat stuff
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_soundFlag) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x000D:
+ if (param.asInteger() == 0x14210006) {
+ // TODO: Debug/Cheat stuff
+ messageResult = 1;
+ }
+ break;
+ case 0x2000:
+ _index = (int)param.asInteger();
+ break;
+ case 0x2002:
+ _counter--;
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene1202::handleMessage453D90(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ }
+ return 0;
+}
+
+bool Scene1202::isSolved() {
+ return
+ getSubVar(0x10055D14, 0) == 0 && getSubVar(0x10055D14, 3) == 3 &&
+ getSubVar(0x10055D14, 6) == 6 && getSubVar(0x10055D14, 9) == 9 &&
+ getSubVar(0x10055D14, 12) == 12 && getSubVar(0x10055D14, 15) == 15;
+}
+
+void Scene1202::doPaletteEffect() {
+#if 0 // TODO
+ Palette2 *palette2 = (Palette2*)_palette;
+ palette2->startFadeToPalette(24);
+#endif
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index 2a8a933..3ffed44 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -70,9 +70,9 @@ protected:
void sub40D380();
};
-class Class468 : public AnimatedSprite {
+class AsScene1201RightDoor : public AnimatedSprite {
public:
- Class468(NeverhoodEngine *vm, Sprite *klayman, bool flag);
+ AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag);
protected:
SoundResource _soundResource;
Sprite *_klayman;
@@ -91,10 +91,10 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class463 : public AnimatedSprite {
+class AsScene1201TntMan : public AnimatedSprite {
public:
- Class463(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag);
- virtual ~Class463();
+ AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag);
+ virtual ~AsScene1201TntMan();
protected:
Scene *_parentScene;
Sprite *_class466;
@@ -111,14 +111,56 @@ protected:
class Class465 : public AnimatedSprite {
public:
- Class465(NeverhoodEngine *vm, Sprite *class463);
+ Class465(NeverhoodEngine *vm, Sprite *asTntMan);
~Class465();
protected:
- Sprite *_class463;
+ Sprite *_asTntMan;
void update();
void spriteUpdate40D150();
};
+class AsScene1201Match : public AnimatedSprite {
+public:
+ AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ int _countdown;
+ int _status;
+ void update();
+ uint32 handleMessage40C2D0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40C320(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40C360(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40C3E0();
+ void sub40C420();
+ void sub40C470();
+ void sub40C4C0();
+ void sub40C4F0();
+};
+
+class AsScene1201Creature : public AnimatedSprite {
+public:
+ AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman);
+protected:
+ Scene *_parentScene;
+ Sprite *_klayman;
+ SoundResource _soundResource;
+ int _countdown1;
+ int _countdown2;
+ int _countdown3;
+ bool _flag;
+ void update();
+ uint32 handleMessage40C710(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40C7B0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40C830(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40C8E0();
+ void sub40C930();
+ void sub40C960();
+ void sub40C990();
+ void sub40C9B0();
+ void sub40C9E0();
+};
+
class AsScene1201LeftDoor : public AnimatedSprite {
public:
AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman);
@@ -144,18 +186,57 @@ public:
protected:
// TODO ResourceTable _resourceTable1;
// TODO ResourceTable _resourceTable2;
- Sprite *_class461;
- Sprite *_class463;
- Sprite *_class462;
+ Sprite *_asMatch;
+ Sprite *_asTntMan;
+ Sprite *_asCreature;
Sprite *_class466;
Sprite *_asLeftDoor;
- Sprite *_class468;
+ Sprite *_asRightDoor;
Sprite *_asTape;
bool _flag;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// Scene1202
+
+class AsScene1202TntItem : public AnimatedSprite {
+public:
+ AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int index);
+protected:
+ Scene *_parentScene;
+ int _index, _index2;
+ uint32 handleMessage453FE0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage454060(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub4540A0();
+ void sub4540D0();
+ void sub454100();
+ void sub454160();
+};
+
+class Scene1202 : public Scene {
+public:
+ Scene1202(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene1202();
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ PaletteResource _paletteResource;
+ Sprite *_asTntItems[18];
+ int _counter;
+ int _index;
+ byte _paletteData[1024];
+ bool _soundFlag;
+ bool _flag;
+ void update();
+ uint32 handleMessage453C10(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage453D90(int messageNum, const MessageParam ¶m, Entity *sender);
+ bool isSolved();
+ void doPaletteEffect();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1200_H */
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
new file mode 100644
index 0000000..7d618f5
--- /dev/null
+++ b/engines/neverhood/module1400.cpp
@@ -0,0 +1,1439 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1400.h"
+#include "neverhood/module1000.h"
+#include "neverhood/diskplayerscene.h"
+#include "neverhood/navigationscene.h"
+
+namespace Neverhood {
+
+Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ debug("Create Module1400(%d)", which);
+
+ // TODO Music18hList_add(0x00AD0012, 0x06333232);
+ // TODO Music18hList_add(0x00AD0012, 0x624A220E);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 1:
+ createScene1402(-1);
+ break;
+ case 2:
+ createScene1403(-1);
+ break;
+ case 3:
+ createScene1404(-1);
+ break;
+ case 4:
+ createScene1405(-1);
+ break;
+ case 5:
+ createScene1406(-1);
+ break;
+ case 6:
+ createScene1407(-1);
+ break;
+ default:
+ createScene1401(-1);
+ }
+ } else {
+ createScene1401(0);
+ }
+
+}
+
+Module1400::~Module1400() {
+ // TODO Music18hList_deleteGroup(0x00AD0012);
+}
+
+void Module1400::createScene1401(int which) {
+ _vm->gameState().sceneNum = 0;
+ // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ _childObject = new Scene1401(_vm, this, which);
+ SetUpdateHandler(&Module1400::updateScene1401);
+}
+
+void Module1400::createScene1402(int which) {
+ _vm->gameState().sceneNum = 1;
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ // TODO Music18hList_stop(0x624A220E, 0, 2);
+ _childObject = new Scene1402(_vm, this, which);
+ SetUpdateHandler(&Module1400::updateScene1402);
+}
+
+void Module1400::createScene1403(int which) {
+ _vm->gameState().sceneNum = 2;
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ // TODO Music18hList_play(0x624A220E, 0, 2, 1);
+ // TODO _childObject = new Scene1403(_vm, this, which);
+ SetUpdateHandler(&Module1400::updateScene1403);
+}
+
+void Module1400::createScene1404(int which) {
+ _vm->gameState().sceneNum = 3;
+ // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ // TODO _childObject = new Scene1404(_vm, this, which);
+ SetUpdateHandler(&Module1400::updateScene1404);
+}
+
+void Module1400::createScene1405(int which) {
+ _vm->gameState().sceneNum = 4;
+ // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ // TODO _childObject = new Scene1405(_vm, this, which);
+ SetUpdateHandler(&Module1400::updateScene1405);
+}
+
+void Module1400::createScene1406(int which) {
+ _vm->gameState().sceneNum = 5;
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 2);
+ SetUpdateHandler(&Module1400::updateScene1405);
+}
+
+void Module1400::createScene1407(int which) {
+ _vm->gameState().sceneNum = 6;
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ _childObject = new Scene1407(_vm, this, which);
+ SetUpdateHandler(&Module1400::updateScene1407);
+}
+
+void Module1400::updateScene1401() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene1402(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene1404(0);
+ _childObject->handleUpdate();
+ } else {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ }
+}
+
+void Module1400::updateScene1402() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+
+ debug("Scene1402: _field20 = %d", _field20);
+
+ if (_field20 == 1) {
+ createScene1403(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene1407(-1);
+ _childObject->handleUpdate();
+ } else {
+ createScene1401(1);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1400::updateScene1403() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1402(1);
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1400::updateScene1404() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene1405(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene1406(-1);
+ _childObject->handleUpdate();
+ } else {
+ createScene1401(2);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1400::updateScene1405() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1404(1);
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1400::updateScene1406() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1404(2);
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1400::updateScene1407() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1402(2);
+ _childObject->handleUpdate();
+ }
+}
+
+// Scene1401
+
+Class525::Class525(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm),
+ _countdown1(0), _countdown2(0) {
+
+ // TODO createSurface3(900, dword_4B6768);
+ createSurface(900, 640, 480); //TODO: Remeove once the line above is done
+ _x = 454;
+ _y = 217;
+ SetUpdateHandler(&Class525::update4662A0);
+ SetMessageHandler(&Class525::handleMessage466320);
+ setFileHash(0x4C210500, 0, -1);
+}
+
+Class525::~Class525() {
+ // TODO Sound1ChList_sub_407AF0(0x01104C08);
+}
+
+void Class525::update4662A0() {
+ AnimatedSprite::update();
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ sub466460();
+ }
+ if (_countdown2 != 0 && (--_countdown2 == 0)) {
+ // TODO Sound1ChList_addSoundResource(0x01104C08, 0x4A116437, true);
+ // TODO Sound1ChList_playLooping(0x4A116437);
+ }
+}
+
+void Class525::update466300() {
+ AnimatedSprite::update();
+ if (_countdown1 != 0) {
+ _countdown1--;
+ }
+}
+
+uint32 Class525::handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x0A8A1490) {
+ _soundResource2.play(0x6AB6666F);
+ }
+ break;
+ case 0x2000:
+ _countdown1 = 70;
+ _countdown2 = 8;
+ sub466420();
+ break;
+ case 0x483A:
+ sub4664B0();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class525::handleMessage4663C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ if (_countdown1 != 0) {
+ sub466420();
+ } else {
+ sub466460();
+ }
+ SetMessageHandler(&Class525::handleMessage466320);
+ SetUpdateHandler(&Class525::update4662A0);
+ break;
+ }
+ return messageResult;
+}
+
+void Class525::sub466420() {
+ setFileHash(0x4C240100, 0, -1);
+ _soundResource1.play(0x4A30063F);
+}
+
+void Class525::sub466460() {
+ // TODO Sound1ChList_deleteSoundByHash(0x4A116437);
+ _soundResource1.play(0x4A120435);
+ setFileHash(0x4C210500, 0, -1);
+}
+
+void Class525::sub4664B0() {
+ setFileHash(0x6C210810, 0, -1);
+ SetMessageHandler(&Class525::handleMessage4663C0);
+ SetUpdateHandler(&Class525::update466300);
+}
+
+Class526::Class526(NeverhoodEngine *vm, Sprite *class525)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _class525(class525) {
+
+ // TODO createSurface3(100, dword_4B6778);
+ createSurface(100, 640, 480); //TODO: Remeove once the line above is done
+ _x = 478;
+ _y = 433;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class526::handleMessage);
+ setFileHash(0xA282C472, 0, -1);
+}
+
+uint32 Class526::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x66382026) {
+ _soundResource.play(0x0CD84468);
+ } else if (param.asInteger() == 0x6E28061C) {
+ _soundResource.play(0x78C8402C);
+ } else if (param.asInteger() == 0x462F0410) {
+ _soundResource.play(0x60984E28);
+ }
+ break;
+ case 0x4839:
+ sub466770();
+ break;
+ }
+ return messageResult;
+}
+
+void Class526::spriteUpdate466720() {
+ AnimatedSprite::updateDeltaXY();
+ if (_rect.y1 <= 150) {
+ _soundResource.play(0x0E32247F);
+ setFileHash1();
+ SetSpriteCallback(NULL);
+ SetMessageHandler(NULL);
+ _surface->setVisible(false);
+ }
+}
+
+void Class526::sub466770() {
+ setFileHash(0x34880040, 0, -1);
+ SetSpriteCallback(&Class526::spriteUpdate466720);
+}
+
+Class527::Class527(NeverhoodEngine *vm, Sprite *class526)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _class526(class526) {
+
+ // TODO createSurface3(200, dword_4B6768);
+ createSurface(200, 640, 480); //TODO: Remeove once the line above is done
+ _x = 427;
+ _y = 433;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class527::handleMessage);
+ setFileHash(0x461A1490, 0, -1);
+}
+
+uint32 Class527::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4839:
+ sub466970();
+ break;
+ }
+ return messageResult;
+}
+
+void Class527::spriteUpdate466920() {
+ AnimatedSprite::updateDeltaXY();
+ if (_rect.y1 <= 150) {
+ _soundResource.play(0x18020439);
+ setFileHash1();
+ SetSpriteCallback(NULL);
+ SetMessageHandler(NULL);
+ _surface->setVisible(false);
+ }
+}
+
+void Class527::sub466970() {
+ setFileHash(0x103B8020, 0, -1);
+ SetSpriteCallback(&Class527::spriteUpdate466920);
+}
+
+Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _countdown(0) {
+
+ _x = 320;
+ _y = 240;
+ createSurface1(100, 0x04551900);
+ SetUpdateHandler(&Class528::update);
+ SetMessageHandler(&Class528::handleMessage);
+ _newHashListIndex = -2;
+ if (flag) {
+ _flag = true;
+ setFileHash(0x04551900, -1,- 1);
+ _countdown = 48;
+ } else {
+ _flag = false;
+ setFileHash1();
+ _surface->setVisible(false);
+ }
+}
+
+void Class528::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ sub466C50();
+ }
+ AnimatedSprite::update();
+}
+
+
+uint32 Class528::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2001:
+ if (_flag)
+ _countdown = 168;
+ messageResult = _flag ? 1 : 0;
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ _countdown = 168;
+ if (_flag)
+ sub466BF0();
+ break;
+ }
+ return messageResult;
+}
+
+void Class528::sub466BF0() {
+ _flag = true;
+ _surface->setVisible(true);
+ setFileHash(0x04551900, 0, -1);
+ _newHashListIndex = -2;
+ _soundResource.play(calcHash("fxDoorOpen24"));
+}
+
+void Class528::sub466C50() {
+ _flag = false;
+ _surface->setVisible(true);
+ setFileHash(0x04551900, -1, -1);
+ _soundResource.play(calcHash("fxDoorClose24"));
+ _playBackwards = true;
+ SetAnimationCallback3(&Class528::sub466CB0);
+}
+
+void Class528::sub466CB0() {
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+static const Class489Item kClass489Items[] = {
+ {{154, 453}, 4, 2, 0, -1, 0, 1},
+ {{104, 391}, 4, -1, -1, -1, 1, 1},
+ {{ 22, 447}, 6, -1, -1, -1, 1, 1},
+ {{112, 406}, 2, -1, -1, -1, 1, 0},
+ {{262, 433}, 1, 1, 0, -1, 0, 0}
+};
+
+Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *class525)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _class525(class525),
+ _soundResource1(vm), _soundResource2(vm), _soundResource3(vm) {
+
+ _class489Item = &kClass489Items[getGlobalVar(0x04A105B3)];
+ // TODO createSurface3(990, dword_4B26D8);
+ createSurface(990, 640, 480); //TODO: Remeove once the line above is done
+ setFileHash(0x10E3042B, 0, -1);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class489::handleMessage);
+ _x = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
+ _flag = true;
+ sub434C80();
+ setDoDeltaX(1);
+ if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex2) {
+ sub434E90();
+ }
+ _soundResource3.load(0xC8C2507C);
+}
+
+Class489::~Class489() {
+ // TODO Sound1ChList_sub_407AF0(0x05331081);
+}
+
+uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4807:
+ setGlobalVar(0x04A10F33, (_x - _class489Item->point.x) / 108);
+ if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex2) {
+ sub434E60();
+ } else {
+ sub434DD0();
+ }
+ break;
+ case 0x480B:
+ if (param.asInteger() != 1) {
+ if ((int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1) {
+ incGlobalVar(0x04A10F33, 1);
+ }
+ } else if (getGlobalVar(0x04A10F33) > 0) {
+ incGlobalVar(0x04A10F33, -1);
+ }
+ sub434DF0();
+ break;
+ case 0x480C:
+ if (param.asInteger() != 1) {
+ messageResult = (int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1 ? 1 : 0;
+ } else {
+ messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
+ }
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ case 0x4828:
+ sub435040();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (param.asPoint().x - _x >= 17 && param.asPoint().x - _x <= 56 &&
+ param.asPoint().y - _y >= -120 && param.asPoint().y - _y <= -82) {
+ _parentScene->sendMessage(0x4826, 1, this);
+ } else {
+ _parentScene->sendMessage(0x4826, 0, this);
+ }
+ messageResult = 1;
+ break;
+ case 0x4807:
+ _parentScene->sendMessage(0x4807, 0, this);
+ sub434F80();
+ break;
+ case 0x480B:
+ if (param.asInteger() != 1) {
+ if ((int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1) {
+ incGlobalVar(0x04A10F33, 1);
+ }
+ } else if (getGlobalVar(0x04A10F33) > 0) {
+ incGlobalVar(0x04A10F33, -1);
+ }
+ sub434FF0();
+ break;
+ case 0x480C:
+ if (param.asInteger() != 1) {
+ messageResult = (int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1 ? 1 : 0;
+ } else {
+ messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
+ }
+ break;
+ case 0x480F:
+ sub434EC0();
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class489::handleMessage434B20(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class489::spriteUpdate434B60() {
+ if (_x <= _klayman->getX())
+ _x = _klayman->getX() - 100;
+ else
+ _x = _klayman->getX() + 100;
+ sub434C80();
+ if (_remX == _x) {
+ if (getGlobalVar(0x04A10F33) == 0 && _class489Item->flag4 != 0) {
+ _parentScene->sendMessage(0x1019, 0, this);
+ incGlobalVar(0x04A105B3, -1);
+ setGlobalVar(0x04A10F33, kClass489Items[getGlobalVar(0x04A105B3)].varIndex1);
+ } else if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex1 && _class489Item->flag != 0) {
+ _parentScene->sendMessage(0x1019, 1, this);
+ incGlobalVar(0x04A105B3, +1);
+ setGlobalVar(0x04A10F33, 0);
+ }
+ }
+ Sprite::processDelta();
+}
+
+void Class489::sub434C80() {
+
+ bool soundFlag = false;
+
+ _y = _class489Item->point.y;
+
+ if (_class489Item->index1 != -1) {
+ int16 elX = _class489Item->index1 * 108 + _class489Item->point.x;
+ if (elX - 20 < _x && elX + 20 > _x) {
+ soundFlag = true;
+ _y = _class489Item->point.y + 10;
+ }
+ }
+
+ if (_class489Item->flag2 != -1) {
+ int16 elX = _class489Item->index1 * 108 + _class489Item->point.x;
+ if (elX - 20 < _x && elX + 20 > _x) {
+ soundFlag = true;
+ _y = _class489Item->point.y + 10;
+ }
+ }
+
+ if (_class489Item->varIndex2 != -1) {
+ int16 elX = _class489Item->varIndex2 * 108 + _class489Item->point.x;
+ if (elX - 20 < _x && elX + 20 > _x) {
+ soundFlag = true;
+ _y = _class489Item->point.y + 10;
+ }
+ }
+
+ if (_flag) {
+ if (!soundFlag) {
+ _flag = false;
+ }
+ } else if (soundFlag) {
+ _soundResource2.play(0x5440E474);
+ _flag = true;
+ }
+
+}
+
+void Class489::sub434D80() {
+ AnimatedSprite::updateDeltaXY();
+ if (_rect.y1 <= 150) {
+ _class525->sendMessage(0x483A, 0, this);
+ setFileHash1();
+ SetMessageHandler(&Sprite::handleMessage);
+ SetSpriteCallback(NULL);
+ _surface->setVisible(false);
+ }
+}
+
+void Class489::sub434DD0() {
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Class489::handleMessage);
+ setFileHash(0x10E3042B, 0, -1);
+}
+
+void Class489::sub434DF0() {
+ _remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
+ setFileHash(0x14A10137, 0, -1);
+ SetSpriteCallback(&Class489::spriteUpdate434B60);
+ SetMessageHandler(&Class489::handleMessage);
+ _soundResource2.play(0xEC008474);
+}
+
+void Class489::sub434E60() {
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Class489::handleMessage434B20);
+ setFileHash(0x80C32213, 0, -1);
+ SetAnimationCallback3(&Class489::sub434E90);
+}
+
+void Class489::sub434E90() {
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Class489::handleMessage4348E0);
+ setFileHash(0xD23B207F, 0, -1);
+}
+
+void Class489::sub434EC0() {
+ setFileHash(0x50A80517, 0, -1);
+ SetMessageHandler(&Class489::handleMessage434B20);
+ SetSpriteCallback(NULL);
+ SetAnimationCallback3(&Class489::sub434F40);
+ setGlobalVar(0x12A10DB3, 1);
+ _soundResource1.play(0xCC4A8456);
+ // TODO Sound1ChList_addSoundResource(0x05331081, 0xCE428854, true);
+ // TODO Sound1ChList_playLooping(0xCE428854);
+}
+
+void Class489::sub434F40() {
+ _parentScene->sendMessage(0x480F, 0, this);
+ setFileHash(0xD833207F, 0, -1);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Class489::handleMessage4348E0);
+}
+
+void Class489::sub434F80() {
+ setFileHash(0x50A94417, 0, -1);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Class489::handleMessage434B20);
+ SetAnimationCallback3(&Class489::sub434E90);
+ setGlobalVar(0x12A10DB3, 0);
+ _soundResource1.play(0xCC4A8456);
+ // TODO Sound1ChList_deleteSoundByHash(0xCE428854);
+}
+
+void Class489::sub434FF0() {
+ _remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
+ setFileHash(0x22CB4A33, 0, -1);
+ SetSpriteCallback(&Class489::spriteUpdate434B60);
+ SetMessageHandler(&Class489::handleMessage434B20);
+ SetAnimationCallback3(&Class489::sub434DF0);
+}
+
+void Class489::sub435040() {
+ setGlobalVar(0x04A105B3, 4);
+ setGlobalVar(0x04A10F33, 0);
+ SetSpriteCallback(&Class489::sub434D80);
+ SetMessageHandler(&Sprite::handleMessage);
+ setFileHash(0x708D4712, 0, -1);
+ _soundResource3.play();
+}
+
+Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _flag(false), _class427(NULL), _class489(NULL),
+ _class525(NULL), _class526(NULL), _class527(NULL), _class528(NULL),
+ _sprite1(NULL), _sprite2(NULL), _sprite3(NULL), _ssButton(NULL) {
+
+ SetMessageHandler(&Scene1401::handleMessage);
+ SetUpdateHandler(&Scene1401::update);
+ setRectList(0x004B6758);
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x08221FA5, 0, 0));
+ _palette = new Palette(_vm, 0x08221FA5);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x21FA108A, NULL));
+
+ // TODO _class427 = addSprite(new Class427(_vm, this, 0x980F3124, 0x12192892, 100, 0));
+ _class525 = addSprite(new Class525(_vm));
+
+ if (!getGlobalVar(0x01023818)) {
+ _class526 = addSprite(new Class526(_vm, _class525));
+ _class527 = addSprite(new Class527(_vm, _class525));
+ }
+
+ _sprite3 = addSprite(new StaticSprite(_vm, 0xA82BA811, 1100));
+ addSprite(new StaticSprite(_vm, 0x0A116C60, 1100));
+ _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0xB84B1100, 100, 0));
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x38EA100C, 1005));
+ _sprite2 = addSprite(new StaticSprite(_vm, 0x98D0223C, 1200));
+ _sprite2->getSurface()->setVisible(false);
+
+ if (which < 0) {
+ _klayman = new KmScene1401(_vm, this, 380, 447);
+ setMessageList(0x004B65C8);
+ _sprite1->getSurface()->setVisible(false);
+ } else if (which == 1) {
+ _klayman = new KmScene1401(_vm, this, 0, 447);
+ setMessageList(0x004B65D0);
+ _sprite1->getSurface()->setVisible(false);
+ } else if (which == 2) {
+ _klayman = new KmScene1401(_vm, this, 660, 447);
+ setMessageList(0x004B65D8);
+ _sprite1->getSurface()->setVisible(false);
+ } else {
+ _klayman = new KmScene1401(_vm, this, 290, 413);
+ setMessageList(0x004B65E8);
+ _sprite1->getSurface()->setVisible(false);
+ }
+ addSprite(_klayman);
+
+ if (getGlobalVar(0x04A105B3) == 2) {
+ _class489 = addSprite(new Class489(_vm, this, _klayman, _class525));
+ _vm->_collisionMan->addSprite(_class489);
+ if (getGlobalVar(0x04A10F33) == 6) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ _klayman->setX(_class489->getX() + 100);
+ _klayman->processDelta();
+ setMessageList(0x004B6670);
+ } else if (getGlobalVar(0x04A10F33) == 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ _klayman->setX(_class489->getX() - 100);
+ _klayman->processDelta();
+ setMessageList(0x004B6670);
+ }
+ _class489->getSurface()->getClipRect().x1 = _sprite3->getSurface()->getDrawRect().x;
+ _class489->getSurface()->getClipRect().y1 = _sprite2->getSurface()->getDrawRect().y;
+ _class489->getSurface()->getClipRect().x2 = 640;
+ _class489->getSurface()->getClipRect().y2 = 480;
+ }
+
+ _klayman->getSurface()->getClipRect().x1 = _sprite3->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+ if (which == 0 && _class489 && _class489->hasMessageHandler()) {
+ _class489->sendMessage(0x482B, 0, this);
+ }
+
+ _class528 = addSprite(new Class528(_vm, _klayman, which == 1));
+
+}
+
+void Scene1401::update() {
+ Scene::update();
+ if (_class489 && !_flag && _class489->getY() < 360) {
+ _sprite2->getSurface()->setVisible(true);
+ _flag = true;
+ } else {
+ _sprite2->getSurface()->setVisible(false);
+ }
+}
+
+uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02144CB1) {
+ _klayman->sendEntityMessage(0x1014, _class427, this);
+ } else if (param.asInteger() == 0x402064D8) {
+ _klayman->sendEntityMessage(0x1014, _ssButton, this);
+ } else if (param.asInteger() == 0x01C66840) {
+ if (_class528->hasMessageHandler() && _class528->sendMessage(0x2001, 0, this) != 0) {
+ setMessageList(0x004B6690);
+ } else {
+ setMessageList(0x004B66B0);
+ }
+ }
+ break;
+ case 0x1019:
+ if (param.asInteger() != 0) {
+ _parentModule->sendMessage(0x1009, 2, this);
+ } else {
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+ break;
+ case 0x480B:
+ if (sender == _class427) {
+ _class525->sendMessage(0x2000, 0, this);
+ if (!getGlobalVar(0x01023818)) {
+ _class526->sendMessage(0x4839, 0, this);
+ _class527->sendMessage(0x4839, 0, this);
+ setGlobalVar(0x01023818, 1);
+ }
+ if (_class489 && _class489->getX() > 404 && _class489->getX() < 504) {
+ _class489 ->sendMessage(0x4839, 0, this);
+ }
+ } else if (sender == _ssButton) {
+ _ssButton->sendMessage(0x4808, 0, this);
+ }
+ break;
+ case 0x4826:
+ if (sender == _class489) {
+ if (_class489->sendMessage(0x480C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setMessageList2(0x004B6658);
+ } else {
+ setMessageList2(0x004B65F0);
+ }
+ }
+ break;
+ case 0x482A:
+ _sprite1->getSurface()->setVisible(true);
+ if (_class489) {
+ _class489->sendMessage(0x482B, 0, this);
+ }
+ break;
+ case 0x482B:
+ _sprite1->getSurface()->setVisible(false);
+ if (_class489) {
+ _class489->sendMessage(0x482A, 0, this);
+ }
+ break;
+ }
+ return 0;
+}
+
+// Scene1402
+
+Class454::Class454(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority)
+ : StaticSprite(vm, fileHash, surfacePriority) {
+
+ SetFilterY(&Sprite::defFilterY);
+ SetUpdateHandler(&StaticSprite::update);
+
+}
+
+Class482::Class482(NeverhoodEngine *vm, Scene *parentScene, int which)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _soundResource1(vm),
+ _soundResource2(vm) {
+
+ // TODO createSurface3(900, dword_4B6768);
+ createSurface(900, 640, 480); //TODO: Remeove once the line above is done
+
+ SetFilterY(&Sprite::defFilterY);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class482::handleMessage);
+ _x = 279;
+ _y = 270;
+ if (which == 2) {
+ setFileHash(0x20060259, 0, -1);
+ _soundResource1.play(0x419014AC);
+ _soundResource2.load(0x61901C29);
+ } else if (which == 1) {
+ setFileHash(0x210A0213, 0, -1);
+ _soundResource1.play(0x41809C6C);
+ } else {
+ setFileHash(0x20060259, 0, -1);
+ _soundResource2.load(0x61901C29);
+ _newHashListIndex = -2;
+ }
+}
+
+uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2002:
+ _soundResource2.play();
+ setFileHash(0x20060259, -1, -1);
+ _playBackwards = true;
+ SetAnimationCallback3(&Class482::sub428530);
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class482::sub428500() {
+ _parentScene->sendMessage(0x2000, 0, this);
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+void Class482::sub428530() {
+ _parentScene->sendMessage(0x2001, 0, this);
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+void Class482::sub428560() {
+ _parentScene->sendMessage(0x2003, 0, this);
+ setFileHash1();
+}
+
+Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _flag(false), _class482(NULL), _class489(NULL) {
+
+ SetMessageHandler(&Scene1402::handleMessage);
+
+ _background = addBackground(new Background(_vm, 0x231482F0, 0, 0));
+ _background->getSurface()->getDrawRect().y = -10;
+ // TODO g_screen->field_26 = 0;
+ _palette = new Palette(_vm, 0x231482F0);
+ _palette->addPalette(0x91D3A391, 0, 64, 0);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x482F4239, NULL));
+
+ _class454_1 = addSprite(new Class454(_vm, 0x15402D64, 1100));
+ _class454_2 = addSprite(new Class454(_vm, 0x10A02120, 1100));
+ _class454_3 = addSprite(new Class454(_vm, 0x60882BE0, 1100));
+
+ if (getGlobalVar(0x70A1189C))
+ setRectList(0x004B0C48);
+ else
+ setRectList(0x004B0C98);
+
+ if (which < 0) {
+ _klayman = new KmScene1402(_vm, this, 377, 391);
+ setMessageList(0x004B0B48);
+ if (!getGlobalVar(0x70A1189C)) {
+ _class482 = addSprite(new Class482(_vm, this, 0));
+ }
+ } else if (which == 1) {
+ _klayman = new KmScene1402(_vm, this, 42, 391);
+ setMessageList(0x004B0B50);
+ } else if (which == 2) {
+ _klayman = new KmScene1402(_vm, this, 377, 391);
+ setMessageList(0x004B0B60);
+ _klayman->setDoDeltaX(1);
+ if (getGlobalVar(0x70A1189C)) {
+ _class482 = addSprite(new Class482(_vm, this, 1));
+ clearRectList();
+ _mouseCursor->getSurface()->setVisible(false);
+ sub428220();
+ } else {
+ _class482 = addSprite(new Class482(_vm, this, 0));
+ }
+ } else {
+ _klayman = new KmScene1402(_vm, this, 513, 391);
+ setMessageList(0x004B0B58);
+ if (!getGlobalVar(0x70A1189C)) {
+ _class482 = addSprite(new Class482(_vm, this, 2));
+ sub428220();
+ }
+ }
+ addSprite(_klayman);
+
+ if (_class482) {
+ _class482->getSurface()->getClipRect().x1 = 0;
+ _class482->getSurface()->getClipRect().y1 = 0;
+ _class482->getSurface()->getClipRect().x2 = 640;
+ _class482->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ }
+
+ if (getGlobalVar(0x4A105B3) == 1) {
+ _class489 = addSprite(new Class489(_vm, this, _klayman, 0));
+ _vm->_collisionMan->addSprite(_class489);
+ if (getGlobalVar(0x4A10F33) == 4) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ _klayman->setX(_class489->getX() + 100);
+ _klayman->processDelta();
+ setMessageList(0x004B0BD0);
+ } else if (getGlobalVar(0x4A10F33) == 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ _klayman->setX(_class489->getX() - 100);
+ _klayman->processDelta();
+ setMessageList(0x004B0BD0);
+ }
+ _class489->getSurface()->getClipRect().x1 = _class454_1->getSurface()->getDrawRect().x;
+ _class489->getSurface()->getClipRect().y1 = 0;
+ _class489->getSurface()->getClipRect().x2 = _class454_2->getSurface()->getDrawRect().x;
+ _class489->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ }
+
+ _klayman->getSurface()->getClipRect().x1 = _class454_1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _class454_2->getSurface()->getDrawRect().x + _class454_2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+
+}
+
+void Scene1402::update() {
+ if (_flag) {
+ _background->getSurface()->getDrawRect().y = _vm->_rnd->getRandomNumber(10) - 10;
+ // TODO g_screen->field_26 = -10 - _background->getSurface()->getDrawRect().y;
+ } else {
+ _background->getSurface()->getDrawRect().y = -10;
+ // TODO g_screen->field_26 = 0;
+ SetUpdateHandler(&Scene::update);
+ }
+ Scene::update();
+ if (_class482) {
+ _class482->getSurface()->getClipRect().x1 = 0;
+ _class482->getSurface()->getClipRect().y1 = 0;
+ _class482->getSurface()->getClipRect().x2 = 640;
+ _class482->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ }
+ _klayman->getSurface()->getClipRect().x1 = _class454_1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _class454_2->getSurface()->getDrawRect().x + _class454_2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+}
+
+uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x00F43389) {
+ if (getGlobalVar(0x70A1189C)) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else {
+ clearRectList();
+ _klayman->getSurface()->setVisible(false);
+ _mouseCursor->getSurface()->setVisible(false);
+ _class482->sendMessage(0x2002, 0, this);
+ sub428220();
+ }
+ }
+ break;
+ case 0x1019:
+ if (param.asInteger()) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else {
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+ break;
+ case 0x2000:
+ sub428230();
+ _mouseCursor->getSurface()->setVisible(true);
+ setRectList(0x004B0C48);
+ break;
+ case 0x2001:
+ sub428230();
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ case 0x2003:
+ sub428230();
+ break;
+ case 0x4826:
+ if (sender == _class489) {
+ if (_class489->sendMessage(0x408C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setMessageList2(0x004B0BB8);
+ } else {
+ setMessageList2(0x004B0B68);
+ }
+ }
+ }
+ return 0;
+}
+
+void Scene1402::sub428220() {
+ _flag = true;
+ SetUpdateHandler(&Scene1402::update);
+}
+
+void Scene1402::sub428230() {
+ _flag = false;
+}
+
+// Scene1407
+
+static const int16 kScene1407MouseFloorY[] = {
+ 106, 150, 191, 230, 267, 308, 350, 395
+};
+
+static const struct {
+ int16 x;
+ int16 floorIndex;
+ int16 sectionIndex;
+ int16 nextHoleIndex;
+} kScene1407MouseHoles[] = {
+ {125, 0, 0, 7},
+ {452, 7, 21, 0},
+ {337, 4, 11, 4},
+ {286, 6, 17, 6},
+ {348, 6, 17, 39},
+ {536, 6, 18, 42},
+ {111, 1, 3, 18},
+ {203, 1, 3, 38},
+ {270, 1, 3, 9},
+ {197, 5, 14, 3},
+ {252, 5, 14, 35},
+ {297, 5, 14, 7},
+ {359, 5, 14, 8},
+ {422, 4, 12, 26},
+ {467, 4, 12, 2},
+ {539, 4, 12, 40},
+ {111, 5, 13, 17},
+ {211, 0, 1, 20},
+ {258, 0, 1, 11},
+ {322, 0, 1, 16},
+ { 99, 6, 16, 31},
+ {142, 6, 16, 27},
+ {194, 6, 16, 12},
+ {205, 2, 6, 45},
+ {264, 2, 6, 10},
+ { 98, 4, 10, 2},
+ {152, 4, 10, 37},
+ {199, 4, 10, 13},
+ {258, 4, 10, 16},
+ {100, 7, 19, 43},
+ {168, 7, 19, 23},
+ {123, 3, 8, 14},
+ {181, 3, 8, 39},
+ {230, 3, 8, 28},
+ {292, 3, 8, 22},
+ {358, 3, 8, 36},
+ {505, 3, 9, 44},
+ {400, 2, 7, 34},
+ {454, 2, 7, 32},
+ {532, 2, 7, 46},
+ {484, 5, 15, 25},
+ {529, 5, 15, 30},
+ {251, 7, 20, 48},
+ {303, 7, 20, 21},
+ {360, 7, 20, 33},
+ {503, 0, 2, 5},
+ {459, 1, 4, 19},
+ {530, 1, 4, 42},
+ {111, 2, 5, 47},
+ {442, 6, 18, 1}
+};
+
+static const struct {
+ int16 x1, x2;
+ int16 goodHoleIndex;
+} kScene1407MouseSections[] = {
+ {100, 149, 0},
+ {182, 351, 17},
+ {430, 524, 45},
+ { 89, 293, 7},
+ {407, 555, 47},
+ { 89, 132, 48},
+ {178, 303, 23},
+ {367, 551, 38},
+ {105, 398, 31},
+ {480, 537, 36},
+ { 84, 275, 27},
+ {318, 359, 2},
+ {402, 560, 15},
+ { 91, 132, 16},
+ {179, 400, 10},
+ {461, 552, 41},
+ { 86, 218, 21},
+ {267, 376, 4},
+ {420, 560, 49},
+ { 77, 188, 30},
+ {237, 394, 44},
+ {438, 515, 5}
+};
+
+AsScene1407Mouse::AsScene1407Mouse(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _currSectionIndex(0) {
+
+ // TODO createSurface3(100, dword_4B05B0);
+ createSurface(100, 640, 480); //TODO: Remeove once the line above is done
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ _x = 108;
+ _y = 106;
+ stIdleLookAtGoodHole();
+}
+
+void AsScene1407Mouse::suWalkTo() {
+ int16 xdelta = _walkDestX - _x;
+ if (xdelta > _deltaX)
+ xdelta = _deltaX;
+ else if (xdelta < -_deltaX)
+ xdelta = -_deltaX;
+ _deltaX = 0;
+ if (_walkDestX == _x) {
+ sendMessage(0x1019, 0, this);
+ } else {
+ _x += xdelta;
+ processDelta();
+ }
+}
+
+void AsScene1407Mouse::upGoThroughHole() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ SetUpdateHandler(&AnimatedSprite::update);
+ removeCallbacks();
+ }
+ AnimatedSprite::update();
+}
+
+uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ {
+ int16 mouseX = param.asPoint().x;
+ int16 mouseY = param.asPoint().y;
+ int holeIndex;
+ for (holeIndex = 0; holeIndex < 50; holeIndex++) {
+ int16 holeX = kScene1407MouseHoles[holeIndex].x;
+ int16 holeY = kScene1407MouseFloorY[kScene1407MouseHoles[holeIndex].floorIndex];
+ if (mouseX >= holeX - 14 && mouseX <= holeX + 14 && mouseY >= holeY - 36 && mouseY <= holeY)
+ break;
+ }
+ if (holeIndex < 50 && kScene1407MouseHoles[holeIndex].sectionIndex == _currSectionIndex) {
+ _nextHoleIndex = kScene1407MouseHoles[holeIndex].nextHoleIndex;
+ _walkDestX = kScene1407MouseHoles[holeIndex].x;
+ stWalkToHole();
+ } else {
+ if (mouseX < kScene1407MouseSections[_currSectionIndex].x1) {
+ _walkDestX = kScene1407MouseSections[_currSectionIndex].x1;
+ } else if (mouseX > kScene1407MouseSections[_currSectionIndex].x2) {
+ _walkDestX = kScene1407MouseSections[_currSectionIndex].x2;
+ } else {
+ _walkDestX = mouseX;
+ }
+ stWalkToDest();
+ }
+ }
+ break;
+ case 0x1019:
+ removeCallbacks();
+ break;
+ case 0x2001:
+ {
+ // Reset the position
+ // Find the nearest hole and go through it, and exit at the first hole
+ int16 distance = 640;
+ int matchIndex = 50;
+ for (int index = 0; index < 50; index++) {
+ if (kScene1407MouseHoles[index].sectionIndex == _currSectionIndex) {
+ if (ABS(kScene1407MouseHoles[index].x - _x) < distance) {
+ matchIndex = index;
+ distance = ABS(kScene1407MouseHoles[index].x - _x);
+ }
+ }
+ }
+ if (matchIndex < 50) {
+ _nextHoleIndex = 0;
+ _walkDestX = kScene1407MouseHoles[matchIndex].x;
+ stWalkToHole();
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1407Mouse::stIdleLookAtGoodHole() {
+ setDoDeltaX(kScene1407MouseHoles[kScene1407MouseSections[_currSectionIndex].goodHoleIndex].x < _x ? 1 : 0);
+ setFileHash(0x72215194, 0, -1);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&AsScene1407Mouse::handleMessage);
+}
+
+void AsScene1407Mouse::stWalkToDest() {
+ if (_walkDestX != _x) {
+ setDoDeltaX(_walkDestX < _x ? 1 : 0);
+ setFileHash(0x22291510, 0, -1);
+ SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
+ SetMessageHandler(&AsScene1407Mouse::handleMessage);
+ SetAnimationCallback3(&AsScene1407Mouse::stIdleLookAtGoodHole);
+ }
+}
+
+void AsScene1407Mouse::stWalkToHole() {
+ setDoDeltaX(_walkDestX < _x ? 1 : 0);
+ setFileHash(0x22291510, 0, -1);
+ SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
+ SetMessageHandler(&AsScene1407Mouse::handleMessage);
+ SetAnimationCallback3(&AsScene1407Mouse::stGoThroughHole);
+}
+
+void AsScene1407Mouse::stGoThroughHole() {
+ setFileHash(0x72215194, 0, -1);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(NULL);
+ SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
+ SetAnimationCallback3(&AsScene1407Mouse::stArriveAtHole);
+ _surface->setVisible(false);
+ _countdown = 12;
+}
+
+void AsScene1407Mouse::stArriveAtHole() {
+ _currSectionIndex = kScene1407MouseHoles[_nextHoleIndex].sectionIndex;
+ _x = kScene1407MouseHoles[_nextHoleIndex].x;
+ _y = kScene1407MouseFloorY[kScene1407MouseHoles[_nextHoleIndex].floorIndex];
+ if (_nextHoleIndex == 1) {
+ _parentScene->sendMessage(0x2000, 0, this);
+ _walkDestX = 512;
+ stWalkToDest();
+ _surface->setVisible(true);
+ } else {
+ _walkDestX = _x + 14;
+ stWalkToDest();
+ _surface->setVisible(true);
+ }
+}
+
+Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm), _puzzleSolvedCountdown(0),
+ _resetButtonCountdown(0) {
+
+ _surfaceFlag = true;
+
+ SetMessageHandler(&Scene1407::handleMessage);
+ SetUpdateHandler(&Scene1407::update);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x00442225, 0, 0));
+ _palette = new Palette(_vm, 0x00442225);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x4222100C, 20, 620));
+
+ _asMouse = addSprite(new AsScene1407Mouse(_vm, this));
+ _ssResetButton = addSprite(new StaticSprite(_vm, 0x12006600, 100));
+ _ssResetButton->getSurface()->setVisible(false);
+
+}
+
+void Scene1407::update() {
+ Scene::update();
+ if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0)) {
+ _parentModule->sendMessage(0x1009, 1, this);
+ } else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0)) {
+ _ssResetButton->getSurface()->setVisible(false);
+ }
+}
+
+uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (_puzzleSolvedCountdown == 0) {
+ // TODO: Debug/Cheat stuff
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ // Exit scene
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else if (param.asPoint().x >= 75 && param.asPoint().x <= 104 &&
+ param.asPoint().y >= 62 && param.asPoint().y <= 90) {
+ // The reset button was clicked
+ _asMouse->sendMessage(0x2001, 0, this);
+ _ssResetButton->getSurface()->setVisible(true);
+ _soundResource.play(0x44045000);
+ _resetButtonCountdown = 12;
+ } else {
+ // Handle the mouse
+ _asMouse->sendMessage(messageNum, param, this);
+ }
+ }
+ break;
+ case 0x000D:
+ // TODO: Debug/Cheat stuff
+ break;
+ case 0x2000:
+ // The mouse got the cheese (nomnom)
+ setGlobalVar(0x70A1189C, 1);
+ _soundResource.play(0x68E25540);
+ _mouseCursor->getSurface()->setVisible(false);
+ _puzzleSolvedCountdown = 72;
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
new file mode 100644
index 0000000..433dc41
--- /dev/null
+++ b/engines/neverhood/module1400.h
@@ -0,0 +1,242 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1400_H
+#define NEVERHOOD_MODULE1400_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+class Module1400 : public Module {
+public:
+ Module1400(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1400();
+protected:
+ void createScene1401(int which);
+ void createScene1402(int which);
+ void createScene1403(int which);
+ void createScene1404(int which);
+ void createScene1405(int which);
+ void createScene1406(int which);
+ void createScene1407(int which);
+ void updateScene1401();
+ void updateScene1402();
+ void updateScene1403();
+ void updateScene1404();
+ void updateScene1405();
+ void updateScene1406();
+ void updateScene1407();
+};
+
+// Scene1401
+
+class Class525 : public AnimatedSprite {
+public:
+ Class525(NeverhoodEngine *vm);
+ virtual ~Class525();
+protected:
+ int _countdown1;
+ int _countdown2;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ void update4662A0();
+ void update466300();
+ uint32 handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage4663C0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub466420();
+ void sub466460();
+ void sub4664B0();
+};
+
+class Class526 : public AnimatedSprite {
+public:
+ Class526(NeverhoodEngine *vm, Sprite *class525);
+protected:
+ Sprite *_class525;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate466720();
+ void sub466770();
+};
+
+class Class527 : public AnimatedSprite {
+public:
+ Class527(NeverhoodEngine *vm, Sprite *class526);
+protected:
+ Sprite *_class526;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate466920();
+ void sub466970();
+};
+
+class Class528 : public AnimatedSprite {
+public:
+ Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag);
+protected:
+ Sprite *_klayman;
+ SoundResource _soundResource;
+ int _countdown;
+ bool _flag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub466BF0();
+ void sub466C50();
+ void sub466CB0();
+};
+
+struct Class489Item {
+ NPoint point;
+ int8 varIndex1;
+ int8 varIndex2;
+ int8 index1;
+ int8 flag2;
+ int8 flag4;
+ int8 flag;
+};
+
+class Class489 : public AnimatedSprite {
+public:
+ Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *class525);
+ virtual ~Class489();
+protected:
+ Scene *_parentScene;
+ Sprite *_klayman;
+ Sprite *_class525;
+ const Class489Item *_class489Item;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ int16 _remX;
+ bool _flag;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage4348E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage434B20(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate434B60();
+ void sub434C80();
+ void sub434D80();
+ void sub434DD0();
+ void sub434DF0();
+ void sub434E60();
+ void sub434E90();
+ void sub434EC0();
+ void sub434F40();
+ void sub434F80();
+ void sub434FF0();
+ void sub435040();
+};
+
+class Scene1401 : public Scene {
+public:
+ Scene1401(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ bool _flag;
+ Sprite *_class427;
+ Sprite *_class489;
+ Sprite *_class525;
+ Sprite *_class526;
+ Sprite *_class527;
+ Sprite *_class528;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_ssButton;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+// Scene1402
+
+class Class454 : public StaticSprite {
+public:
+ Class454(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority);
+};
+
+class Class482 : public AnimatedSprite {
+public:
+ Class482(NeverhoodEngine *vm, Scene *parentScene, int which);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub428500();
+ void sub428530();
+ void sub428560();
+};
+
+class Scene1402 : public Scene {
+public:
+ Scene1402(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_class454_1;
+ Sprite *_class454_2;
+ Sprite *_class454_3;
+ Sprite *_class482;
+ Sprite *_class489;
+ bool _flag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub428220();
+ void sub428230();
+};
+
+// Scene1407
+
+class AsScene1407Mouse : public AnimatedSprite {
+public:
+ AsScene1407Mouse(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ int16 _walkDestX;
+ int16 _currSectionIndex;
+ int16 _nextHoleIndex;
+ int _countdown;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suWalkTo();
+ void upGoThroughHole();
+ void stIdleLookAtGoodHole();
+ void stWalkToDest();
+ void stWalkToHole();
+ void stGoThroughHole();
+ void stArriveAtHole();
+};
+
+class Scene1407 : public Scene {
+public:
+ Scene1407(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource;
+ Sprite *_asMouse;
+ Sprite *_ssResetButton;
+ int _puzzleSolvedCountdown;
+ int _resetButtonCountdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1400_H */
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
new file mode 100644
index 0000000..3289173
--- /dev/null
+++ b/engines/neverhood/module1700.cpp
@@ -0,0 +1,359 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1700.h"
+#include "neverhood/navigationscene.h"
+
+namespace Neverhood {
+
+Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule), _soundResource(vm) {
+
+ debug("Create Module1700(%d)", which);
+
+ // TODO Music18hList_add(0x04212331);
+ // TODO Sound1ChList_addSoundResources(0x04212331, dword_4AE930, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 50, 600, 5, 150);
+ // TODO Sound1ChList_sub_407C70(0x04212331, 0x41861371, 0x43A2507F, 0);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene1701(-1);
+ break;
+ case 1:
+ createScene1702(-1);
+ break;
+ case 2:
+ createScene1703(-1);
+ break;
+ case 3:
+ createScene1704(-1);
+ break;
+ default:
+ createScene1705(-1);
+ }
+ } else if (which == 0) {
+ createScene1701(-1);
+ } else if (which == 1) {
+ createScene1705(1);
+ } else {
+ createScene1705(3);
+ }
+
+}
+
+Module1700::~Module1700() {
+ // TODO Sound1ChList_sub_407A50(0x04212331);
+}
+
+void Module1700::createScene1701(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 0;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x3028A005);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1700::updateScene1701);
+}
+
+void Module1700::createScene1702(int which) {
+ _vm->gameState().sceneNum = 1;
+ _childObject = new NavigationScene(_vm, this, 0x004AE8B8, which, NULL);
+ SetUpdateHandler(&Module1700::updateScene1702);
+}
+
+void Module1700::createScene1703(int which) {
+ _vm->gameState().sceneNum = 2;
+ _childObject = new NavigationScene(_vm, this, 0x004AE8E8, which, NULL);
+ SetUpdateHandler(&Module1700::updateScene1703);
+}
+
+void Module1700::createScene1704(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 3;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x01190041);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1700::updateScene1701);
+}
+
+void Module1700::createScene1705(int which) {
+ _vm->gameState().sceneNum = 4;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x31114225, 0, 2, 1);
+ _childObject = new Scene1705(_vm, this, which);
+ SetUpdateHandler(&Module1700::updateScene1705);
+}
+
+void Module1700::updateScene1701() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_vm->gameState().sceneNum == 3) {
+ createScene1705(0);
+ _childObject->handleUpdate();
+ } else {
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 0, 0, 0);
+ createScene1702(0);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1700::updateScene1702() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1703(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 1) {
+ createScene1702(1);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1700::updateScene1703() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1704(-1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 1) {
+ createScene1702(1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ if (!_soundResource.isPlaying()) {
+ // TODO _soundResource.setVolume(60);
+ _soundResource.play(0x58B45E58);
+ }
+ createScene1703(2);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1700::updateScene1705() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+}
+
+// Scene1705
+
+static const uint32 kScene1705FileHashes[] = {
+ 0x910EA801,
+ 0x920EA801,
+ 0x940EA801,
+ 0x980EA801,
+ 0x800EA801,
+ 0xB00EA801,
+ 0xD00EA801,
+ 0x100EA801,
+ 0x900EA800,
+ 0xD10EA801,
+ 0x110EA801,
+ 0x910EA800
+};
+
+Class602::Class602(NeverhoodEngine *vm, uint32 fileHash, int index)
+ : StaticSprite(vm, fileHash, 100) {
+
+ _x = _spriteResource.getPosition().x + index * 30;
+ _y = _spriteResource.getPosition().y + 160;
+ StaticSprite::update();
+}
+
+Class606::Class606(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y, uint32 fileHash)
+ : StaticSprite(vm, fileHash, surfacePriority, x - 24, y - 4), _parentScene(parentScene), _index(index) {
+
+ if (!getSubVar(0x02038314, _index) && !getSubVar(0x02720344, _index)) {
+ SetMessageHandler(&Class606::handleMessage);
+ } else {
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ }
+ _deltaRect = _drawRect;
+ _deltaRect.x -= 4;
+ _deltaRect.y -= 8;
+ _deltaRect.width += 8;
+ _deltaRect.height += 16;
+ Sprite::processDelta();
+}
+
+uint32 Class606::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4806:
+ setSubVar(0x02038314, _index, 1);
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ break;
+ }
+ return messageResult;
+}
+
+Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _paletteArea(1) {
+
+ Palette2 *palette2;
+ Sprite *tempSprite;
+
+ setGlobalVar(0xE7498218, 1);
+ // TODO _vm->initVarsScene1705();
+
+ SetMessageHandler(&Scene1705::handleMessage);
+ SetUpdateHandler(&Scene1705::update);
+
+ _vm->_collisionMan->setHitRects(0x004B69D8);
+
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x03118226, 0, 0));
+
+ palette2 = new Palette2(_vm, 0x03118226);
+ palette2->addPalette(0x91D3A391, 0, 64, 0);
+ palette2->copyBasePalette(0, 256, 0);
+ palette2->usePalette();
+ _palette = palette2;
+ addEntity(_palette);
+
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x18222039, NULL));
+
+ addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0));
+ addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1));
+ addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2));
+
+ _sprite = addSprite(new StaticSprite(_vm, 0x31313A22, 1100));
+
+ _class606 = addSprite(new Class606(_vm, this, 15, 1100, 238, 439, 0x02363852));
+ _vm->_collisionMan->addSprite(_class606);
+
+ which = 4;
+
+ if (which < 0) {
+ _klayman = new KmScene1705(_vm, this, 231, 434);
+ setMessageList(0x004B69E8);
+ sendMessage(0x2000, 0, this);
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ } else if (which == 1) {
+ _klayman = new KmScene1705(_vm, this, 431, 434);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004B6A08);
+ sendMessage(0x2000, 1, this);
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ } else if (which == 2) {
+ _klayman = new KmScene1705(_vm, this, 431, 434);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004B6AA0);
+ sendMessage(0x2000, 1, this);
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ } else if (which == 3) {
+ _klayman = new KmScene1705(_vm, this, 431, 434);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004B6A18);
+ sendMessage(0x2000, 1, this);
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ } else {
+ _klayman = new KmScene1705(_vm, this, 231, 74);
+ _klayman->sendMessage(0x2000, 0, this);
+ setMessageList(0x004B69F0);
+ sendMessage(0x2000, 0, this);
+ tempSprite = addSprite(new StaticSprite(_vm, 0x30303822, 1100));
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
+ _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ }
+
+ addSprite(_klayman);
+
+}
+
+void Scene1705::update() {
+ Scene::update();
+ if (_klayman->getX() < 224 && _paletteArea != 0) {
+ ((Palette2*)_palette)->addPalette(0xF2210C15, 0, 64, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ _paletteArea = 0;
+ } else if (_klayman->getX() >= 224 && _paletteArea == 0) {
+ ((Palette2*)_palette)->addPalette(0x91D3A391, 0, 64, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ _paletteArea = 1;
+ }
+}
+
+uint32 Scene1705::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ if (param.asInteger()) {
+ setRectList(0x004B6B40);
+ _klayman->setKlaymanTable3();
+ } else {
+ setRectList(0x004B6B30);
+ _klayman->setKlaymanTable1();
+ }
+ break;
+ case 0x4826:
+ if (sender == _class606 && _klayman->getX() <= 318) {
+ _klayman->sendEntityMessage(0x1014, sender, this);
+ setMessageList(0x004B6AC0);
+ }
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1700.h b/engines/neverhood/module1700.h
new file mode 100644
index 0000000..0fefa72
--- /dev/null
+++ b/engines/neverhood/module1700.h
@@ -0,0 +1,80 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1700_H
+#define NEVERHOOD_MODULE1700_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/smackerscene.h"
+
+namespace Neverhood {
+
+class Module1700 : public Module {
+public:
+ Module1700(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1700();
+protected:
+ SoundResource _soundResource;
+ void update();
+ void createScene1701(int which);
+ void createScene1702(int which);
+ void createScene1703(int which);
+ void createScene1704(int which);
+ void createScene1705(int which);
+ void updateScene1701();
+ void updateScene1702();
+ void updateScene1703();
+ void updateScene1705();
+};
+
+// Scene1705
+
+class Class602 : public StaticSprite {
+public:
+ Class602(NeverhoodEngine *vm, uint32 fileHash, int index);
+};
+
+class Class606 : public StaticSprite {
+public:
+ Class606(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y, uint32 fileHash);
+protected:
+ Scene *_parentScene;
+ int _index;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1705 : public Scene {
+public:
+ Scene1705(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite;
+ Sprite *_class606;
+ int _paletteArea;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1700_H */
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
new file mode 100644
index 0000000..2a4d89c
--- /dev/null
+++ b/engines/neverhood/module1800.cpp
@@ -0,0 +1,300 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1800.h"
+#include "neverhood/navigationscene.h"
+#include "neverhood/smackerscene.h"
+
+#include "neverhood/diskplayerscene.h"
+
+namespace Neverhood {
+
+Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ debug("Create Module1800(%d)", which);
+
+ // TODO Sound1ChList_addSoundResources(0x04A14718, dword_4AFE70);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 1, 50, 600, 10, 150);
+ // TODO Sound1ChList_sub_407C70(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene1801(-1);
+ break;
+ case 1:
+ createScene1802(-1);
+ break;
+ case 2:
+ createScene1803(-1);
+ break;
+ default:
+ case 3:
+ createScene1804(-1);
+ break;
+ case 4:
+ createScene1805(-1);
+ break;
+ case 5:
+ createScene1806(-1);
+ break;
+ case 6:
+ createScene1807(-1);
+ break;
+ case 7:
+ createScene1808(-1);
+ break;
+ case 8:
+ createScene1809(-1);
+ break;
+ }
+ } else if (which == 2) {
+ createScene1806(0);
+ } else if (which == 3) {
+ createScene1801(0);
+ } else {
+ createScene1804(1);
+ }
+
+}
+
+Module1800::~Module1800() {
+ // TODO Sound1ChList_sub_407A50(0x04A14718);
+}
+
+void Module1800::createScene1801(int which) {
+ static const byte kNavigationTypes[] = {1, 0, 2, 0};
+ _vm->gameState().sceneNum = 0;
+#if 0
+ _childObject = new NavigationScene(_vm, this, 0x004AFD38, which, kNavigationTypes);
+#endif
+ _childObject = new DiskplayerScene(_vm, this, 3);
+ SetUpdateHandler(&Module1800::updateScene1801);
+}
+
+void Module1800::createScene1802(int which) {
+ static const byte kNavigationTypes[] = {5};
+ _vm->gameState().sceneNum = 1;
+ _childObject = new NavigationScene(_vm, this, 0x004AFD98, which, kNavigationTypes);
+ SetUpdateHandler(&Module1800::updateScene1802);
+}
+
+void Module1800::createScene1803(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 2;
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x006C0085);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1800::updateScene1803);
+}
+
+void Module1800::createScene1804(int which) {
+ _vm->gameState().sceneNum = 3;
+ _childObject = new NavigationScene(_vm, this, 0x004AFDB0, which, NULL);
+ SetUpdateHandler(&Module1800::updateScene1804);
+}
+
+void Module1800::createScene1804b(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 3;
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x0A840C01);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1800::updateScene1803);
+}
+
+void Module1800::createScene1805(int which) {
+ _vm->gameState().sceneNum = 4;
+ _childObject = new NavigationScene(_vm, this, 0x004AFDE0, which, NULL);
+ SetUpdateHandler(&Module1800::updateScene1805);
+}
+
+void Module1800::createScene1806(int which) {
+ _vm->gameState().sceneNum = 5;
+ _childObject = new NavigationScene(_vm, this, 0x004AFE40, which, NULL);
+ SetUpdateHandler(&Module1800::updateScene1806);
+}
+
+void Module1800::createScene1807(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 6;
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x08D84010);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1800::updateScene1803);
+ // TODO Sound1ChList_sub_407A50(0x04A14718);
+}
+
+void Module1800::createScene1808(int which) {
+ SmackerScene *smackerScene;
+ _vm->gameState().sceneNum = 7;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 0, 0, 0, 0, 0);
+ smackerScene = new SmackerScene(_vm, this, true, true, false);
+ smackerScene->setFileHash(0x0168B121);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+ SetUpdateHandler(&Module1800::updateScene1803);
+}
+
+void Module1800::createScene1809(int which) {
+#if 0 // TODO
+ _vm->gameState().sceneNum = 8;
+ _childObject = new CreditsScene(_vm, this, 0);
+ SetUpdateHandler(&Module1800::updateScene1809);
+#endif
+}
+
+void Module1800::updateScene1801() {
+ _childObject->handleUpdate();
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (navigationScene->soundFlag1 && navigationScene->index == 2) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
+#endif
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene1805(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene1802(-1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ createScene1804(0);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1800::updateScene1802() {
+ _childObject->handleUpdate();
+ if (_done) {
+ int areaType = ((NavigationScene*)_childObject)->getNavigationAreaType();
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (areaType == 3) {
+ createScene1808(-1);
+ } else {
+ createScene1803(-1);
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1800::updateScene1803() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 2) {
+ createScene1801(2);
+ _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else if (_field20 == 6) {
+ createScene1809(-1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 7) {
+ _parentModule->sendMessage(0x1009, 3, this);
+ }
+ }
+}
+
+void Module1800::updateScene1804() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1804b(-1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 1) {
+ createScene1801(1);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1800::updateScene1805() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1807(-1);
+ _childObject->handleUpdate();
+ } else if (_field20 == 1) {
+ createScene1806(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene1801(3);
+ _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ createScene1805(3);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module1800::updateScene1806() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ _parentModule->sendMessage(0x1009, 2, this);
+ } else if (_field20 == 1) {
+ createScene1805(3);
+ _childObject->handleUpdate();
+ }
+ }
+ if (_field24 >= 0) {
+ if (_field24 == 1) {
+ // TODO _resourceTable.setResourceList(ex_sub_42EDA0(0), true);
+ }
+ _field24 = -1;
+ }
+}
+
+void Module1800::updateScene1809() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ _parentModule->sendMessage(0x1009, 1, this);
+ // TODO GameState stuff
+ }
+}
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1800.h b/engines/neverhood/module1800.h
new file mode 100644
index 0000000..13d4790
--- /dev/null
+++ b/engines/neverhood/module1800.h
@@ -0,0 +1,63 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1800_H
+#define NEVERHOOD_MODULE1800_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module1800
+
+class Module1800 : public Module {
+public:
+ Module1800(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1800();
+protected:
+ // TODO ResourceTable _resourceTable;
+ void createScene1801(int which);
+ void createScene1802(int which);
+ void createScene1803(int which);
+ void createScene1804(int which);
+ void createScene1804b(int which);
+ void createScene1805(int which);
+ void createScene1806(int which);
+ void createScene1807(int which);
+ void createScene1808(int which);
+ void createScene1809(int which);
+ void updateScene1801();
+ void updateScene1802();
+ void updateScene1803();
+ void updateScene1804();
+ void updateScene1805();
+ void updateScene1806();
+ void updateScene1807();
+ void updateScene1808();
+ void updateScene1809();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1800_H */
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index f6be668..7bc1551 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -25,7 +25,7 @@
namespace Neverhood {
-NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, byte *itemsTypes)
+NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, const byte *itemsTypes)
: Scene(vm, parentModule, true), _itemsTypes(itemsTypes), _navigationIndex(navigationIndex), _smackerDone(false),
_soundFlag1(false), _soundFlag2(false), _smackerFileHash(0), _interactive(true), _done(false) {
@@ -64,8 +64,11 @@ NavigationScene::~NavigationScene() {
// TODO Sound1ChList_sub_408110(0);
}
-byte NavigationScene::getNavigationAreaType() {
- return 0; // TODO
+int NavigationScene::getNavigationAreaType() {
+ NPoint mousePos;
+ mousePos.x = _mouseCursor->getX();
+ mousePos.y = _mouseCursor->getY();
+ return _mouseCursor->sendPointMessage(0x2064, mousePos, this);
}
void NavigationScene::update() {
diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h
index 08aefb7..c37a7fc 100644
--- a/engines/neverhood/navigationscene.h
+++ b/engines/neverhood/navigationscene.h
@@ -31,9 +31,9 @@ namespace Neverhood {
class NavigationScene : public Scene {
public:
- NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, byte *itemsTypes);
+ NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, const byte *itemsTypes);
virtual ~NavigationScene();
- byte getNavigationAreaType();
+ int getNavigationAreaType();
protected:
SmackerPlayer *_smackerPlayer;
bool _smackerDone;
@@ -44,7 +44,7 @@ protected:
bool _soundFlag1;
bool _soundFlag2;
bool _done;
- byte *_itemsTypes;
+ const byte *_itemsTypes;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createMouseCursor();
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index e186d38..28fa81b 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -160,7 +160,6 @@ void Palette2::update() {
if (_status == 1) {
Palette::update();
} else if (_status == 2) {
- debug("... _palCounter = %d", _palCounter);
if (_palCounter > 1) {
for (int i = 0; i < 256; i++) {
fadeColor(_palette + i * 4, _basePalette[i * 4 + 0], _basePalette[i * 4 + 1], _basePalette[i * 4 + 2]);
@@ -174,6 +173,12 @@ void Palette2::update() {
}
}
+void Palette2::copyBasePalette(int toIndex, int count, int fromIndex) {
+ if (toIndex + count > 256)
+ count = 256 - toIndex;
+ memcpy(_basePalette + toIndex * 4, _palette + fromIndex * 4, count * 4);
+}
+
void Palette2::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
PaletteResource paletteResource(_vm);
if (toIndex + count > 256)
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index e3d95aa..01f63e8 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -38,7 +38,7 @@ public:
Palette(NeverhoodEngine *vm, const char *filename);
// Create from resource with fileHash
Palette(NeverhoodEngine *vm, uint32 fileHash);
- ~Palette();
+ virtual ~Palette();
void usePalette();
void addPalette(const char *filename, int toIndex, int count, int fromIndex);
void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
@@ -60,7 +60,8 @@ public:
Palette2(NeverhoodEngine *vm);
// TODO: Other ctors
Palette2(NeverhoodEngine *vm, uint32 fileHash);
- ~Palette2();
+ virtual ~Palette2();
+ void copyBasePalette(int toIndex, int count, int fromIndex);
void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
void startFadeToPalette(int counter);
public:
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 44fef14..39824de 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -313,6 +313,21 @@ void AnimResource::setRepl(byte oldColor, byte newColor) {
_replNewColor = newColor;
}
+NDimensions AnimResource::loadSpriteDimensions(uint32 fileHash) {
+ NDimensions dimensions;
+ byte *resDimensions = _vm->_res->getResourceExtDataByHash(fileHash);
+ if (resDimensions) {
+ dimensions.width = READ_LE_UINT16(resDimensions + 0);
+ dimensions.height = READ_LE_UINT16(resDimensions + 2);
+ } else {
+ dimensions.width = 0;
+ dimensions.height = 0;
+ }
+ return dimensions;
+}
+
+// MouseCursorResource
+
MouseCursorResource::MouseCursorResource(NeverhoodEngine *vm)
: _cursorSprite(vm), _cursorNum(4), _currFileHash(0) {
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 5d8d5ca..a7d5e6c 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -91,6 +91,7 @@ public:
int16 getFrameIndex(uint32 frameHash);
void setReplEnabled(bool value) { _replEnabled = value; }
void setRepl(byte oldColor, byte newColor);
+ NDimensions loadSpriteDimensions(uint32 fileHash);
protected:
NeverhoodEngine *_vm;
int _resourceHandle;
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 28f0994..0538f58 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -135,8 +135,8 @@ byte *ResourceMan::getResourceExtData(int resourceHandle) {
}
byte *ResourceMan::getResourceExtDataByHash(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- return _archives[entry->archiveIndex]->getEntryExtData(entry->entryIndex);
+ ResourceFileEntry *entry = findEntrySimple(fileHash);
+ return entry ? _archives[entry->archiveIndex]->getEntryExtData(entry->entryIndex) : NULL;
}
byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 43f1ca7..d725ced 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -88,14 +88,16 @@ void Scene::draw() {
if (_smackerPlayer->getSurface())
_smackerPlayer->getSurface()->draw();
} else {
+#if 0
if (_surfaceFlag) {
// TODO g_screen->copyDirtyRects();
for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
(*iter)->addDirtyRect();
// TODO g_screen->addDirtyRects();
}
+#endif
for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
- debug(4, "priority = %d", (*iter)->getPriority());
+ //debug(4, "priority = %d", (*iter)->getPriority());
(*iter)->draw();
}
}
@@ -501,6 +503,11 @@ void Scene::setRectList(RectList *rectList) {
_rectType = 1;
}
+void Scene::clearRectList() {
+ _rectList = NULL;
+ _rectType = 1;
+}
+
void Scene::loadDataResource(uint32 fileHash) {
_dataResource.load(fileHash);
if (_klayman)
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 4711405..65326c3 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -50,6 +50,7 @@ public:
void setSurfacePriority(BaseSurface *surface, int priority);
void deleteSprite(Sprite **sprite);
Background *addBackground(Background *background);
+ void update();
protected:
Module *_parentModule;
Common::Array<Entity*> _entities;
@@ -89,7 +90,6 @@ protected:
bool _prevVisible;
int _messageValue;
// TODO 000000CF field_CF db ?
- void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void smackerUpdate();
uint32 smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -102,6 +102,7 @@ protected:
void runMessageList();
void setRectList(uint32 id);
void setRectList(RectList *rectList);
+ void clearRectList();
void messageList402220();
void loadDataResource(uint32 fileHash);
};
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index f0b3008..66e7a58 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -69,12 +69,10 @@ void SmackerDoubleSurface::draw() {
SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag)
: Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _flag2(false),
- _palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true) {
-
- debug("_smackerSurface = %p", (void*)_smackerSurface);
+ _palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true),
+ _drawX(-1), _drawY(-1) {
SetUpdateHandler(&SmackerPlayer::update);
-
open(fileHash, flag);
}
@@ -121,14 +119,31 @@ void SmackerPlayer::close() {
}
void SmackerPlayer::gotoFrame(uint frameNumber) {
+ // TODO?
+}
+
+uint32 SmackerPlayer::getFrameCount() {
+ return _smackerDecoder ? _smackerDecoder->getFrameCount() : 0;
+}
+
+uint32 SmackerPlayer::getFrameNumber() {
+ return _smackerDecoder ? _smackerDecoder->getCurFrame() : 0;
}
uint SmackerPlayer::getStatus() {
return 0;
}
-void SmackerPlayer::update() {
+void SmackerPlayer::setDrawPos(int16 x, int16 y) {
+ _drawX = x;
+ _drawY = y;
+ if (_smackerSurface) {
+ _smackerSurface->getDrawRect().x = _drawX;
+ _smackerSurface->getDrawRect().y = _drawY;
+ }
+}
+void SmackerPlayer::update() {
debug(8, "SmackerPlayer::update()");
if (!_smackerDecoder)
@@ -144,15 +159,18 @@ void SmackerPlayer::update() {
const Graphics::Surface *smackerFrame = _smackerDecoder->decodeNextFrame();
if (_smackerFirst) {
- if (_doubleSurface) {
- _smackerSurface->getDrawRect().x = 320 - _smackerDecoder->getWidth();
- _smackerSurface->getDrawRect().y = 240 - _smackerDecoder->getHeight();
- _smackerSurface->setSmackerFrame(smackerFrame);
- } else {
- _smackerSurface->getDrawRect().x = (640 - _smackerDecoder->getWidth()) / 2;
- _smackerSurface->getDrawRect().y = (480 - _smackerDecoder->getHeight()) / 2;
- _smackerSurface->setSmackerFrame(smackerFrame);
+ _smackerSurface->setSmackerFrame(smackerFrame);
+ if (_drawX < 0 || _drawY < 0) {
+ if (_doubleSurface) {
+ _drawX = 320 - _smackerDecoder->getWidth();
+ _drawY = 240 - _smackerDecoder->getHeight();
+ } else {
+ _drawX = (640 - _smackerDecoder->getWidth()) / 2;
+ _drawY = (480 - _smackerDecoder->getHeight()) / 2;
+ }
}
+ _smackerSurface->getDrawRect().x = _drawX;
+ _smackerSurface->getDrawRect().y = _drawY;
_smackerFirst = false;
}
@@ -164,7 +182,6 @@ void SmackerPlayer::update() {
_dirtyFlag = true;
if (_smackerDecoder->hasDirtyPalette()) {
- debug("updatePalette()");
updatePalette();
}
@@ -179,7 +196,6 @@ void SmackerPlayer::update() {
}
}
-
}
void SmackerPlayer::updatePalette() {
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index 2262277..6579bb4 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -55,7 +55,10 @@ public:
void open(uint32 fileHash, bool keepLastFrame);
void close();
void gotoFrame(uint frameNumber);
+ uint32 getFrameCount();
+ uint32 getFrameNumber();
uint getStatus();
+ void setDrawPos(int16 x, int16 y);
protected:
Scene *_scene;
Palette *_palette;
@@ -67,6 +70,7 @@ protected:
bool _keepLastFrame;
bool _flag2;
bool _dirtyFlag;
+ int _drawX, _drawY;
void update();
void updatePalette();
};
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index d0a6628..ee6e7aa 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -93,6 +93,11 @@ void Sprite::createSurface(int surfacePriority, int16 width, int16 height) {
_surface = new BaseSurface(_vm, surfacePriority, width, height);
}
+int16 Sprite::defFilterY(int16 y) {
+ // TODO return y - g_screen->field_26;
+ return y;
+}
+
// StaticSprite
StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
@@ -209,7 +214,6 @@ AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surface
_x = x;
_y = y;
setFileHash(fileHash, 0, -1);
-
}
void AnimatedSprite::init() {
@@ -428,10 +432,7 @@ void AnimatedSprite::updateFrameInfo() {
}
void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
- NDimensions dimensions;
- // TODO dimensions = getAnimatedSpriteDimensions(fileHash);
- dimensions.width = 640;
- dimensions.height = 480;
+ NDimensions dimensions = _animResource.loadSpriteDimensions(fileHash);
_surface = new BaseSurface(_vm, surfacePriority, dimensions.width, dimensions.height);
}
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 18c9ae3..86165f3 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -48,12 +48,15 @@ public:
bool checkCollision(NRect &rect);
int16 getX() const { return _x; }
int16 getY() const { return _y; }
+ void setX(int16 value) { _x = value; }
+ void setY(int16 value) { _y = value; }
uint16 getFlags() const { return _flags; }
bool isDoDeltaX() const { return _doDeltaX; }
bool isDoDeltaY() const { return _doDeltaY; }
NRect& getRect() { return _rect; }
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void loadDataResource(uint32 fileHash);
+ int16 defFilterY(int16 y);
protected:
void (Sprite::*_spriteUpdateCb)();
Common::String _spriteUpdateCbName; // For debugging purposes
@@ -71,7 +74,6 @@ protected:
uint16 _flags;
//0000004A field4A dw ? // seems to be unused except in ctor
DataResource _dataResource;
- //void update();
void createSurface(int surfacePriority, int16 width, int16 height);
void handleSpriteUpdate() {
if (_spriteUpdateCb)
@@ -91,10 +93,10 @@ public:
StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
void load(uint32 fileHash, bool dimensions, bool position);
+ void update();
protected:
SpriteResource _spriteResource;
void init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
- void update();
};
#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
Commit: d7dd4b43563b3d0ad5b16ff1fb384ab1382b3848
https://github.com/scummvm/scummvm/commit/d7dd4b43563b3d0ad5b16ff1fb384ab1382b3848
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Implement Scene1403, Scene1404 and Scene1405 (memory minigame)
- Move GameModule::startup call into engine instead of the game module constructor
- Reduce debug output
Changed paths:
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/scene.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 18c6b7e..e49aa94 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -74,8 +74,8 @@ protected:
// TODO: Disable heavy debug stuff in release mode
-#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); debug("SetUpdateHandler(" #handler ")"); _updateHandlerCbName = #handler
-#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug("SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
+#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); debug(2, "SetUpdateHandler(" #handler ")"); _updateHandlerCbName = #handler
+#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
class Entity {
public:
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 02ae2a7..d4b1e7b 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -44,7 +44,7 @@ GameModule::GameModule(NeverhoodEngine *vm)
SetMessageHandler(&GameModule::handleMessage);
- startup();
+ //startup();
}
@@ -83,6 +83,105 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
}
}
+void GameModule::initScene1405Vars() {
+
+ // TODO: Give better names
+
+ byte array44[3];
+ byte array3C[10];
+ byte array30[48];
+ uint32 index3 = 48;
+ uint32 index2 = 9;
+ uint32 index1 = 2;
+ uint32 rndIndex;
+
+ // Exit if it's already initialized
+ if (getSubVar(0x40050052, 0xC8606803))
+ return;
+
+ for (uint32 i = 0; i < 3; i++)
+ setSubVar(0x61084036, i, 1);
+
+ for (byte i = 0; i < 3; i++)
+ array44[i] = i;
+
+ for (byte i = 0; i < 10; i++)
+ array3C[i] = i;
+
+ for (byte i = 0; i < 48; i++)
+ array30[i] = i;
+
+ rndIndex = _vm->_rnd->getRandomNumber(3 - 1);
+
+ setSubVar(0x13100631, array44[rndIndex], 5);
+
+ for (byte i = 5; i < 9; i++)
+ array3C[i] = array3C[i + 1];
+
+ while (rndIndex < 2) {
+ array44[rndIndex] = array44[rndIndex + 1];
+ rndIndex++;
+ }
+
+ for (int i = 0; i < 2; i++) {
+ uint32 rndIndex1 = _vm->_rnd->getRandomNumber(index2 - 1); // si
+ uint32 rndIndex2 = _vm->_rnd->getRandomNumber(index1 - 1); // di
+ setSubVar(0x13100631, array44[rndIndex2], array3C[rndIndex1]);
+ index2--;
+ while (rndIndex1 < index2) {
+ array3C[rndIndex1] = array3C[rndIndex1 + 1];
+ rndIndex1++;
+ }
+ index1--;
+ while (rndIndex2 < index1) {
+ array44[rndIndex2] = array44[rndIndex2 + 1];
+ rndIndex2++;
+ }
+ }
+
+ for (uint32 i = 0; i < 3; i++) {
+ uint32 rndValue = _vm->_rnd->getRandomNumber(4 - 1) * 2 + 2;
+ uint32 index4 = 0;
+ setSubVar(0x7500993A, i, rndValue);
+ while (index4 < rndValue) {
+ uint32 rndIndex3 = _vm->_rnd->getRandomNumber(index3 - 1);
+ setSubVar(0x0C65F80B, array30[rndIndex3], getSubVar(0x13100631, i));
+ index3--;
+ while (rndIndex3 < index3) {
+ array30[rndIndex3] = array30[rndIndex3 + 1];
+ rndIndex3++;
+ }
+ index4++;
+ }
+ }
+
+ uint32 index5 = 0;
+ while (index3 != 0) {
+ uint32 rndIndex4 = _vm->_rnd->getRandomNumber(index3 - 1);
+ index1 = array3C[index5];
+ setSubVar(0x0C65F80B, array30[rndIndex4], index1);
+ index3--;
+ while (rndIndex4 < index3) {
+ array30[rndIndex4] = array30[rndIndex4 + 1];
+ rndIndex4++;
+ }
+ uint32 rndIndex5 = _vm->_rnd->getRandomNumber(index3 - 1);
+ setSubVar(0x0C65F80B, array30[rndIndex5], index1);
+ index3--;
+ while (rndIndex5 < index3) {
+ array30[rndIndex5] = array30[rndIndex5 + 1];
+ rndIndex5++;
+ }
+ index5++;
+ if (index5 >= index2)
+ index5 = 0;
+
+ }
+
+ setSubVar(0x40050052, 0xC8606803, 1);
+
+}
+
uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -114,7 +213,7 @@ void GameModule::startup() {
// createModule1500(0); // Logos and intro video //Real
// createModule1000(-1);
// createModule2300(2);
- _vm->gameState().sceneNum = 6;
+ _vm->gameState().sceneNum = 4;
//createModule1200(-1);
//createModule1800(-1);
//createModule1700(-1);
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 344a78f..d93a799 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -34,8 +34,10 @@ class GameModule : public Module {
public:
GameModule(NeverhoodEngine *vm);
virtual ~GameModule();
+ void startup();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
+ void initScene1405Vars();
protected:
Entity *_prevChildObject;
bool _someFlag1;
@@ -48,7 +50,6 @@ protected:
ResourceTable _resourceTable4;
*/
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void startup();
void createModule1000(int which);
void updateModule1000();
void createModule1200(int which);
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index caf79b2..e0cae80 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -32,18 +32,18 @@ GameVars::~GameVars() {
}
uint32 GameVars::getGlobalVar(uint32 nameHash) {
- debug("GameVars::getGlobalVar(%08X)", nameHash);
+ //debug("GameVars::getGlobalVar(%08X)", nameHash);
int16 varIndex = findSubVarIndex(0, nameHash);
return varIndex != -1 ? _vars[varIndex].value : 0;
}
void GameVars::setGlobalVar(uint32 nameHash, uint32 value) {
- debug("GameVars::setGlobalVar(%08X, %d)", nameHash, value);
+ //debug("GameVars::setGlobalVar(%08X, %d)", nameHash, value);
_vars[getSubVarIndex(0, nameHash)].value = value;
}
uint32 GameVars::getSubVar(uint32 nameHash, uint32 subNameHash) {
- debug("GameVars::getSubVar(%08X, %08X)", nameHash, subNameHash);
+ //debug("GameVars::getSubVar(%08X, %08X)", nameHash, subNameHash);
uint32 value = 0;
int16 varIndex = findSubVarIndex(0, nameHash);
if (varIndex != -1) {
@@ -56,21 +56,17 @@ uint32 GameVars::getSubVar(uint32 nameHash, uint32 subNameHash) {
}
void GameVars::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
- debug("GameVars::setSubVar(%08X, %08X, %d)", nameHash, subNameHash, value);
-
+ //debug("GameVars::setSubVar(%08X, %08X, %d)", nameHash, subNameHash, value);
int16 varIndex = getSubVarIndex(0, nameHash);
- debug(" varIndex = %d", varIndex);
-
+ //debug(" varIndex = %d", varIndex);
int16 subVarIndex = getSubVarIndex(varIndex, subNameHash);
- debug(" subVarIndex = %d", subVarIndex);
-
+ //debug(" subVarIndex = %d", subVarIndex);
_vars[subVarIndex].value = value;
-
//_vars[getSubVarIndex(getSubVarIndex(0, nameHash), subNameHash)].value = value;
}
int16 GameVars::addVar(uint32 nameHash, uint32 value) {
- debug("GameVars::addVar(%08X, %d)", nameHash, value);
+ //debug("GameVars::addVar(%08X, %d)", nameHash, value);
GameVar gameVar;
gameVar.nameHash = nameHash;
gameVar.value = value;
@@ -81,7 +77,7 @@ int16 GameVars::addVar(uint32 nameHash, uint32 value) {
}
int16 GameVars::findSubVarIndex(int16 varIndex, uint32 subNameHash) {
- debug("GameVars::findSubVarIndex(%d, %08X)", varIndex, subNameHash);
+ //debug("GameVars::findSubVarIndex(%d, %08X)", varIndex, subNameHash);
for (int16 nextIndex = _vars[varIndex].firstIndex; nextIndex != -1; nextIndex = _vars[nextIndex].nextIndex) {
if (_vars[nextIndex].nameHash == subNameHash)
return nextIndex;
@@ -90,18 +86,19 @@ int16 GameVars::findSubVarIndex(int16 varIndex, uint32 subNameHash) {
}
int16 GameVars::addSubVar(int16 varIndex, uint32 subNameHash, uint32 value) {
- debug("GameVars::addSubVar(%d, %08X, %d)", varIndex, subNameHash, value);
+ //debug("GameVars::addSubVar(%d, %08X, %d)", varIndex, subNameHash, value);
int16 nextIndex = _vars[varIndex].firstIndex;
+ int16 subVarIndex;
if (nextIndex == -1) {
- _vars[varIndex].firstIndex = addVar(subNameHash, value);
- return _vars[varIndex].firstIndex;
+ subVarIndex = addVar(subNameHash, value);
+ _vars[varIndex].firstIndex = subVarIndex;
} else {
while (_vars[nextIndex].nextIndex != -1)
nextIndex = _vars[nextIndex].nextIndex;
- int16 index = addVar(subNameHash, value);
- _vars[nextIndex].nextIndex = index;
- return index;
+ subVarIndex = addVar(subNameHash, value);
+ _vars[nextIndex].nextIndex = subVarIndex;
}
+ return subVarIndex;
}
int16 GameVars::getSubVarIndex(int16 varIndex, uint32 subNameHash) {
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index b24e3eb..3aaab36 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -49,6 +49,12 @@ static const KlaymanTableItem klaymanTable3[] = {
};
#endif
+static const KlaymanTableItem klaymanTable4[] = {
+ {1, &Klayman::sub41FDA0},
+ {1, &Klayman::sub41FE60},
+ {1, &Klayman::sub41FEB0},
+};
+
// Klayman
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority)
@@ -471,7 +477,7 @@ bool Klayman::sub41CF10(AnimationCb callback) {
}
void Klayman::sub41C7B0() {
- debug("Klayman::sub41C7B0()");
+ //debug("Klayman::sub41C7B0()");
if (_callback1Cb) {
AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
@@ -541,7 +547,7 @@ void Klayman::update41D0F0() {
}
uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41D360(%04X)", messageNum);
+ //debug("Klayman::handleMessage41D360(%04X)", messageNum);
Sprite::handleMessage(messageNum, param, sender);
uint32 messageResult = xHandleMessage(messageNum, param);
switch (messageNum) {
@@ -587,7 +593,7 @@ void Klayman::sub41FF00() {
}
uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41D480(%04X)", messageNum);
+ //debug("Klayman::handleMessage41D480(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -608,7 +614,7 @@ void Klayman::sub41FCF0() {
}
uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41F140(%04X)", messageNum);
+ //debug("Klayman::handleMessage41F140(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -624,7 +630,7 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
void Klayman::sub41C930(int16 x, bool flag) {
- debug("Klayman::sub41C930(%d, %d)", x, flag);
+ //debug("Klayman::sub41C930(%d, %d)", x, flag);
int16 xdiff = ABS(x - _x);
if (x == _x) {
_x4 = x;
@@ -675,7 +681,7 @@ void Klayman::sub4211B0() {
uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender) {
//ok
- debug("Klayman::handleMessage41E920(%04X)", messageNum);
+ //debug("Klayman::handleMessage41E920(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -704,7 +710,7 @@ bool Klayman::sub41CEB0(AnimationCb callback3) {
}
void Klayman::spriteUpdate41F250() {
- debug("Klayman::spriteUpdate41F250()");
+ //debug("Klayman::spriteUpdate41F250()");
int16 xdiff = _x4 - _x;
@@ -736,7 +742,7 @@ void Klayman::spriteUpdate41F250() {
}
void Klayman::spriteUpdate41F5F0() {
- debug("Klayman::spriteUpdate41F5F0()");
+ //debug("Klayman::spriteUpdate41F5F0()");
int16 xdiff = _x4 - _x;
@@ -801,7 +807,7 @@ void Klayman::sub41FBB0() {
}
uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41DD80(%04X)", messageNum);
+ //debug("Klayman::handleMessage41DD80(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -832,7 +838,7 @@ uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41CD70(int16 x) {
- debug("Klayman::sub41CD70(%d)", x);
+ //debug("Klayman::sub41CD70(%d)", x);
if (x > _x) {
if (ABS(x - _x) <= 105) {
sub41CAC0(x);
@@ -868,7 +874,7 @@ void Klayman::sub41FB30() {
}
uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41EC70(%04X)", messageNum);
+ //debug("Klayman::handleMessage41EC70(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -908,7 +914,7 @@ void Klayman::spriteUpdate41F300() {
}
uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41EB70(%04X)", messageNum);
+ //debug("Klayman::handleMessage41EB70(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1047,7 +1053,7 @@ void Klayman::sub41FF80() {
}
uint32 Klayman::handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41D4C0(%04X)", messageNum);
+ //debug("Klayman::handleMessage41D4C0(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1085,7 +1091,7 @@ void Klayman::sub420120() {
}
uint32 Klayman::handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41DAD0(%04X)", messageNum);
+ //debug("Klayman::handleMessage41DAD0(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1166,7 +1172,7 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
}
void Klayman::sub41CAC0(int16 x) {
- debug("Klayman::sub41CAC0(%d)", x);
+ //debug("Klayman::sub41CAC0(%d)", x);
int16 xdiff = ABS(x - _x);
if (x == _x) {
_x4 = x;
@@ -1256,7 +1262,7 @@ void Klayman::spriteUpdate41F780() {
}
uint32 Klayman::handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41DF10(%04X)", messageNum);
+ //debug("Klayman::handleMessage41DF10(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1302,7 +1308,7 @@ void Klayman::sub4208F0() {
}
uint32 Klayman::handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Klayman::handleMessage41EEF0(%04X)", messageNum);
+ //debug("Klayman::handleMessage41EEF0(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1856,6 +1862,139 @@ void Klayman::sub420550() {
}
}
+void Klayman::sub420C50() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420C50))) {
+ _status2 = 0;
+ if (_flagF7) {
+ sub420D50();
+ } else {
+ _attachedSprite->sendMessage(0x482B, 0, this);
+ setFileHash(0x0C303040, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41E210);
+ SetAnimationCallback3(&Klayman::sub420CD0);
+ _flagE5 = false;
+ }
+ }
+}
+
+void Klayman::sub420CD0() {
+ setFileHash(0x0D318140, 0, -1);
+ _attachedSprite->sendMessage(0x480F, 0, this);
+ SetAnimationCallback3(&Klayman::sub420D10);
+}
+
+void Klayman::sub420D10() {
+ setFileHash(0x4464A440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ _flagF7 = true;
+ _flagE5 = true;
+}
+
+void Klayman::sub420D50() {
+ setFileHash(0x09018068, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41E210);
+ _attachedSprite->sendMessage(0x4807, 0, this);
+ SetAnimationCallback3(&Klayman::sub420DA0);
+ _flagE5 = false;
+}
+
+void Klayman::sub420DA0() {
+ setFileHash(0x0D318140, 0, -1);
+ _attachedSprite->sendMessage(0x480F, 0, this);
+ SetAnimationCallback3(&Klayman::sub420DE0);
+}
+
+void Klayman::sub420DE0() {
+ setFileHash(0x4464A440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ _flagF7 = true;
+ _flagE5 = true;
+}
+
+void Klayman::sub420E20() {
+ if (_flagF7) {
+ _status2 = 2;
+ setFileHash(0x09018068, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41E210);
+ _attachedSprite->sendMessage(0x4807, 0, this);
+ SetAnimationCallback3(&Klayman::sub420E90);
+ _flagE5 = false;
+ _flagF7 = false;
+ } else {
+ sub41C7B0();
+ }
+}
+
+void Klayman::sub420E90() {
+ setFileHash(0x0928C048, 0, -1);
+ setCallback1(AnimationCallback(&Klayman::sub420EB0));
+}
+
+void Klayman::sub420EB0() {
+ _attachedSprite->sendMessage(0x482A, 0, this);
+}
+
+void Klayman::sub420680() {
+ if (!sub41CF10(AnimationCallback(&Klayman::sub420680))) {
+ _status2 = 2;
+ _counter2 = 0;
+ for (uint32 i = 0; i < 20; i++) {
+ if (getSubVar(0x02038314, i)) {
+ setSubVar(0x02720344, i, 1);
+ setSubVar(0x02038314, i, 0);
+ _counter2++;
+ }
+ }
+ if (_counter2 == 0) {
+ setCallback2(NULL);
+ sub41C7B0();
+ } else {
+ setFileHash(0xD8C8D100, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetMessageHandler(&Klayman::handleMessage41DB90);
+ _flagE5 = false;
+ _counter2--;
+ }
+ }
+}
+
+uint32 Klayman::handleMessage41DB90(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x06040580) {
+ if (_counter2 == 0) {
+ // TODO: Calc calcHash value somewhere else
+ setFileHash3(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
+ }
+ } else if (_counter2 != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
+ _counter2--;
+ setFileHash2(0xD8C8D100, 0x01084280, 0);
+ } else if (param.asInteger() == 0x062A1510) {
+ _soundResource1.play(0x41688704);
+ } else if (param.asInteger() == 0x02B20220) {
+ _soundResource1.play(0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ _soundResource1.play(0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ _soundResource1.play(0x44051000);
+ } else if (param.asInteger() == 0x0E040501) {
+ _soundResource1.play(0xC6A129C1);
+ }
+ }
+ return handleMessage41D480(messageNum, param, sender);
+}
+
//##############################################################################
// KmScene1001
@@ -1865,7 +2004,7 @@ KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
- debug("KmScene1001::xHandleMessage() messageNum = %04X", messageNum);
+ //debug("KmScene1001::xHandleMessage() messageNum = %04X", messageNum);
switch (messageNum) {
case 0x4001:
case 0x4800:
@@ -1951,7 +2090,7 @@ void KmScene1001::sub44FA50() {
}
uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("KmScene1001::handleMessage44FA00(%04X)", messageNum);
+ //debug("KmScene1001::handleMessage44FA00(%04X)", messageNum);
uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1987,7 +2126,7 @@ void KmScene1002::xUpdate() {
uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
//ok
- debug("KmScene1002::xHandleMessage(%04X)", messageNum);
+ //debug("KmScene1002::xHandleMessage(%04X)", messageNum);
switch (messageNum) {
case 0x2001:
setCallback2(AnimationCallback(&KmScene1002::sub449E90));
@@ -2089,7 +2228,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene1002::update4497D0() {
- debug("KmScene1002::update4497D0()");
+ //debug("KmScene1002::update4497D0()");
Klayman::update();
if (_counter1 != 0 && (--_counter1 == 0)) {
_surface->setVisible(true);
@@ -2259,10 +2398,10 @@ uint32 KmScene1002::handleMessage449D60(int messageNum, const MessageParam ¶
}
void KmScene1002::spriteUpdate449DC0() {
- debug("KmScene1002::spriteUpdate449DC0()");
+ //debug("KmScene1002::spriteUpdate449DC0()");
AnimatedSprite::updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
- debug("$$$ hitRect->type = %04X", hitRect->type);
+ //debug("$$$ hitRect->type = %04X", hitRect->type);
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
processDelta();
@@ -2272,7 +2411,7 @@ void KmScene1002::spriteUpdate449DC0() {
}
void KmScene1002::sub449E20() {
- debug("KmScene1002::sub449E20()");
+ //debug("KmScene1002::sub449E20()");
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub449E20))) {
_status2 = 2;
_flagE5 = false;
@@ -2286,7 +2425,7 @@ void KmScene1002::sub449E20() {
}
void KmScene1002::sub449E90() {
- debug("KmScene1002::sub449E90()");
+ //debug("KmScene1002::sub449E90()");
_soundResource1.play(0x56548280);
_status2 = 0;
_flagE5 = false;
@@ -2299,7 +2438,7 @@ void KmScene1002::sub449E90() {
void KmScene1002::sub449EF0() {
//ok
- debug("KmScene1002::sub449EF0()");
+ //debug("KmScene1002::sub449EF0()");
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
@@ -2318,7 +2457,7 @@ void KmScene1002::sub449EF0() {
void KmScene1002::sub449F70() {
//ok
- debug("KmScene1002::sub449F70()");
+ //debug("KmScene1002::sub449F70()");
_parentScene->sendMessage(0x1024, 1, this);
_soundResource1.play(0x41648271);
_status2 = 1;
@@ -2338,7 +2477,7 @@ void KmScene1002::sub449F70() {
void KmScene1002::sub44A050() {
//ok
- debug("KmScene1002::sub44A050()");
+ //debug("KmScene1002::sub44A050()");
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
@@ -2353,7 +2492,7 @@ void KmScene1002::sub44A050() {
void KmScene1002::sub44A0D0() {
//ok
- debug("KmScene1002::sub44A0D0()");
+ //debug("KmScene1002::sub44A0D0()");
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
@@ -2368,7 +2507,7 @@ void KmScene1002::sub44A0D0() {
void KmScene1002::sub44A150() {
//ok
- debug("KmScene1002::sub44A150()");
+ //debug("KmScene1002::sub44A150()");
_parentScene->sendMessage(0x1024, 1, this);
_soundResource1.play(0x41648271);
_status2 = 1;
@@ -2388,14 +2527,14 @@ void KmScene1002::sub44A150() {
void KmScene1002::sub44A230() {
//ok
- debug("KmScene1002::sub44A230()");
+ //debug("KmScene1002::sub44A230()");
setDoDeltaX(2);
sub41FC80();
}
void KmScene1002::sub44A250() {
//ok
- debug("KmScene1002::sub44A250()");
+ //debug("KmScene1002::sub44A250()");
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A250))) {
_parentScene->sendMessage(0x1024, 3, this);
_status2 = 2;
@@ -2410,7 +2549,7 @@ void KmScene1002::sub44A250() {
void KmScene1002::sub44A2C0() {
//ok
- debug("KmScene1002::sub44A2C0()");
+ //debug("KmScene1002::sub44A2C0()");
if (_attachedSprite) {
_x = ((Sprite*)_attachedSprite)->getX();
_attachedSprite->sendMessage(0x4807, 0, this);
@@ -2427,7 +2566,7 @@ void KmScene1002::sub44A2C0() {
void KmScene1002::sub44A330() {
//ok
- debug("KmScene1002::sub44A330()");
+ //debug("KmScene1002::sub44A330()");
_status2 = 2;
_flagE5 = true;
setDoDeltaX(0);
@@ -2439,7 +2578,7 @@ void KmScene1002::sub44A330() {
void KmScene1002::sub44A370() {
//ok
- debug("KmScene1002::sub44A370()");
+ //debug("KmScene1002::sub44A370()");
_status2 = 1;
_flagE5 = false;
setFileHash(0x35AA8059, 0, -1);
@@ -2450,13 +2589,13 @@ void KmScene1002::sub44A370() {
}
void KmScene1002::sub44A3C0() {
- debug("KmScene1002::sub44A3C0()");
+ //debug("KmScene1002::sub44A3C0()");
_parentScene->sendMessage(0x1024, 1, this);
}
void KmScene1002::sub44A3E0() {
//ok
- debug("KmScene1002::sub44A3E0()");
+ //debug("KmScene1002::sub44A3E0()");
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A3E0))) {
_status2 = 2;
_flagE4 = false;
@@ -2472,7 +2611,7 @@ void KmScene1002::sub44A3E0() {
void KmScene1002::sub44A460() {
//ok
- debug("KmScene1002::sub44A460()");
+ //debug("KmScene1002::sub44A460()");
_flagE4 = false;
_flagE5 = true;
setFileHash2(0x5C01A870, 0x01084280, 0);
@@ -2898,6 +3037,146 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+// KmScene1403
+
+KmScene1403::KmScene1403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ setKlaymanTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
+}
+
+uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480A:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420600));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420550));
+ }
+ break;
+ case 0x480D:
+ setCallback2(AnimationCallback(&KmScene1001::sub420C50));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x4827:
+ setCallback2(AnimationCallback(&Klayman::sub420E20));
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+// KmScene1404
+
+KmScene1404::KmScene1404(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // Empty
+}
+
+uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480A:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420600));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420550));
+ }
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481A:
+ setCallback2(AnimationCallback(&Klayman::sub420680));
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
// KmScene1705
KmScene1705::KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 5cb11ab..d7c351e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -99,6 +99,16 @@ public:
void sub420660();
void sub4205C0();
void sub420550();
+ void sub420C50();
+ void sub420CD0();
+ void sub420D10();
+ void sub420D50();
+ void sub420DA0();
+ void sub420DE0();
+ void sub420E20();
+ void sub420E90();
+ void sub420EB0();
+ void sub420680();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -230,6 +240,8 @@ protected:
void update41D1C0();
+ uint32 handleMessage41DB90(int messageNum, const MessageParam ¶m, Entity *sender);
+
};
class KmScene1001 : public Klayman {
@@ -320,6 +332,20 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene1403 : public Klayman {
+public:
+ KmScene1403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
+class KmScene1404 : public Klayman {
+public:
+ KmScene1404(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene1705 : public Klayman {
public:
KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 7d618f5..4da5faa 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -23,6 +23,7 @@
#include "neverhood/module1400.h"
#include "neverhood/module1000.h"
#include "neverhood/diskplayerscene.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/navigationscene.h"
namespace Neverhood {
@@ -87,21 +88,21 @@ void Module1400::createScene1403(int which) {
_vm->gameState().sceneNum = 2;
// TODO Music18hList_stop(0x06333232, 0, 2);
// TODO Music18hList_play(0x624A220E, 0, 2, 1);
- // TODO _childObject = new Scene1403(_vm, this, which);
+ _childObject = new Scene1403(_vm, this, which);
SetUpdateHandler(&Module1400::updateScene1403);
}
void Module1400::createScene1404(int which) {
_vm->gameState().sceneNum = 3;
// TODO Music18hList_play(0x06333232, 0, 2, 1);
- // TODO _childObject = new Scene1404(_vm, this, which);
+ _childObject = new Scene1404(_vm, this, which);
SetUpdateHandler(&Module1400::updateScene1404);
}
void Module1400::createScene1405(int which) {
_vm->gameState().sceneNum = 4;
// TODO Music18hList_play(0x06333232, 0, 2, 1);
- // TODO _childObject = new Scene1405(_vm, this, which);
+ _childObject = new Scene1405(_vm, this, which);
SetUpdateHandler(&Module1400::updateScene1405);
}
@@ -109,7 +110,7 @@ void Module1400::createScene1406(int which) {
_vm->gameState().sceneNum = 5;
// TODO Music18hList_stop(0x06333232, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 2);
- SetUpdateHandler(&Module1400::updateScene1405);
+ SetUpdateHandler(&Module1400::updateScene1406);
}
void Module1400::createScene1407(int which) {
@@ -176,6 +177,7 @@ void Module1400::updateScene1404() {
_done = false;
delete _childObject;
_childObject = NULL;
+ debug("Scene1404; _field20 = %d", _field20);
if (_field20 == 1) {
createScene1405(0);
_childObject->handleUpdate();
@@ -402,7 +404,7 @@ Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
_x = 320;
_y = 240;
- createSurface1(100, 0x04551900);
+ createSurface1(0x04551900, 100);
SetUpdateHandler(&Class528::update);
SetMessageHandler(&Class528::handleMessage);
_newHashListIndex = -2;
@@ -1058,7 +1060,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1402::update() {
if (_flag) {
- _background->getSurface()->getDrawRect().y = _vm->_rnd->getRandomNumber(10) - 10;
+ _background->getSurface()->getDrawRect().y = _vm->_rnd->getRandomNumber(10 - 1) - 10;
// TODO g_screen->field_26 = -10 - _background->getSurface()->getDrawRect().y;
} else {
_background->getSurface()->getDrawRect().y = -10;
@@ -1436,4 +1438,438 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+// Scene1403
+
+Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _class489(NULL), _flag(false) {
+
+ SetMessageHandler(&Scene1403::handleMessage);
+
+ setRectList(0x004B1FF8);
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x2110A234, 0, 0));
+ _palette = new Palette(_vm, 0x2110A234);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x0A230219, NULL));
+
+ _class401_1 = addSprite(new StaticSprite(_vm, 0x01102A33, 100));
+ _class401_1->getSurface()->setVisible(false);
+
+ _class401_2 = addSprite(new StaticSprite(_vm, 0x04442520, 995));
+
+ _class401_3 = addSprite(new StaticSprite(_vm, 0x08742271, 995));
+
+ _asTape1 = new AsScene1201Tape(_vm, this, 12, 1100, 201, 468, 0x9148A011);
+ addSprite(_asTape1);
+ _vm->_collisionMan->addSprite(_asTape1);
+ _asTape1->setRepl(64, 0);
+
+ _asTape2 = new AsScene1201Tape(_vm, this, 16, 1100, 498, 468, 0x9048A093);
+ addSprite(_asTape2);
+ _vm->_collisionMan->addSprite(_asTape2);
+ _asTape2->setRepl(64, 0);
+
+ if (which < 0) {
+ _klayman = new KmScene1403(_vm, this, 380, 463);
+ setMessageList(0x004B1F18);
+ } else {
+ _klayman = new KmScene1403(_vm, this, 640, 463);
+ setMessageList(0x004B1F20);
+ }
+ addSprite(_klayman);
+ _klayman->setRepl(64, 0);
+
+ if (getGlobalVar(0x04A105B3) == 4) {
+ Class489 *class489;
+ class489 = new Class489(_vm, this, _klayman, 0);
+ _class489 = class489;
+ addSprite(_class489);
+ _vm->_collisionMan->addSprite(_class489);
+ if (getGlobalVar(0x04A10F33) == 4) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ _klayman->setX(_class489->getX() + 100);
+ _klayman->processDelta();
+ setMessageList(0x004B1F70);
+ }
+ _class489->getSurface()->getClipRect().x1 = 0;
+ _class489->getSurface()->getClipRect().y1 = 0;
+ _class489->getSurface()->getClipRect().x2 = 640;
+ _class489->getSurface()->getClipRect().y2 = _class401_2->getSurface()->getDrawRect().y + _class401_2->getSurface()->getDrawRect().height;
+ class489->setRepl(64, 0);
+ }
+
+}
+
+uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x88C11390) {
+ setRectList(0x004B2008);
+ _flag = true;
+ } else if (param.asInteger() == 0x08821382) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setRectList(0x004B1FF8);
+ _flag = false;
+ }
+ break;
+ case 0x1019:
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ case 0x1022:
+ if (sender == _class489) {
+ if (param.asInteger() >= 1000) {
+ setSurfacePriority(_class401_3->getSurface(), 1100);
+ } else {
+ setSurfacePriority(_class401_3->getSurface(), 995);
+ }
+ }
+ break;
+ case 0x4807:
+ _class401_1->getSurface()->setVisible(false);
+ break;
+ case 0x480F:
+ _class401_1->getSurface()->setVisible(true);
+ break;
+ case 0x4826:
+ if (sender == _class489) {
+ if (_flag) {
+ setMessageList2(0x004B1FA8);
+ } else if (param.asInteger() == 1) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setMessageList2(0x004B1F88);
+ } else if (_class489->sendMessage(0x480C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setMessageList2(0x004B1F58);
+ } else {
+ setMessageList2(0x004B1F28);
+ }
+ } else if (sender == _asTape1 || sender == _asTape2) {
+ if (_flag) {
+ setMessageList2(0x004B1FA8);
+ } else if (_messageListStatus != 2) {
+ _klayman->sendEntityMessage(0x1014, sender, this);
+ setMessageList2(0x004B1FB8);
+ }
+ }
+ break;
+ }
+ return 0;
+}
+
+// Scene1404
+
+Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _class489(NULL), _class545(NULL) {
+
+ if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860)) {
+ setGlobalVar(0x13382860, 5);
+ }
+
+ SetMessageHandler(&Scene1404::handleMessage);
+ _surfaceFlag = true;
+
+ setRectList(0x004B8D80);
+
+ _background = addBackground(new DirtyBackground(_vm, 0xAC0B006F, 0, 0));
+ _palette = new Palette(_vm, 0xAC0B006F);
+ _palette->addPalette(0x00801510, 0, 65, 0);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0xB006BAC8, NULL));
+
+ if (getGlobalVar(0x13382860) == 5) {
+ // TODO _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
+ // TODO _vm->_collisionMan->addSprite(_class545);
+ }
+
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x1900A1F8, 1100));
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 14, 1100, 281, 411, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+ if (which < 0) {
+ _klayman = new KmScene1404(_vm, this, 376, 406);
+ setMessageList(0x004B8C28);
+ } else if (which == 1) {
+ _klayman = new KmScene1404(_vm, this, 376, 406);
+ setMessageList(0x004B8C30);
+ } else if (which == 2) {
+ if (getGlobalVar(0xC0418A02)) {
+ _klayman = new KmScene1404(_vm, this, 347, 406);
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmScene1404(_vm, this, 187, 406);
+ }
+ setMessageList(0x004B8D28);
+ } else {
+ _klayman = new KmScene1404(_vm, this, 30, 406);
+ setMessageList(0x004B8C38);
+ }
+ addSprite(_klayman);
+
+ if (getGlobalVar(0x04A105B3) == 3) {
+ _class489 = addSprite(new Class489(_vm, this, _klayman, 0));
+ _vm->_collisionMan->addSprite(_class489);
+ if (getGlobalVar(0x04A10F33) == 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ _klayman->setX(_class489->getX() - 100);
+ _klayman->processDelta();
+ setMessageList(0x004B8CB8);
+ }
+ _class489->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
+ _class489->getSurface()->getClipRect().y1 = 0;
+ _class489->getSurface()->getClipRect().x2 = 640;
+ _class489->getSurface()->getClipRect().y2 = 480;
+ }
+
+ _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+}
+
+Scene1404::~Scene1404() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x410650C2) {
+ if (_class489 && _class489->getX() == 220) {
+ setMessageList(0x004B8C40);
+ } else {
+ setMessageList(0x004B8CE8);
+ }
+ }
+ break;
+ case 0x1019:
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ case 0x4826:
+ if (sender == _class489) {
+ if (_class489->sendMessage(0x480C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setMessageList2(0x004B8CA0);
+ } else {
+ setMessageList2(0x004B8C40);
+ }
+ } else if (sender == _asTape && _messageListStatus != 2) {
+ _klayman->sendEntityMessage(0x1014, _asTape, this);
+ setMessageList(0x004B8CD0);
+ } else if (sender == _class545 && _messageListStatus != 2) {
+ _klayman->sendEntityMessage(0x1014, _class545, this);
+ setMessageList(0x004B8D18);
+ }
+ break;
+ }
+ return 0;
+}
+
+// Scene1405
+
+static const NPoint kAsScene1405TileItemPositions[] = {
+ {100, 80},
+ {162, 78},
+ {222, 76},
+ {292, 76},
+ {356, 82},
+ {422, 84},
+ {488, 86},
+ {550, 90},
+ {102, 134},
+ {164, 132},
+ {224, 136},
+ {294, 136},
+ {360, 136},
+ {422, 138},
+ {484, 144},
+ {548, 146},
+ { 98, 196},
+ {160, 200},
+ {228, 200},
+ {294, 202},
+ {360, 198},
+ {424, 200},
+ {482, 202},
+ {548, 206},
+ { 98, 260},
+ {160, 264},
+ {226, 260},
+ {296, 262},
+ {358, 260},
+ {424, 262},
+ {486, 264},
+ {550, 266},
+ { 94, 322},
+ {160, 316},
+ {226, 316},
+ {296, 320},
+ {358, 322},
+ {422, 324},
+ {488, 322},
+ {550, 322},
+ { 98, 380},
+ {160, 376},
+ {226, 376},
+ {294, 378},
+ {356, 380},
+ {420, 380},
+ {490, 378},
+ {552, 376}
+};
+
+AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 index)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _soundResource(vm),
+ _index(index), _countdown(0), _flag(false) {
+
+ _soundResource.load(0x05308101);
+ // TODO _soundResource.setPan
+ _x = kAsScene1405TileItemPositions[_index].x;
+ _y = kAsScene1405TileItemPositions[_index].y;
+ createSurface1(0x844B805C, 1100);
+ _surface->setVisible(false);
+ if (getSubVar(0xCCE0280F, _index))
+ _countdown = _vm->_rnd->getRandomNumber(36 - 1) + 1;
+ SetUpdateHandler(&AsScene1405Tile::update);
+ SetMessageHandler(&AsScene1405Tile::handleMessage);
+
+ debug("getSubVar(0x0C65F80B, _index) = %d", getSubVar(0x0C65F80B, _index));
+
+ setFileHash(0x844B805C, getSubVar(0x0C65F80B, _index), -1);
+ _newHashListIndex = (int16)getSubVar(0x0C65F80B, _index);
+}
+
+void AsScene1405Tile::update() {
+ updateAnim();
+ updatePosition();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ show();
+ }
+}
+
+uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (getSubVar(0xCCE0280F, _index) == 0 && _parentScene->getCountdown() == 0) {
+ show();
+ _parentScene->sendMessage(0x2000, _index, this);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1405Tile::show() {
+ if (!_flag) {
+ _flag = true;
+ _soundResource.play();
+ _surface->setVisible(true);
+ }
+}
+
+void AsScene1405Tile::hide() {
+ if (_flag) {
+ _flag = false;
+ _soundResource.play();
+ _surface->setVisible(false);
+ }
+}
+
+Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm), _selectFirstTile(true),
+ _tilesLeft(48), _countdown(0) {
+
+ _vm->gameModule()->initScene1405Vars();
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x0C0C007D, 0, 0));
+ _palette = new Palette(_vm, 0x0C0C007D);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse435(_vm, 0xC00790C8, 20, 620));
+
+ // TODO: Some debug code: Leave two matching tiles open
+ for (int i = 0; i < 48; i++)
+ setSubVar(0xCCE0280F, i, 1);
+ int debugIndex = 0;
+ setSubVar(0xCCE0280F, debugIndex, 0);
+ for (int i = 0; i < 48; i++) {
+ if (i != debugIndex && getSubVar(0x0C65F80B, i) == getSubVar(0x0C65F80B, debugIndex)) {
+ setSubVar(0xCCE0280F, i, 0);
+ break;
+ }
+ }
+
+ for (uint32 index = 0; index < 48; index++) {
+ _tiles[index] = new AsScene1405Tile(_vm, this, index);
+ addSprite(_tiles[index]);
+ _vm->_collisionMan->addSprite(_tiles[index]);
+ if (getSubVar(0xCCE0280F, index))
+ _tilesLeft--;
+ }
+
+ _soundResource.load(0x68E25540);
+
+ SetMessageHandler(&Scene1405::handleMessage);
+ SetUpdateHandler(&Scene1405::update);
+
+}
+
+void Scene1405::update() {
+ Scene::update();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ _tilesLeft = 48;
+ _tiles[_firstTileIndex]->hide();
+ _tiles[_secondTileIndex]->hide();
+ for (uint32 i = 0; i < 48; i++) {
+ if (getSubVar(0xCCE0280F, i)) {
+ _tiles[i]->hide();
+ setSubVar(0xCCE0280F, i, 0);
+ }
+ }
+ }
+}
+
+uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug/Cheat stuff
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x000D:
+ // TODO: Debug/Cheat stuff
+ break;
+ case 0x2000:
+ if (_selectFirstTile) {
+ _firstTileIndex = param.asInteger();
+ _selectFirstTile = false;
+ } else {
+ _secondTileIndex = param.asInteger();
+ if (_firstTileIndex != _secondTileIndex) {
+ _selectFirstTile = true;
+ if (getSubVar(0x0C65F80B, _secondTileIndex) == getSubVar(0x0C65F80B, _firstTileIndex)) {
+ setSubVar(0xCCE0280F, _firstTileIndex, 1);
+ setSubVar(0xCCE0280F, _secondTileIndex, 1);
+ _tilesLeft -= 2;
+ if (_tilesLeft == 0) {
+ _soundResource.play();
+ }
+ } else {
+ _countdown = 10;
+ }
+ }
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 433dc41..72afb4f 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/module1200.h"
namespace Neverhood {
@@ -237,6 +238,71 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// Scene1403
+
+class Scene1403 : public Scene {
+public:
+ Scene1403(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_class401_1;
+ Sprite *_class401_2;
+ Sprite *_class401_3;
+ AsScene1201Tape *_asTape1;
+ AsScene1201Tape *_asTape2;
+ Sprite *_class489;
+ bool _flag;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+// Scene1404
+
+class Scene1404 : public Scene {
+public:
+ Scene1404(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene1404();
+protected:
+ Sprite *_sprite1;
+ Sprite *_asTape;
+ Sprite *_class489;
+ Sprite *_class545;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+// Scene1405
+
+class Scene1405;
+
+class AsScene1405Tile : public AnimatedSprite {
+public:
+ AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 index);
+ void show();
+ void hide();
+protected:
+ Scene1405 *_parentScene;
+ SoundResource _soundResource;
+ bool _flag;
+ uint32 _index;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1405 : public Scene {
+public:
+ Scene1405(NeverhoodEngine *vm, Module *parentModule, int which);
+ int getCountdown() const { return _countdown; }
+protected:
+ SoundResource _soundResource;
+ bool _selectFirstTile;
+ int _firstTileIndex;
+ int _secondTileIndex;
+ int _tilesLeft;
+ int _countdown;
+ AsScene1405Tile *_tiles[48];
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1400_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 1f253c0..0db5d62 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -156,8 +156,11 @@ Common::Error NeverhoodEngine::run() {
#endif
#if 1
+
_collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
+
+ _gameModule->startup();
// Preliminary main loop, needs some more work but works for testing
while (!shouldQuit()) {
@@ -181,14 +184,9 @@ Common::Error NeverhoodEngine::run() {
case Common::EVENT_RBUTTONDOWN:
_gameModule->handleMouseDown(event.mouse.x, event.mouse.y);
break;
- /*
- case Common::EVENT_LBUTTONUP:
- case Common::EVENT_RBUTTONUP:
- break;
case Common::EVENT_QUIT:
_system->quit();
break;
- */
default:
break;
}
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 86f7a0a..edb204c 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -118,6 +118,7 @@ public:
#endif
GameState& gameState() { return _gameState; }
+ GameModule *gameModule() { return _gameModule; }
int16 getMouseX() const { return _mouseX; }
int16 getMouseY() const { return _mouseY; }
NPoint getMousePos();
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index d725ced..b9a464c 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -505,7 +505,7 @@ void Scene::setRectList(RectList *rectList) {
void Scene::clearRectList() {
_rectList = NULL;
- _rectType = 1;
+ _rectType = 0;
}
void Scene::loadDataResource(uint32 fileHash) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 86165f3..a518c39 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -30,7 +30,7 @@
namespace Neverhood {
-#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug("SetSpriteCallback(" #callback ")"); _spriteUpdateCbName = #callback
+#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug(2, "SetSpriteCallback(" #callback ")"); _spriteUpdateCbName = #callback
#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterX(" #callback ")")
#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterY(" #callback ")")
Commit: ad7c50d593594247f1669177eccb37e3ab8394ed
https://github.com/scummvm/scummvm/commit/ad7c50d593594247f1669177eccb37e3ab8394ed
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Add more tables
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 58e48dc..aa70279 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -52,6 +52,11 @@ static const uint32 rectListOffsets[] = {
// Scene1402
1, 0x004B0C48,
1, 0x004B0C98,
+ // Scene1403
+ 1, 0x004B1FF8,
+ 1, 0x004B2008,
+ // Scene1404
+ 1, 0x004B8D80,
// Scene1705
1, 0x004B6B40,
1, 0x004B6B30,
@@ -118,6 +123,26 @@ static const uint32 messageListOffsets[] = {
2, 0x004B0B68,
3, 0x004B0BB8,
3, 0x004B0BD0,
+ // Scene1403
+ 1, 0x004B1F18,
+ 1, 0x004B1F20,
+ 3, 0x004B1F70,
+ 2, 0x004B1FA8,
+ 4, 0x004B1F88,
+ 3, 0x004B1F58,
+ 2, 0x004B1F28,
+ 2, 0x004B1FB8,
+ // Scene1404
+ 1, 0x004B8C28,
+ 1, 0x004B8C30,
+ 1, 0x004B8C38,
+ 1, 0x004B8D28,
+ 3, 0x004B8CB8,
+ 2, 0x004B8C40,
+ 6, 0x004B8CE8,
+ 3, 0x004B8CA0,
+ 2, 0x004B8CD0,
+ 2, 0x004B8D18,
// Scene1705
1, 0x004B69E8,
2, 0x004B6A08,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index a76db0a..f120857 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 08be9cde7b6d5dbd8632e73cc5e07820fca61bda
https://github.com/scummvm/scummvm/commit/08be9cde7b6d5dbd8632e73cc5e07820fca61bda
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Implement Scene3010 (door lock)
Changed paths:
A engines/neverhood/module3000.cpp
A engines/neverhood/module3000.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d4b1e7b..6d9c577 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -30,6 +30,7 @@
#include "neverhood/module1700.h"
#include "neverhood/module1800.h"
#include "neverhood/module2300.h"
+#include "neverhood/module3000.h"
namespace Neverhood {
@@ -268,7 +269,11 @@ void GameModule::updateModule1200() {
void GameModule::createModule1400(int which) {
setGlobalVar(0x91080831, 0x00AD0012);
- _childObject = new Module1400(_vm, this, which);
+ //_childObject = new Module1400(_vm, this, which);
+
+ _vm->gameState().sceneNum = 9;
+ _childObject = new Module3000(_vm, this, -1);
+
SetUpdateHandler(&GameModule::updateModule1400);
}
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 0b3b10c..20e0bbb 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -18,6 +18,7 @@ MODULE_OBJS = \
module1700.o \
module1800.o \
module2300.o \
+ module3000.o \
mouse.o \
navigationscene.o \
neverhood.o \
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
new file mode 100644
index 0000000..b2fd80f
--- /dev/null
+++ b/engines/neverhood/module3000.cpp
@@ -0,0 +1,525 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module3000.h"
+
+namespace Neverhood {
+
+Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule), _moduleDone(false), _soundVolume(0) {
+
+ debug("Create Module3000(%d)", which);
+
+ // TODO Sound1ChList_addSoundResources(0x81293110, dword_4B7FC8, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 1, 50, 600, 5, 150);
+ // TODO Sound1ChList_setSoundValues(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+
+ _flag = getGlobalVar(0x10938830) != 0;
+
+ if (_flag) {
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
+ // TODO Sound1ChList_playLooping(0x90F0D1C3);
+ }
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ default:
+ case 1:
+ createScene3002(-1);
+ break;
+ case 2:
+ createScene3003(-1);
+ break;
+ case 3:
+ createScene3004(-1);
+ break;
+ case 4:
+ createScene3005(-1);
+ break;
+ case 5:
+ createScene3006(-1);
+ break;
+ case 6:
+ createScene3007(-1);
+ break;
+ case 7:
+ createScene3008(-1);
+ break;
+ case 8:
+ createScene3009(-1);
+ break;
+ case 9:
+ createScene3010(-1);
+ break;
+ case 10:
+ createScene3011(-1);
+ break;
+ case 11:
+ createScene3012(-1);
+ break;
+ case 12:
+ createScene3013(-1);
+ break;
+ }
+ } else if (which == 0) {
+ createScene3002(0);
+ } else if (which == 1) {
+ createScene3005(2);
+ } else if (which == 2) {
+ createScene3005(1);
+ } else if (which == 3) {
+ createScene3006(1);
+ }
+
+ SetMessageHandler(&Module3000::handleMessage);
+
+}
+
+Module3000::~Module3000() {
+ // TODO Sound1ChList_sub_407A50(0x81293110);
+}
+
+void Module3000::createScene3002(int which) {
+ // TODO
+}
+
+void Module3000::createScene3003(int which) {
+ // TODO
+}
+
+void Module3000::createScene3004(int which) {
+ // TODO
+}
+
+void Module3000::createScene3005(int which) {
+ // TODO
+}
+
+void Module3000::createScene3006(int which) {
+ // TODO
+}
+
+void Module3000::createScene3007(int which) {
+ // TODO
+}
+
+void Module3000::createScene3008(int which) {
+ // TODO
+}
+
+void Module3000::createScene3009(int which) {
+ // TODO
+}
+
+void Module3000::createScene3010(int which) {
+ _vm->gameState().sceneNum = 9;
+ _childObject = new Scene3010(_vm, this, 0);
+ SetUpdateHandler(&Module3000::updateScene3010);
+}
+
+void Module3000::createScene3011(int which) {
+ // TODO
+}
+
+void Module3000::createScene3012(int which) {
+ // TODO
+}
+
+void Module3000::createScene3013(int which) {
+ // TODO
+}
+
+void Module3000::updateScene3010() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ }
+}
+
+// Scene3010
+
+static const uint32 kScene3010VarNameHashes[] = {
+ 0x304008D2,
+ 0x40119852,
+ 0x01180951
+};
+
+static const uint32 kScene3010DeadBoltButtonFileHashes1[] = {
+ 0x301024C2,
+ 0x20280580,
+ 0x30200452
+};
+
+static const uint32 kScene3010DeadBoltButtonFileHashes2[] = {
+ 0x50C025A8,
+ 0x1020A0A0,
+ 0x5000A7E8
+};
+
+static const NPoint kAsScene3010DeadBoltPoints[] = {
+ {550, 307},
+ {564, 415},
+ {560, 514}
+};
+
+static const uint32 kAsScene3010DeadBoltFileHashes2[] = {
+ 0x181A0042,
+ 0x580A08F2,
+ 0x18420076
+};
+
+static const uint32 kAsScene3010DeadBoltFileHashes1[] = {
+ 0x300E105A,
+ 0x804E0052,
+ 0x040E485A
+};
+
+SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene *parentScene, int buttonIndex, int initCountdown, bool initDisabled)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _soundResource1(vm),
+ _soundResource2(vm), _soundResource3(vm), _buttonLocked(false), _countdown1(0),
+ _countdown2(0), _buttonIndex(buttonIndex) {
+
+ NDimensions dimensions1, dimensions2;
+
+ _buttonEnabled = getSubVar(0x14800353, kScene3010VarNameHashes[_buttonIndex]) != 0;
+ _spriteResource.load2(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
+ dimensions1 = _spriteResource.getDimensions();
+ _spriteResource.load2(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
+ dimensions2 = _spriteResource.getDimensions();
+ createSurface(400,
+ MAX(dimensions1.width, dimensions2.width),
+ MAX(dimensions1.height, dimensions2.height));
+ setSprite(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
+ if (initDisabled) {
+ disableButton();
+ } else if (_buttonEnabled) {
+ _countdown1 = initCountdown * 12 + 1;
+ }
+ _soundResource1.load(0xF4217243);
+ _soundResource2.load(0x44049000);
+ _soundResource3.load(0x6408107E);
+ SetUpdateHandler(&SsScene3010DeadBoltButton::update);
+ SetMessageHandler(&SsScene3010DeadBoltButton::handleMessage);
+}
+
+void SsScene3010DeadBoltButton::update() {
+
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ _soundResource1.play();
+ _surface->setVisible(false);
+ setSprite(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
+ }
+
+ if (_countdown2 != 0 && (--_countdown2 == 0)) {
+ _surface->setVisible(true);
+ setSprite(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
+ }
+
+}
+
+uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (!_buttonLocked && _countdown1 == 0) {
+ if (_buttonEnabled) {
+ _soundResource2.play();
+ _soundResource3.play();
+ _surface->setVisible(true);
+ _buttonLocked = true;
+ _parentScene->sendMessage(0x2000, _buttonIndex, this);
+ } else {
+ _parentScene->sendMessage(0x2002, _buttonIndex, this);
+ }
+ _needRefresh = true;
+ StaticSprite::update();
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void SsScene3010DeadBoltButton::disableButton() {
+ _buttonLocked = true;
+ setSprite(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
+ _surface->setVisible(true);
+}
+
+void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) {
+ _spriteResource.load(fileHash);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = _spriteResource.getDimensions().width;
+ _deltaRect.height = _spriteResource.getDimensions().height;
+ processDelta();
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+void SsScene3010DeadBoltButton::setCountdown(int count) {
+ _countdown2 = count * 18 + 1;
+}
+
+AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene, int boltIndex, bool initUnlocked)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
+ _parentScene(parentScene), _boltIndex(boltIndex), _soundToggle(true), _unlocked(false), _locked(false),
+ _countdown(0) {
+
+ _x = kAsScene3010DeadBoltPoints[_boltIndex].x;
+ _y = kAsScene3010DeadBoltPoints[_boltIndex].y;
+
+ if (getSubVar(0x14800353, kScene3010VarNameHashes[_boltIndex])) {
+ createSurface1(kAsScene3010DeadBoltFileHashes1[_boltIndex], 1200);
+ setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
+ _soundResource1.load(0x46005BC4);
+ } else {
+ createSurface1(kAsScene3010DeadBoltFileHashes2[_boltIndex], 1200);
+ setFileHash(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
+ _soundResource1.load(0x420073DC);
+ _soundResource2.load(0x420073DC);
+ }
+
+ _surface->setVisible(false);
+ stIdle();
+ if (initUnlocked)
+ unlock(true);
+
+ _needRefresh = true;
+ AnimatedSprite::updatePosition();
+
+}
+
+void AsScene3010DeadBolt::update() {
+ updateAnim();
+ updatePosition();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ stDisabled();
+ }
+}
+
+uint32 AsScene3010DeadBolt::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene3010DeadBolt::stIdle() {
+ setFileHash1();
+ SetUpdateHandler(&AsScene3010DeadBolt::update);
+ SetMessageHandler(&Sprite::handleMessage);
+ _locked = false;
+}
+
+void AsScene3010DeadBolt::unlock(bool skipAnim) {
+ if (!_unlocked) {
+ _surface->setVisible(true);
+ if (skipAnim) {
+ setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], -1, 0);
+ _newHashListIndex = -2;
+ } else {
+ setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
+ SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
+ setCallback1(AnimationCallback(&AsScene3010DeadBolt::stIdleMessage));
+ SetAnimationCallback3(&AsScene3010DeadBolt::stIdle);
+ _soundResource1.play();
+ }
+ _unlocked = true;
+ _soundResource3.load(0x4010C345);
+ }
+}
+
+void AsScene3010DeadBolt::stIdleMessage() {
+ setFileHash1();
+ SetMessageHandler(&Sprite::handleMessage);
+ _parentScene->sendMessage(0x2001, _boltIndex, this);
+}
+
+void AsScene3010DeadBolt::lock() {
+ if (!_locked) {
+ _locked = true;
+ _surface->setVisible(true);
+ setFileHash(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
+ SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
+ setCallback1(AnimationCallback(&AsScene3010DeadBolt::stDisabledMessage));
+ SetAnimationCallback3(&AsScene3010DeadBolt::stIdle);
+ if (_soundToggle) {
+ _soundResource1.play();
+ } else {
+ _soundResource2.play();
+ }
+ _soundToggle = !_soundToggle;
+ }
+}
+
+void AsScene3010DeadBolt::setCountdown(int count) {
+ _countdown = count * 18 + 1;
+}
+
+void AsScene3010DeadBolt::stDisabled() {
+ _surface->setVisible(true);
+ setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
+ SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
+ setCallback1(AnimationCallback(&AsScene3010DeadBolt::stDisabledMessage));
+ SetAnimationCallback3(&AsScene3010DeadBolt::stIdle);
+ _playBackwards = true;
+ _soundResource3.play();
+}
+
+void AsScene3010DeadBolt::stDisabledMessage() {
+ _surface->setVisible(false);
+ _parentScene->sendMessage(0x2003, _boltIndex, this);
+}
+
+Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm), _countdown(0),
+ _doorUnlocked(false), _checkUnlocked(false) {
+
+ int initCountdown = 0;
+
+ // DEBUG: Enable all buttons
+ setSubVar(0x14800353, kScene3010VarNameHashes[0], 1);
+ setSubVar(0x14800353, kScene3010VarNameHashes[1], 1);
+ setSubVar(0x14800353, kScene3010VarNameHashes[2], 1);
+
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x80802626, 0, 0));
+ _palette = new Palette(_vm, 0x80802626);
+ _palette->usePalette();
+
+ for (int i = 0; i < 3; i++) {
+ _asDeadBolts[i] = new AsScene3010DeadBolt(_vm, this, i, which == 1);//CHECKME
+ addSprite(_asDeadBolts[i]);
+ _ssDeadBoltButtons[i] = new SsScene3010DeadBoltButton(_vm, this, i, initCountdown, which == 1);//CHECKME
+ addSprite(_ssDeadBoltButtons[i]);
+ _vm->_collisionMan->addSprite(_ssDeadBoltButtons[i]);
+ if (getSubVar(0x14800353, kScene3010VarNameHashes[i]))
+ initCountdown++;
+ _boltUnlocking[i] = false;
+ _boltUnlocked[i] = false;
+ }
+
+ if (which == 0) {
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x02622800, 20, 620));
+ }
+
+ _soundResource.load(0x68E25540);
+
+ SetMessageHandler(&Scene3010::handleMessage);
+ SetUpdateHandler(&Scene3010::update);
+
+ if (which == 1) {
+ _checkUnlocked = true;
+ for (int i = 0; i < 3; i++) {
+ _boltUnlocked[i] = true;
+ _ssDeadBoltButtons[i]->setCountdown(i + 1);
+ _asDeadBolts[i]->setCountdown(i + 1);
+ }
+ }
+
+}
+
+void Scene3010::update() {
+ Scene::update();
+ if (_checkUnlocked && !_boltUnlocked[0] && !_boltUnlocked[1] && !_boltUnlocked[2]) {
+ _countdown = 24;
+ _checkUnlocked = false;
+ }
+ if (_countdown != 0 && (--_countdown == 0)) {
+ _parentModule->sendMessage(0x1009, _doorUnlocked ? 1 : 0, this);
+ }
+}
+
+uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug stuff
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && _countdown == 0 && !_checkUnlocked) {
+ if (!_boltUnlocking[0] && !_boltUnlocking[1] && !_boltUnlocking[2]) {
+ _mouseCursor->getSurface()->setVisible(false);
+ if (!_boltUnlocked[0] && !_boltUnlocked[1] && !_boltUnlocked[2]) {
+ _countdown = 1;
+ } else {
+ _checkUnlocked = true;
+ for (int i = 0; i < 3; i++) {
+ _ssDeadBoltButtons[i]->setCountdown(i);
+ if (_boltUnlocked[i]) {
+ _asDeadBolts[i]->setCountdown(i);
+ }
+ }
+ }
+ }
+ }
+ break;
+ case 0x000D:
+ // TODO: Debug stuff
+ break;
+ case 0x2000:
+ if (!_boltUnlocked[param.asInteger()] && !_checkUnlocked && _countdown == 0) {
+ _asDeadBolts[param.asInteger()]->unlock(false);
+ _boltUnlocking[param.asInteger()] = true;
+ }
+ break;
+ case 0x2001:
+ _boltUnlocked[param.asInteger()] = true;
+ _boltUnlocking[param.asInteger()] = false;
+ if (_boltUnlocked[0] && _boltUnlocked[1] && _boltUnlocked[2]) {
+ if (!getGlobalVar(0x00040153)) {
+ setGlobalVar(0x00040153, 1);
+ _soundResource.play();
+ _countdown = 60;
+ } else {
+ _countdown = 48;
+ }
+ _doorUnlocked = true;
+ }
+ break;
+ case 0x2002:
+ if (!_checkUnlocked && _countdown == 0) {
+ _asDeadBolts[param.asInteger()]->lock();
+ }
+ break;
+ case 0x2003:
+ _boltUnlocked[param.asInteger()] = false;
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
new file mode 100644
index 0000000..b2375fc
--- /dev/null
+++ b/engines/neverhood/module3000.h
@@ -0,0 +1,121 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE3000_H
+#define NEVERHOOD_MODULE3000_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/module1200.h"
+
+namespace Neverhood {
+
+class Module3000 : public Module {
+public:
+ Module3000(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module3000();
+protected:
+ bool _moduleDone;
+ int _moduleDoneStatus;
+ int _soundVolume;
+ bool _flag;
+ void createScene3002(int which);
+ void createScene3003(int which);
+ void createScene3004(int which);
+ void createScene3005(int which);
+ void createScene3006(int which);
+ void createScene3007(int which);
+ void createScene3008(int which);
+ void createScene3009(int which);
+ void createScene3010(int which);
+ void createScene3011(int which);
+ void createScene3012(int which);
+ void createScene3013(int which);
+ void updateScene3010();
+};
+
+// Scene3010
+
+class SsScene3010DeadBoltButton : public StaticSprite {
+public:
+ SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene *parentScene, int buttonIndex, int initCountdown, bool initDisabled);
+ void setCountdown(int count);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ int _buttonIndex;
+ bool _buttonEnabled;
+ bool _buttonLocked;
+ int _countdown1;
+ int _countdown2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void disableButton();
+ void setSprite(uint32 fileHash);
+};
+
+class AsScene3010DeadBolt : public AnimatedSprite {
+public:
+ AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene, int boltIndex, bool initUnlocked);
+ void setCountdown(int count);
+ void lock();
+ void unlock(bool skipAnim);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ int _boltIndex;
+ int _countdown;
+ bool _soundToggle;
+ bool _unlocked;
+ bool _locked;
+ void update();
+ uint32 hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdle();
+ void stIdleMessage();
+ void stDisabled();
+ void stDisabledMessage();
+};
+
+class Scene3010 : public Scene {
+public:
+ Scene3010(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource;
+ int _countdown;
+ bool _doorUnlocked;
+ bool _checkUnlocked;
+ SsScene3010DeadBoltButton *_ssDeadBoltButtons[3];
+ AsScene3010DeadBolt *_asDeadBolts[3];
+ bool _boltUnlocked[3];
+ bool _boltUnlocking[3];
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE3000_H */
Commit: 63fe7bd18a10e2799d6c6d4566aa6655636ad637
https://github.com/scummvm/scummvm/commit/63fe7bd18a10e2799d6c6d4566aa6655636ad637
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Introduce and use Module::createNavigationScene and Module::createSmackerScene
Changed paths:
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1200.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2300.cpp
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 8f0b556..15960e8 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -21,6 +21,8 @@
*/
#include "neverhood/module.h"
+#include "neverhood/navigationscene.h"
+#include "neverhood/smackerscene.h"
namespace Neverhood {
@@ -70,4 +72,16 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
return 0;
}
+void Module::createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes) {
+ _childObject = new NavigationScene(_vm, this, navigationListId, navigationIndex, itemsTypes);
+}
+
+void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort) {
+ SmackerScene *smackerScene;
+ smackerScene = new SmackerScene(_vm, this, doubleSurface, flag1, canAbort);
+ smackerScene->setFileHash(fileHash);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 790130a..fd35f0d 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -48,6 +48,8 @@ protected:
int16 _field24, _field26, _field28;
uint32 _field20;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
+ void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 7a09b5f..ff494e7 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -21,7 +21,6 @@
*/
#include "neverhood/module1200.h"
-#include "neverhood/smackerscene.h"
namespace Neverhood {
@@ -81,13 +80,9 @@ void Module1200::createScene1202(int which) {
}
void Module1200::createScene1203(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 2;
// TODO Music18hList_stop(0x62222CAE, 0, 0);
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x31890001);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x31890001, true, true, false);
setGlobalVar(0x2A02C07B, 1);
SetUpdateHandler(&Module1200::updateScene1203);
}
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 4da5faa..52e5ae7 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -24,7 +24,6 @@
#include "neverhood/module1000.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/gamemodule.h"
-#include "neverhood/navigationscene.h"
namespace Neverhood {
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 95b3925..9506f80 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -91,19 +91,13 @@ void Module1500::createScene1502() {
}
void Module1500::createScene1503() {
- debug("createScene1503");
- SmackerScene *smackerScene;
_parentModule->sendMessage(0x0800, 0, this);
_vm->gameState().sceneNum = 2;
- smackerScene = new SmackerScene(_vm, this, true, true, true);
- smackerScene->setFileHash(0x001A0005);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x001A0005, true, true, true);
SetUpdateHandler(&Module1500::update);
}
void Module1500::createScene1504() {
- debug("createScene1504");
_vm->gameState().sceneNum = 3;
_childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
SetUpdateHandler(&Module1500::update);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 3289173..e6cbe62 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -21,7 +21,6 @@
*/
#include "neverhood/module1700.h"
-#include "neverhood/navigationscene.h"
namespace Neverhood {
@@ -67,36 +66,28 @@ Module1700::~Module1700() {
}
void Module1700::createScene1701(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 0;
// TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x3028A005);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x3028A005, true, true, false);
SetUpdateHandler(&Module1700::updateScene1701);
}
void Module1700::createScene1702(int which) {
_vm->gameState().sceneNum = 1;
- _childObject = new NavigationScene(_vm, this, 0x004AE8B8, which, NULL);
+ createNavigationScene(0x004AE8B8, which);
SetUpdateHandler(&Module1700::updateScene1702);
}
void Module1700::createScene1703(int which) {
_vm->gameState().sceneNum = 2;
- _childObject = new NavigationScene(_vm, this, 0x004AE8E8, which, NULL);
+ createNavigationScene(0x004AE8E8, which);
SetUpdateHandler(&Module1700::updateScene1703);
}
void Module1700::createScene1704(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 3;
// TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x01190041);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x01190041, true, true, false);
SetUpdateHandler(&Module1700::updateScene1701);
}
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 2a4d89c..1ce2d0f 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -22,9 +22,6 @@
#include "neverhood/module1800.h"
#include "neverhood/navigationscene.h"
-#include "neverhood/smackerscene.h"
-
-#include "neverhood/diskplayerscene.h"
namespace Neverhood {
@@ -85,77 +82,58 @@ Module1800::~Module1800() {
void Module1800::createScene1801(int which) {
static const byte kNavigationTypes[] = {1, 0, 2, 0};
_vm->gameState().sceneNum = 0;
-#if 0
- _childObject = new NavigationScene(_vm, this, 0x004AFD38, which, kNavigationTypes);
-#endif
- _childObject = new DiskplayerScene(_vm, this, 3);
+ createNavigationScene(0x004AFD38, which, kNavigationTypes);
SetUpdateHandler(&Module1800::updateScene1801);
}
void Module1800::createScene1802(int which) {
static const byte kNavigationTypes[] = {5};
_vm->gameState().sceneNum = 1;
- _childObject = new NavigationScene(_vm, this, 0x004AFD98, which, kNavigationTypes);
+ createNavigationScene(0x004AFD98, which, kNavigationTypes);
SetUpdateHandler(&Module1800::updateScene1802);
}
void Module1800::createScene1803(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 2;
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x006C0085);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x006C0085, true, true, false);
SetUpdateHandler(&Module1800::updateScene1803);
}
void Module1800::createScene1804(int which) {
_vm->gameState().sceneNum = 3;
- _childObject = new NavigationScene(_vm, this, 0x004AFDB0, which, NULL);
+ createNavigationScene(0x004AFDB0, which);
SetUpdateHandler(&Module1800::updateScene1804);
}
void Module1800::createScene1804b(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 3;
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x0A840C01);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x0A840C01, true, true, false);
SetUpdateHandler(&Module1800::updateScene1803);
}
void Module1800::createScene1805(int which) {
_vm->gameState().sceneNum = 4;
- _childObject = new NavigationScene(_vm, this, 0x004AFDE0, which, NULL);
+ createNavigationScene(0x004AFDE0, which);
SetUpdateHandler(&Module1800::updateScene1805);
}
void Module1800::createScene1806(int which) {
_vm->gameState().sceneNum = 5;
- _childObject = new NavigationScene(_vm, this, 0x004AFE40, which, NULL);
+ createNavigationScene(0x004AFE40, which);
SetUpdateHandler(&Module1800::updateScene1806);
}
void Module1800::createScene1807(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 6;
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x08D84010);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x08D84010, true, true, false);
SetUpdateHandler(&Module1800::updateScene1803);
// TODO Sound1ChList_sub_407A50(0x04A14718);
}
void Module1800::createScene1808(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 7;
// TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 0, 0, 0, 0, 0);
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x0168B121);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x0168B121, true, true, false);
SetUpdateHandler(&Module1800::updateScene1803);
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 32ce2a1..6bd10bb 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -21,8 +21,6 @@
*/
#include "neverhood/module2300.h"
-#include "neverhood/navigationscene.h"
-#include "neverhood/smackerscene.h"
namespace Neverhood {
@@ -84,13 +82,13 @@ Module2300::~Module2300() {
void Module2300::createScene2301(int which) {
_vm->gameState().sceneNum = 0;
- _childObject = new NavigationScene(_vm, this, 0x004B67B8, which, NULL);
+ createNavigationScene(0x004B67B8, which);
SetUpdateHandler(&Module2300::updateScene2301);
}
void Module2300::createScene2302(int which) {
_vm->gameState().sceneNum = 1;
- _childObject = new NavigationScene(_vm, this, 0x004B67E8, which, NULL);
+ createNavigationScene(0x004B67E8, which);
SetUpdateHandler(&Module2300::updateScene2302);
if (_flag) {
_volume = 15;
@@ -100,17 +98,17 @@ void Module2300::createScene2302(int which) {
void Module2300::createScene2303(int which) {
_vm->gameState().sceneNum = 2;
- _childObject = new NavigationScene(_vm, this, 0x004B6878, which, NULL);
+ createNavigationScene(0x004B6878, which);
SetUpdateHandler(&Module2300::updateScene2303);
}
void Module2300::createScene2304(int which) {
_vm->gameState().sceneNum = 3;
if (getGlobalVar(0x10938830)) {
- _childObject = new NavigationScene(_vm, this, 0x004B68F0, which, NULL);
+ createNavigationScene(0x004B68F0, which);
} else {
// TODO Sound1ChList_setVolume(0x90F0D1C3, _volume);
- _childObject = new NavigationScene(_vm, this, 0x004B68A8, which, NULL);
+ createNavigationScene(0x004B68A8, which);
if (_flag) {
_volume = 87;
// TODO Sound1ChList_setVolume(0x90F0D1C3, 87);
@@ -120,13 +118,9 @@ void Module2300::createScene2304(int which) {
}
void Module2300::createScene2305(int which) {
- SmackerScene *smackerScene;
_vm->gameState().sceneNum = 4;
// TODO Sound1ChList_sub_4080B0(true);
- smackerScene = new SmackerScene(_vm, this, true, true, false);
- smackerScene->setFileHash(0x20080A0B);
- smackerScene->nextVideo();
- _childObject = smackerScene;
+ createSmackerScene(0x20080A0B, true, true, false);
SetUpdateHandler(&Module2300::updateScene2305);
}
Commit: d88836596d4c12763332d300c0da2282e24f535d
https://github.com/scummvm/scummvm/commit/d88836596d4c12763332d300c0da2282e24f535d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: More work on Module3000 and Scene3009 (incomplete)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6d9c577..f280399 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -214,12 +214,13 @@ void GameModule::startup() {
// createModule1500(0); // Logos and intro video //Real
// createModule1000(-1);
// createModule2300(2);
- _vm->gameState().sceneNum = 4;
+ _vm->gameState().sceneNum = 8;
//createModule1200(-1);
//createModule1800(-1);
//createModule1700(-1);
//createModule1700(1);
- createModule1400(-1);
+ //createModule1400(-1);
+ createModule3000(-1);
}
void GameModule::createModule1000(int which) {
@@ -418,7 +419,35 @@ void GameModule::createModule2400(int which) {
}
void GameModule::createModule3000(int which) {
- error("createModule3000");
+ setGlobalVar(0x91080831, 0x81293110);
+ _childObject = new Module3000(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule3000);
+}
+
+void GameModule::updateModule3000() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ // TODO createModule1900(0);
+ // TODO _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ // WEIRD: Sets the errorFlag
+ } else if (_field20 == 3) {
+ createModule1800(3);
+ _childObject->handleUpdate();
+ } else if (_field20 == 4) {
+ // TODO createModule3000(0);
+ // TODO _childObject->handleUpdate();
+ } else {
+ createModule2300(4);
+ _childObject->handleUpdate();
+ }
+ }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index d93a799..8d5aace 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -67,6 +67,7 @@ protected:
void updateModule2300();
void createModule2400(int which);
void createModule3000(int which);
+ void updateModule3000();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 15960e8..edf67c7 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -72,6 +72,11 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
return 0;
}
+NavigationScene *Module::navigationScene() {
+ // Not so nice
+ return (NavigationScene*)_childObject;
+}
+
void Module::createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes) {
_childObject = new NavigationScene(_vm, this, navigationListId, navigationIndex, itemsTypes);
}
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index fd35f0d..470fe36 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -36,6 +36,8 @@
namespace Neverhood {
+class NavigationScene;
+
class Module : public Entity {
public:
Module(NeverhoodEngine *vm, Module *parentModule);
@@ -48,6 +50,7 @@ protected:
int16 _field24, _field26, _field28;
uint32 _field20;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
};
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 1ce2d0f..e2c88dc 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -173,7 +173,7 @@ void Module1800::updateScene1801() {
void Module1800::updateScene1802() {
_childObject->handleUpdate();
if (_done) {
- int areaType = ((NavigationScene*)_childObject)->getNavigationAreaType();
+ int areaType = navigationScene()->getNavigationAreaType();
_done = false;
delete _childObject;
_childObject = NULL;
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index b2fd80f..c82c111 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/module3000.h"
+#include "neverhood/navigationscene.h"
namespace Neverhood {
@@ -101,36 +102,115 @@ Module3000::~Module3000() {
// TODO Sound1ChList_sub_407A50(0x81293110);
}
+uint32 Module3000::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Module::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1009:
+ _moduleDone = true;
+ _moduleDoneStatus = param.asInteger();
+ break;
+ }
+ return messageResult;
+}
+
void Module3000::createScene3002(int which) {
- // TODO
+ _vm->gameState().sceneNum = 1;
+ if (!getGlobalVar(0x01BA1A52)) {
+ createNavigationScene(0x004B7C80, which);
+ } else if (getGlobalVar(0x10938830)) {
+ createNavigationScene(0x004B7CE0, which);
+ } else {
+ createNavigationScene(0x004B7CB0, which);
+ }
+ SetUpdateHandler(&Module3000::updateScene3002);
+}
+
+void Module3000::createScene3002b(int which) {
+ _vm->gameState().sceneNum = 1;
+ if (!getGlobalVar(0x01BA1A52)) {
+ if (getGlobalVar(0x10938830)) {
+ createSmackerScene(0x00940021, true, true, false);
+ } else {
+ createSmackerScene(0x01140021, true, true, false);
+ }
+ } else {
+ if (getGlobalVar(0x10938830)) {
+ createSmackerScene(0x001011B1, true, true, false);
+ } else {
+ createSmackerScene(0x001021B1, true, true, false);
+ }
+ }
+ SetUpdateHandler(&Module3000::updateScene3002b);
+ setGlobalVar(0x01BA1A52, getGlobalVar(0x01BA1A52) ? 0 : 1);
}
void Module3000::createScene3003(int which) {
- // TODO
+ _vm->gameState().sceneNum = 2;
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ if (_flag) {
+ _soundVolume = 90;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 90);
+ }
+ if (getGlobalVar(0x10938830)) {
+ createNavigationScene(0x004B7D58, which);
+ } else {
+ createNavigationScene(0x004B7D10, which);
+ }
+ SetUpdateHandler(&Module3000::updateScene3003);
}
void Module3000::createScene3004(int which) {
- // TODO
+ _vm->gameState().sceneNum = 3;
+ if (getGlobalVar(0x09221A62)) {
+ createNavigationScene(0x004B7E60, which);
+ } else if (getGlobalVar(0x10938830)) {
+ createNavigationScene(0x004B7DA0, which);
+ } else {
+ createNavigationScene(0x004B7E00, which);
+ }
+ SetUpdateHandler(&Module3000::updateScene3004);
}
void Module3000::createScene3005(int which) {
- // TODO
+ _vm->gameState().sceneNum = 4;
+ if (getGlobalVar(0x09221A62)) {
+ createNavigationScene(0x004B7F20, which);
+ } else {
+ createNavigationScene(0x004B7EC0, which);
+ }
+ SetUpdateHandler(&Module3000::updateScene3005);
}
void Module3000::createScene3006(int which) {
- // TODO
+ static const byte kNavigationTypes[] = {3, 0};
+ _vm->gameState().sceneNum = 5;
+ createNavigationScene(0x004B7F80, which, kNavigationTypes);
+ SetUpdateHandler(&Module3000::updateScene3006);
}
void Module3000::createScene3007(int which) {
- // TODO
+ static const byte kNavigationTypes[] = {5};
+ _vm->gameState().sceneNum = 6;
+ createNavigationScene(0x004B7FB0, which, kNavigationTypes);
+ SetUpdateHandler(&Module3000::updateScene3007);
}
void Module3000::createScene3008(int which) {
- // TODO
+ _vm->gameState().sceneNum = 6;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
+ if (!getSubVar(0x40050052, 0x089809C2)) {
+ setSubVar(0x40050052, 0x089809C2, 1);
+ createSmackerScene(0x90022001, true, true, false);
+ } else {
+ createSmackerScene(0x98022001, true, true, false);
+ }
+ SetUpdateHandler(&Module3000::updateScene3002b);
}
void Module3000::createScene3009(int which) {
- // TODO
+ _vm->gameState().sceneNum = 7;
+ _childObject = new Scene3009(_vm, this, which);
+ SetUpdateHandler(&Module3000::updateScene3009);
}
void Module3000::createScene3010(int which) {
@@ -144,11 +224,260 @@ void Module3000::createScene3011(int which) {
}
void Module3000::createScene3012(int which) {
- // TODO
+ _vm->gameState().sceneNum = 11;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
+ if (!getSubVar(0x40050052, 0x10130993)) {
+ setSubVar(0x40050052, 0x10130993, 1);
+ createSmackerScene(0x31093019, true, true, false);
+ } else {
+ createSmackerScene(0x20093019, true, true, false);
+ }
+ SetUpdateHandler(&Module3000::updateScene3002b);
}
void Module3000::createScene3013(int which) {
- // TODO
+ _vm->gameState().sceneNum = 12;
+ _childObject = new Scene3010(_vm, this, 1);
+ SetUpdateHandler(&Module3000::updateScene3002b);
+}
+
+void Module3000::updateScene3002() {
+ _childObject->handleUpdate();
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (navigationIndex == 1) {
+ if (frameNumber == 0) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ } else if (frameNumber == 100) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ }
+ } else if (navigationIndex == 0) {
+ if (frameNumber == 0) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ } else if (frameNumber == 10) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ }
+ if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (frameNumber == 0)
+ _soundVolume = 40;
+ else
+ _soundVolume++;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
+ }
+ }
+#endif
+ if (_moduleDone) {
+ int areaType = navigationScene()->getNavigationAreaType();
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (!getGlobalVar(0x01BA1A52)) {
+ if (_moduleDoneStatus == 0) {
+ createScene3010(-1);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 1) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ } else {
+ if (_moduleDoneStatus == 0) {
+ if (areaType == 2) {
+ createScene3003(0);
+ _childObject->handleUpdate();
+ } else {
+ //createScene3002b(-1);
+ _childObject->handleUpdate();
+ }
+ } else if (_moduleDoneStatus == 1) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ }
+ }
+}
+
+void Module3000::updateScene3002b() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ switch (_vm->gameState().sceneNum) {
+ case 1:
+ if (getGlobalVar(0x01BA1A52)) {
+ createScene3002(0);
+ _childObject->handleUpdate();
+ } else {
+ createScene3013(-1);
+ _childObject->handleUpdate();
+ }
+ break;
+ case 7:
+ case 8:
+ createScene3009(-1);
+ break;
+ case 11:
+ _parentModule->sendMessage(0x1009, 3, this);
+ break;
+ case 12:
+ createScene3002(0);
+ _childObject->handleUpdate();
+ break;
+ default:
+ createScene3006(0);
+ break;
+ }
+ }
+}
+
+void Module3000::updateScene3003() {
+ _childObject->handleUpdate();
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (_flag && _soundVolume > 1 && frameNumber % 2) {
+ _soundVolume--;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
+ if (navigationIndex == 0) {
+ if (frameNumber == 35) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ }
+ } else if (navigationIndex == 1) {
+ if (frameNumber == 55) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ }
+ }
+ }
+#endif
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ if (_flag) {
+ _soundVolume = 0;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
+ }
+ if (_moduleDoneStatus == 0) {
+ createScene3004(0);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 1) {
+ setGlobalVar(0x01BA1A52, 0);
+ createScene3002(1);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module3000::updateScene3004() {
+ _childObject->handleUpdate();
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (navigationIndex == 2) {
+ if (frameNumber == 40) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ }
+ if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (frameNumber == 0)
+ _soundVolume = 40;
+ else
+ _soundVolume++;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
+ }
+ }
+#endif
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_moduleDoneStatus == 1) {
+ createScene3005(0);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 3) {
+ createScene3011(-1);
+ _childObject->handleUpdate();
+ } else if (getGlobalVar(0x09221A62)) {
+ createScene3006(0);
+ _childObject->handleUpdate();
+ } else {
+ createScene3003(1);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module3000::updateScene3005() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_moduleDoneStatus == 0) {
+ _parentModule->sendMessage(0x1009, 1, this);
+ } else if (_moduleDoneStatus == 1) {
+ createScene3008(-1);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 2) {
+ createScene3004(3);
+ _childObject->handleUpdate();
+ }
+ }
+ // NOTE: Skipped resource preloading stuff
+}
+
+void Module3000::updateScene3006() {
+ _childObject->handleUpdate();
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
+#endif
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_moduleDoneStatus == 0) {
+ createScene3007(0);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 1) {
+ createScene3004(0);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
+void Module3000::updateScene3007() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ int areaType = navigationScene()->getNavigationAreaType();
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (areaType == 4) {
+ createScene3012(-1);
+ _childObject->handleUpdate();
+ } else {
+ createSmackerScene(0x080810C5, true, true, false);
+ SetUpdateHandler(&Module3000::updateScene3002b);
+ }
+ }
+}
+
+void Module3000::updateScene3009() {
+ _childObject->handleUpdate();
+ // TODO...
}
void Module3000::updateScene3010() {
@@ -157,9 +486,517 @@ void Module3000::updateScene3010() {
_done = false;
delete _childObject;
_childObject = NULL;
+ if (_moduleDoneStatus == 0 || _moduleDoneStatus == 2) {
+ createScene3002(0);
+ _childObject->handleUpdate();
+ } else if (_moduleDoneStatus == 1) {
+ createScene3002b(-1);
+ _childObject->handleUpdate();
+ }
}
}
+// Scene3009
+
+static const uint32 kScene3009SmackerFileHashes[] = {
+ 0x1010000D,
+ 0x340A0049,
+ 0x340A0049,
+ 0x0282081D,
+ 0x0082080D,
+ 0x0882080D,
+ 0x0882080D,
+ 0x0282081D,
+ 0x004B000B,
+ 0x014B000B,
+ 0x044B000B,
+ 0x0282081D,
+ 0x0282081D,
+ 0x0282081D,
+ 0x340A0049
+};
+
+static const uint32 kScene3009VarValues[] = {
+ 0x00000000,
+ 0x8004001B,
+ 0x0004001A,
+ 0x1048404B,
+ 0x50200109,
+ 0x12032109,
+ 0x10201109,
+ 0x000A2030,
+ 0x000A0028,
+ 0x000A0028,
+ 0x000A0028,
+ 0x040A1069,
+ 0x040A1069,
+ 0x040A1069,
+ 0x240A1101
+};
+
+static const uint32 kClass439FileHashes[] = {
+ 0x618827A0,
+ 0xB1A92322
+};
+
+static const uint32 kClass440FileHashes[] = {
+ 0x4011018C,
+ 0x15086623
+};
+
+static const NPoint kClass524Points[] = {
+ {289, 338},
+ {285, 375},
+ {284, 419},
+ {456, 372},
+ {498, 372},
+ {541, 372}
+};
+
+static const uint32 kClass524FileHashes[] = {
+ 0x24542582,
+ 0x1CD61D96
+};
+
+static const uint32 kClass441FileHashes1[] = {
+ 0x24016060,
+ 0x21216221,
+ 0x486160A0,
+ 0x42216422,
+ 0x90A16120,
+ 0x84216824,
+ 0x08017029,
+ 0x08217029,
+ 0x10014032,
+ 0x10214032,
+ 0x20012004,
+ 0x20212004
+};
+
+static const uint32 kClass441FileHashes2[] = {
+ 0x40092024,
+ 0x01636002,
+ 0x8071E028,
+ 0x02A56064,
+ 0x00806031,
+ 0x052960A8,
+ 0x0A116130,
+ 0x0A316130,
+ 0x14216200,
+ 0x14016200,
+ 0x28416460,
+ 0x28616460
+};
+
+Class438::Class438(NeverhoodEngine *vm, Scene3009 *parentScene)
+ : StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene),
+ _flag1(false) {
+
+ _spriteResource.load2(0x120B24B0);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = _spriteResource.getDimensions().width;
+ _deltaRect.height = _spriteResource.getDimensions().height;
+ _surface->setVisible(false);
+ processDelta();
+ _needRefresh = true;
+ SetUpdateHandler(&Class438::update);
+ SetMessageHandler(&Class438::handleMessage);
+ _soundResource.load(0x3901B44F);
+}
+
+void Class438::update() {
+ StaticSprite::update();
+ if (_flag1 && !_soundResource.isPlaying()) {
+ _parentScene->sendMessage(0x2000, 0, this);
+ _surface->setVisible(false);
+ }
+}
+
+uint32 Class438::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (!_flag1 && !_parentScene->sub462E90()) {
+ _flag1 = true;
+ _surface->setVisible(true);
+ _soundResource.play();
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+Class439::Class439(NeverhoodEngine *vm, int index)
+ : StaticSprite(vm, 1400), _blinkCountdown(0) {
+
+ _spriteResource.load2(kClass439FileHashes[index]);
+ createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _needRefresh = true;
+ if (getGlobalVar(0x0C0288F4)) {
+ hide();
+ } else {
+ startBlinking();
+ }
+ SetUpdateHandler(&Class439::update);
+}
+
+void Class439::update() {
+ if (_blinkCountdown != 0 && (--_blinkCountdown == 0)) {
+ if (_blinkToggle) {
+ _surface->setVisible(true);
+ } else {
+ _surface->setVisible(false);
+ }
+ StaticSprite::update();
+ _blinkCountdown = 3;
+ _blinkToggle = !_blinkToggle;
+ }
+}
+
+void Class439::show() {
+ _surface->setVisible(true);
+ StaticSprite::update();
+ _blinkCountdown = 0;
+}
+
+void Class439::hide() {
+ _surface->setVisible(false);
+ StaticSprite::update();
+ _blinkCountdown = 0;
+}
+
+void Class439::startBlinking() {
+ _surface->setVisible(true);
+ StaticSprite::update();
+ _blinkCountdown = 3;
+ _blinkToggle = true;
+}
+
+Class440::Class440(NeverhoodEngine *vm, int index)
+ : StaticSprite(vm, 1400) {
+
+ _spriteResource.load2(kClass440FileHashes[index]);
+ createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _surface->setVisible(false);
+ _needRefresh = true;
+}
+
+Class522::Class522(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
+ : AnimatedSprite(vm, 1000), _parentScene(parentScene), _enabled(false) {
+
+ _x = 300;
+ _y = getGlobalVar(0x000809C2) ? 52 : 266;
+ createSurface1(0xC2463913, 1200);
+ _needRefresh = true;
+ updatePosition();
+ _surface->setVisible(false);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class522::handleMessage);
+}
+
+void Class522::show() {
+ setFileHash(0xC2463913, 0, -1);
+ _surface->setVisible(true);
+ updatePosition();
+ _enabled = true;
+}
+
+uint32 Class522::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_enabled) {
+ _parentScene->sendMessage(0x2002, 0, this);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _flag1(false), _flag2(false),
+ _flag3(false), _flag4(false), _countdown1(1), _countdown2(1) {
+
+ _varValue = getGlobalVar(0x20580A86);
+
+ // TODO _vm->gameModule()->initScene3009Vars();
+
+ setGlobalVar(0xF0402B0A, 0);
+ _surfaceFlag = true;
+
+ _vm->_screen->clear();
+
+ _background = addBackground(new DirtyBackground(_vm, 0xD000420C, 0, 0));
+ _palette = new Palette(_vm, 0xD000420C);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x04208D08, 20, 620));
+
+ _class438 = addSprite(new Class438(_vm, this));
+ _vm->_collisionMan->addSprite(_class438);
+
+ _class522 = new Class522(_vm, this, _varValue);
+ addSprite(_class522);
+ _vm->_collisionMan->addSprite(_class522);
+
+#if 0
+ _class523 = new Class523(_vm, this, _varValue);
+ addSprite(_class523);
+ _vm->_collisionMan->addSprite(_class523);
+#endif
+
+ if (_varValue != 0 && _varValue != 8 && _varValue != 9 && _varValue != 9) {
+ _flag1 = true;
+ } else {
+ _flag1 = false;
+ if (_varValue == 0) {
+#if 0
+ _class523->stMoveUp();
+#endif
+ _flag4 = true;
+ }
+ }
+
+ _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, kScene3009SmackerFileHashes[_varValue], false, _flag1));
+ _smackerPlayer->setDrawPos(89, 37);
+
+ addSprite(new StaticSprite(_vm, 0x8540252C, 400));
+
+ for (int i = 0; i < 2; i++) {
+ _class439Array[i] = new Class439(_vm, i);
+ addSprite(_class439Array[i]);
+ _class440Array[i] = new Class440(_vm, i);
+ addSprite(_class440Array[i]);
+ }
+
+
+#if 0
+ for (int i = 0; i < 6; i++) {
+ _class524Array[i] = new Class524(_vm, this, i);
+ addSprite(_class524Array[i]);
+ if (i < 3)
+ _varValueArray[i] = getSubVar(0x00504B86, i);
+ else
+ _varValueArray[i] = getSubVar(0x0A4C0A9A, i - 3);
+ }
+#endif
+
+ SetMessageHandler(&Scene3009::handleMessage);
+ SetUpdateHandler(&Scene3009::update);
+}
+
+void Scene3009::update() {
+ Scene::update();
+ if (!_flag1 && _smackerPlayer->getFrameNumber() + 1 == _smackerPlayer->getFrameCount() && _varValue <= 14) {
+ switch (_varValue) {
+ case 0:
+ case 14:
+ _smackerPlayer->open(0x340A0049, true);
+ _palette->usePalette();
+ _flag1 = true;
+ break;
+ case 8:
+ _smackerPlayer->open(0x0082080D, true);
+ _palette->usePalette();
+ _flag1 = true;
+ _flag4 = false;
+ break;
+ case 9:
+ _smackerPlayer->open(0x0282080D, true);
+ _palette->usePalette();
+ _flag1 = true;
+ _flag4 = false;
+ break;
+ case 10:
+ _smackerPlayer->open(0x0882080D, true);
+ _palette->usePalette();
+ _flag1 = true;
+ _flag4 = false;
+ break;
+ case 11:
+ case 12:
+ case 13:
+ if (_flag2) {
+ if (_varValue == 11)
+ _smackerPlayer->open(0x110A000F, false);
+ else if (_varValue == 12)
+ _smackerPlayer->open(0x500B004F, false);
+ else if (_varValue == 13)
+ _smackerPlayer->open(0x100B010E, false);
+ _palette->usePalette();
+ _flag2 = false;
+#if 0
+ _class523->stMoveDown();
+#endif
+ } else {
+ sub462DC0();
+ }
+ break;
+ }
+ }
+
+ if (_countdown1 != 0 && (--_countdown1 == 0) && sub462E10()) {
+#if 0
+ for (int i = 0; i < 3; i++)
+ _class524Array[i]->hide();
+#endif
+ if (!getGlobalVar(0x0C0288F4) || getGlobalVar(0x000809C2) || getGlobalVar(0x9040018A)) {
+ _class439Array[0]->show();
+ _class440Array[0]->getSurface()->setVisible(true);
+ // TODO _class440Array->StaticSprite_update
+ _class522->show();
+ }
+ }
+
+ if (_countdown2 != 0 && (--_countdown2 == 0) && sub462E50()) {
+#if 0
+ for (int i = 0; i < 6; i++)
+ _class524Array[i]->hide();
+#endif
+ if (!getGlobalVar(0x0C0288F4) || getGlobalVar(0x000809C2) || getGlobalVar(0x9040018A)) {
+ _class439Array[1]->show();
+ _class440Array[1]->getSurface()->setVisible(true);
+#if 0
+ // TODO _class440Array[1]->StaticSprite_update
+ _class523->show();
+#endif
+ }
+ }
+
+}
+
+uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug stuff
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !getGlobalVar(0x000809C2)) {
+ setGlobalVar(0x20580A86, 0);
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x000D:
+ // TODO: Debug stuff
+ break;
+ case 0x2000:
+ if (!getGlobalVar(0x000809C2)) {
+ if (!getGlobalVar(0x10938830)) {
+ _varValue = 1;
+ setGlobalVar(0x10938830, 1);
+ } else {
+ _varValue = 2;
+ }
+ } else if (!getGlobalVar(0x9040018A)) {
+ _varValue = 3;
+ } else if (!getGlobalVar(0x610210B7)) {
+ _varValue = 4;
+ } else if (!getGlobalVar(0x0C0288F4)) {
+ setGlobalVar(0x0C0288F4, 1);
+ _varValue = 5;
+ } else {
+ _varValue = 6;
+ }
+ sub462DC0();
+ break;
+ case 0x2001:
+ _countdown1 = 24;
+ break;
+ case 0x2002:
+ if (!getGlobalVar(0x9040018A) && !_flag4) {
+ if (getGlobalVar(0x000809C2)) {
+ _varValue = 14;
+ setGlobalVar(0x000809C2, 0);
+ } else {
+ _varValue = 7;
+ setGlobalVar(0x000809C2, 1);
+ }
+ sub462DC0();
+ }
+ break;
+ case 0x2003:
+ _countdown2 = 24;
+ break;
+ case 0x2004:
+ if (getGlobalVar(0x000809C2)) {
+ if (!getGlobalVar(0x9040018A)) {
+ if (!getGlobalVar(0x610210B7)) {
+ _varValue = 8;
+ } else {
+ if (!getGlobalVar(0x0C0288F4)) {
+ _varValue = 9;
+ } else {
+ _varValue = 10;
+ }
+ }
+ setGlobalVar(0x9040018A, 1);
+ _flag4 = true;
+ sub462DC0();
+ } else if (!getGlobalVar(0x610210B7)) {
+ _varValue = 11;
+ _smackerPlayer->open(0x108A000F, false);
+ } else if (!getGlobalVar(0x0C0288F4)) {
+ _varValue = 12;
+ _smackerPlayer->open(0x500B002F, false);
+ } else {
+ _varValue = 13;
+ _smackerPlayer->open(0x100B008E, false);
+ }
+ _palette->usePalette();
+ _flag2 = true;
+ _flag4 = true;
+ _flag1 = false;
+ setGlobalVar(0x9040018A, 0);
+ }
+ break;
+ }
+ return 0;
+}
+
+void Scene3009::sub462DC0() {
+ setGlobalVar(0x20580A86, _varValue);
+ setGlobalVar(0xF0402B0A, kScene3009VarValues[_varValue]);
+ _parentModule->sendMessage(0x1009, 1, this);
+}
+
+bool Scene3009::sub462E10() {
+ for (int i = 0; i < 3; i++)
+ if (_varValueArray[i] != getSubVar(0x00000914, i))
+ return false;
+ return true;
+}
+
+bool Scene3009::sub462E50() {
+ for (int i = 0; i < 6; i++)
+ if (_varValueArray[i] != getSubVar(0x00000914, i))
+ return false;
+ return true;
+}
+
+bool Scene3009::sub462E90() {
+ return _flag3 || _flag4;
+}
+
// Scene3010
static const uint32 kScene3010VarNameHashes[] = {
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index b2375fc..9bda5db 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -39,7 +39,9 @@ protected:
int _moduleDoneStatus;
int _soundVolume;
bool _flag;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createScene3002(int which);
+ void createScene3002b(int which);
void createScene3003(int which);
void createScene3004(int which);
void createScene3005(int which);
@@ -51,9 +53,89 @@ protected:
void createScene3011(int which);
void createScene3012(int which);
void createScene3013(int which);
+ void updateScene3002();
+ void updateScene3002b();
+ void updateScene3003();
+ void updateScene3004();
+ void updateScene3005();
+ void updateScene3006();
+ void updateScene3007();
+ void updateScene3009();
void updateScene3010();
};
+// Scene3009
+
+class Scene3009;
+
+class Class438 : public StaticSprite {
+public:
+ Class438(NeverhoodEngine *vm, Scene3009 *parentScene);
+protected:
+ Scene3009 *_parentScene;
+ SoundResource _soundResource;
+ bool _flag1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Class439 : public StaticSprite {
+public:
+ Class439(NeverhoodEngine *vm, int index);
+ void show();
+ void hide();
+ void startBlinking();
+protected:
+ int _blinkCountdown;
+ bool _blinkToggle;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Class440 : public StaticSprite {
+public:
+ Class440(NeverhoodEngine *vm, int index);
+};
+
+class Class522 : public AnimatedSprite {
+public:
+ Class522(NeverhoodEngine *vm, Scene3009 *parentScene, int index);
+ void show();
+protected:
+ Scene3009 *_parentScene;
+ bool _enabled;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene3009 : public Scene {
+public:
+ Scene3009(NeverhoodEngine *vm, Module *parentModule, int which);
+ bool sub462E90();
+protected:
+ int _countdown1;
+ int _countdown2;
+ SmackerPlayer *_smackerPlayer;
+ Sprite *_class438;
+ Class439 *_class439Array[2];
+ Class440 *_class440Array[2];
+ Class522 *_class522;
+#if 0
+ Class523 *_class523;
+ Class524 *_class524Array[6];
+#endif
+ uint32 _varValue;
+ uint32 _varValueArray[6];
+ bool _flag1;
+ bool _flag2;
+ bool _flag3;
+ bool _flag4;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub462DC0();
+ bool sub462E10();
+ bool sub462E50();
+};
+
// Scene3010
class SsScene3010DeadBoltButton : public StaticSprite {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index b9a464c..2c6b10e 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -179,6 +179,12 @@ Background *Scene::addBackground(Background *background) {
return background;
}
+SmackerPlayer *Scene::addSmackerPlayer(SmackerPlayer *smackerPlayer) {
+ addEntity(smackerPlayer);
+ addSurface(smackerPlayer->getSurface());
+ return smackerPlayer;
+}
+
void Scene::update() {
if (_smkFileHash != 0) {
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 65326c3..ab5cf9f 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -50,6 +50,7 @@ public:
void setSurfacePriority(BaseSurface *surface, int priority);
void deleteSprite(Sprite **sprite);
Background *addBackground(Background *background);
+ SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
protected:
Module *_parentModule;
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index ee6e7aa..deb54af 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -140,8 +140,6 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y,
_x = x == kDefPosition ? _spriteResource.getPosition().x : x;
_y = y == kDefPosition ? _spriteResource.getPosition().y : y;
- debug("StaticSprite::init() final: x = %d; y = %d", _x, _y);
-
_drawRect.x = 0;
_drawRect.y = 0;
_drawRect.width = width;
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index a518c39..7ec5d91 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -96,7 +96,7 @@ public:
void update();
protected:
SpriteResource _spriteResource;
- void init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height);
+ void init(uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
};
#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
Commit: 87d1f79f311f25ea434680caff508614a5c892d9
https://github.com/scummvm/scummvm/commit/87d1f79f311f25ea434680caff508614a5c892d9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: More work on Scene3009
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
engines/neverhood/neverhood.cpp
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index f280399..c1ee6dd 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -45,8 +45,6 @@ GameModule::GameModule(NeverhoodEngine *vm)
SetMessageHandler(&GameModule::handleMessage);
- //startup();
-
}
GameModule::~GameModule() {
@@ -183,6 +181,16 @@ void GameModule::initScene1405Vars() {
}
+void GameModule::initScene3009Vars() {
+ if (!getSubVar(0x40050052, 0x8C9819C2)) {
+ for (int i = 0; i < 3; i++) {
+ setSubVar(0x00504B86, i, _vm->_rnd->getRandomNumber(12 - 1));
+ setSubVar(0x0A4C0A9A, i, _vm->_rnd->getRandomNumber(12 - 1));
+ }
+ setSubVar(0x40050052, 0x8C9819C2, 1);
+ }
+}
+
uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -214,13 +222,19 @@ void GameModule::startup() {
// createModule1500(0); // Logos and intro video //Real
// createModule1000(-1);
// createModule2300(2);
- _vm->gameState().sceneNum = 8;
//createModule1200(-1);
//createModule1800(-1);
//createModule1700(-1);
//createModule1700(1);
//createModule1400(-1);
+#if 1
+ _vm->gameState().sceneNum = 8;
createModule3000(-1);
+#endif
+#if 0
+ _vm->gameState().sceneNum = 0;
+ createModule1800(-1);
+#endif
}
void GameModule::createModule1000(int which) {
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 8d5aace..6290a85 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -38,6 +38,7 @@ public:
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
void initScene1405Vars();
+ void initScene3009Vars();
protected:
Entity *_prevChildObject;
bool _someFlag1;
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index c82c111..45db8ad 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/module3000.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/navigationscene.h"
namespace Neverhood {
@@ -37,7 +38,7 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
// TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
- _flag = getGlobalVar(0x10938830) != 0;
+ _flag = getGlobalVar(0x10938830) != 0;
if (_flag) {
// TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
@@ -196,7 +197,7 @@ void Module3000::createScene3007(int which) {
}
void Module3000::createScene3008(int which) {
- _vm->gameState().sceneNum = 6;
+ _vm->gameState().sceneNum = 7;
// TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
if (!getSubVar(0x40050052, 0x089809C2)) {
setSubVar(0x40050052, 0x089809C2, 1);
@@ -208,7 +209,7 @@ void Module3000::createScene3008(int which) {
}
void Module3000::createScene3009(int which) {
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 8;
_childObject = new Scene3009(_vm, this, which);
SetUpdateHandler(&Module3000::updateScene3009);
}
@@ -478,6 +479,24 @@ void Module3000::updateScene3007() {
void Module3000::updateScene3009() {
_childObject->handleUpdate();
// TODO...
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ _flag = getGlobalVar(0x10938830); // CHECKME
+ if (_moduleDoneStatus != 1) {
+ // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
+ createScene3005(1);
+ _childObject->handleUpdate();
+ } else if (getGlobalVar(0xF0402B0A)) {
+ createSmackerScene(getGlobalVar(0xF0402B0A), true, true, false);
+ SetUpdateHandler(&Module3000::updateScene3002b);
+ } else {
+ // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0);
+ createScene3005(1);
+ _childObject->handleUpdate();
+ }
+ }
}
void Module3000::updateScene3010() {
@@ -516,7 +535,7 @@ static const uint32 kScene3009SmackerFileHashes[] = {
0x340A0049
};
-static const uint32 kScene3009VarValues[] = {
+static const uint32 kScene3009CannonLocationFileHashes[] = {
0x00000000,
0x8004001B,
0x0004001A,
@@ -534,17 +553,17 @@ static const uint32 kScene3009VarValues[] = {
0x240A1101
};
-static const uint32 kClass439FileHashes[] = {
+static const uint32 kSsScene3009SymbolEdgesFileHashes[] = {
0x618827A0,
0xB1A92322
};
-static const uint32 kClass440FileHashes[] = {
+static const uint32 kSsScene3009TargetLineFileHashes[] = {
0x4011018C,
0x15086623
};
-static const NPoint kClass524Points[] = {
+static const NPoint kAsScene3009SymbolPoints[] = {
{289, 338},
{285, 375},
{284, 419},
@@ -553,12 +572,12 @@ static const NPoint kClass524Points[] = {
{541, 372}
};
-static const uint32 kClass524FileHashes[] = {
+static const uint32 kAsScene3009SymbolFileHashes[] = {
0x24542582,
0x1CD61D96
};
-static const uint32 kClass441FileHashes1[] = {
+static const uint32 kSsScene3009SymbolArrowFileHashes1[] = {
0x24016060,
0x21216221,
0x486160A0,
@@ -573,7 +592,7 @@ static const uint32 kClass441FileHashes1[] = {
0x20212004
};
-static const uint32 kClass441FileHashes2[] = {
+static const uint32 kSsScene3009SymbolArrowFileHashes2[] = {
0x40092024,
0x01636002,
0x8071E028,
@@ -588,7 +607,7 @@ static const uint32 kClass441FileHashes2[] = {
0x28616460
};
-Class438::Class438(NeverhoodEngine *vm, Scene3009 *parentScene)
+SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene)
: StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene),
_flag1(false) {
@@ -607,12 +626,12 @@ Class438::Class438(NeverhoodEngine *vm, Scene3009 *parentScene)
_surface->setVisible(false);
processDelta();
_needRefresh = true;
- SetUpdateHandler(&Class438::update);
- SetMessageHandler(&Class438::handleMessage);
+ SetUpdateHandler(&SsScene3009FireCannonButton::update);
+ SetMessageHandler(&SsScene3009FireCannonButton::handleMessage);
_soundResource.load(0x3901B44F);
}
-void Class438::update() {
+void SsScene3009FireCannonButton::update() {
StaticSprite::update();
if (_flag1 && !_soundResource.isPlaying()) {
_parentScene->sendMessage(0x2000, 0, this);
@@ -620,7 +639,7 @@ void Class438::update() {
}
}
-uint32 Class438::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene3009FireCannonButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -635,10 +654,10 @@ uint32 Class438::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-Class439::Class439(NeverhoodEngine *vm, int index)
+SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index)
: StaticSprite(vm, 1400), _blinkCountdown(0) {
- _spriteResource.load2(kClass439FileHashes[index]);
+ _spriteResource.load2(kSsScene3009SymbolEdgesFileHashes[index]);
createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
@@ -652,10 +671,10 @@ Class439::Class439(NeverhoodEngine *vm, int index)
} else {
startBlinking();
}
- SetUpdateHandler(&Class439::update);
+ SetUpdateHandler(&SsScene3009SymbolEdges::update);
}
-void Class439::update() {
+void SsScene3009SymbolEdges::update() {
if (_blinkCountdown != 0 && (--_blinkCountdown == 0)) {
if (_blinkToggle) {
_surface->setVisible(true);
@@ -668,29 +687,29 @@ void Class439::update() {
}
}
-void Class439::show() {
+void SsScene3009SymbolEdges::show() {
_surface->setVisible(true);
StaticSprite::update();
_blinkCountdown = 0;
}
-void Class439::hide() {
+void SsScene3009SymbolEdges::hide() {
_surface->setVisible(false);
StaticSprite::update();
_blinkCountdown = 0;
}
-void Class439::startBlinking() {
+void SsScene3009SymbolEdges::startBlinking() {
_surface->setVisible(true);
StaticSprite::update();
_blinkCountdown = 3;
_blinkToggle = true;
}
-Class440::Class440(NeverhoodEngine *vm, int index)
+SsScene3009TargetLine::SsScene3009TargetLine(NeverhoodEngine *vm, int index)
: StaticSprite(vm, 1400) {
- _spriteResource.load2(kClass440FileHashes[index]);
+ _spriteResource.load2(kSsScene3009TargetLineFileHashes[index]);
createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
@@ -702,7 +721,72 @@ Class440::Class440(NeverhoodEngine *vm, int index)
_needRefresh = true;
}
-Class522::Class522(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
+void SsScene3009TargetLine::show() {
+ _surface->setVisible(true);
+ StaticSprite::update();
+}
+
+SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSymbol, int index)
+ : StaticSprite(vm, 1400), _soundResource(vm), _asSymbol(asSymbol),
+ _index(index), _enabled(true), _countdown(0) {
+
+ _incrDecr = _index % 2;
+
+ _spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]);
+ createSurface(1200, 33, 31);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = 33;
+ _drawRect.height = 31;
+ _deltaRect = _drawRect;
+ processDelta();
+ _needRefresh = true;
+ SetUpdateHandler(&SsScene3009SymbolArrow::update);
+ SetMessageHandler(&SsScene3009SymbolArrow::handleMessage);
+ _soundResource.load(0x2C852206);
+}
+
+void SsScene3009SymbolArrow::hide() {
+ _enabled = false;
+ _surface->setVisible(false);
+}
+
+void SsScene3009SymbolArrow::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ _spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]);
+ _needRefresh = true;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ }
+}
+
+uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_enabled && _countdown == 0) {
+ _countdown = 2;
+ _spriteResource.load2(kSsScene3009SymbolArrowFileHashes1[_index]);
+ _needRefresh = true;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _soundResource.play();
+ _asSymbol->sendMessage(0x2005, _incrDecr, this);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+AsScene3009VerticalIndicator::AsScene3009VerticalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
: AnimatedSprite(vm, 1000), _parentScene(parentScene), _enabled(false) {
_x = 300;
@@ -712,17 +796,17 @@ Class522::Class522(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
updatePosition();
_surface->setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class522::handleMessage);
+ SetMessageHandler(&AsScene3009VerticalIndicator::handleMessage);
}
-void Class522::show() {
+void AsScene3009VerticalIndicator::show() {
setFileHash(0xC2463913, 0, -1);
_surface->setVisible(true);
updatePosition();
_enabled = true;
}
-uint32 Class522::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene3009VerticalIndicator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -735,13 +819,136 @@ uint32 Class522::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag1(false), _flag2(false),
- _flag3(false), _flag4(false), _countdown1(1), _countdown2(1) {
+AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 varValue)
+ : AnimatedSprite(vm, 1000), _parentScene(parentScene), _enabled(false) {
+
+ _x = getGlobalVar(0x9040018A) ? 533 : 92;
+ _y = 150;
+ createSurface1(0xC0C12954, 1200);
+ _needRefresh = true;
+ updatePosition();
+ _surface->setVisible(false);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene3009HorizontalIndicator::handleMessage);
+ if (varValue == 8 || varValue == 9 || varValue == 10) {
+ SetSpriteCallback(&AsScene3009HorizontalIndicator::suMoveRight);
+ _x = 280;
+ }
+}
+
+uint32 AsScene3009HorizontalIndicator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_enabled) {
+ _parentScene->sendMessage(0x2004, 0, this);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene3009HorizontalIndicator::suMoveLeft() {
+ _x -= 6;
+ if (_x < 92) {
+ SetSpriteCallback(NULL);
+ _x = 92;
+ }
+}
+
+void AsScene3009HorizontalIndicator::suMoveRight() {
+ _x += 6;
+ if (_x > 533) {
+ SetSpriteCallback(NULL);
+ _x = 533;
+ }
+}
+
+void AsScene3009HorizontalIndicator::show() {
+ setFileHash(0xC0C12954, 0, -1);
+ _surface->setVisible(true);
+ updatePosition();
+ _enabled = true;
+}
+
+void AsScene3009HorizontalIndicator::stMoveLeft() {
+ _x = 533;
+ SetSpriteCallback(&AsScene3009HorizontalIndicator::suMoveLeft);
+}
+
+void AsScene3009HorizontalIndicator::stMoveRight() {
+ _x = 330;
+ SetSpriteCallback(&AsScene3009HorizontalIndicator::suMoveRight);
+}
+
+AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index) {
+
+ _symbolIndex = getSubVar(0x00000914, _index);
- _varValue = getGlobalVar(0x20580A86);
+ _x = kAsScene3009SymbolPoints[_index].x;
+ _y = kAsScene3009SymbolPoints[_index].y;
+ createSurface1(kAsScene3009SymbolFileHashes[_index / 3], 1200);
+ setFileHash(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
+ _newHashListIndex = _symbolIndex;
+ _needRefresh = true;
+ updatePosition();
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene3009Symbol::handleMessage);
+
+ _ssArrowPrev = new SsScene3009SymbolArrow(_vm, this, _index * 2 + 0);
+ _parentScene->addSprite(_ssArrowPrev);
+ _vm->_collisionMan->addSprite(_ssArrowPrev);
+
+ _ssArrowNext = new SsScene3009SymbolArrow(_vm, this, _index * 2 + 1);
+ _parentScene->addSprite(_ssArrowNext);
+ _vm->_collisionMan->addSprite(_ssArrowNext);
+
+}
+
+uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2005:
+ if (param.asInteger()) {
+ if (_symbolIndex == 11)
+ _symbolIndex = 0;
+ else
+ _symbolIndex++;
+ } else {
+ if (_symbolIndex == 0)
+ _symbolIndex = 11;
+ else
+ _symbolIndex--;
+ }
+ setFileHash(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
+ _newHashListIndex = _symbolIndex;
+ setSubVar(0x00000914, _index, _symbolIndex);
+ if (_index / 3 == 0) {
+ _parentScene->sendMessage(0x2001, 0, this);
+ } else {
+ _parentScene->sendMessage(0x2003, 0, this);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene3009Symbol::hide() {
+ _ssArrowPrev->hide();
+ _ssArrowNext->hide();
+}
+
+Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _keepVideo(false), _flag2(false),
+ /*_flag3(false), */_flag4(false), _lockSymbolsPart1Countdown(1), _lockSymbolsPart2Countdown(1) {
+
+ _cannonLocation = getGlobalVar(0x20580A86);
+ debug("_cannonLocation = %d", _cannonLocation);
- // TODO _vm->gameModule()->initScene3009Vars();
+ _vm->gameModule()->initScene3009Vars();
setGlobalVar(0xF0402B0A, 0);
_surfaceFlag = true;
@@ -750,137 +957,129 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_background = addBackground(new DirtyBackground(_vm, 0xD000420C, 0, 0));
_palette = new Palette(_vm, 0xD000420C);
- _palette->usePalette();
_mouseCursor = addSprite(new Mouse435(_vm, 0x04208D08, 20, 620));
- _class438 = addSprite(new Class438(_vm, this));
- _vm->_collisionMan->addSprite(_class438);
+ _ssFireCannonButton = addSprite(new SsScene3009FireCannonButton(_vm, this));
+ _vm->_collisionMan->addSprite(_ssFireCannonButton);
- _class522 = new Class522(_vm, this, _varValue);
- addSprite(_class522);
- _vm->_collisionMan->addSprite(_class522);
+ _asVerticalIndicator = new AsScene3009VerticalIndicator(_vm, this, _cannonLocation);
+ addSprite(_asVerticalIndicator);
+ _vm->_collisionMan->addSprite(_asVerticalIndicator);
-#if 0
- _class523 = new Class523(_vm, this, _varValue);
- addSprite(_class523);
- _vm->_collisionMan->addSprite(_class523);
-#endif
+ _asHorizontalIndicator = new AsScene3009HorizontalIndicator(_vm, this, _cannonLocation);
+ addSprite(_asHorizontalIndicator);
+ _vm->_collisionMan->addSprite(_asHorizontalIndicator);
- if (_varValue != 0 && _varValue != 8 && _varValue != 9 && _varValue != 9) {
- _flag1 = true;
+ if (_cannonLocation != 0 && _cannonLocation != 8 && _cannonLocation != 9 && _cannonLocation != 10) {
+ _keepVideo = true;
} else {
- _flag1 = false;
- if (_varValue == 0) {
-#if 0
- _class523->stMoveUp();
-#endif
+ _keepVideo = false;
+ if (_cannonLocation != 0) {
+ _asHorizontalIndicator->stMoveRight();
_flag4 = true;
}
}
- _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, kScene3009SmackerFileHashes[_varValue], false, _flag1));
+ _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, kScene3009SmackerFileHashes[_cannonLocation], false, _keepVideo));
_smackerPlayer->setDrawPos(89, 37);
+ _palette->usePalette();
addSprite(new StaticSprite(_vm, 0x8540252C, 400));
for (int i = 0; i < 2; i++) {
- _class439Array[i] = new Class439(_vm, i);
- addSprite(_class439Array[i]);
- _class440Array[i] = new Class440(_vm, i);
- addSprite(_class440Array[i]);
+ _ssSymbolEdges[i] = new SsScene3009SymbolEdges(_vm, i);
+ addSprite(_ssSymbolEdges[i]);
+ _ssTargetLines[i] = new SsScene3009TargetLine(_vm, i);
+ addSprite(_ssTargetLines[i]);
}
-#if 0
for (int i = 0; i < 6; i++) {
- _class524Array[i] = new Class524(_vm, this, i);
- addSprite(_class524Array[i]);
+ _asSymbols[i] = new AsScene3009Symbol(_vm, this, i);
+ addSprite(_asSymbols[i]);
if (i < 3)
- _varValueArray[i] = getSubVar(0x00504B86, i);
+ _correctSymbols[i] = getSubVar(0x00504B86, i);
else
- _varValueArray[i] = getSubVar(0x0A4C0A9A, i - 3);
+ _correctSymbols[i] = getSubVar(0x0A4C0A9A, i - 3);
}
-#endif
SetMessageHandler(&Scene3009::handleMessage);
SetUpdateHandler(&Scene3009::update);
+
+ // DEBUG: Set the correct code
+ for (int i = 0; i < 6; i++)
+ setSubVar(0x00000914, i, _correctSymbols[i]);
+ sendMessage(0x2003, 0, this);
+ //setGlobalVar(0x610210B7, 1);
+
}
void Scene3009::update() {
Scene::update();
- if (!_flag1 && _smackerPlayer->getFrameNumber() + 1 == _smackerPlayer->getFrameCount() && _varValue <= 14) {
- switch (_varValue) {
+
+ if (!_keepVideo && _smackerPlayer->getFrameNumber() + 1 == _smackerPlayer->getFrameCount() && _cannonLocation <= 14) {
+ switch (_cannonLocation) {
case 0:
case 14:
_smackerPlayer->open(0x340A0049, true);
_palette->usePalette();
- _flag1 = true;
+ _keepVideo = true;
break;
case 8:
_smackerPlayer->open(0x0082080D, true);
_palette->usePalette();
- _flag1 = true;
+ _keepVideo = true;
_flag4 = false;
break;
case 9:
_smackerPlayer->open(0x0282080D, true);
_palette->usePalette();
- _flag1 = true;
+ _keepVideo = true;
_flag4 = false;
break;
case 10:
_smackerPlayer->open(0x0882080D, true);
_palette->usePalette();
- _flag1 = true;
+ _keepVideo = true;
_flag4 = false;
break;
case 11:
case 12:
case 13:
if (_flag2) {
- if (_varValue == 11)
+ if (_cannonLocation == 11)
_smackerPlayer->open(0x110A000F, false);
- else if (_varValue == 12)
+ else if (_cannonLocation == 12)
_smackerPlayer->open(0x500B004F, false);
- else if (_varValue == 13)
+ else if (_cannonLocation == 13)
_smackerPlayer->open(0x100B010E, false);
_palette->usePalette();
_flag2 = false;
-#if 0
- _class523->stMoveDown();
-#endif
+ _asHorizontalIndicator->stMoveLeft();
} else {
- sub462DC0();
+ playExtVideo();
}
break;
}
}
- if (_countdown1 != 0 && (--_countdown1 == 0) && sub462E10()) {
-#if 0
+ if (_lockSymbolsPart1Countdown != 0 && (--_lockSymbolsPart1Countdown == 0) && isSymbolsPart1Solved()) {
for (int i = 0; i < 3; i++)
- _class524Array[i]->hide();
-#endif
+ _asSymbols[i]->hide();
if (!getGlobalVar(0x0C0288F4) || getGlobalVar(0x000809C2) || getGlobalVar(0x9040018A)) {
- _class439Array[0]->show();
- _class440Array[0]->getSurface()->setVisible(true);
- // TODO _class440Array->StaticSprite_update
- _class522->show();
+ _ssSymbolEdges[0]->show();
+ _ssTargetLines[0]->show();
+ _asVerticalIndicator->show();
}
}
- if (_countdown2 != 0 && (--_countdown2 == 0) && sub462E50()) {
-#if 0
- for (int i = 0; i < 6; i++)
- _class524Array[i]->hide();
-#endif
+ if (_lockSymbolsPart2Countdown != 0 && (--_lockSymbolsPart2Countdown == 0) && isSymbolsPart2Solved()) {
+ for (int i = 3; i < 6; i++)
+ _asSymbols[i]->hide();
if (!getGlobalVar(0x0C0288F4) || getGlobalVar(0x000809C2) || getGlobalVar(0x9040018A)) {
- _class439Array[1]->show();
- _class440Array[1]->getSurface()->setVisible(true);
-#if 0
- // TODO _class440Array[1]->StaticSprite_update
- _class523->show();
-#endif
+ _ssSymbolEdges[1]->show();
+ _ssTargetLines[1]->show();
+ _asHorizontalIndicator->show();
}
}
@@ -902,104 +1101,104 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (!getGlobalVar(0x000809C2)) {
if (!getGlobalVar(0x10938830)) {
- _varValue = 1;
+ _cannonLocation = 1;
setGlobalVar(0x10938830, 1);
} else {
- _varValue = 2;
+ _cannonLocation = 2;
}
} else if (!getGlobalVar(0x9040018A)) {
- _varValue = 3;
+ _cannonLocation = 3;
} else if (!getGlobalVar(0x610210B7)) {
- _varValue = 4;
+ _cannonLocation = 4;
} else if (!getGlobalVar(0x0C0288F4)) {
setGlobalVar(0x0C0288F4, 1);
- _varValue = 5;
+ _cannonLocation = 5;
} else {
- _varValue = 6;
+ _cannonLocation = 6;
}
- sub462DC0();
+ playExtVideo();
break;
case 0x2001:
- _countdown1 = 24;
+ _lockSymbolsPart1Countdown = 24;
break;
case 0x2002:
if (!getGlobalVar(0x9040018A) && !_flag4) {
if (getGlobalVar(0x000809C2)) {
- _varValue = 14;
+ _cannonLocation = 14;
setGlobalVar(0x000809C2, 0);
} else {
- _varValue = 7;
+ _cannonLocation = 7;
setGlobalVar(0x000809C2, 1);
}
- sub462DC0();
+ playExtVideo();
}
break;
case 0x2003:
- _countdown2 = 24;
+ _lockSymbolsPart2Countdown = 24;
break;
case 0x2004:
if (getGlobalVar(0x000809C2)) {
if (!getGlobalVar(0x9040018A)) {
if (!getGlobalVar(0x610210B7)) {
- _varValue = 8;
+ _cannonLocation = 8;
+ } else if (!getGlobalVar(0x0C0288F4)) {
+ _cannonLocation = 9;
} else {
- if (!getGlobalVar(0x0C0288F4)) {
- _varValue = 9;
- } else {
- _varValue = 10;
- }
+ _cannonLocation = 10;
}
setGlobalVar(0x9040018A, 1);
_flag4 = true;
- sub462DC0();
- } else if (!getGlobalVar(0x610210B7)) {
- _varValue = 11;
- _smackerPlayer->open(0x108A000F, false);
- } else if (!getGlobalVar(0x0C0288F4)) {
- _varValue = 12;
- _smackerPlayer->open(0x500B002F, false);
+ playExtVideo();
} else {
- _varValue = 13;
- _smackerPlayer->open(0x100B008E, false);
+ if (!getGlobalVar(0x610210B7)) {
+ _cannonLocation = 11;
+ _smackerPlayer->open(0x108A000F, false);
+ } else if (!getGlobalVar(0x0C0288F4)) {
+ _cannonLocation = 12;
+ _smackerPlayer->open(0x500B002F, false);
+ } else {
+ _cannonLocation = 13;
+ _smackerPlayer->open(0x100B008E, false);
+ }
+ _palette->usePalette();
+ _flag2 = true;
+ _flag4 = true;
+ _keepVideo = false;
+ setGlobalVar(0x9040018A, 0);
}
- _palette->usePalette();
- _flag2 = true;
- _flag4 = true;
- _flag1 = false;
- setGlobalVar(0x9040018A, 0);
}
break;
}
return 0;
}
-void Scene3009::sub462DC0() {
- setGlobalVar(0x20580A86, _varValue);
- setGlobalVar(0xF0402B0A, kScene3009VarValues[_varValue]);
+void Scene3009::playExtVideo() {
+ setGlobalVar(0x20580A86, _cannonLocation);
+ setGlobalVar(0xF0402B0A, kScene3009CannonLocationFileHashes[_cannonLocation]);
_parentModule->sendMessage(0x1009, 1, this);
}
-bool Scene3009::sub462E10() {
+bool Scene3009::isSymbolsPart1Solved() {
for (int i = 0; i < 3; i++)
- if (_varValueArray[i] != getSubVar(0x00000914, i))
+ if (_correctSymbols[i] != getSubVar(0x00000914, i))
return false;
return true;
}
-bool Scene3009::sub462E50() {
- for (int i = 0; i < 6; i++)
- if (_varValueArray[i] != getSubVar(0x00000914, i))
+bool Scene3009::isSymbolsPart2Solved() {
+ for (int i = 3; i < 6; i++)
+ if (_correctSymbols[i] != getSubVar(0x00000914, i))
return false;
return true;
}
bool Scene3009::sub462E90() {
- return _flag3 || _flag4;
+ return /*_flag3 || */_flag4;
}
// Scene3010
-static const uint32 kScene3010VarNameHashes[] = {
+static const uint32 kScene3010ButtonNameHashes[] = {
0x304008D2,
0x40119852,
0x01180951
@@ -1042,7 +1241,7 @@ SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene
NDimensions dimensions1, dimensions2;
- _buttonEnabled = getSubVar(0x14800353, kScene3010VarNameHashes[_buttonIndex]) != 0;
+ _buttonEnabled = getSubVar(0x14800353, kScene3010ButtonNameHashes[_buttonIndex]) != 0;
_spriteResource.load2(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
dimensions1 = _spriteResource.getDimensions();
_spriteResource.load2(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
@@ -1133,10 +1332,10 @@ AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene
_parentScene(parentScene), _boltIndex(boltIndex), _soundToggle(true), _unlocked(false), _locked(false),
_countdown(0) {
- _x = kAsScene3010DeadBoltPoints[_boltIndex].x;
- _y = kAsScene3010DeadBoltPoints[_boltIndex].y;
+ _x = kAsScene3010DeadBoltPoints[_boltIndex].x;
+ _y = kAsScene3010DeadBoltPoints[_boltIndex].y;
- if (getSubVar(0x14800353, kScene3010VarNameHashes[_boltIndex])) {
+ if (getSubVar(0x14800353, kScene3010ButtonNameHashes[_boltIndex])) {
createSurface1(kAsScene3010DeadBoltFileHashes1[_boltIndex], 1200);
setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
_soundResource1.load(0x46005BC4);
@@ -1249,9 +1448,9 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
int initCountdown = 0;
// DEBUG: Enable all buttons
- setSubVar(0x14800353, kScene3010VarNameHashes[0], 1);
- setSubVar(0x14800353, kScene3010VarNameHashes[1], 1);
- setSubVar(0x14800353, kScene3010VarNameHashes[2], 1);
+ setSubVar(0x14800353, kScene3010ButtonNameHashes[0], 1);
+ setSubVar(0x14800353, kScene3010ButtonNameHashes[1], 1);
+ setSubVar(0x14800353, kScene3010ButtonNameHashes[2], 1);
_surfaceFlag = true;
@@ -1265,7 +1464,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
_ssDeadBoltButtons[i] = new SsScene3010DeadBoltButton(_vm, this, i, initCountdown, which == 1);//CHECKME
addSprite(_ssDeadBoltButtons[i]);
_vm->_collisionMan->addSprite(_ssDeadBoltButtons[i]);
- if (getSubVar(0x14800353, kScene3010VarNameHashes[i]))
+ if (getSubVar(0x14800353, kScene3010ButtonNameHashes[i]))
initCountdown++;
_boltUnlocking[i] = false;
_boltUnlocked[i] = false;
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 9bda5db..499741d 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -68,9 +68,9 @@ protected:
class Scene3009;
-class Class438 : public StaticSprite {
+class SsScene3009FireCannonButton : public StaticSprite {
public:
- Class438(NeverhoodEngine *vm, Scene3009 *parentScene);
+ SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene);
protected:
Scene3009 *_parentScene;
SoundResource _soundResource;
@@ -79,9 +79,9 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class439 : public StaticSprite {
+class SsScene3009SymbolEdges : public StaticSprite {
public:
- Class439(NeverhoodEngine *vm, int index);
+ SsScene3009SymbolEdges(NeverhoodEngine *vm, int index);
void show();
void hide();
void startBlinking();
@@ -92,14 +92,30 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class440 : public StaticSprite {
+class SsScene3009TargetLine : public StaticSprite {
public:
- Class440(NeverhoodEngine *vm, int index);
+ SsScene3009TargetLine(NeverhoodEngine *vm, int index);
+ void show();
};
-class Class522 : public AnimatedSprite {
+class SsScene3009SymbolArrow : public StaticSprite {
public:
- Class522(NeverhoodEngine *vm, Scene3009 *parentScene, int index);
+ SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSymbol, int index);
+ void hide();
+protected:
+ SoundResource _soundResource;
+ Sprite *_asSymbol;
+ int _index;
+ int _incrDecr;
+ bool _enabled;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene3009VerticalIndicator : public AnimatedSprite {
+public:
+ AsScene3009VerticalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, int index);
void show();
protected:
Scene3009 *_parentScene;
@@ -107,33 +123,58 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class AsScene3009HorizontalIndicator : public AnimatedSprite {
+public:
+ AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 varValue);
+ void show();
+ void stMoveLeft();
+ void stMoveRight();
+protected:
+ Scene3009 *_parentScene;
+ bool _enabled;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suMoveLeft();
+ void suMoveRight();
+};
+
+class AsScene3009Symbol : public AnimatedSprite {
+public:
+ AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int index);
+ void hide();
+protected:
+ Scene3009 *_parentScene;
+ int _index;
+ uint32 _symbolIndex;
+ SsScene3009SymbolArrow *_ssArrowPrev;
+ SsScene3009SymbolArrow *_ssArrowNext;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene3009 : public Scene {
public:
Scene3009(NeverhoodEngine *vm, Module *parentModule, int which);
bool sub462E90();
protected:
- int _countdown1;
- int _countdown2;
+ int _lockSymbolsPart1Countdown;
+ int _lockSymbolsPart2Countdown;
SmackerPlayer *_smackerPlayer;
- Sprite *_class438;
- Class439 *_class439Array[2];
- Class440 *_class440Array[2];
- Class522 *_class522;
-#if 0
- Class523 *_class523;
- Class524 *_class524Array[6];
-#endif
- uint32 _varValue;
- uint32 _varValueArray[6];
- bool _flag1;
+ Sprite *_ssFireCannonButton;
+ SsScene3009SymbolEdges *_ssSymbolEdges[2];
+ SsScene3009TargetLine *_ssTargetLines[2];
+ AsScene3009VerticalIndicator *_asVerticalIndicator;
+ AsScene3009HorizontalIndicator *_asHorizontalIndicator;
+ AsScene3009Symbol *_asSymbols[6];
+ uint32 _cannonLocation;
+ uint32 _correctSymbols[6];
+ bool _keepVideo;
bool _flag2;
- bool _flag3;
+ // UNUSED? bool _flag3;
bool _flag4;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub462DC0();
- bool sub462E10();
- bool sub462E50();
+ void playExtVideo();
+ bool isSymbolsPart1Solved();
+ bool isSymbolsPart2Solved();
};
// Scene3010
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 0db5d62..c6a7e5a 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -198,7 +198,7 @@ Common::Error NeverhoodEngine::run() {
_screen->wait();
_screen->update();
- debug("---------------------------------------");
+ debug(0, "---------------------------------------");
}
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 66e7a58..39f49cb 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -83,6 +83,7 @@ SmackerPlayer::~SmackerPlayer() {
void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
debug("SmackerPlayer::open(%08X)", fileHash);
+ _fileHash = fileHash;
_keepLastFrame = keepLastFrame;
close();
@@ -143,6 +144,21 @@ void SmackerPlayer::setDrawPos(int16 x, int16 y) {
}
}
+void SmackerPlayer::rewind() {
+
+ delete _smackerDecoder;
+ _smackerDecoder = NULL;
+ _stream = NULL;
+
+ _smackerFirst = true;
+
+ _stream = _vm->_res->createStream(_fileHash);
+
+ _smackerDecoder = new Video::SmackerDecoder(_vm->_mixer);
+ _smackerDecoder->loadStream(_stream);
+
+}
+
void SmackerPlayer::update() {
debug(8, "SmackerPlayer::update()");
@@ -156,34 +172,7 @@ void SmackerPlayer::update() {
if (!_smackerDecoder->endOfVideo()) {
- const Graphics::Surface *smackerFrame = _smackerDecoder->decodeNextFrame();
-
- if (_smackerFirst) {
- _smackerSurface->setSmackerFrame(smackerFrame);
- if (_drawX < 0 || _drawY < 0) {
- if (_doubleSurface) {
- _drawX = 320 - _smackerDecoder->getWidth();
- _drawY = 240 - _smackerDecoder->getHeight();
- } else {
- _drawX = (640 - _smackerDecoder->getWidth()) / 2;
- _drawY = (480 - _smackerDecoder->getHeight()) / 2;
- }
- }
- _smackerSurface->getDrawRect().x = _drawX;
- _smackerSurface->getDrawRect().y = _drawY;
- _smackerFirst = false;
- }
-
- if (_doubleSurface) {
- // TODO
- }
-
- // TODO _vm->_screen->_skipUpdate = true;
- _dirtyFlag = true;
-
- if (_smackerDecoder->hasDirtyPalette()) {
- updatePalette();
- }
+ updateFrame();
if (_smackerDecoder->endOfVideo() && !_keepLastFrame) {
// Inform the scene about the end of the video playback
@@ -192,12 +181,47 @@ void SmackerPlayer::update() {
}
_flag2 = true;
} else {
+ if (_smackerDecoder->endOfVideo()) {
+ rewind();
+ updateFrame();
+ }
_flag2 = false;
}
}
}
+void SmackerPlayer::updateFrame() {
+ const Graphics::Surface *smackerFrame = _smackerDecoder->decodeNextFrame();
+
+ if (_smackerFirst) {
+ _smackerSurface->setSmackerFrame(smackerFrame);
+ if (_drawX < 0 || _drawY < 0) {
+ if (_doubleSurface) {
+ _drawX = 320 - _smackerDecoder->getWidth();
+ _drawY = 240 - _smackerDecoder->getHeight();
+ } else {
+ _drawX = (640 - _smackerDecoder->getWidth()) / 2;
+ _drawY = (480 - _smackerDecoder->getHeight()) / 2;
+ }
+ }
+ _smackerSurface->getDrawRect().x = _drawX;
+ _smackerSurface->getDrawRect().y = _drawY;
+ _smackerFirst = false;
+ }
+
+ if (_doubleSurface) {
+ // TODO
+ }
+
+ // TODO _vm->_screen->_skipUpdate = true;
+ _dirtyFlag = true;
+
+ if (_smackerDecoder->hasDirtyPalette()) {
+ updatePalette();
+ }
+}
+
void SmackerPlayer::updatePalette() {
byte tempPalette[1024];
const byte *smackerPalette = _smackerDecoder->getPalette();
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index 6579bb4..fb7f6da 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -64,6 +64,7 @@ protected:
Palette *_palette;
Video::SmackerDecoder *_smackerDecoder;
SmackerSurface *_smackerSurface;
+ uint32 _fileHash;
bool _smackerFirst;
bool _doubleSurface;
Common::SeekableReadStream *_stream;
@@ -71,7 +72,9 @@ protected:
bool _flag2;
bool _dirtyFlag;
int _drawX, _drawY;
+ void rewind();
void update();
+ void updateFrame();
void updatePalette();
};
Commit: 9d12661537db2229fe08102a8c2491e0647826a4
https://github.com/scummvm/scummvm/commit/9d12661537db2229fe08102a8c2491e0647826a4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Implement Scene3011
- And use _moduleDone instead of _done in Module3000
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
engines/neverhood/resource.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c1ee6dd..16824e9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -228,7 +228,7 @@ void GameModule::startup() {
//createModule1700(1);
//createModule1400(-1);
#if 1
- _vm->gameState().sceneNum = 8;
+ _vm->gameState().sceneNum = 10;
createModule3000(-1);
#endif
#if 0
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 45db8ad..51940ba 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -221,7 +221,9 @@ void Module3000::createScene3010(int which) {
}
void Module3000::createScene3011(int which) {
- // TODO
+ _vm->gameState().sceneNum = 10;
+ _childObject = new Scene3011(_vm, this, 0);
+ SetUpdateHandler(&Module3000::updateScene3011);
}
void Module3000::createScene3012(int which) {
@@ -403,6 +405,9 @@ void Module3000::updateScene3004() {
_moduleDone = false;
delete _childObject;
_childObject = NULL;
+
+ debug("_moduleDoneStatus = %d", _moduleDoneStatus);
+
if (_moduleDoneStatus == 1) {
createScene3005(0);
_childObject->handleUpdate();
@@ -501,8 +506,8 @@ void Module3000::updateScene3009() {
void Module3000::updateScene3010() {
_childObject->handleUpdate();
- if (_done) {
- _done = false;
+ if (_moduleDone) {
+ _moduleDone = false;
delete _childObject;
_childObject = NULL;
if (_moduleDoneStatus == 0 || _moduleDoneStatus == 2) {
@@ -515,6 +520,17 @@ void Module3000::updateScene3010() {
}
}
+void Module3000::updateScene3011() {
+ _childObject->handleUpdate();
+ if (_moduleDone) {
+ _moduleDone = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene3004(3);
+ _childObject->handleUpdate();
+ }
+}
+
// Scene3009
static const uint32 kScene3009SmackerFileHashes[] = {
@@ -1558,4 +1574,251 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+// Scene3011
+
+static const uint32 kAsScene3011SymbolFileHashes[] = {
+ 0x00C88050,
+ 0x01488050,
+ 0x02488050,
+ 0x04488050,
+ 0x08488050,
+ 0x10488050,
+ 0x20488050,
+ 0x40488050,
+ 0x80488050,
+ 0x00488051,
+ 0x00488052,
+ 0x00488054,
+ 0x008B0000,
+ 0x008D0000,
+ 0x00810000,
+ 0x00990000,
+ 0x00A90000,
+ 0x00C90000,
+ 0x00090000,
+ 0x01890000,
+ 0x02890000,
+ 0x04890000,
+ 0x08890000,
+ 0x10890000
+};
+
+SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bool flag)
+ : StaticSprite(vm, 1400), _parentScene(parentScene), _soundResource(vm),
+ _countdown(0) {
+
+ if (flag) {
+ _spriteResource.load2(0x11282020);
+ } else {
+ _spriteResource.load2(0x994D0433);
+ }
+ _soundResource.load(0x44061000);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _deltaRect.x = 0;
+ _deltaRect.y = 0;
+ _deltaRect.width = _spriteResource.getDimensions().width;
+ _deltaRect.height = _spriteResource.getDimensions().height;
+ _surface->setVisible(false);
+ processDelta();
+ _needRefresh = true;
+ SetUpdateHandler(&SsScene3011Button::update);
+ SetMessageHandler(&SsScene3011Button::handleMessage);
+}
+
+void SsScene3011Button::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ _surface->setVisible(false);
+ }
+}
+
+uint32 SsScene3011Button::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ StaticSprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0) {
+ _surface->setVisible(true);
+ _countdown = 4;
+ _parentScene->sendMessage(0x2000, 0, this);
+ _soundResource.play();
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
+ : AnimatedSprite(vm, 1000), _soundResource1(vm), _soundResource2(vm),
+ _index(index), _flag1(flag), _flag2(false) {
+
+ if (flag) {
+ _x = 310;
+ _y = 200;
+ createSurface1(kAsScene3011SymbolFileHashes[_index], 1200);
+ _soundResource1.load(0x6052C60F);
+ _soundResource2.load(0x6890433B);
+ } else {
+ _index = 12;
+ _x = index * 39 + 96;
+ _y = 225;
+ createSurface(1200, 41, 48);
+ _soundResource1.load(0x64428609);
+ _soundResource2.load(0x7080023B);
+ }
+ _surface->setVisible(false);
+ _needRefresh = true;
+ SetUpdateHandler(&AnimatedSprite::update);
+}
+
+void AsScene3011Symbol::show(bool flag) {
+ _flag2 = flag;
+ setFileHash(kAsScene3011SymbolFileHashes[_index], 0, -1);
+ _surface->setVisible(true);
+ if (flag) {
+ _soundResource2.play();
+ } else {
+ _soundResource1.play();
+ }
+}
+
+void AsScene3011Symbol::hide() {
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+void AsScene3011Symbol::stopSound() {
+ if (_flag2) {
+ _soundResource2.stop();
+ } else {
+ _soundResource2.stop();
+ }
+}
+
+void AsScene3011Symbol::change(int index, bool flag) {
+ _index = index;
+ _flag2 = flag;
+ setFileHash(kAsScene3011SymbolFileHashes[_index], 0, -1);
+ _surface->setVisible(true);
+ if (flag) {
+ _soundResource2.play();
+ } else {
+ _soundResource1.play();
+ }
+}
+
+Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _index2(0) {
+
+ Palette2 *palette2;
+
+ _surfaceFlag = true;
+
+ // TODO _vm->gameModule()->initScene3011Vars();
+ _index1 = getGlobalVar(0x2414C2F2);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x92124A04, 0, 0));
+
+ palette2 = new Palette2(_vm, 0xA4070114);
+ addEntity(palette2);
+ palette2->usePalette();
+ _palette = palette2;
+
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x24A00929, 20, 620));
+
+ for (int i = 0; i < 12; i++) {
+ _asSymbols[i] = new AsScene3011Symbol(_vm, i, true);
+ addSprite(_asSymbols[i]);
+ }
+
+ _ssButton = addSprite(new SsScene3011Button(_vm, this, true));
+ _vm->_collisionMan->addSprite(_ssButton);
+
+ SetUpdateHandler(&Scene3011::update);
+ SetMessageHandler(&Scene3011::handleMessage);
+
+}
+
+void Scene3011::update() {
+ Scene::update();
+
+ if (_countdown != 0 && (--_countdown == 0)) {
+ switch (_updateStatus) {
+ case 0:
+ if (_buttonClicked) {
+ if (_index1 == _index2) {
+ do {
+ _index3 = _vm->_rnd->getRandomNumber(12 - 1);
+ } while (_index1 == _index3);
+ _asSymbols[getSubVar(0x04909A50, _index3)]->show(true);
+ } else {
+ _asSymbols[getSubVar(0x04909A50, _index2)]->show(false);
+ }
+ _updateStatus = 1;
+ _countdown = 24;
+ fadeIn();
+ _buttonClicked = false;
+ }
+ break;
+ case 1:
+ _updateStatus = 2;
+ _countdown = 24;
+ break;
+ case 2:
+ fadeOut();
+ _updateStatus = 3;
+ _countdown = 24;
+ break;
+ case 3:
+ _updateStatus = 0;
+ _countdown = 1;
+ if (_index1 == _index2) {
+ _asSymbols[getSubVar(0x04909A50, _index3)]->hide();
+ } else {
+ _asSymbols[getSubVar(0x04909A50, _index2)]->hide();
+ }
+ _index2++;
+ if (_index2 >= 12)
+ _index2 = 0;
+ break;
+ }
+ }
+}
+
+uint32 Scene3011::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x2000:
+ _buttonClicked = true;
+ if (_countdown == 0)
+ _countdown = 1;
+ break;
+ }
+ return 0;
+}
+
+void Scene3011::fadeIn() {
+ Palette2 *palette2 = (Palette2*)_palette;
+ palette2->addPalette(0x92124A04, 0, 256, 0);
+ palette2->startFadeToPalette(24);
+}
+
+void Scene3011::fadeOut() {
+ Palette2 *palette2 = (Palette2*)_palette;
+ palette2->addPalette(0xA4070114, 0, 256, 0);
+ palette2->startFadeToPalette(24);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 499741d..64a4b76 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -62,6 +62,7 @@ protected:
void updateScene3007();
void updateScene3009();
void updateScene3010();
+ void updateScene3011();
};
// Scene3009
@@ -239,6 +240,52 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+// Scene3011
+
+class SsScene3011Button : public StaticSprite {
+public:
+ SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bool flag);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene3011Symbol : public AnimatedSprite {
+public:
+ AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag);
+ void show(bool flag);
+ void hide();
+ void stopSound();
+ void change(int index, bool flag);
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ bool _flag1;
+ bool _flag2;
+ int _index;
+};
+
+class Scene3011 : public Scene {
+public:
+ Scene3011(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_ssButton;
+ AsScene3011Symbol *_asSymbols[12];
+ int _updateStatus;
+ bool _buttonClicked;
+ int _countdown;
+ int _index1;
+ int _index2;
+ int _index3;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void fadeIn();
+ void fadeOut();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE3000_H */
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index a7d5e6c..f8d282c 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -199,6 +199,7 @@ public:
void load(uint32 fileHash);
void play(uint32 fileHash, bool looping = false);
void play();
+ void stop() { /*DUMMY*/ }
protected:
NeverhoodEngine *_vm;
};
Commit: 5fcc3af23bc0838283693e34ac9e073aca773821
https://github.com/scummvm/scummvm/commit/5fcc3af23bc0838283693e34ac9e073aca773821
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Implement Module2000
Changed paths:
A engines/neverhood/module2000.cpp
A engines/neverhood/module2000.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 16824e9..7408c25 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -29,6 +29,7 @@
#include "neverhood/module1500.h"
#include "neverhood/module1700.h"
#include "neverhood/module1800.h"
+#include "neverhood/module2000.h"
#include "neverhood/module2300.h"
#include "neverhood/module3000.h"
@@ -227,7 +228,7 @@ void GameModule::startup() {
//createModule1700(-1);
//createModule1700(1);
//createModule1400(-1);
-#if 1
+#if 0
_vm->gameState().sceneNum = 10;
createModule3000(-1);
#endif
@@ -235,6 +236,10 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule1800(-1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule2000(-1);
+#endif
}
void GameModule::createModule1000(int which) {
@@ -284,11 +289,7 @@ void GameModule::updateModule1200() {
void GameModule::createModule1400(int which) {
setGlobalVar(0x91080831, 0x00AD0012);
- //_childObject = new Module1400(_vm, this, which);
-
- _vm->gameState().sceneNum = 9;
- _childObject = new Module3000(_vm, this, -1);
-
+ _childObject = new Module1400(_vm, this, which);
SetUpdateHandler(&GameModule::updateModule1400);
}
@@ -384,6 +385,25 @@ void GameModule::updateModule1800() {
}
}
+void GameModule::createModule2000(int which) {
+ setGlobalVar(0x91080831, 0x08250000);
+ _childObject = new Module2000(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule2000);
+}
+
+void GameModule::updateModule2000() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ // TODO createModule2900(4);
+ _childObject->handleUpdate();
+ }
+}
+
void GameModule::createModule2300(int which) {
setGlobalVar(0x91080831, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 6290a85..6de3893 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -63,6 +63,8 @@ protected:
void updateModule1700();
void createModule1800(int which);
void updateModule1800();
+ void createModule2000(int which);
+ void updateModule2000();
void createModule2200(int which);
void createModule2300(int which);
void updateModule2300();
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 3aaab36..d74f94b 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3324,4 +3324,102 @@ void KmScene1705::sub468B10() {
SetMessageHandler(&KmScene1705::handleMessage4689A0);
}
+KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _flag(false) {
+
+ // Empty
+}
+
+uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x2000:
+ _flag = param.asInteger() != 0;
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_flag) {
+ setCallback2(AnimationCallback(&Klayman::sub421350));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ }
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&Klayman::sub41F9E0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481D:
+ if (_flag) {
+ setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ }
+ break;
+ case 0x481E:
+ if (_flag) {
+ setCallback2(AnimationCallback(&Klayman::sub421510));
+ }
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x4835:
+ _parentScene->sendMessage(0x2000, 1, this);
+ _flag = true;
+ setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ break;
+ case 0x4836:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _flag = false;
+ setCallback2(AnimationCallback(&Klayman::sub421310));
+ break;
+ case 0x483D:
+ sub440230();
+ break;
+ case 0x483E:
+ sub440270();
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene2001::handleMessage4401A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ _soundResource1.play(0x85B10BB8);
+ } if (param.asInteger() == 0x4E6A0CA0) {
+ _soundResource1.play(0xC5B709B0);
+ }
+ break;
+ }
+}
+
+void KmScene2001::sub440230() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xBE68CC54, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene2001::handleMessage4401A0);
+}
+
+void KmScene2001::sub440270() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x18AB4ED4, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene2001::handleMessage4401A0);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index d7c351e..8585689 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -109,6 +109,7 @@ public:
void sub420E90();
void sub420EB0();
void sub420680();
+ void sub41F9E0();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -204,7 +205,6 @@ protected:
void sub41F950();
void sub41FB30();
uint32 handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41F9E0();
void spriteUpdate41F300();
uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41FA40();
@@ -359,6 +359,17 @@ protected:
void sub468B10();
};
+class KmScene2001 : public Klayman {
+public:
+ KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage4401A0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub440230();
+ void sub440270();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 20e0bbb..5dcdc41 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -17,6 +17,7 @@ MODULE_OBJS = \
module1500.o \
module1700.o \
module1800.o \
+ module2000.o \
module2300.o \
module3000.o \
mouse.o \
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
new file mode 100644
index 0000000..9f45db2
--- /dev/null
+++ b/engines/neverhood/module2000.cpp
@@ -0,0 +1,193 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2000.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/navigationscene.h"
+
+namespace Neverhood {
+
+Module2000::Module2000(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ debug("Create Module2000(%d)", which);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createScene2001(-1);
+ break;
+ case 2:
+ createScene2003(-1);
+ break;
+ default:
+ createScene2002(-1);
+ break;
+ }
+ } else if (which == 0) {
+ createScene2001(3);
+ } else if (which == 1) {
+ createScene2001(1);
+ }
+
+}
+
+Module2000::~Module2000() {
+ // TODO Sound1ChList_sub_407A50(0x81293110);
+}
+
+void Module2000::createScene2001(int which) {
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene2001(_vm, this, which);
+ SetUpdateHandler(&Module2000::updateScene2001);
+ _childObject->handleUpdate();
+}
+
+void Module2000::createScene2002(int which) {
+ _vm->gameState().sceneNum = 1;
+ if (getGlobalVar(0x98109F12)) {
+ createNavigationScene(0x004B7B48, which);
+ } else {
+ createNavigationScene(0x004B7B00, which);
+ }
+ SetUpdateHandler(&Module2000::updateScene2002);
+ _childObject->handleUpdate();
+}
+
+void Module2000::createScene2003(int which) {
+ _vm->gameState().sceneNum = 2;
+ setGlobalVar(0x98109F12, 1);
+ setSubVar(0x2C145A98, 1, 1);
+ createSmackerScene(0x204B2031, true, true, false);
+ SetUpdateHandler(&Module2000::updateScene2003);
+ _childObject->handleUpdate();
+}
+
+void Module2000::updateScene2001() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else {
+ createScene2002(0);
+ }
+ }
+}
+
+void Module2000::updateScene2002() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ if (getGlobalVar(0x98109F12)) {
+ createScene2002(0);
+ } else {
+ createScene2003(-1);
+ }
+ } else if (_field20 == 1) {
+ createScene2002(1);
+ } else if (_field20 == 2) {
+ createScene2001(0);
+ }
+ }
+}
+
+void Module2000::updateScene2003() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene2002(0);
+ }
+}
+
+// Scene2001
+
+Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2001::handleMessage);
+
+ _background = addBackground(new DirtyBackground(_vm, 0xA6417244, 0, 0));
+ _palette = new Palette(_vm, 0xA6417244);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x17240A6C, NULL));
+
+ _class401 = addSprite(new StaticSprite(_vm, 0x0D641724, 1100));
+
+ if (which < 0) {
+ _klayman = new KmScene2001(_vm, this, 300, 345);
+ setMessageList(0x004B3538);
+ sendMessage(0x2000, 0, this);
+ } else if (which == 1) {
+ _klayman = new KmScene2001(_vm, this, 116, 345);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004B3540);
+ sendMessage(0x2000, 1, this);
+ } else if (which == 2) {
+ _klayman = new KmScene2001(_vm, this, 116, 345);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004B35F0);
+ sendMessage(0x2000, 1, this);
+ } else if (which == 3) {
+ _klayman = new KmScene2001(_vm, this, 116, 345);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004B3550);
+ sendMessage(0x2000, 1, this);
+ } else {
+ _klayman = new KmScene2001(_vm, this, 390, 345);
+ setMessageList(0x004B3530);
+ sendMessage(0x2000, 0, this);
+ _klayman->setDoDeltaX(1);
+ }
+ addSprite(_klayman);
+
+ _klayman->getSurface()->getClipRect().x1 = _class401->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+}
+
+uint32 Scene2001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ if (param.asInteger()) {
+ setRectList(0x004B3680);
+ _klayman->setKlaymanTable3();
+ } else {
+ setRectList(0x004B3670);
+ _klayman->setKlaymanTable1();
+ }
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2000.h b/engines/neverhood/module2000.h
new file mode 100644
index 0000000..23ac8a8
--- /dev/null
+++ b/engines/neverhood/module2000.h
@@ -0,0 +1,59 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2000_H
+#define NEVERHOOD_MODULE2000_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/module1200.h"
+
+namespace Neverhood {
+
+class Module2000 : public Module {
+public:
+ Module2000(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2000();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createScene2001(int which);
+ void createScene2002(int which);
+ void createScene2003(int which);
+ void updateScene2001();
+ void updateScene2002();
+ void updateScene2003();
+};
+
+// Scene2001
+
+class Scene2001 : public Scene {
+public:
+ Scene2001(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_class401;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2000_H */
Commit: 828629018567b3ff4e3f3311420168ff83bf62a7
https://github.com/scummvm/scummvm/commit/828629018567b3ff4e3f3311420168ff83bf62a7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:34-07:00
Commit Message:
NEVERHOOD: Add tables for Module2000
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index aa70279..b2d5bc5 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -60,6 +60,9 @@ static const uint32 rectListOffsets[] = {
// Scene1705
1, 0x004B6B40,
1, 0x004B6B30,
+ // Scene2001
+ 1, 0x004B3680,
+ 1, 0x004B3670,
0, 0
};
@@ -150,6 +153,12 @@ static const uint32 messageListOffsets[] = {
2, 0x004B6A18,
1, 0x004B69F0,
2, 0x004B6AC0,
+ // Scene2001
+ 1, 0x004B3538,
+ 2, 0x004B3540,
+ 4, 0x004B35F0,
+ 2, 0x004B3550,
+ 1, 0x004B3530,
0, 0
};
@@ -169,5 +178,21 @@ static const uint32 navigationListOffsets[] = {
2, 0x004B6878,
3, 0x004B68F0,
3, 0x004B68A8,
+ // Module2000
+ 3, 0x004B7B48,
+ 3, 0x004B7B00,
+ // Module3000
+ 2, 0x004B7C80,
+ 2, 0x004B7CE0,
+ 2, 0x004B7CB0,
+ 3, 0x004B7D58,
+ 3, 0x004B7D10,
+ 4, 0x004B7E60,
+ 4, 0x004B7DA0,
+ 4, 0x004B7E00,
+ 4, 0x004B7F20,
+ 4, 0x004B7EC0,
+ 2, 0x004B7F80,
+ 1, 0x004B7FB0,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index f120857..84a6425 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: bc239b3fb17a359151b8486f1e13c577817adef1
https://github.com/scummvm/scummvm/commit/bc239b3fb17a359151b8486f1e13c577817adef1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Restructure/redesign create_neverhood tool and made it more extensible for future game structures
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 25ef676..14dd32d 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -41,6 +41,13 @@ byte *data;
uint32 dataStart = 0x004AE000;
uint32 fileStart = 0x000AC600;
+class HitRectList;
+class RectList;
+class MessageList;
+class NavigationList;
+
+void addMessageList(uint32 messageListCount, uint32 messageListOffset);
+
void loadExe(const char *filename) {
FILE *exe = fopen(filename, "rb");
dataSize = fileSize(exe);
@@ -49,38 +56,131 @@ void loadExe(const char *filename) {
fclose(exe);
}
+byte *getData(uint32 offset) {
+ return data + offset - dataStart + fileStart;
+}
+
struct HitRect {
int16 x1, y1, x2, y2;
uint16 messageNum;
+
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ x1 = READ_LE_UINT16(item + 0);
+ y1 = READ_LE_UINT16(item + 2);
+ x2 = READ_LE_UINT16(item + 4);
+ y2 = READ_LE_UINT16(item + 6);
+ messageNum = READ_LE_UINT16(item + 8);
+ }
+
+ void save(FILE *fd) {
+ writeUint16LE(fd, x1);
+ writeUint16LE(fd, y1);
+ writeUint16LE(fd, x2);
+ writeUint16LE(fd, y2);
+ writeUint16LE(fd, messageNum);
+ }
+
+ int getItemSize() const {
+ return 10;
+ }
+
};
-typedef std::vector<HitRect> HitRects;
+struct MessageItem {
+ uint16 messageNum;
+ uint32 messageParam;
+ MessageItem() {}
+ MessageItem(uint16 msgNum, uint32 msgParam) : messageNum(msgNum), messageParam(msgParam) {}
+
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ messageNum = READ_LE_UINT16(item + 0);
+ messageParam = READ_LE_UINT32(item + 4);
+ }
+
+ void save(FILE *fd) {
+ writeUint16LE(fd, messageNum);
+ writeUint32LE(fd, messageParam);
+ }
+
+ int getItemSize() const {
+ return 8;
+ }
+
+};
struct SubRectItem {
int16 x1, y1, x2, y2;
uint32 messageListCount;
uint32 messageListOffset;
-};
-typedef std::vector<SubRectItem> SubRectItems;
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ x1 = READ_LE_UINT16(item + 0);
+ y1 = READ_LE_UINT16(item + 2);
+ x2 = READ_LE_UINT16(item + 4);
+ y2 = READ_LE_UINT16(item + 6);
+ messageListCount = READ_LE_UINT32(item + 8);
+ messageListOffset = READ_LE_UINT32(item + 12);
+ // Add the message to the message list
+ addMessageList(messageListCount, messageListOffset);
+ }
+
+ void save(FILE *fd) {
+ writeUint16LE(fd, x1);
+ writeUint16LE(fd, y1);
+ writeUint16LE(fd, x2);
+ writeUint16LE(fd, y2);
+ writeUint32LE(fd, messageListOffset);
+ }
+
+ int getItemSize() const {
+ return 16;
+ }
+
+};
struct RectItem {
int16 x1, y1, x2, y2;
uint32 subRectListCount;
uint32 subRectListOffset;
- SubRectItems subRectItems;
-};
+ std::vector<SubRectItem> subRectItems;
-typedef std::vector<RectItem> RectItems;
-
-struct MessageItem {
- uint16 messageNum;
- uint32 messageParam;
- MessageItem(uint16 msgNum, uint32 msgParam) : messageNum(msgNum), messageParam(msgParam) {}
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ uint32 subItemOffset;
+ x1 = READ_LE_UINT16(item + 0);
+ y1 = READ_LE_UINT16(item + 2);
+ x2 = READ_LE_UINT16(item + 4);
+ y2 = READ_LE_UINT16(item + 6);
+ subRectListCount = READ_LE_UINT32(item + 8);
+ subRectListOffset = READ_LE_UINT32(item + 12);
+ subItemOffset = subRectListOffset;
+ for (uint32 j = 0; j < subRectListCount; j++) {
+ SubRectItem subRectItem;
+ subRectItem.load(subItemOffset);
+ subItemOffset += 16;
+ subRectItems.push_back(subRectItem);
+ }
+ }
+
+ void save(FILE *fd) {
+ writeUint16LE(fd, x1);
+ writeUint16LE(fd, y1);
+ writeUint16LE(fd, x2);
+ writeUint16LE(fd, y2);
+ writeUint32LE(fd, subRectItems.size());
+ for (uint32 j = 0; j < subRectItems.size(); j++)
+ subRectItems[j].save(fd);
+ }
+
+ int getItemSize() const {
+ return 16;
+ }
+
};
-typedef std::vector<MessageItem> MessageItems;
-
struct NavigationItem {
uint32 fileHash;
uint32 leftSmackerFileHash;
@@ -89,149 +189,172 @@ struct NavigationItem {
byte interactive;
byte middleFlag;
uint32 mouseCursorFileHash;
-};
+
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ fileHash = READ_LE_UINT32(item + 0);
+ leftSmackerFileHash = READ_LE_UINT32(item + 4);
+ rightSmackerFileHash = READ_LE_UINT32(item + 8);
+ middleSmackerFileHash = READ_LE_UINT32(item + 12);
+ interactive = item[16];
+ middleFlag = item[17];
+ mouseCursorFileHash = READ_LE_UINT32(item + 20);
+ }
-typedef std::vector<NavigationItem> NavigationItems;
+ void save(FILE *fd) {
+ writeUint32LE(fd, fileHash);
+ writeUint32LE(fd, leftSmackerFileHash);
+ writeUint32LE(fd, rightSmackerFileHash);
+ writeUint32LE(fd, middleSmackerFileHash);
+ writeByte(fd, interactive);
+ writeByte(fd, middleFlag);
+ writeUint32LE(fd, mouseCursorFileHash);
+ }
-struct HitRectList {
- uint32 id;
- HitRects hitRects;
+ int getItemSize() const {
+ return 24;
+ }
+
};
-struct RectList {
+template<class ITEMCLASS>
+class StaticDataList {
+public:
uint32 id;
- RectItems rectItems;
+ std::vector<ITEMCLASS> items;
+
+ virtual ~StaticDataList() {
+ }
+
+ void add(ITEMCLASS item) {
+ items.push_back(item);
+ }
+
+ int getCount() const {
+ return items.size();
+ }
+
+ ITEMCLASS *getListItem(int index) {
+ return &items[index];
+ }
+
+ virtual bool specialLoadList(uint32 count, uint32 offset) {
+ return false;
+ }
+
+ void loadList(uint32 count, uint32 offset) {
+ id = offset;
+ if (!specialLoadList(count, offset)) {
+ for (uint32 i = 0; i < count; i++) {
+ ITEMCLASS listItem;
+ listItem.load(offset);
+ offset += listItem.getItemSize();
+ add(listItem);
+ }
+ }
+ }
+
+ void saveList(FILE *fd) {
+ writeUint32LE(fd, id);
+ writeUint32LE(fd, getCount());
+ for (int i = 0; i < getCount(); i++) {
+ items[i].save(fd);
+ }
+ }
+
+};
+
+class HitRectList : public StaticDataList<HitRect> {
};
-struct MessageList {
- uint32 id;
- MessageItems messageItems;
+class RectList : public StaticDataList<RectItem> {
};
-struct NavigationList {
- uint32 id;
- NavigationItems navigationItems;
+class MessageList : public StaticDataList<MessageItem> {
+public:
+
+ virtual bool specialLoadList(uint32 count, uint32 offset) {
+ // Special code for message lists which are set at runtime (but otherwise constant)
+ switch (offset) {
+ // Scene 1002 rings
+ case 0x004B4200:
+ add(MessageItem(0x4800, 258));
+ add(MessageItem(0x100D, 0x4A845A00));
+ add(MessageItem(0x4805, 1));
+ return true;
+ case 0x004B4218:
+ add(MessageItem(0x4800, 297));
+ add(MessageItem(0x100D, 0x43807801));
+ add(MessageItem(0x4805, 2));
+ return true;
+ case 0x004B4230:
+ add(MessageItem(0x4800, 370));
+ add(MessageItem(0x100D, 0x46C26A01));
+ return true;
+ case 0x004B4240:
+ add(MessageItem(0x4800, 334));
+ add(MessageItem(0x100D, 0x468C7B11));
+ add(MessageItem(0x4805, 1));
+ return true;
+ case 0x004B4258:
+ add(MessageItem(0x4800, 425));
+ add(MessageItem(0x100D, 0x42845B19));
+ add(MessageItem(0x4805, 1));
+ return true;
+ }
+ return false;
+ }
+
};
-std::vector<HitRectList*> hitRectLists;
-std::vector<RectList*> rectLists;
-std::vector<MessageList*> messageLists;
-std::vector<NavigationList*> navigationLists;
+class NavigationList : public StaticDataList<NavigationItem> {
-byte *getData(uint32 offset) {
- return data + offset - dataStart + fileStart;
-}
+};
-void addHitRect(uint32 count, uint32 offset) {
- HitRectList *hitRectList = new HitRectList();
- hitRectList->id = offset;
- byte *item = getData(offset);
- for (uint32 i = 0; i < count; i++) {
- HitRect hitRect;
- hitRect.x1 = READ_LE_UINT16(item + 0);
- hitRect.y1 = READ_LE_UINT16(item + 2);
- hitRect.x2 = READ_LE_UINT16(item + 4);
- hitRect.y2 = READ_LE_UINT16(item + 6);
- hitRect.messageNum = READ_LE_UINT16(item + 8);
- item += 10;
- //printf("(%d, %d, %d, %d) -> %04X\n", hitRect.x1, hitRect.y1, hitRect.x2, hitRect.y2, hitRect.messageNum);
- hitRectList->hitRects.push_back(hitRect);
+template<class LISTCLASS>
+class StaticDataListVector {
+public:
+ std::vector<LISTCLASS*> lists;
+
+ void add(LISTCLASS *list) {
+ lists.push_back(list);
}
- hitRectLists.push_back(hitRectList);
-}
-
-void addMessage(uint32 count, uint32 offset) {
- MessageList *messageList = new MessageList();
- messageList->id = offset;
- // Special code for message lists which are set at runtime (but otherwise constant)
- switch (offset) {
- // Scene 1002 rings
- case 0x004B4200:
- messageList->messageItems.push_back(MessageItem(0x4800, 258));
- messageList->messageItems.push_back(MessageItem(0x100D, 0x4A845A00));
- messageList->messageItems.push_back(MessageItem(0x4805, 1));
- break;
- case 0x004B4218:
- messageList->messageItems.push_back(MessageItem(0x4800, 297));
- messageList->messageItems.push_back(MessageItem(0x100D, 0x43807801));
- messageList->messageItems.push_back(MessageItem(0x4805, 2));
- break;
- case 0x004B4230:
- messageList->messageItems.push_back(MessageItem(0x4800, 370));
- messageList->messageItems.push_back(MessageItem(0x100D, 0x46C26A01));
- break;
- case 0x004B4240:
- messageList->messageItems.push_back(MessageItem(0x4800, 334));
- messageList->messageItems.push_back(MessageItem(0x100D, 0x468C7B11));
- messageList->messageItems.push_back(MessageItem(0x4805, 1));
- break;
- case 0x004B4258:
- messageList->messageItems.push_back(MessageItem(0x4800, 425));
- messageList->messageItems.push_back(MessageItem(0x100D, 0x42845B19));
- messageList->messageItems.push_back(MessageItem(0x4805, 1));
- break;
- default:
- // Read message list from the exe
- byte *item = getData(offset);
- for (uint32 i = 0; i < count; i++) {
- messageList->messageItems.push_back(MessageItem(READ_LE_UINT16(item + 0), READ_LE_UINT32(item + 4)));
- item += 8;
+
+ void loadListVector(const uint32 *offsets) {
+ for (int i = 0; offsets[i] != 0; i += 2) {
+ LISTCLASS *list = new LISTCLASS();
+ list->loadList(offsets[i], offsets[i + 1]);
+ bool doAppend = true;
+ // Bad
+ for (typename std::vector<LISTCLASS*>::iterator it = lists.begin(); it != lists.end(); it++) {
+ if ((*it)->id == list->id) {
+ doAppend = false;
+ break;
+ }
+ }
+ if (doAppend)
+ lists.push_back(list);
}
}
- messageLists.push_back(messageList);
-}
-
-void addRect(uint32 count, uint32 offset) {
- RectList *rectList = new RectList();
- rectList->id = offset;
- byte *item = getData(offset);
- for (uint32 i = 0; i < count; i++) {
- RectItem rectItem;
- byte *subItem;
- rectItem.x1 = READ_LE_UINT16(item + 0);
- rectItem.y1 = READ_LE_UINT16(item + 2);
- rectItem.x2 = READ_LE_UINT16(item + 4);
- rectItem.y2 = READ_LE_UINT16(item + 6);
- rectItem.subRectListCount = READ_LE_UINT32(item + 8);
- rectItem.subRectListOffset = READ_LE_UINT32(item + 12);
- //printf("(%d, %d, %d, %d), %d, %08X\n", rectItem.x1, rectItem.y1, rectItem.x2, rectItem.y2, rectItem.subRectListCount, rectItem.subRectListOffset);
- subItem = getData(rectItem.subRectListOffset);
- for (uint32 j = 0; j < rectItem.subRectListCount; j++) {
- SubRectItem subRectItem;
- subRectItem.x1 = READ_LE_UINT16(subItem + 0);
- subRectItem.y1 = READ_LE_UINT16(subItem + 2);
- subRectItem.x2 = READ_LE_UINT16(subItem + 4);
- subRectItem.y2 = READ_LE_UINT16(subItem + 6);
- subRectItem.messageListCount = READ_LE_UINT32(subItem + 8);
- subRectItem.messageListOffset = READ_LE_UINT32(subItem + 12);
- subItem += 16;
- //printf("(%d, %d, %d, %d), %d, %08X\n", subRectItem.x1, subRectItem.y1, subRectItem.x2, subRectItem.y2, subRectItem.messageListCount, subRectItem.messageListOffset);
- addMessage(subRectItem.messageListCount, subRectItem.messageListOffset);
- rectItem.subRectItems.push_back(subRectItem);
+
+ void saveListVector(FILE *fd) {
+ writeUint32LE(fd, lists.size());
+ for (typename std::vector<LISTCLASS*>::iterator it = lists.begin(); it != lists.end(); it++) {
+ (*it)->saveList(fd);
}
- item += 16;
- rectList->rectItems.push_back(rectItem);
}
- rectLists.push_back(rectList);
-}
-void addNavigation(uint32 count, uint32 offset) {
- NavigationList *navigationList = new NavigationList();
- navigationList->id = offset;
- byte *item = getData(offset);
- for (uint32 i = 0; i < count; i++) {
- NavigationItem navigationItem;
- navigationItem.fileHash = READ_LE_UINT32(item + 0);
- navigationItem.leftSmackerFileHash = READ_LE_UINT32(item + 4);
- navigationItem.rightSmackerFileHash = READ_LE_UINT32(item + 8);
- navigationItem.middleSmackerFileHash = READ_LE_UINT32(item + 12);
- navigationItem.interactive = item[16];
- navigationItem.middleFlag = item[17];
- navigationItem.mouseCursorFileHash = READ_LE_UINT32(item + 20);
- item += 24;
- navigationList->navigationItems.push_back(navigationItem);
- }
- navigationLists.push_back(navigationList);
+};
+
+StaticDataListVector<HitRectList> hitRectLists;
+StaticDataListVector<RectList> rectLists;
+StaticDataListVector<MessageList> messageLists;
+StaticDataListVector<NavigationList> navigationLists;
+
+void addMessageList(uint32 messageListCount, uint32 messageListOffset) {
+ MessageList *messageList = new MessageList();
+ messageList->loadList(messageListCount, messageListOffset);
+ messageLists.add(messageList);
}
int main(int argc, char *argv[]) {
@@ -240,96 +363,24 @@ int main(int argc, char *argv[]) {
loadExe("nhc.exe");
- for (int i = 0; hitRectListOffsets[i] != 0; i += 2) {
- addHitRect(hitRectListOffsets[i], hitRectListOffsets[i + 1]);
- }
-
- for (int i = 0; rectListOffsets[i] != 0; i += 2) {
- addRect(rectListOffsets[i], rectListOffsets[i + 1]);
- }
-
- for (int i = 0; messageListOffsets[i] != 0; i += 2) {
- addMessage(messageListOffsets[i], messageListOffsets[i + 1]);
- }
-
- for (int i = 0; navigationListOffsets[i] != 0; i += 2) {
- addNavigation(navigationListOffsets[i], navigationListOffsets[i + 1]);
- }
-
+ hitRectLists.loadListVector(hitRectListOffsets);
+ rectLists.loadListVector(rectListOffsets);
+ messageLists.loadListVector(messageListOffsets);
+ navigationLists.loadListVector(navigationListOffsets);
+
datFile = fopen("neverhood.dat", "wb");
writeUint32LE(datFile, 0x11223344); // Some magic
writeUint32LE(datFile, DAT_VERSION);
// Write all message lists
- writeUint32LE(datFile, messageLists.size());
- for (std::vector<MessageList*>::iterator it = messageLists.begin(); it != messageLists.end(); it++) {
- MessageList *messageList = *it;
- writeUint32LE(datFile, messageList->id);
- writeUint32LE(datFile, messageList->messageItems.size());
- for (uint32 i = 0; i < messageList->messageItems.size(); i++) {
- writeUint16LE(datFile, messageList->messageItems[i].messageNum);
- writeUint32LE(datFile, messageList->messageItems[i].messageParam);
- }
- }
-
+ messageLists.saveListVector(datFile);
// Write all rect lists
- writeUint32LE(datFile, rectLists.size());
- for (std::vector<RectList*>::iterator it = rectLists.begin(); it != rectLists.end(); it++) {
- RectList *rectList = *it;
- writeUint32LE(datFile, rectList->id);
- writeUint32LE(datFile, rectList->rectItems.size());
- for (uint32 i = 0; i < rectList->rectItems.size(); i++) {
- const RectItem &rectItem = rectList->rectItems[i];
- writeUint16LE(datFile, rectItem.x1);
- writeUint16LE(datFile, rectItem.y1);
- writeUint16LE(datFile, rectItem.x2);
- writeUint16LE(datFile, rectItem.y2);
- writeUint32LE(datFile, rectItem.subRectItems.size());
- for (uint32 j = 0; j < rectItem.subRectItems.size(); j++) {
- const SubRectItem &subRectItem = rectItem.subRectItems[j];
- writeUint16LE(datFile, subRectItem.x1);
- writeUint16LE(datFile, subRectItem.y1);
- writeUint16LE(datFile, subRectItem.x2);
- writeUint16LE(datFile, subRectItem.y2);
- writeUint32LE(datFile, subRectItem.messageListOffset);
- }
- }
- }
-
+ rectLists.saveListVector(datFile);
// Write all hit rect lists
- writeUint32LE(datFile, hitRectLists.size());
- for (std::vector<HitRectList*>::iterator it = hitRectLists.begin(); it != hitRectLists.end(); it++) {
- HitRectList *hitRectList = *it;
- writeUint32LE(datFile, hitRectList->id);
- writeUint32LE(datFile, hitRectList->hitRects.size());
- for (uint32 i = 0; i < hitRectList->hitRects.size(); i++) {
- const HitRect &hitRect = hitRectList->hitRects[i];
- writeUint16LE(datFile, hitRect.x1);
- writeUint16LE(datFile, hitRect.y1);
- writeUint16LE(datFile, hitRect.x2);
- writeUint16LE(datFile, hitRect.y2);
- writeUint16LE(datFile, hitRect.messageNum);
- }
- }
-
+ hitRectLists.saveListVector(datFile);
// Write all navigation lists
- writeUint32LE(datFile, navigationLists.size());
- for (std::vector<NavigationList*>::iterator it = navigationLists.begin(); it != navigationLists.end(); it++) {
- NavigationList *navigationList = *it;
- writeUint32LE(datFile, navigationList->id);
- writeUint32LE(datFile, navigationList->navigationItems.size());
- for (uint32 i = 0; i < navigationList->navigationItems.size(); i++) {
- const NavigationItem &navigationItem = navigationList->navigationItems[i];
- writeUint32LE(datFile, navigationItem.fileHash);
- writeUint32LE(datFile, navigationItem.leftSmackerFileHash);
- writeUint32LE(datFile, navigationItem.rightSmackerFileHash);
- writeUint32LE(datFile, navigationItem.middleSmackerFileHash);
- writeByte(datFile, navigationItem.interactive);
- writeByte(datFile, navigationItem.middleFlag);
- writeUint32LE(datFile, navigationItem.mouseCursorFileHash);
- }
- }
+ navigationLists.saveListVector(datFile);
fclose(datFile);
Commit: bec86c7c2ee49a1428b5fac88b08e427805970a8
https://github.com/scummvm/scummvm/commit/bec86c7c2ee49a1428b5fac88b08e427805970a8
Author: digitall (digitall at scummvm.org)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Switch to initGraphics() call, rather than separate calls. Default to 1xScalar.
Changed paths:
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index c6a7e5a..d94d3db 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -57,11 +57,7 @@ NeverhoodEngine::~NeverhoodEngine() {
}
Common::Error NeverhoodEngine::run() {
- // Initialize backend
- _system->beginGFXTransaction();
- initCommonGFX(false);
- _system->initSize(640, 480);
- _system->endGFXTransaction();
+ initGraphics(640, 480, true);
_isSaveAllowed = false;
Commit: eb8c44b54c846d30d9ce246b786fd46e1218b586
https://github.com/scummvm/scummvm/commit/eb8c44b54c846d30d9ce246b786fd46e1218b586
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Implement Scene2201
- Implement DataResource::getHitRectList, DataResource::getMessageListAtPos and related stuff in scene.cpp
Changed paths:
A engines/neverhood/module2200.cpp
A engines/neverhood/module2200.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
engines/neverhood/resource.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7408c25..a118e4f 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -30,6 +30,7 @@
#include "neverhood/module1700.h"
#include "neverhood/module1800.h"
#include "neverhood/module2000.h"
+#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
#include "neverhood/module3000.h"
@@ -236,10 +237,14 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule1800(-1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 0;
createModule2000(-1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule2200(-1);
+#endif
}
void GameModule::createModule1000(int which) {
@@ -404,6 +409,25 @@ void GameModule::updateModule2000() {
}
}
+void GameModule::createModule2200(int which) {
+ setGlobalVar(0x91080831, 0x11391412);
+ _childObject = new Module2200(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule2200);
+}
+
+void GameModule::updateModule2200() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createModule2300(1);
+ _childObject->handleUpdate();
+ }
+}
+
void GameModule::createModule2300(int which) {
setGlobalVar(0x91080831, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
@@ -419,7 +443,7 @@ void GameModule::updateModule2300() {
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
- // TODO createModule2200(0);
+ createModule2200(0);
// TODO _childObject->handleUpdate();
} else if (_field20 == 2) {
createModule1200(0);
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 6de3893..9ef1b92 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -66,6 +66,7 @@ protected:
void createModule2000(int which);
void updateModule2000();
void createModule2200(int which);
+ void updateModule2200();
void createModule2300(int which);
void updateModule2300();
void createModule2400(int which);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index d74f94b..50dd231 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -573,8 +573,10 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
break;
case 0x482C:
if (param.asInteger() != 0) {
+ debug("#################################################");
// TODO _rectResource.getRectangle2(param.asInteger(), &_field118, &_field114,);
} else {
+ debug("#################################################");
// TODO _field114 = 0;
}
break;
@@ -3402,6 +3404,7 @@ uint32 KmScene2001::handleMessage4401A0(int messageNum, const MessageParam ¶
}
break;
}
+ return messageResult;
}
void KmScene2001::sub440230() {
@@ -3422,4 +3425,77 @@ void KmScene2001::sub440270() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
+KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *rect1, int16 unk)
+ // TODO: NRect *rect1, int16 unk in Klayman ctor
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ _dataResource.load(0x04104242);
+ _flagF6 = false;
+}
+
+uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4812:
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ break;
+ case 0x4816:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x4818:
+ sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub421030));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub421070));
+ }
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 8585689..1c02f1e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -370,6 +370,13 @@ protected:
void sub440270();
};
+class KmScene2201 : public Klayman {
+public:
+ KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *rect1, int16 unk);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 5dcdc41..9122eaf 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -18,6 +18,7 @@ MODULE_OBJS = \
module1700.o \
module1800.o \
module2000.o \
+ module2200.o \
module2300.o \
module3000.o \
mouse.o \
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
new file mode 100644
index 0000000..9e4d083
--- /dev/null
+++ b/engines/neverhood/module2200.cpp
@@ -0,0 +1,730 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2200.h"
+#include "neverhood/module1000.h"
+#include "neverhood/module1200.h"
+
+namespace Neverhood {
+
+Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ debug("Create Module2200(%d)", which);
+
+ // TODO: Music18hList_add(0x11391412, 0x601C908C);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ default:
+ createScene2201(-1);
+ break;
+ case 1:
+ createScene2202(-1);
+ break;
+ case 2:
+ createScene2203(-1);
+ break;
+ case 3:
+ createScene2204(-1);
+ break;
+ case 4:
+ createScene2205(-1);
+ break;
+ case 5:
+ createScene2206(-1);
+ break;
+ case 6:
+ createScene2207(-1);
+ break;
+ case 7:
+ createScene2208(-1);
+ break;
+ case 8:
+ createScene2209(-1);
+ break;
+ case 9:
+ createScene2210(-1);
+ break;
+ case 10:
+ createScene2211(-1);
+ break;
+ case 11:
+ createScene2212(-1);
+ break;
+ case 12:
+ createScene2213(-1);
+ break;
+ case 13:
+ createScene2214(-1);
+ break;
+ case 14:
+ createScene2215(-1);
+ break;
+ case 15:
+ createScene2216(-1);
+ break;
+ case 16:
+ createScene2217(-1);
+ break;
+ case 17:
+ createScene2218(-1);
+ break;
+ case 18:
+ createScene2219(-1);
+ break;
+ case 19:
+ createScene2220(-1);
+ break;
+ case 20:
+ createScene2221(-1);
+ break;
+ case 21:
+ createScene2222(-1);
+ break;
+ case 22:
+ createScene2223(-1);
+ break;
+ case 23:
+ createScene2224(-1);
+ break;
+ case 24:
+ createScene2225(-1);
+ break;
+ case 25:
+ createScene2226(-1);
+ break;
+ case 26:
+ createScene2227(-1);
+ break;
+ case 27:
+ createScene2228(-1);
+ break;
+ case 28:
+ createScene2229(-1);
+ break;
+ case 29:
+ createScene2230(-1);
+ break;
+ case 30:
+ createScene2231(-1);
+ break;
+ case 31:
+ createScene2232(-1);
+ break;
+ case 32:
+ createScene2233(-1);
+ break;
+ case 33:
+ createScene2234(-1);
+ break;
+ case 34:
+ createScene2235(-1);
+ break;
+ case 35:
+ createScene2236(-1);
+ break;
+ case 36:
+ createScene2237(-1);
+ break;
+ case 37:
+ createScene2238(-1);
+ break;
+ case 38:
+ createScene2239(-1);
+ break;
+ case 39:
+ createScene2240(-1);
+ break;
+ case 40:
+ createScene2241(-1);
+ break;
+ case 41:
+ createScene2242(-1);
+ break;
+ case 42:
+ createScene2243(-1);
+ break;
+ case 43:
+ createScene2244(-1);
+ break;
+ case 44:
+ createScene2245(-1);
+ break;
+ case 45:
+ createScene2246(-1);
+ break;
+ case 46:
+ createScene2247(-1);
+ break;
+ case 47:
+ createScene2248(-1);
+ break;
+ }
+ } else {
+ createScene2201(0);
+ }
+
+}
+
+Module2200::~Module2200() {
+ // TODO Sound1ChList_sub_407A50(0x11391412);
+}
+
+void Module2200::createScene2201(int which) {
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene2201(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2201);
+}
+
+void Module2200::createScene2202(int which) {
+}
+
+void Module2200::createScene2203(int which) {
+}
+
+void Module2200::createScene2204(int which) {
+}
+
+void Module2200::createScene2205(int which) {
+}
+
+void Module2200::createScene2206(int which) {
+}
+
+void Module2200::createScene2207(int which) {
+}
+
+void Module2200::createScene2208(int which) {
+}
+
+void Module2200::createScene2209(int which) {
+}
+
+void Module2200::createScene2210(int which) {
+}
+
+void Module2200::createScene2211(int which) {
+}
+
+void Module2200::createScene2212(int which) {
+}
+
+void Module2200::createScene2213(int which) {
+}
+
+void Module2200::createScene2214(int which) {
+}
+
+void Module2200::createScene2215(int which) {
+}
+
+void Module2200::createScene2216(int which) {
+}
+
+void Module2200::createScene2217(int which) {
+}
+
+void Module2200::createScene2218(int which) {
+}
+
+void Module2200::createScene2219(int which) {
+}
+
+void Module2200::createScene2220(int which) {
+}
+
+void Module2200::createScene2221(int which) {
+}
+
+void Module2200::createScene2222(int which) {
+}
+
+void Module2200::createScene2223(int which) {
+}
+
+void Module2200::createScene2224(int which) {
+}
+
+void Module2200::createScene2225(int which) {
+}
+
+void Module2200::createScene2226(int which) {
+}
+
+void Module2200::createScene2227(int which) {
+}
+
+void Module2200::createScene2228(int which) {
+}
+
+void Module2200::createScene2229(int which) {
+}
+
+void Module2200::createScene2230(int which) {
+}
+
+void Module2200::createScene2231(int which) {
+}
+
+void Module2200::createScene2232(int which) {
+}
+
+void Module2200::createScene2233(int which) {
+}
+
+void Module2200::createScene2234(int which) {
+}
+
+void Module2200::createScene2235(int which) {
+}
+
+void Module2200::createScene2236(int which) {
+}
+
+void Module2200::createScene2237(int which) {
+}
+
+void Module2200::createScene2238(int which) {
+}
+
+void Module2200::createScene2239(int which) {
+}
+
+void Module2200::createScene2240(int which) {
+}
+
+void Module2200::createScene2241(int which) {
+}
+
+void Module2200::createScene2242(int which) {
+}
+
+void Module2200::createScene2243(int which) {
+}
+
+void Module2200::createScene2244(int which) {
+}
+
+void Module2200::createScene2245(int which) {
+}
+
+void Module2200::createScene2246(int which) {
+}
+
+void Module2200::createScene2247(int which) {
+}
+
+void Module2200::createScene2248(int which) {
+}
+
+void Module2200::updateScene2201() {
+ // TODO
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ }
+}
+
+void Module2200::updateScene2202() {
+}
+
+void Module2200::updateScene2203() {
+}
+
+void Module2200::updateScene2204() {
+}
+
+void Module2200::updateScene2205() {
+}
+
+void Module2200::updateScene2206() {
+}
+
+void Module2200::updateScene2207() {
+}
+
+void Module2200::updateScene2208() {
+}
+
+void Module2200::updateScene2209() {
+}
+
+void Module2200::updateScene2210() {
+}
+
+void Module2200::updateScene2211() {
+}
+
+void Module2200::updateScene2212() {
+}
+
+void Module2200::updateScene2213() {
+}
+
+void Module2200::updateScene2214() {
+}
+
+void Module2200::updateScene2215() {
+}
+
+void Module2200::updateScene2216() {
+}
+
+void Module2200::updateScene2217() {
+}
+
+void Module2200::updateScene2218() {
+}
+
+void Module2200::updateScene2219() {
+}
+
+void Module2200::updateScene2220() {
+}
+
+void Module2200::updateScene2221() {
+}
+
+void Module2200::updateScene2222() {
+}
+
+void Module2200::updateScene2223() {
+}
+
+void Module2200::updateScene2224() {
+}
+
+void Module2200::updateScene2225() {
+}
+
+void Module2200::updateScene2226() {
+}
+
+void Module2200::updateScene2227() {
+}
+
+void Module2200::updateScene2228() {
+}
+
+void Module2200::updateScene2229() {
+}
+
+void Module2200::updateScene2230() {
+}
+
+void Module2200::updateScene2231() {
+}
+
+void Module2200::updateScene2232() {
+}
+
+void Module2200::updateScene2233() {
+}
+
+void Module2200::updateScene2234() {
+}
+
+void Module2200::updateScene2235() {
+}
+
+void Module2200::updateScene2236() {
+}
+
+void Module2200::updateScene2237() {
+}
+
+void Module2200::updateScene2238() {
+}
+
+void Module2200::updateScene2239() {
+}
+
+void Module2200::updateScene2240() {
+}
+
+void Module2200::updateScene2241() {
+}
+
+void Module2200::updateScene2242() {
+}
+
+void Module2200::updateScene2243() {
+}
+
+void Module2200::updateScene2244() {
+}
+
+void Module2200::updateScene2245() {
+}
+
+void Module2200::updateScene2246() {
+}
+
+void Module2200::updateScene2247() {
+}
+
+void Module2200::updateScene2248() {
+}
+
+// Scene2201
+
+AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100) {
+
+ _x = 403;
+ _y = 259;
+ createSurface(100, 233, 96);
+ setFileHash(0x8600866, 0, -1);
+ SetUpdateHandler(&AnimatedSprite::update);
+}
+
+AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *doorLightSprite, bool flag1)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _doorLightSprite(doorLightSprite),
+ _countdown(0), _doorOpen(flag1) {
+
+ _x = 408;
+ _y = 290;
+ createSurface(900, 63, 266);
+ SetUpdateHandler(&AsScene2201Door::update);
+ SetMessageHandler(&AsScene2201Door::handleMessage);
+ if (_doorOpen) {
+ setFileHash(0xE2CB0412, -1, -1);
+ _countdown = 48;
+ _newHashListIndex = -2;
+ } else {
+ setFileHash(0xE2CB0412, 0, -1);
+ _newHashListIndex = 0;
+ _doorLightSprite->getSurface()->setVisible(false);
+ }
+}
+
+void AsScene2201Door::update() {
+ if (_countdown != 0 && _doorOpen && (--_countdown == 0)) {
+ stCloseDoor();
+ }
+ AnimatedSprite::update();
+}
+
+uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x11001090) {
+ if (_doorOpen)
+ _doorLightSprite->getSurface()->setVisible(true);
+ } else if (param.asInteger() == 0x11283090) {
+ if (!_doorOpen)
+ _doorLightSprite->getSurface()->setVisible(false);
+ }
+ break;
+ case 0x2000:
+ if (_doorOpen)
+ _countdown = 144;
+ messageResult = _doorOpen ? 1 : 0;
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ _countdown = 144;
+ if (!_doorOpen)
+ stOpenDoor();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2201Door::stOpenDoor() {
+ _doorOpen = true;
+ setFileHash(0xE2CB0412, 0, -1);
+ _newHashListIndex = -2;
+ _soundResource.play(calcHash("fxDoorOpen33"));
+}
+
+void AsScene2201Door::stCloseDoor() {
+ _doorOpen = false;
+ setFileHash(0xE2CB0412, -1, -1);
+ _playBackwards = true;
+ _newHashListIndex = 0;
+ _soundResource.play(calcHash("fxDoorClose33"));
+}
+
+Class444::Class444(NeverhoodEngine *vm, int pointIndex, int spriteIndex)
+ : StaticSprite(vm, 900) {
+
+ _spriteResource.load2(kClass444FileHashes[spriteIndex]);
+ createSurface(100, 16, 16);
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = kClass444Points[pointIndex].x;
+ _y = kClass444Points[pointIndex].y;
+ _needRefresh = true;
+}
+
+Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundFlag(false) {
+
+ Sprite *tempSprite;
+
+ if (!getSubVar(0x40050052, 0x60400854)) {
+ // TODO _vm->gameModule()->initScene2201Vars();
+ }
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2201::handleMessage);
+ SetUpdateHandler(&Scene2201::update);
+
+ loadDataResource(0x04104242);
+ loadHitRectList();
+
+ _background = addBackground(new DirtyBackground(_vm, 0x40008208, 0, 0));
+ _palette = new Palette(_vm, 0x40008208);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x0820C408, NULL));
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 7, 1100, 459, 432, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+ _ssDoorButton = addSprite(new Class426(_vm, this, 0xE4A43E29, 0xE4A43E29, 100, 0));
+
+ for (uint32 i = 0; i < 9; i++) {
+ if ((int16)getSubVar(0x484498D0, i) >= 0) {
+ addSprite(new Class444(_vm, i, (int16)getSubVar(0x484498D0, i)));
+ }
+ }
+
+ _rect1.y1 = 0;
+ _rect1.x2 = 640;
+ _rect2.x2 = 640;
+ _rect2.y2 = 480;
+
+ if (!getGlobalVar(0x404290D5)) {
+ addSprite(new StaticSprite(_vm, 0x00026027, 900));
+ }
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x030326A0, 1100));
+ _rect1.x1 = tempSprite->getSurface()->getDrawRect().x;
+
+ addSprite(new StaticSprite(_vm, 0x811DA061, 1100));
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x11180022, 1100));
+ _rect2.x1 = tempSprite->getSurface()->getDrawRect().x;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x0D411130, 1100));
+ _rect1.y2 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
+ _rect2.y1 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
+
+ _doorLightSprite = addSprite(new StaticSprite(_vm, 0xA4062212, 900));
+
+ if (which < 0) {
+ _klayman = new KmScene2201(_vm, this, 300, 427, &_rect1, 2);
+ setMessageList(0x004B8118);
+ _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ } else if (which == 1) {
+ _klayman = new KmScene2201(_vm, this, 412, 393, &_rect1, 2);
+ setMessageList(0x004B8130);
+ _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ } else if (which == 2) {
+ if (getGlobalVar(0xC0418A02)) {
+ _klayman = new KmScene2201(_vm, this, 379, 427, &_rect1, 2);
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmScene2201(_vm, this, 261, 427, &_rect1, 2);
+ }
+ setMessageList(0x004B8178);
+ _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ } else {
+ NPoint pt = _dataResource.getPoint(0x0304D8DC);
+ _klayman = new KmScene2201(_vm, this, pt.x, pt.y, &_rect1, 2);
+ setMessageList(0x004B8120);
+ _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, true));
+ }
+ addSprite(_klayman);
+
+ addSprite(new AsScene2201CeilingFan(_vm));
+
+ // TODO Sound1ChList_addSoundResource(0x04106220, 0x81212040, true);
+
+}
+
+Scene2201::~Scene2201() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ // TODO Sound1ChList_sub_407AF0(0x04106220);
+}
+
+void Scene2201::update() {
+ Scene::update();
+ if (!_soundFlag) {
+ // TODO Sound1ChList_playLooping(0x81212040);
+ _soundFlag = true;
+ }
+}
+
+uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x402064D8) {
+ _klayman->sendEntityMessage(0x1014, _ssDoorButton, this);
+ } else if (param.asInteger() == 0x35803198) {
+ if (_asDoor->hasMessageHandler() && _asDoor->sendMessage(0x2000, 0, this)) {
+ setMessageList(0x004B81A0);
+ } else {
+ setMessageList(0x004B81B8);
+ }
+ } else if (param.asInteger() == 0x51445010) {
+ if (getGlobalVar(0x404290D5)) {
+ setMessageList(0x004B8108);
+ } else {
+ setMessageList(0x004B8150);
+ }
+ } else if (param.asInteger() == 0x1D203082) {
+ setMessageList(0x004B8180);
+ } else if (param.asInteger() == 0x00049091) {
+ if (getGlobalVar(0x404290D5)) {
+ setMessageList(0x004B8138);
+ } else {
+ setMessageList(0x004B8108);
+ }
+ }
+ break;
+ case 0x480B:
+ if (sender == _ssDoorButton) {
+ _asDoor->sendMessage(0x4808, 0, this);
+ }
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ _klayman->sendEntityMessage(0x1014, _asTape, this);
+ setMessageList(0x004B81C8);
+ }
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
new file mode 100644
index 0000000..5b14606
--- /dev/null
+++ b/engines/neverhood/module2200.h
@@ -0,0 +1,206 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2200_H
+#define NEVERHOOD_MODULE2200_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module2200
+
+class Module2200 : public Module {
+public:
+ Module2200(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2200();
+protected:
+ void createScene2201(int which);
+ void createScene2202(int which);
+ void createScene2203(int which);
+ void createScene2204(int which);
+ void createScene2205(int which);
+ void createScene2206(int which);
+ void createScene2207(int which);
+ void createScene2208(int which);
+ void createScene2209(int which);
+ void createScene2210(int which);
+ void createScene2211(int which);
+ void createScene2212(int which);
+ void createScene2213(int which);
+ void createScene2214(int which);
+ void createScene2215(int which);
+ void createScene2216(int which);
+ void createScene2217(int which);
+ void createScene2218(int which);
+ void createScene2219(int which);
+ void createScene2220(int which);
+ void createScene2221(int which);
+ void createScene2222(int which);
+ void createScene2223(int which);
+ void createScene2224(int which);
+ void createScene2225(int which);
+ void createScene2226(int which);
+ void createScene2227(int which);
+ void createScene2228(int which);
+ void createScene2229(int which);
+ void createScene2230(int which);
+ void createScene2231(int which);
+ void createScene2232(int which);
+ void createScene2233(int which);
+ void createScene2234(int which);
+ void createScene2235(int which);
+ void createScene2236(int which);
+ void createScene2237(int which);
+ void createScene2238(int which);
+ void createScene2239(int which);
+ void createScene2240(int which);
+ void createScene2241(int which);
+ void createScene2242(int which);
+ void createScene2243(int which);
+ void createScene2244(int which);
+ void createScene2245(int which);
+ void createScene2246(int which);
+ void createScene2247(int which);
+ void createScene2248(int which);
+ void updateScene2201();
+ void updateScene2202();
+ void updateScene2203();
+ void updateScene2204();
+ void updateScene2205();
+ void updateScene2206();
+ void updateScene2207();
+ void updateScene2208();
+ void updateScene2209();
+ void updateScene2210();
+ void updateScene2211();
+ void updateScene2212();
+ void updateScene2213();
+ void updateScene2214();
+ void updateScene2215();
+ void updateScene2216();
+ void updateScene2217();
+ void updateScene2218();
+ void updateScene2219();
+ void updateScene2220();
+ void updateScene2221();
+ void updateScene2222();
+ void updateScene2223();
+ void updateScene2224();
+ void updateScene2225();
+ void updateScene2226();
+ void updateScene2227();
+ void updateScene2228();
+ void updateScene2229();
+ void updateScene2230();
+ void updateScene2231();
+ void updateScene2232();
+ void updateScene2233();
+ void updateScene2234();
+ void updateScene2235();
+ void updateScene2236();
+ void updateScene2237();
+ void updateScene2238();
+ void updateScene2239();
+ void updateScene2240();
+ void updateScene2241();
+ void updateScene2242();
+ void updateScene2243();
+ void updateScene2244();
+ void updateScene2245();
+ void updateScene2246();
+ void updateScene2247();
+ void updateScene2248();
+};
+
+// Scene2201
+
+static const NPoint kClass444Points[] = {
+ {305, 305},
+ {321, 305},
+ {336, 305},
+ {305, 319},
+ {321, 319},
+ {336, 319},
+ {305, 332},
+ {321, 332},
+ {336, 333}
+};
+
+static const uint32 kClass444FileHashes[] = {
+ 0x88134A44,
+ 0xAA124340,
+ 0xB8124602,
+ 0xA902464C,
+ 0x890A4244,
+ 0xA8124642,
+ 0xB812C204,
+ 0x381A4A4C
+};
+
+class AsScene2201CeilingFan : public AnimatedSprite {
+public:
+ AsScene2201CeilingFan(NeverhoodEngine *vm);
+};
+
+class AsScene2201Door : public AnimatedSprite {
+public:
+ AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *doorLightSprite, bool flag1);
+protected:
+ SoundResource _soundResource;
+ Klayman *_klayman;
+ Sprite *_doorLightSprite;
+ bool _doorOpen;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stOpenDoor();
+ void stCloseDoor();
+};
+
+class Class444 : public StaticSprite {
+public:
+ Class444(NeverhoodEngine *vm, int pointIndex, int spriteIndex);
+};
+
+
+class Scene2201 : public Scene {
+public:
+ Scene2201(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2201();
+protected:
+ NRect _rect1;
+ NRect _rect2;
+ Sprite *_doorLightSprite;
+ Sprite *_asDoor;
+ Sprite *_ssDoorButton;
+ Sprite *_asTape;
+ bool _soundFlag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2200_H */
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 39824de..ef8e532 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -497,7 +497,7 @@ void DataResource::load(uint32 fileHash) {
hitRect.rect.y1 = dataS.readUint16LE();
hitRect.rect.x2 = dataS.readUint16LE();
hitRect.rect.y2 = dataS.readUint16LE();
- hitRect.type = dataS.readUint16LE();
+ hitRect.type = dataS.readUint16LE() + 0x5001;
debug(3, "(%d, %d, %d, %d) -> %04d", hitRect.rect.x1, hitRect.rect.y1, hitRect.rect.x2, hitRect.rect.y2, hitRect.type);
hitRectList->push_back(hitRect);
}
@@ -514,7 +514,7 @@ void DataResource::load(uint32 fileHash) {
MessageItem messageItem;
messageItem.messageNum = dataS.readUint32LE();
messageItem.messageValue = dataS.readUint32LE();
- debug(3, "(%04X, %08X)", messageItem.messageNum, messageItem.messageValue);
+ debug(3, "(%08X, %08X)", messageItem.messageNum, messageItem.messageValue);
messageList->push_back(messageItem);
}
drDirectoryItem.offset = _messageLists.size();
@@ -602,12 +602,26 @@ NPointArray *DataResource::getPointArray(uint32 nameHash) {
}
HitRectList *DataResource::getHitRectList() {
- // TODO
+ DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(calcHash("HitArray"), 3);
+ if (drDirectoryItem)
+ return _hitRectLists[drDirectoryItem->offset];
return NULL;
}
MessageList *DataResource::getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY) {
- // TODO
+ for (uint i = 0; i < _drRects.size(); i++) {
+ if (klaymanX >= _drRects[i].rect.x1 && klaymanX <= _drRects[i].rect.x2 &&
+ klaymanY >= _drRects[i].rect.y1 && klaymanY <= _drRects[i].rect.y2) {
+ DRSubRectList *drSubRectList = _drSubRectLists[_drRects[i].subRectIndex];
+ for (uint j = 0; j < drSubRectList->size(); j++) {
+ DRSubRect &subRect = (*drSubRectList)[j];
+ if (mouseX >= subRect.rect.x1 && mouseX <= subRect.rect.x2 &&
+ mouseY >= subRect.rect.y1 && mouseY <= subRect.rect.y2) {
+ return _messageLists[subRect.messageListItemIndex];
+ }
+ }
+ }
+ }
return NULL;
}
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 2c6b10e..2a01bc2 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -36,7 +36,6 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_mouseClickPos.y = 0;
_mouseClicked = false;
_rectList = NULL;
- // TODO _someRects = NULL;
_klayman = NULL;
_mouseCursor = NULL;
_palette = NULL;
@@ -332,10 +331,10 @@ bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
}
bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
+ int16 klaymanX = _klayman->getX();
+ int16 klaymanY = _klayman->getY();
if (_rectType == 1) {
RectList &rectList = *_rectList;
- int16 klaymanX = _klayman->getX();
- int16 klaymanY = _klayman->getY();
for (uint i = 0; i < rectList.size(); i++) {
debug("(%d, %d) ? (%d, %d, %d, %d)", klaymanX, klaymanY, rectList[i].rect.x1, rectList[i].rect.y1, rectList[i].rect.x2, rectList[i].rect.y2);
if (klaymanX >= rectList[i].rect.x1 && klaymanX <= rectList[i].rect.x2 &&
@@ -350,6 +349,10 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
}
}
}
+ } else if (_rectType == 2) {
+ MessageList *messageList = _dataResource.getMessageListAtPos(klaymanX, klaymanY, mouseX, mouseY);
+ if (messageList && messageList->size())
+ setMessageList2(messageList, true, true);
}
return true;
}
@@ -440,7 +443,7 @@ void Scene::runMessageList() {
if (_messageList && _klayman) {
while (_messageList && _messageListIndex < _messageListCount && !_messageListFlag1) {
- int messageNum = (*_messageList)[_messageListIndex].messageNum;
+ uint32 messageNum = (*_messageList)[_messageListIndex].messageNum;
uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
@@ -450,7 +453,7 @@ void Scene::runMessageList() {
_klayman->sendMessage(0x1021, 0, this);
}
if (_systemCallbackFlag) {
- // TODO messageNum = systemConvertMessageCb(messageNum);
+ messageNum = convertMessageNum(messageNum);
}
if (messageNum != 0x4003) {
if (messageNum == 0x1009 || messageNum == 0x1024) {
@@ -514,10 +517,48 @@ void Scene::clearRectList() {
_rectType = 0;
}
+void Scene::loadHitRectList() {
+ HitRectList *hitRectList = _dataResource.getHitRectList();
+ debug("Scene::loadHitRectList() hitRectList = %p", (void*)hitRectList);
+ if (hitRectList) {
+ _hitRectList = *hitRectList;
+ _vm->_collisionMan->setHitRects(&_hitRectList);
+ }
+}
+
void Scene::loadDataResource(uint32 fileHash) {
_dataResource.load(fileHash);
+ _rectType = 2;
if (_klayman)
_klayman->loadDataResource(fileHash);
}
+uint16 Scene::convertMessageNum(uint32 messageNum) {
+ switch (messageNum) {
+ case 0x00004004:
+ return 0x4001;
+ case 0x00000083:
+ return 0x100A;
+ case 0x044001C8:
+ return 0x481C;
+ case 0x02420480:
+ return 0x4818;
+ case 0x08004025:
+ return 0x100D;
+ case 0x04404281:
+ return 0x4824;
+ case 0x08400880:
+ return 0x4825;
+ case 0x08209081:
+ return 0x4823;
+ case 0x24000060:
+ return 0x1009;
+ case 0x42002200:
+ return 0x4004;
+ case 0x428D4894:
+ return 0x101A;
+ }
+ return 0x1000;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index ab5cf9f..e3ed273 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -65,10 +65,8 @@ protected:
bool _mouseClicked;
DataResource _dataResource;
RectList *_rectList;
+ HitRectList _hitRectList;
int _rectType;
- // rectListCount
- // TODO 00000088 someRects dd ?
- // TODO 0000008C someRectsCount dw ?
// TODO 0000008E field_8E dw ?
Sprite *_mouseCursor;
Klayman *_klayman;
@@ -104,8 +102,10 @@ protected:
void setRectList(uint32 id);
void setRectList(RectList *rectList);
void clearRectList();
+ void loadHitRectList();
void messageList402220();
void loadDataResource(uint32 fileHash);
+ uint16 convertMessageNum(uint32 messageNum);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index 178e5c9..c19c060 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -50,7 +50,7 @@ struct RectItem {
typedef Common::Array<RectItem> RectList;
struct MessageItem {
- uint16 messageNum;
+ uint32 messageNum;
uint32 messageValue;
};
Commit: 28177361bf9406fce53db89b469e912219380b4d
https://github.com/scummvm/scummvm/commit/28177361bf9406fce53db89b469e912219380b4d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Add Hall of Records tables
- Add tables for Scene2201
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 14dd32d..1efc616 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -60,6 +60,28 @@ byte *getData(uint32 offset) {
return data + offset - dataStart + fileStart;
}
+const char *getStringP(uint32 offset) {
+ return offset != 0 ? (const char*)getData(offset) : NULL;
+}
+
+uint32 calcHash(const char *value) {
+ if (!value)
+ return 0;
+ uint32 hash = 0, shiftValue = 0;
+ while (*value != 0) {
+ char ch = *value++;
+ if (ch >= 'a' && ch <= 'z')
+ ch -= 32;
+ else if (ch >= '0' && ch <= '9')
+ ch += 22;
+ shiftValue += ch - 64;
+ if (shiftValue >= 32)
+ shiftValue -= 32;
+ hash ^= 1 << shiftValue;
+ }
+ return hash;
+}
+
struct HitRect {
int16 x1, y1, x2, y2;
uint16 messageNum;
@@ -217,6 +239,36 @@ struct NavigationItem {
};
+struct SceneInfo140Item {
+ uint32 bgFilename1;
+ uint32 bgFilename2;
+ uint32 txFilename;
+ uint32 bgFilename3;
+ byte xPosIndex;
+ byte count;
+
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ // Only save the hashes instead of the full names
+ bgFilename1 = calcHash(getStringP(READ_LE_UINT32(item + 0)));
+ bgFilename2 = calcHash(getStringP(READ_LE_UINT32(item + 4)));
+ txFilename = calcHash(getStringP(READ_LE_UINT32(item + 8)));
+ bgFilename3 = calcHash(getStringP(READ_LE_UINT32(item + 12)));
+ xPosIndex = item[16];
+ count = item[17];
+ }
+
+ void save(FILE *fd) {
+ writeUint32LE(fd, bgFilename1);
+ writeUint32LE(fd, bgFilename2);
+ writeUint32LE(fd, txFilename);
+ writeUint32LE(fd, bgFilename3);
+ writeByte(fd, xPosIndex);
+ writeByte(fd, count);
+ }
+
+};
+
template<class ITEMCLASS>
class StaticDataList {
public:
@@ -346,10 +398,33 @@ public:
};
+template<class ITEMCLASS>
+class StaticDataVector {
+public:
+ std::vector<ITEMCLASS> items;
+
+ void loadVector(const uint32 *offsets) {
+ for (int i = 0; offsets[i] != 0; i++) {
+ ITEMCLASS item;
+ item.load(offsets[i]);
+ items.push_back(item);
+ }
+ }
+
+ void saveVector(FILE *fd) {
+ writeUint32LE(fd, items.size());
+ for (typename std::vector<ITEMCLASS>::iterator it = items.begin(); it != items.end(); it++) {
+ (*it).save(fd);
+ }
+ }
+
+};
+
StaticDataListVector<HitRectList> hitRectLists;
StaticDataListVector<RectList> rectLists;
StaticDataListVector<MessageList> messageLists;
StaticDataListVector<NavigationList> navigationLists;
+StaticDataVector<SceneInfo140Item> sceneInfo140Items;
void addMessageList(uint32 messageListCount, uint32 messageListOffset) {
MessageList *messageList = new MessageList();
@@ -363,24 +438,22 @@ int main(int argc, char *argv[]) {
loadExe("nhc.exe");
- hitRectLists.loadListVector(hitRectListOffsets);
- rectLists.loadListVector(rectListOffsets);
- messageLists.loadListVector(messageListOffsets);
- navigationLists.loadListVector(navigationListOffsets);
-
+ hitRectLists.loadListVector(hitRectListOffsets);
+ rectLists.loadListVector(rectListOffsets);
+ messageLists.loadListVector(messageListOffsets);
+ navigationLists.loadListVector(navigationListOffsets);
+ sceneInfo140Items.loadVector(sceneInfo140Offsets);
+
datFile = fopen("neverhood.dat", "wb");
writeUint32LE(datFile, 0x11223344); // Some magic
writeUint32LE(datFile, DAT_VERSION);
- // Write all message lists
- messageLists.saveListVector(datFile);
- // Write all rect lists
- rectLists.saveListVector(datFile);
- // Write all hit rect lists
- hitRectLists.saveListVector(datFile);
- // Write all navigation lists
- navigationLists.saveListVector(datFile);
+ messageLists.saveListVector(datFile);
+ rectLists.saveListVector(datFile);
+ hitRectLists.saveListVector(datFile);
+ navigationLists.saveListVector(datFile);
+ sceneInfo140Items.saveVector(datFile);
fclose(datFile);
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index b2d5bc5..8a139f5 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -159,6 +159,19 @@ static const uint32 messageListOffsets[] = {
4, 0x004B35F0,
2, 0x004B3550,
1, 0x004B3530,
+ // Scene2201
+ 1, 0x004B8118,
+ 1, 0x004B8130,
+ 1, 0x004B8178,
+ 2, 0x004B8120,
+ 3, 0x004B81A0,
+ 1, 0x004B81B8,
+ 2, 0x004B8108,
+ 5, 0x004B8150,
+ 4, 0x004B8180,
+ 3, 0x004B8138,
+ 2, 0x004B8108,
+ 2, 0x004B81C8,
0, 0
};
@@ -196,3 +209,46 @@ static const uint32 navigationListOffsets[] = {
1, 0x004B7FB0,
0, 0
};
+
+// Hall of Records scene definitions
+
+static const uint32 sceneInfo140Offsets[] = {
+ 0x004B7180,
+ 0x004B7198,
+ 0x004B71B0,
+ 0x004B71C8,
+ 0x004B71E0,
+ 0x004B71F8,
+ 0x004B7210,
+ 0x004B7228,
+ 0x004B7240,
+ 0x004B7258,
+ 0x004B7270,
+ 0x004B7288,
+ 0x004B72A0,
+ 0x004B72B8,
+ 0x004B72D0,
+ 0x004B72E8,
+ 0x004B7300,
+ 0x004B7318,
+ 0x004B7330,
+ 0x004B7348,
+ 0x004B7360,
+ 0x004B7378,
+ 0x004B7390,
+ 0x004B73A8,
+ 0x004B73C0,
+ 0x004B73D8,
+ 0x004B73F0,
+ 0x004B7408,
+ 0x004B7420,
+ 0x004B7438,
+ 0x004B7450,
+ 0x004B7468,
+ 0x004B7480,
+ 0x004B7498,
+ 0x004B74B0,
+ 0x004B74C8,
+ 0
+};
+
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 84a6425..fb36884 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: b64b0cfac2b066bfdd63e938624d742dc1123365
https://github.com/scummvm/scummvm/commit/b64b0cfac2b066bfdd63e938624d742dc1123365
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Implement updateScene2201
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2200.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index a118e4f..e797240 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -444,7 +444,7 @@ void GameModule::updateModule2300() {
_childObject = NULL;
if (_field20 == 1) {
createModule2200(0);
- // TODO _childObject->handleUpdate();
+ _childObject->handleUpdate();
} else if (_field20 == 2) {
createModule1200(0);
_childObject->handleUpdate();
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 9e4d083..55f4192 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -338,12 +338,18 @@ void Module2200::createScene2248(int which) {
}
void Module2200::updateScene2201() {
- // TODO
_childObject->handleUpdate();
if (_done) {
_done = false;
delete _childObject;
_childObject = NULL;
+ if (_field20 == 1) {
+ createScene2203(0);
+ } else if (_field20 == 2) {
+ createScene2202(0);
+ } else {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
}
}
Commit: c4a4ce4e3561cbaa09e83e9938e6a41b79d8c0f0
https://github.com/scummvm/scummvm/commit/c4a4ce4e3561cbaa09e83e9938e6a41b79d8c0f0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Implement Scene2202 (sliding puzzle)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e797240..9d9a97a 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 0;
+ _vm->gameState().sceneNum = 1;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 55f4192..e9cb8fa 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -197,6 +197,10 @@ void Module2200::createScene2201(int which) {
}
void Module2200::createScene2202(int which) {
+ // TODO Music18hList_play(0x601C908C, 0, 2, 1);
+ _vm->gameState().sceneNum = 1;
+ _childObject = new Scene2202(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2202);
}
void Module2200::createScene2203(int which) {
@@ -354,6 +358,13 @@ void Module2200::updateScene2201() {
}
void Module2200::updateScene2202() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene2201(2);
+ }
}
void Module2200::updateScene2203() {
@@ -732,5 +743,394 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
return 0;
}
+
+static const NPoint kSsScene2202PuzzleTilePoints[] = {
+ {196, 105},
+ {323, 102},
+ {445, 106},
+ {192, 216},
+ {319, 220},
+ {446, 216},
+ {188, 320},
+ {319, 319},
+ {443, 322}
+};
+
+static const uint32 kSsScene2202PuzzleTileFileHashes1[] = {
+ 0xA500800C,
+ 0x2182910C,
+ 0x2323980C,
+ 0x23049084,
+ 0x21008080,
+ 0x2303900C,
+ 0x6120980C,
+ 0x2504D808
+};
+
+static const uint32 kSsScene2202PuzzleTileFileHashes2[] = {
+ 0x0AAD8080,
+ 0x0A290291,
+ 0x0A2BA398,
+ 0x822B8490,
+ 0x86298080,
+ 0x0A2B8390,
+ 0x0A69A098,
+ 0x0E2D84D8
+};
+
+SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value)
+ : StaticSprite(vm, 900), _soundResource1(vm), _soundResource2(vm), _parentScene(parentScene),
+ _value(value), _tileIndex(tileIndex), _isMoving(false) {
+
+ debug("#1 _value = %d; _tileIndex = %d", _value, _tileIndex);
+ SetUpdateHandler(&SsScene2202PuzzleTile::update);
+ SetMessageHandler(&SsScene2202PuzzleTile::handleMessage);
+ debug("#2");
+ _spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
+ if (_tileIndex >= 0 && _tileIndex <= 2) {
+ createSurface(100, 128, 128);
+ } else if (_tileIndex >= 3 && _tileIndex <= 5) {
+ createSurface(300, 128, 128);
+ } else {
+ createSurface(500, 128, 128);
+ }
+ debug("#3");
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _deltaRect = _drawRect;
+ _x = kSsScene2202PuzzleTilePoints[_tileIndex].x;
+ _y = kSsScene2202PuzzleTilePoints[_tileIndex].y;
+ processDelta();
+ _needRefresh = true;
+ StaticSprite::update();
+ _soundResource1.load(0x40958621);
+ _soundResource2.load(0x51108241);
+ debug("LOAD OK");
+}
+
+void SsScene2202PuzzleTile::update() {
+ handleSpriteUpdate();
+ StaticSprite::update();
+}
+
+uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (!_isMoving && !getGlobalVar(0x404290D5)) {
+ _parentScene->sendMessage(0x2000, _tileIndex, this);
+ }
+ messageResult = 1;
+ break;
+ case 0x2001:
+ _isMoving = true;
+ moveTile(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+void SsScene2202PuzzleTile::suMoveTileX() {
+
+ bool done = false;
+
+ if (_counterDirection) {
+ if (_counter > 2)
+ _counter -= 2;
+ } else {
+ if (_counter < 20)
+ _counter += 2;
+ }
+
+ for (int16 i = 0; i < _counter; i++) {
+ _x += _xIncr;
+ _errValue += _yDelta;
+ if (_errValue >= _xDelta) {
+ _errValue -= _xDelta;
+ _y += _yIncr;
+ }
+ if (_x == _newX && _y == _newY) {
+ done = true;
+ break;
+ }
+ if (_x == _xFlagPos)
+ _counterDirection = true;
+ }
+
+ if (done) {
+ stopMoving();
+ }
+
+ processDelta();
+
+}
+
+void SsScene2202PuzzleTile::suMoveTileY() {
+
+ bool done = false;
+
+ if (_counterDirection) {
+ if (_counter > 2)
+ _counter -= 2;
+ } else {
+ if (_counter < 20)
+ _counter += 2;
+ }
+
+ for (int16 i = 0; i < _counter; i++) {
+ _y += _yIncr;
+ _errValue += _xDelta;
+ if (_errValue >= _yDelta) {
+ _errValue -= _yDelta;
+ _x += _xIncr;
+ }
+ if (_x == _newX && _y == _newY) {
+ done = true;
+ break;
+ }
+ if (_x == _xFlagPos)
+ _counterDirection = true;
+ }
+
+ if (done) {
+ stopMoving();
+ }
+
+ processDelta();
+
+}
+
+void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
+
+ _spriteResource.load2(kSsScene2202PuzzleTileFileHashes1[_value]);
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _needRefresh = true;
+
+ setSubVar(0x484498D0, _tileIndex, (uint32)-1);
+ setSubVar(0x484498D0, newTileIndex, (uint32)_value);
+
+ _tileIndex = newTileIndex;
+
+ _errValue = 0;
+ _counterDirection = false;
+ _counter = 0;
+
+ _newX = kSsScene2202PuzzleTilePoints[newTileIndex].x;
+ _newY = kSsScene2202PuzzleTilePoints[newTileIndex].y;
+
+ if (_x == _newX && _y == _newY)
+ return;
+
+ if (_x <= _newX) {
+ if (_y <= _newY) {
+ _xDelta = _newX - _x;
+ _yDelta = _newY - _y;
+ _xIncr = 1;
+ _yIncr = 1;
+ } else {
+ _xDelta = _newX - _x;
+ _yDelta = _y - _newY;
+ _xIncr = 1;
+ _yIncr = -1;
+ }
+ } else {
+ if (_y <= _newY) {
+ _xDelta = _x - _newX;
+ _yDelta = _newY - _y;
+ _xIncr = -1;
+ _yIncr = 1;
+ } else {
+ _xDelta = _x - _newX;
+ _yDelta = _y - _newY;
+ _xIncr = -1;
+ _yIncr = -1;
+ }
+ }
+
+ if (_xDelta > _yDelta) {
+ SetSpriteCallback(&SsScene2202PuzzleTile::suMoveTileX);
+ if (_xIncr > 0) {
+ if (_newX - _x >= 180)
+ _xFlagPos = _newX - 90;
+ else
+ _xFlagPos = _x + _newX / 2;
+ } else {
+ if (_x - _newX >= 180)
+ _xFlagPos = _x + 90;
+ else
+ _xFlagPos = _x / 2 + _newX;
+ }
+ _soundResource1.play();
+ } else {
+ SetSpriteCallback(&SsScene2202PuzzleTile::suMoveTileY);
+ if (_yIncr > 0) {
+ if (_newY - _y >= 180)
+ _xFlagPos = _newY - 90;
+ else
+ _xFlagPos = _y + _newY / 2;
+ } else {
+ if (_y - _newY >= 180)
+ _xFlagPos = _y + 90;
+ else
+ _xFlagPos = _y / 2 + _newY;
+ }
+ _soundResource2.play();
+ }
+
+}
+
+void SsScene2202PuzzleTile::stopMoving() {
+ _spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _needRefresh = true;
+ SetSpriteCallback(NULL);
+ _isMoving = false;
+ _parentScene->sendMessage(0x2002, _tileIndex, this);
+}
+
+Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
+ _isSolved(false), _leaveScene(false), _isTileMoving(false), _movingTileSprite(NULL), _doneMovingTileSprite(NULL) {
+
+ Palette2 *palette2;
+
+ // TODO initScene2201Vars();
+ SetMessageHandler(&Scene2202::handleMessage);
+ SetUpdateHandler(&Scene2202::update);
+
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x08100A0C, 0, 0));
+ palette2 = new Palette2(_vm, 0x08100A0C);
+ _palette = palette2;
+ _palette->usePalette();
+ addEntity(palette2);
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x00A08089, 20, 620));
+
+ //DEBUG!
+ for (uint32 index = 0; index < 9; index++)
+ setSubVar(0x484498D0, index, 7 - index);
+
+ for (uint32 index = 0; index < 9; index++) {
+ int16 value = (int16)getSubVar(0x484498D0, index);
+ if (value >= 0) {
+ Sprite *puzzleTileSprite = addSprite(new SsScene2202PuzzleTile(_vm, this, index, value));
+ _vm->_collisionMan->addSprite(puzzleTileSprite);
+ }
+ }
+
+ addSprite(new StaticSprite(_vm, 0x55C043B8, 200));
+ addSprite(new StaticSprite(_vm, 0x85500158, 400));
+ addSprite(new StaticSprite(_vm, 0x25547028, 600));
+
+ _soundResource1.load(0x68E25540);
+ _soundResource2.load(0x40400457);
+
+ // TODO Sound1ChList_addSoundResource(0x60400854, 0x8101A241, true);
+ // TODO Sound1ChList_playLooping(0x8101A241);
+
+}
+
+Scene2202::~Scene2202() {
+ // TODO Sound1ChList_sub_407AF0(0x60400854);
+}
+
+void Scene2202::update() {
+ Scene::update();
+
+ if (_leaveScene && !_soundResource2.isPlaying()) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+
+ if (_isSolved && !_soundResource1.isPlaying()) {
+ _soundResource2.play();
+ _isSolved = false;
+ _leaveScene = true;
+ }
+
+ if (_movingTileSprite && !_isTileMoving) {
+ int16 value = getFreeTileIndex(_movingTileIndex);
+ if (value != -1) {
+ setSurfacePriority(_movingTileSprite->getSurface(), 700);
+ _movingTileSprite->sendMessage(0x2001, value, this);
+ _movingTileSprite = NULL;
+ _isTileMoving = true;
+ }
+ }
+
+ if (_doneMovingTileSprite) {
+ setSurfacePriority(_doneMovingTileSprite->getSurface(), _surfacePriority);
+ _doneMovingTileSprite = NULL;
+ if (testIsSolved()) {
+ _soundResource1.play();
+ setGlobalVar(0x404290D5, 1);
+ _isSolved = true;
+ }
+ }
+
+}
+
+uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO Debug stuff
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ case 0x000D:
+ // TODO Debug stuff
+ break;
+ case 0x2000:
+ _movingTileIndex = (int16)param.asInteger();
+ _movingTileSprite = (Sprite*)sender;
+ break;
+ case 0x2002:
+ _isTileMoving = false;
+ _doneMovingTileSprite = (Sprite*)sender;
+ if (param.asInteger() >= 0 && param.asInteger() <= 2) {
+ _surfacePriority = 100;
+ } else if (param.asInteger() >= 3 && param.asInteger() <= 5) {
+ _surfacePriority = 300;
+ } else {
+ _surfacePriority = 500;
+ }
+ break;
+ }
+ return 0;
+}
+
+int16 Scene2202::getFreeTileIndex(int16 index) {
+ if (index >= 3 && (int16)getSubVar(0x484498D0, index - 3) == -1) {
+ return index - 3;
+ } else if (index <= 5 && (int16)getSubVar(0x484498D0, index + 3) == -1) {
+ return index + 3;
+ } else if (index != 0 && index != 3 && index != 6 && (int16)getSubVar(0x484498D0, index - 1) == -1) {
+ return index - 1;
+ } else if (index != 2 && index != 5 && index != 8 && (int16)getSubVar(0x484498D0, index + 1) == -1) {
+ return index + 1;
+ } else
+ return -1;
+}
+
+bool Scene2202::testIsSolved() {
+ return
+ getSubVar(0x484498D0, 0) == 0 &&
+ getSubVar(0x484498D0, 2) == 2 &&
+ getSubVar(0x484498D0, 3) == 3 &&
+ getSubVar(0x484498D0, 4) == 4 &&
+ getSubVar(0x484498D0, 5) == 5 &&
+ getSubVar(0x484498D0, 6) == 6 &&
+ getSubVar(0x484498D0, 8) == 7;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 5b14606..d7f41d6 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -184,7 +184,6 @@ public:
Class444(NeverhoodEngine *vm, int pointIndex, int spriteIndex);
};
-
class Scene2201 : public Scene {
public:
Scene2201(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -201,6 +200,52 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class SsScene2202PuzzleTile : public StaticSprite {
+public:
+ SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value);
+protected:
+ Scene *_parentScene;
+ int16 _value;
+ int16 _tileIndex;
+ int16 _newX, _newY;
+ int16 _xDelta, _yDelta;
+ int16 _xIncr;
+ int16 _yIncr;
+ int16 _errValue;
+ int16 _counter;
+ int16 _xFlagPos;
+ bool _counterDirection;
+ bool _isMoving;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suMoveTileX();
+ void suMoveTileY();
+ void moveTile(int16 newTileIndex);
+ void stopMoving();
+};
+
+class Scene2202 : public Scene {
+public:
+ Scene2202(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2202();
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ Sprite *_movingTileSprite;
+ Sprite *_doneMovingTileSprite;
+ bool _isTileMoving;
+ int16 _movingTileIndex;
+ int _surfacePriority;
+ bool _leaveScene;
+ bool _isSolved;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ int16 getFreeTileIndex(int16 index);
+ bool testIsSolved();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
Commit: 9273c2e97ab90068faf01df246f89d939804ee79
https://github.com/scummvm/scummvm/commit/9273c2e97ab90068faf01df246f89d939804ee79
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2203
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 8a139f5..1956ece 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -29,6 +29,8 @@ static const uint32 hitRectListOffsets[] = {
4, 0x004AEBD0,
// Scene1705
1, 0x004B69D8,
+ // Scene2203
+ 1, 0x004B8320,
0, 0
};
@@ -63,6 +65,8 @@ static const uint32 rectListOffsets[] = {
// Scene2001
1, 0x004B3680,
1, 0x004B3670,
+ // Scene2203
+ 1, 0x004B8420,
0, 0
};
@@ -172,6 +176,17 @@ static const uint32 messageListOffsets[] = {
3, 0x004B8138,
2, 0x004B8108,
2, 0x004B81C8,
+ // Scene2203
+ 1, 0x004B8340,
+ 1, 0x004B8350,
+ 1, 0x004B8358,
+ 1, 0x004B8348,
+ 3, 0x004B83B0,
+ 3, 0x004B83C8,
+ 2, 0x004B8370,
+ 2, 0x004B8360,
+ 2, 0x004B83E0,
+ 2, 0x004B83F0,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index fb36884..e27396b 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 31457e11aa423e9350d08e6bc5663eccfdd448bd
https://github.com/scummvm/scummvm/commit/31457e11aa423e9350d08e6bc5663eccfdd448bd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Implement Scene2203
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 9d9a97a..daa0555 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 1;
+ _vm->gameState().sceneNum = 2;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 50dd231..8eab4a2 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -1765,6 +1765,17 @@ uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub420750() {
+ if (!sub41CEB0(AnimationCallback(&Klayman::sub420750))) {
+ _status2 = 2;
+ _flagE5 = false;
+ setFileHash(0x5CCCB330, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41DD20);
+ }
+}
+
void Klayman::sub4207A0() {
if (!sub41CEB0(AnimationCallback(&Klayman::sub4207A0))) {
_status2 = 2;
@@ -1997,6 +2008,20 @@ uint32 Klayman::handleMessage41DB90(int messageNum, const MessageParam ¶m, E
return handleMessage41D480(messageNum, param, sender);
}
+uint32 Klayman::handleMessage41DD20(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x040D4186) {
+ if (_attachedSprite) {
+ _attachedSprite->sendMessage(0x4808, 0, this);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
//##############################################################################
// KmScene1001
@@ -3498,4 +3523,76 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene2203::KmScene2203(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ }else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x4818:
+ sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x4819:
+ setCallback2(AnimationCallback(&Klayman::sub420750));
+ break;
+ case 0x481A:
+ setCallback2(AnimationCallback(&Klayman::sub420680));
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 1c02f1e..8ca56cc 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -82,6 +82,7 @@ public:
void sub421070();
void sub420420();
void sub420ED0();
+ void sub420750();
void sub4207A0();
void sub4207F0();
void sub420F20();
@@ -237,6 +238,7 @@ protected:
uint32 handleMessage41D640(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41EAB0(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D970(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41DD20(int messageNum, const MessageParam ¶m, Entity *sender);
void update41D1C0();
@@ -377,6 +379,13 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2203 : public Klayman {
+public:
+ KmScene2203(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index e9cb8fa..23f8d73 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -204,6 +204,10 @@ void Module2200::createScene2202(int which) {
}
void Module2200::createScene2203(int which) {
+ // TODO Music18hList_play(0x601C908C, 0, 2, 1);
+ _vm->gameState().sceneNum = 2;
+ _childObject = new Scene2203(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2203);
}
void Module2200::createScene2204(int which) {
@@ -368,6 +372,22 @@ void Module2200::updateScene2202() {
}
void Module2200::updateScene2203() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2205(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene2204(0);
+ _childObject->handleUpdate();
+ } else {
+ createScene2201(1);
+ _childObject->handleUpdate();
+ }
+ }
}
void Module2200::updateScene2204() {
@@ -782,10 +802,8 @@ SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentS
: StaticSprite(vm, 900), _soundResource1(vm), _soundResource2(vm), _parentScene(parentScene),
_value(value), _tileIndex(tileIndex), _isMoving(false) {
- debug("#1 _value = %d; _tileIndex = %d", _value, _tileIndex);
SetUpdateHandler(&SsScene2202PuzzleTile::update);
SetMessageHandler(&SsScene2202PuzzleTile::handleMessage);
- debug("#2");
_spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
if (_tileIndex >= 0 && _tileIndex <= 2) {
createSurface(100, 128, 128);
@@ -794,7 +812,6 @@ SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentS
} else {
createSurface(500, 128, 128);
}
- debug("#3");
_drawRect.x = -(_spriteResource.getDimensions().width / 2);
_drawRect.y = -(_spriteResource.getDimensions().height / 2);
_drawRect.width = _spriteResource.getDimensions().width;
@@ -807,7 +824,6 @@ SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentS
StaticSprite::update();
_soundResource1.load(0x40958621);
_soundResource2.load(0x51108241);
- debug("LOAD OK");
}
void SsScene2202PuzzleTile::update() {
@@ -913,9 +929,9 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
setSubVar(0x484498D0, _tileIndex, (uint32)-1);
setSubVar(0x484498D0, newTileIndex, (uint32)_value);
-
+
_tileIndex = newTileIndex;
-
+
_errValue = 0;
_counterDirection = false;
_counter = 0;
@@ -1133,4 +1149,230 @@ bool Scene2202::testIsSolved() {
getSubVar(0x484498D0, 8) == 7;
}
+static const uint32 kClass545FileHashes[] = {
+ 0x2450D850,
+ 0x0C9CE8D0,
+ 0x2C58A152
+};
+
+Class545::Class545(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y)
+ : AnimatedSprite(vm, kClass545FileHashes[index], surfacePriority, x, y), _parentScene(parentScene), _index(index) {
+
+ if (!getSubVar(0x0090EA95, _index) && !getSubVar(0x08D0AB11, _index)) {
+ SetMessageHandler(&Class545::handleMessage);
+ } else {
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ }
+}
+
+uint32 Class545::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4806:
+ setSubVar(0x0090EA95, _index, 1);
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ }
+ return messageResult;
+}
+
+static const uint32 kAsScene2203DoorFileHashes[] = {
+ 0x7868AE10,
+ 0x1A488110
+};
+
+AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, int index)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene),
+ _index(index) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2203Door::handleMessage);
+ _x = 320;
+ _y = 240;
+ createSurface1(kAsScene2203DoorFileHashes[_index], 900);
+ if (getGlobalVar(0x9A500914) == _index) {
+ setFileHash(kAsScene2203DoorFileHashes[_index], -1, -1);
+ _newHashListIndex = -2;
+ } else {
+ setFileHash(kAsScene2203DoorFileHashes[_index], 0, -1);
+ _newHashListIndex = 0;
+ }
+}
+
+uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_index == getGlobalVar(0x9A500914))
+ _parentScene->sendMessage(0x2002, 0, this);
+ else
+ _parentScene->sendMessage(0x2001, 0, this);
+ messageResult = 1;
+ break;
+ case 0x2000:
+ _otherDoor = (Sprite*)param.asEntity();
+ break;
+ case 0x3002:
+ if (_index == getGlobalVar(0x9A500914))
+ _parentScene->sendMessage(0x4808, 0, this);
+ setFileHash1();
+ break;
+ case 0x4808:
+ setGlobalVar(0x9A500914, _index);
+ _otherDoor->sendMessage(0x4809, 0, this);
+ openDoor();
+ break;
+ case 0x4809:
+ closeDoor();
+ _parentScene->sendMessage(0x2003, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2203Door::openDoor() {
+ _soundResource.play(0x341014C4);
+ setFileHash(kAsScene2203DoorFileHashes[_index], 1, -1);
+}
+
+void AsScene2203Door::closeDoor() {
+ setFileHash(kAsScene2203DoorFileHashes[_index], -1, -1);
+ _playBackwards = true;
+ _newHashListIndex = 0;
+}
+
+Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860))
+ setGlobalVar(0x13382860, 1);
+
+ SetMessageHandler(&Scene2203::handleMessage);
+ _surfaceFlag = true;
+
+ _background = addBackground(new DirtyBackground(_vm, 0x82C80334, 0, 0));
+ _palette = new Palette(_vm, 0x82C80334);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x80330824, NULL));
+
+ _vm->_collisionMan->setHitRects(0x004B8320);
+
+ if (getGlobalVar(0x13382860) == 1) {
+ _class545 = addSprite(new Class545(_vm, this, 2, 1100, 282, 432));
+ _vm->_collisionMan->addSprite(_class545);
+ }
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 1, 1100, 435, 432, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+ _asLeftDoor = addSprite(new AsScene2203Door(_vm, this, 0));
+ _asRightDoor = addSprite(new AsScene2203Door(_vm, this, 1));
+
+ _ssSmallLeftDoor = addSprite(new StaticSprite(_vm, 0x542CC072, 1100));
+ _ssSmallRightDoor = addSprite(new StaticSprite(_vm, 0x0A2C0432, 1100));
+
+ _leftDoorClipRect.x1 = _ssSmallLeftDoor->getSurface()->getDrawRect().x;
+ _leftDoorClipRect.y1 = 0;
+ _leftDoorClipRect.x2 = 640;
+ _leftDoorClipRect.y2 = 480;
+
+ _rightDoorClipRect.x1 = 0;
+ _rightDoorClipRect.y1 = 0;
+ _rightDoorClipRect.x2 = _ssSmallRightDoor->getSurface()->getDrawRect().x + _ssSmallRightDoor->getSurface()->getDrawRect().width;
+ _rightDoorClipRect.y2 = 480;
+
+ _asLeftDoor->sendEntityMessage(0x2000, _asRightDoor, this);
+ _asRightDoor->sendEntityMessage(0x2000, _asLeftDoor, this);
+
+ _vm->_collisionMan->addSprite(_asLeftDoor);
+ _vm->_collisionMan->addSprite(_asRightDoor);
+
+ if (which < 0) {
+ _klayman = new KmScene2203(_vm, this, 200, 427);
+ setMessageList(0x004B8340);
+ } else if (which == 1) {
+ _klayman = new KmScene2203(_vm, this, 640, 427);
+ setMessageList(0x004B8350);
+ } else if (which == 2) {
+ if (getGlobalVar(0xC0418A02)) {
+ _klayman = new KmScene2203(_vm, this, 362, 427);
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmScene2203(_vm, this, 202, 427);
+ }
+ setMessageList(0x004B8358);
+ } else {
+ _klayman = new KmScene2203(_vm, this, 0, 427);
+ setMessageList(0x004B8348);
+ }
+ addSprite(_klayman);
+
+ if (getGlobalVar(0x9A500914)) {
+ _ssSmallLeftDoor->getSurface()->setVisible(false);
+ _klayman->getSurface()->getClipRect() = _rightDoorClipRect;
+ } else {
+ _ssSmallRightDoor->getSurface()->setVisible(false);
+ _klayman->getSurface()->getClipRect() = _leftDoorClipRect;
+ }
+
+ setRectList(0x004B8420);
+
+}
+
+Scene2203::~Scene2203() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2001:
+ _klayman->sendEntityMessage(0x1014, sender, this);
+ if (sender == _asLeftDoor) {
+ setMessageList2(0x004B83B0);
+ } else {
+ setMessageList2(0x004B83C8);
+ }
+ break;
+ case 0x2002:
+ if (sender == _asLeftDoor) {
+ setMessageList2(0x004B8370);
+ } else {
+ setMessageList2(0x004B8360);
+ }
+ break;
+ case 0x2003:
+ if (sender == _asLeftDoor) {
+ _ssSmallLeftDoor->getSurface()->setVisible(false);
+ } else {
+ _ssSmallRightDoor->getSurface()->setVisible(false);
+ }
+ break;
+ case 0x4808:
+ if (sender == _asLeftDoor) {
+ _ssSmallLeftDoor->getSurface()->setVisible(true);
+ _klayman->getSurface()->getClipRect() = _leftDoorClipRect;
+ } else {
+ _ssSmallRightDoor->getSurface()->setVisible(true);
+ _klayman->getSurface()->getClipRect() = _rightDoorClipRect;
+ }
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ _klayman->sendEntityMessage(0x1014, _asTape, this);
+ setMessageList(0x004B83E0);
+ } else if (sender == _class545) {
+ _klayman->sendEntityMessage(0x1014, _class545, this);
+ setMessageList(0x004B83F0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index d7f41d6..6a0634f 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -246,6 +246,44 @@ protected:
bool testIsSolved();
};
+class Class545 : public AnimatedSprite {
+public:
+ Class545(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y);
+protected:
+ Scene *_parentScene;
+ int _index;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2203Door : public AnimatedSprite {
+public:
+ AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, int index);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ Sprite *_otherDoor;
+ int _index;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void openDoor();
+ void closeDoor();
+};
+
+class Scene2203 : public Scene {
+public:
+ Scene2203(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2203();
+protected:
+ Sprite *_asLeftDoor;
+ Sprite *_asRightDoor;
+ Sprite *_ssSmallLeftDoor;
+ Sprite *_ssSmallRightDoor;
+ Sprite *_asTape;
+ Sprite *_class545;
+ NRect _leftDoorClipRect;
+ NRect _rightDoorClipRect;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
Commit: 732f7c8845bf694e30f3d8c1ffe4b33a5a06a7c7
https://github.com/scummvm/scummvm/commit/732f7c8845bf694e30f3d8c1ffe4b33a5a06a7c7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Add Scene2204 (just a DiskplayerScene)
Changed paths:
engines/neverhood/module2200.cpp
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 23f8d73..e8fd77d 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -23,6 +23,7 @@
#include "neverhood/module2200.h"
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
+#include "neverhood/diskplayerscene.h"
namespace Neverhood {
@@ -211,6 +212,10 @@ void Module2200::createScene2203(int which) {
}
void Module2200::createScene2204(int which) {
+ _vm->gameState().sceneNum = 3;
+ // TODO Music18hList_stop(0x601C908C, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 3);
+ SetUpdateHandler(&Module2200::updateScene2204);
}
void Module2200::createScene2205(int which) {
@@ -391,6 +396,13 @@ void Module2200::updateScene2203() {
}
void Module2200::updateScene2204() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene2203(2);
+ }
}
void Module2200::updateScene2205() {
Commit: e177dcf911fc7034faef9c378f7b95f2355ec66b
https://github.com/scummvm/scummvm/commit/e177dcf911fc7034faef9c378f7b95f2355ec66b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Implement Scene2205
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/mouse.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index daa0555..fd603a8 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 2;
+ _vm->gameState().sceneNum = 4;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 8eab4a2..404cce5 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3595,4 +3595,67 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene2205::KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+void KmScene2205::xUpdate() {
+ setGlobalVar(0x18288913, _frameIndex);
+}
+
+uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&KmScene2205::sub423980));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4816:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x4818:
+ sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+void KmScene2205::sub423980() {
+ int16 frameIndex = getGlobalVar(0x18288913);
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setFileHash(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetAnimationCallback3(&Klayman::sub41FA40);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 8ca56cc..d9d63b1 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -111,20 +111,27 @@ public:
void sub420EB0();
void sub420680();
void sub41F9E0();
+ void sub41FA40();
+ void sub41FB30();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
void spriteUpdate41F780();
void spriteUpdate41F230();
void spriteUpdate41F5A0();
+ void spriteUpdate41F300();
+ void spriteUpdate41F320();
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
void setKlaymanTable1();
void setKlaymanTable2();
void setKlaymanTable3();
+
+ void setSoundFlag(bool value) { _soundFlag = value; }
protected:
Entity *_parentScene;
@@ -204,14 +211,8 @@ protected:
uint32 handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41CD70(int16 x);
void sub41F950();
- void sub41FB30();
uint32 handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate41F300();
- uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41FA40();
- void spriteUpdate41F320();
-
uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -386,6 +387,15 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2205 : public Klayman {
+public:
+ KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ void sub423980();
+protected:
+ void xUpdate();
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 8ee5941..69c6014 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -972,6 +972,32 @@ Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, ui
}
+void Class426::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
+ _fileHashes[0] = fileHash1;
+ _fileHashes[1] = fileHash2;
+ if (_status == 2) {
+ _spriteResource.load2(fileHash2);
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+ } else {
+ _spriteResource.load2(fileHash1);
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+ }
+}
+
void Class426::update() {
if (_countdown != 0 && (--_countdown) == 0) {
if (_status == 1) {
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 0e3f950..5229e7a 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -202,7 +202,7 @@ protected:
class Class426 : public StaticSprite {
public:
Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
- // TODO Class426_sub433660 (not used yet)
+ void setFileHashes(uint32 fileHash1, uint32 fileHash2);
protected:
Scene *_parentScene;
int _countdown;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index e8fd77d..e7e0257 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -219,6 +219,10 @@ void Module2200::createScene2204(int which) {
}
void Module2200::createScene2205(int which) {
+ _vm->gameState().sceneNum = 4;
+ // TODO Music18hList_stop(0x601C908C, 0, 2);
+ _childObject = new Scene2205(_vm, this, 3);
+ SetUpdateHandler(&Module2200::updateScene2205);
}
void Module2200::createScene2206(int which) {
@@ -406,6 +410,22 @@ void Module2200::updateScene2204() {
}
void Module2200::updateScene2205() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2206(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene2205(2);
+ _childObject->handleUpdate();
+ } else {
+ createScene2203(1);
+ _childObject->handleUpdate();
+ }
+ }
}
void Module2200::updateScene2206() {
@@ -1387,4 +1407,164 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+SsScene2205DoorFrame::SsScene2205DoorFrame(NeverhoodEngine *vm)
+ : StaticSprite(vm, 900) {
+
+ SetMessageHandler(&SsScene2205DoorFrame::handleMessage);
+ _spriteResource.load2(getGlobalVar(0x4D080E54) ? 0x24306227 : 0xD90032A0);
+ createSurface(1100, 45, 206);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ _spriteResource.load2(getGlobalVar(0x4D080E54) ? 0x24306227 : 0xD90032A0);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+ }
+ return messageResult;
+}
+
+Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Palette2 *palette2;
+
+ SetMessageHandler(&Scene2205::handleMessage);
+ SetUpdateHandler(&Scene2205::update);
+
+ _vm->_collisionMan->setHitRects(0x004B0620);
+ _surfaceFlag = true;
+
+ if (getGlobalVar(0x4D080E54)) {
+ _isLightOn = true;
+ _background = addBackground(new DirtyBackground(_vm, 0x0008028D, 0, 0));
+ palette2 = new Palette2(_vm, 0x0008028D);
+ _palette = palette2;
+ _palette->usePalette();
+ addEntity(palette2);
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x80289008, NULL));
+ _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0);
+ addSprite(_ssLightSwitch);
+ } else {
+ _isLightOn = false;
+ _background = addBackground(new DirtyBackground(_vm, 0xD00A028D, 0, 0));
+ palette2 = new Palette2(_vm, 0xD00A028D);
+ _palette = palette2;
+ _palette->usePalette();
+ addEntity(palette2);
+ _mouseCursor = addSprite(new Mouse433(_vm, 0xA0289D08, NULL));
+ _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0);
+ addSprite(_ssLightSwitch);
+ }
+
+ palette2->addPalette(0xD00A028D, 0, 256, 0);
+
+ _ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
+
+ if (which < 0) {
+ _klayman = new KmScene2205(_vm, this, 320, 417);
+ setMessageList(0x004B0658);
+ if (!getGlobalVar(0x4D080E54)) {
+ _palette->addPalette(0x68033B1C, 0, 65, 0);
+ }
+ _isKlaymanInLight = false;
+ } else if (which == 1) {
+ _klayman = new KmScene2205(_vm, this, 640, 417);
+ setMessageList(0x004B0648);
+ if (!getGlobalVar(0x4D080E54)) {
+ _palette->addPalette(0x68033B1C, 0, 65, 0);
+ }
+ _isKlaymanInLight = false;
+ } else {
+ _klayman = new KmScene2205(_vm, this, 0, 417);
+ setMessageList(0x004B0640);
+ _isKlaymanInLight = true;
+ }
+ addSprite(_klayman);
+
+ _klayman->getSurface()->getClipRect().x1 = _ssDoorFrame->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+ loadDataResource(0x00144822);
+ _klayman->setSoundFlag(true);
+
+}
+
+void Scene2205::update() {
+ Scene::update();
+
+ if (!_isLightOn && getGlobalVar(0x4D080E54)) {
+ _palette->addPalette(0x0008028D, 0, 256, 0);
+ _background->load(0x0008028D);
+ _ssLightSwitch->setFileHashes(0x2D339030, 0x2D309030);
+ _ssDoorFrame->sendMessage(0x2000, 0, this);
+ ((Mouse433*)_mouseCursor)->load(0x80289008);
+ ((Mouse433*)_mouseCursor)->updateCursor();
+ _isLightOn = true;
+ } else if (_isLightOn && !getGlobalVar(0x4D080E54)) {
+ _palette->addPalette(0xD00A028D, 0, 256, 0);
+ _background->load(0xD00A028D);
+ _ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84);
+ _ssDoorFrame->sendMessage(0x2000, 0, this);
+ ((Mouse433*)_mouseCursor)->load(0xA0289D08);
+ ((Mouse433*)_mouseCursor)->updateCursor();
+ _isKlaymanInLight = true;
+ if (_klayman->getX() > 85) {
+ _palette->addPalette(0x68033B1C, 0, 65, 0);
+ _isKlaymanInLight = false;
+ }
+ _isLightOn = false;
+ }
+
+ if (!getGlobalVar(0x4D080E54)) {
+ if (_isKlaymanInLight && _klayman->getX() > 85) {
+ ((Palette2*)_palette)->addPalette(0x68033B1C, 0, 65, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ _isKlaymanInLight = false;
+ } else if (!_isKlaymanInLight && _klayman->getX() <= 85) {
+ ((Palette2*)_palette)->addPalette(0xD00A028D, 0, 65, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ _isKlaymanInLight = true;
+ }
+ }
+
+}
+
+uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x6449569A) {
+ setMessageList(0x004B0690);
+ } else if (param.asInteger() == 0x2841369C) {
+ setMessageList(0x004B0630);
+ } else if (param.asInteger() == 0x402064D8) {
+ _klayman->sendEntityMessage(0x1014, _ssLightSwitch, this);
+ }
+ break;
+ case 0x480B:
+ setGlobalVar(0x4D080E54, getGlobalVar(0x4D080E54) ? 0 : 1);
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 6a0634f..c79edb4 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/module1000.h"
namespace Neverhood {
@@ -284,6 +285,25 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class SsScene2205DoorFrame : public StaticSprite {
+public:
+ SsScene2205DoorFrame(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2205 : public Scene {
+public:
+ Scene2205(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Class426 *_ssLightSwitch;
+ Sprite *_ssDoorFrame;
+ bool _isKlaymanInLight;
+ bool _isLightOn;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index 4f27cb4..65dcb27 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -34,19 +34,20 @@ class Mouse433 : public StaticSprite {
public:
Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect);
void load(uint32 fileHash);
+ void updateCursor();
protected:
MouseCursorResource _mouseCursorResource;
int _frameNum;
NRect _mouseRect;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void updateCursor();
};
class Mouse435 : public StaticSprite {
public:
Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2);
void load(uint32 fileHash);
+ void updateCursor();
protected:
MouseCursorResource _mouseCursorResource;
int _frameNum;
@@ -54,20 +55,19 @@ protected:
int16 _x2;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void updateCursor();
};
class NavigationMouse : public StaticSprite {
public:
NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type);
void load(uint32 fileHash);
+ void updateCursor();
protected:
MouseCursorResource _mouseCursorResource;
int _frameNum;
int _type;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void updateCursor();
};
} // End of namespace Neverhood
Commit: 8729ca04d9b7cc42417f8824ccb383fe403058f3
https://github.com/scummvm/scummvm/commit/8729ca04d9b7cc42417f8824ccb383fe403058f3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:35-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2205
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 1956ece..238edc8 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -31,6 +31,8 @@ static const uint32 hitRectListOffsets[] = {
1, 0x004B69D8,
// Scene2203
1, 0x004B8320,
+ // Scene2205
+ 1, 0x004B0620,
0, 0
};
@@ -187,6 +189,12 @@ static const uint32 messageListOffsets[] = {
2, 0x004B8360,
2, 0x004B83E0,
2, 0x004B83F0,
+ // Scene2205
+ 1, 0x004B0658,
+ 2, 0x004B0648,
+ 1, 0x004B0640,
+ 4, 0x004B0690,
+ 2, 0x004B0630,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index e27396b..8654c51 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 80bbb06453b080234f3fe52c66f628a80e3ae0fa
https://github.com/scummvm/scummvm/commit/80bbb06453b080234f3fe52c66f628a80e3ae0fa
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2206
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 238edc8..18ea38b 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -69,6 +69,9 @@ static const uint32 rectListOffsets[] = {
1, 0x004B3670,
// Scene2203
1, 0x004B8420,
+ // Scene2206
+ 1, 0x004B8AF8,
+ 1, 0x004B8B58,
0, 0
};
@@ -195,6 +198,21 @@ static const uint32 messageListOffsets[] = {
1, 0x004B0640,
4, 0x004B0690,
2, 0x004B0630,
+ // Scene2206
+ 1, 0x004B88A8,
+ 2, 0x004B88B8,
+ 1, 0x004B88C8,
+ 1, 0x004B8A70,
+ 1, 0x004B88B0,
+ 5, 0x004B8948,
+ 2, 0x004B8970,
+ 2, 0x004B8988,
+ 4, 0x004B8998,
+ 4, 0x004B89B8,
+ 4, 0x004B89D8,
+ 5, 0x004B89F8,
+ 5, 0x004B8A20,
+ 5, 0x004B8A48,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 8654c51..26e71ac 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: f29619f655ede0e764c93d23f57d35cac7f1c3f7
https://github.com/scummvm/scummvm/commit/f29619f655ede0e764c93d23f57d35cac7f1c3f7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Implement Scene2206
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index fd603a8..6450f5a 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 4;
+ _vm->gameState().sceneNum = 5;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 404cce5..97fdd5a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3658,4 +3658,147 @@ void KmScene2205::sub423980() {
setCallback1(AnimationCallback(&Klayman::sub41FB30));
}
+KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // TODO Sound1ChList_addSoundResource(0x80101800, 0xD3B02847);
+}
+
+KmScene2206::~KmScene2206() {
+ // TODO Sound1ChList_sub_407AF0(0x80101800);
+}
+
+void KmScene2206::xUpdate() {
+ setGlobalVar(0x18288913, _frameIndex);
+}
+
+uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4803:
+ setCallback2(AnimationCallback(&KmScene2206::sub482490));
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&KmScene2206::sub482530));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4812:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ }else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub421030));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub421070));
+ }
+ break;
+ case 0x4837:
+ // TODO sub41CE70();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+void KmScene2206::spriteUpdate482450() {
+ _yDelta++;
+ _y += _yDelta;
+ if (_y > 600) {
+ sendMessage(0x1019, 0, this);
+ }
+}
+
+void KmScene2206::sub482490() {
+ if (!sub41CF10(AnimationCallback(&KmScene2206::sub482490))) {
+ _status2 = 1;
+ _parentScene->sendMessage(0x4803, 0, this);
+ _flagE5 = false;
+ _yDelta = 0;
+ setFileHash(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteCallback(&KmScene2206::spriteUpdate482450);
+ // TODO Sound1ChList_playLooping(0xD3B02847);
+ }
+}
+
+void KmScene2206::sub482530() {
+ int16 frameIndex = getGlobalVar(0x18288913) + 1;
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setFileHash(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetAnimationCallback3(&Klayman::sub41FA40);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+}
+
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index d9d63b1..3cb5e38 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -396,6 +396,19 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2206 : public Klayman {
+public:
+ KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ ~KmScene2206();
+protected:
+ int16 _yDelta;
+ void xUpdate();
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void spriteUpdate482450();
+ void sub482490();
+ void sub482530();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index e7e0257..bec20fa 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -221,11 +221,15 @@ void Module2200::createScene2204(int which) {
void Module2200::createScene2205(int which) {
_vm->gameState().sceneNum = 4;
// TODO Music18hList_stop(0x601C908C, 0, 2);
- _childObject = new Scene2205(_vm, this, 3);
+ _childObject = new Scene2205(_vm, this, which);
SetUpdateHandler(&Module2200::updateScene2205);
}
void Module2200::createScene2206(int which) {
+ _vm->gameState().sceneNum = 5;
+ // TODO Music18hList_stop(0x601C908C, 0, 2);
+ _childObject = new Scene2206(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2206);
}
void Module2200::createScene2207(int which) {
@@ -429,6 +433,25 @@ void Module2200::updateScene2205() {
}
void Module2200::updateScene2206() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2247(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene2207(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ createScene2209(0);
+ _childObject->handleUpdate();
+ } else {
+ createScene2205(1);
+ _childObject->handleUpdate();
+ }
+ }
}
void Module2200::updateScene2207() {
@@ -1567,4 +1590,322 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+static const int16 kScene2206XPositions[] = {
+ 384,
+ 480,
+ 572
+};
+
+static const uint32 kScene2206MessageIds1[] = {
+ 0x004B8998,
+ 0x004B89B8,
+ 0x004B89D8
+};
+
+static const uint32 kScene2206MessageIds2[] = {
+ 0x004B89F8,
+ 0x004B8A20,
+ 0x004B8A48
+};
+
+static const int16 kClass603XDeltas1[] = {
+ -24, -28, -18, 6, 9, -8
+};
+
+static const int16 kClass603XDeltas2[] = {
+ -8, 7, 11, 26, 13, 14
+};
+
+Class603::Class603(NeverhoodEngine *vm, uint32 fileHash)
+ : StaticSprite(vm, fileHash, 200), _soundResource(vm) {
+
+ if (getGlobalVar(0x18890C91))
+ _x -= 63;
+ SetUpdateHandler(&Class603::update);
+ SetMessageHandler(&Class603::handleMessage);
+ SetSpriteCallback(NULL);
+}
+
+void Class603::update() {
+ handleSpriteUpdate();
+ StaticSprite::update();
+}
+
+uint32 Class603::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4808:
+ _index = 0;
+ SetMessageHandler(NULL);
+ SetSpriteCallback(&Class603::spriteUpdate481E60);
+ _soundResource.play(0x032746E0);
+ break;
+ case 0x4809:
+ _index = 0;
+ SetMessageHandler(NULL);
+ SetSpriteCallback(&Class603::spriteUpdate481E90);
+ _soundResource.play(0x002642C0);
+ break;
+ }
+ return messageResult;
+}
+
+void Class603::spriteUpdate481E60() {
+ if (_index < 6) {
+ _x += kClass603XDeltas1[_index];
+ _index++;
+ } else {
+ SetMessageHandler(&Class603::handleMessage);
+ SetSpriteCallback(NULL);
+ }
+}
+
+void Class603::spriteUpdate481E90() {
+ if (_index < 6) {
+ _x += kClass603XDeltas2[_index];
+ _index++;
+ } else {
+ SetMessageHandler(&Class603::handleMessage);
+ SetSpriteCallback(NULL);
+ }
+}
+
+Class604::Class604(NeverhoodEngine *vm, uint32 fileHash)
+ : StaticSprite(vm, fileHash, 50) {
+
+ SetUpdateHandler(&Class604::update);
+ SetMessageHandler(&Class604::handleMessage);
+ SetSpriteCallback(NULL);
+}
+
+void Class604::update() {
+ handleSpriteUpdate();
+ StaticSprite::update();
+}
+
+uint32 Class604::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4803:
+ SetMessageHandler(NULL);
+ SetSpriteCallback(&Class604::spriteUpdate482020);
+ _yDelta = 0;
+ break;
+ }
+ return messageResult;
+}
+
+void Class604::spriteUpdate482020() {
+ _yDelta++;
+ _y += _yDelta;
+}
+
+Class607::Class607(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash)
+ : StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene) {
+
+ if (getGlobalVar(0x45080C38)) {
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ } else {
+ SetMessageHandler(&Class607::handleMessage);
+ }
+ _deltaRect = _drawRect;
+ processDelta();
+}
+
+uint32 Class607::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4806:
+ setGlobalVar(0x45080C38, 1);
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ break;
+ }
+ return messageResult;
+}
+
+Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm) {
+
+ uint32 fileHash;
+ Palette2 *palette2;
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&Scene2206::handleMessage);
+ _surfaceFlag = true;
+
+ if (getGlobalVar(0x4D080E54)) {
+ fileHash = 0x41983216;
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x2201266A, 100));
+ _sprite2 = addSprite(new StaticSprite(_vm, 0x3406A333, 300));
+ _sprite3 = addSprite(new StaticSprite(_vm, 0x24A223A2, 100));
+ _sprite4 = addSprite(new Class603(_vm, 0x26133023));
+ _sprite4->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
+ _sprite4->getSurface()->getClipRect().y1 = 0;
+ _sprite4->getSurface()->getClipRect().x2 = 640;
+ _sprite4->getSurface()->getClipRect().y2 = 480;
+ setRectList(0x004B8AF8);
+ _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x0E038022, 100, 0));
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x83212411, NULL));
+ _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x5E00E262));
+ _class604 = addSprite(new Class604(_vm, 0x085E25E0));
+ } else {
+ fileHash = 0xE0102A45;
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x1C1106B8, 100));
+ _sprite2 = addSprite(new StaticSprite(_vm, 0x020462E0, 300));
+ _sprite3 = addSprite(new StaticSprite(_vm, 0x900626A2, 100));
+ _sprite4 = addSprite(new Class603(_vm, 0x544822A8));
+ _sprite4->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
+ _sprite4->getSurface()->getClipRect().y1 = 0;
+ _sprite4->getSurface()->getClipRect().x2 = 640;
+ _sprite4->getSurface()->getClipRect().y2 = 480;
+ setRectList(0x004B8B58);
+ _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x16882608, 100, 0));
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x02A41E09, NULL));
+ _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x52032563));
+ _class604 = addSprite(new Class604(_vm, 0x317831A0));
+ }
+
+ _class604->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
+ _class604->getSurface()->getClipRect().y1 = 0;
+ _class604->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
+ _class604->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
+
+ _background = addBackground(new DirtyBackground(_vm, fileHash, 0, 0));
+
+ palette2 = new Palette2(_vm, fileHash);
+ _palette = palette2;
+ _palette->usePalette();
+ addEntity(palette2);
+
+ palette2->addPalette(fileHash, 0, 256, 0);
+
+ if (!getGlobalVar(0x4D080E54)) {
+ _palette->addPalette(0x0263D144, 0, 65, 0);
+ }
+
+ _vm->_collisionMan->addSprite(_class607);
+
+ if (which < 0) {
+ _klayman = new KmScene2206(_vm, this, 200, 430);
+ setMessageList(0x004B88A8);
+ } else if (which == 1) {
+ _klayman = new KmScene2206(_vm, this, 640, 430);
+ setMessageList(0x004B88B8);
+ } else if (which == 2) {
+ _klayman = new KmScene2206(_vm, this, 205, 396);
+ setMessageList(0x004B88C8);
+ _palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
+ sub4819D0();
+ _soundResource.play(0x53B8284A);
+ } else if (which == 3) {
+ _klayman = new KmScene2206(_vm, this, kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
+ if (getGlobalVar(0xC0418A02))
+ _klayman->setDoDeltaX(1);
+ setMessageList(0x004B8A70);
+ } else {
+ _klayman = new KmScene2206(_vm, this, 0, 430);
+ setMessageList(0x004B88B0);
+ }
+ addSprite(_klayman);
+
+ _klayman->setSoundFlag(true);
+ _klayman->setKlaymanTable2();
+
+}
+
+Scene2206::~Scene2206() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x800C6694) {
+ sub481B00();
+ } else if (param.asInteger() == 0x402064D8) {
+ _klayman->sendEntityMessage(0x1014, _sprite5, this);
+ } else if (param.asInteger() == 0x11C40840) {
+ if (getGlobalVar(0x18890C91))
+ setMessageList(0x004B8948);
+ else
+ setMessageList(0x004B8970);
+ }
+ break;
+ case 0x4803:
+ _class604->sendMessage(0x4803, 0, this);
+ break;
+ case 0x480B:
+ if (sender == _sprite5) {
+ setGlobalVar(0x18890C91, getGlobalVar(0x18890C91) ? 0 : 1);
+ if (getGlobalVar(0x18890C91))
+ _sprite4->sendMessage(0x4808, 0, this);
+ else
+ _sprite4->sendMessage(0x4809, 0, this);
+ }
+ break;
+ case 0x4826:
+ _klayman->sendEntityMessage(0x1014, _class607, this);
+ setMessageList(0x004B8988);
+ break;
+ case 0x482A:
+ sub4819D0();
+ break;
+ case 0x482B:
+ sub481950();
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2206::sub481950() {
+ if (getGlobalVar(0x4D080E54)) {
+ ((Palette2*)_palette)->addPalette(0x41983216, 0, 65, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ }
+ setSurfacePriority(_sprite1->getSurface(), 100);
+ setSurfacePriority(_sprite2->getSurface(), 300);
+ setSurfacePriority(_sprite3->getSurface(), 100);
+ setSurfacePriority(_sprite4->getSurface(), 200);
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+}
+
+void Scene2206::sub4819D0() {
+ if (!getGlobalVar(0x4D080E54)) {
+ ((Palette2*)_palette)->addPalette(0xB103B604, 0, 65, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ }
+ setSurfacePriority(_sprite1->getSurface(), 1100);
+ setSurfacePriority(_sprite2->getSurface(), 1300);
+ setSurfacePriority(_sprite3->getSurface(), 1100);
+ setSurfacePriority(_sprite4->getSurface(), 1200);
+ _klayman->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
+}
+
+void Scene2206::sub481B00() {
+ setGlobalVar(0x48A68852, (_mouseClickPos.x - 354) / 96);
+ if (getGlobalVar(0x48A68852) > 2)
+ setGlobalVar(0x48A68852, 2);
+ setGlobalVar(0x49C40058, (_mouseClickPos.y - 183) / 7);
+ setGlobalVar(0xC8C28808, calcHash("stLineagex"));
+ setGlobalVar(0x4CE79018, 0);
+ if (ABS(kScene2206XPositions[getGlobalVar(0x48A68852)] - _klayman->getX()) >= 144) {
+ setMessageList2(kScene2206MessageIds1[getGlobalVar(0x48A68852)]);
+ } else {
+ setMessageList2(kScene2206MessageIds2[getGlobalVar(0x48A68852)]);
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index c79edb4..ef56c3f 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -304,6 +304,55 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Class603 : public StaticSprite {
+public:
+ Class603(NeverhoodEngine *vm, uint32 fileHash);
+protected:
+ int _index;
+ SoundResource _soundResource;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate481E60();
+ void spriteUpdate481E90();
+};
+
+class Class604 : public StaticSprite {
+public:
+ Class604(NeverhoodEngine *vm, uint32 fileHash);
+protected:
+ int16 _yDelta;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void spriteUpdate482020();
+};
+
+class Class607 : public StaticSprite {
+public:
+ Class607(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2206 : public Scene {
+public:
+ Scene2206(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2206();
+protected:
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_sprite4;
+ Sprite *_sprite5;
+ Sprite *_class604;
+ Sprite *_class607;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub481950();
+ void sub4819D0();
+ void sub481B00();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
Commit: 8459fa97778f1f303bbbcd92359608146e3f5069
https://github.com/scummvm/scummvm/commit/8459fa97778f1f303bbbcd92359608146e3f5069
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2207
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 18ea38b..597e67f 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -72,6 +72,9 @@ static const uint32 rectListOffsets[] = {
// Scene2206
1, 0x004B8AF8,
1, 0x004B8B58,
+ // Scene2207
+ 3, 0x004B38B8,
+ 1, 0x004B3948,
0, 0
};
@@ -213,6 +216,12 @@ static const uint32 messageListOffsets[] = {
5, 0x004B89F8,
5, 0x004B8A20,
5, 0x004B8A48,
+ // Scene2207
+ 1, 0x004B38E8,
+ 4, 0x004B38F0,
+ 2, 0x004B37D8,
+ 2, 0x004B3958,
+ 3, 0x004B3920,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 26e71ac..fb991ee 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 41f8749bd08db81a2b710d7422fbdbf0cc1921b9
https://github.com/scummvm/scummvm/commit/41f8749bd08db81a2b710d7422fbdbf0cc1921b9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Implement Scene2207 (not complete yet)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6450f5a..b987aa7 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 6;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 97fdd5a..3e90cf1 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3800,5 +3800,125 @@ void KmScene2206::sub482530() {
setCallback1(AnimationCallback(&Klayman::sub41FB30));
}
+KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x2001:
+ setCallback2(AnimationCallback(&KmScene2207::sub442460));
+ break;
+ case 0x2005:
+ spriteUpdate442430();
+ setCallback2(AnimationCallback(&KmScene2207::sub41FC80));
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480D:
+ setCallback2(AnimationCallback(&KmScene2207::sub4424B0));
+ break;
+ case 0x4812:
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ }else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x4827:
+ setCallback2(AnimationCallback(&Klayman::sub420E20));
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+void KmScene2207::spriteUpdate442430() {
+ _x = ((Sprite*)_attachedSprite)->getX() - 20;
+ _y = ((Sprite*)_attachedSprite)->getY() + 46;
+ processDelta();
+}
+
+void KmScene2207::sub442460() {
+ if (!sub41CF10(AnimationCallback(&KmScene2207::sub442460))) {
+ _status2 = 1;
+ _flagE5 = true;
+ setFileHash(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&KmScene2207::spriteUpdate442430);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ }
+}
+
+void KmScene2207::sub4424B0() {
+ if (!sub41CEB0(AnimationCallback(&KmScene2207::sub4424B0))) {
+ _status2 = 0;
+ if (_flagF7) {
+ sub420D50();
+ } else {
+ _flagE5 = false;
+ setFileHash(0x0C303040, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41E210);
+ SetAnimationCallback3(&KmScene2207::sub442520);
+ }
+ }
+}
+
+void KmScene2207::sub442520() {
+ setFileHash(0x0D318140, 0, -1);
+ SetAnimationCallback3(&KmScene2207::sub442560);
+ _attachedSprite->sendMessage(0x480F, 0, this);
+}
+
+void KmScene2207::sub442560() {
+ _flagE5 = true;
+ _flagF7 = true;
+ setFileHash(0x1564A2C0, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
+ SetAnimationCallback3(&KmScene2207::sub4425A0);
+}
+
+void KmScene2207::sub4425A0() {
+ _flagE5 = true;
+ _flagF7 = true;
+ setFileHash(0x4464A440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3cb5e38..7187905 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -125,6 +125,7 @@ public:
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
void setKlaymanTable1();
@@ -213,8 +214,6 @@ protected:
void sub41F950();
uint32 handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
-
uint32 handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -409,6 +408,19 @@ protected:
void sub482530();
};
+class KmScene2207 : public Klayman {
+public:
+ KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void spriteUpdate442430();
+ void sub442460();
+ void sub4424B0();
+ void sub442520();
+ void sub442560();
+ void sub4425A0();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index bec20fa..67c3be8 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -23,6 +23,7 @@
#include "neverhood/module2200.h"
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/diskplayerscene.h"
namespace Neverhood {
@@ -233,6 +234,9 @@ void Module2200::createScene2206(int which) {
}
void Module2200::createScene2207(int which) {
+ _vm->gameState().sceneNum = 6;
+ _childObject = new Scene2207(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2207);
}
void Module2200::createScene2208(int which) {
@@ -455,6 +459,14 @@ void Module2200::updateScene2206() {
}
void Module2200::updateScene2207() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene2206(2);
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2208() {
@@ -1908,4 +1920,498 @@ void Scene2206::sub481B00() {
}
}
+static const uint32 kScene2207FileHashes[] = {
+ 0x33B1E12E,
+ 0x33D1E12E,
+ 0x3311E12E,
+ 0x3291E12E,
+ 0x3191E12E,
+ 0x3791E12E,
+ 0x3B91E12E,
+ 0x2391E12E,
+ 0x1391E12E,
+ 0x3BB1E12E,
+ 0x23B1E12E,
+ 0x13B1E12E
+};
+
+AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 900), _parentScene(parentScene), _soundResource(vm),
+ _pointIndex(0), _destPointIndex(0), _destPointIndexDelta(0) {
+
+ NPoint pt;
+
+ _dataResource.load(0x00524846);
+ _pointArray = _dataResource.getPointArray(0x005B02B7);
+ pt = _dataResource.getPoint(0x403A82B1);
+ _x = pt.x;
+ _y = pt.y;
+ createSurface(1100, 129, 103);
+ setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, 0, 0);
+ SetUpdateHandler(&AsScene2207Elevator::update);
+ SetSpriteCallback(&AsScene2207Elevator::suSetPosition);
+ SetMessageHandler(&AsScene2207Elevator::handleMessage);
+ _newHashListIndex = 0;
+}
+
+AsScene2207Elevator::~AsScene2207Elevator() {
+ // TODO Sound1ChList_sub_407AF0(0x02700413);
+}
+
+void AsScene2207Elevator::update() {
+
+ if (_destPointIndex + _destPointIndexDelta > _pointIndex) {
+ _pointIndex++;
+ setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
+ _newHashListIndex = _pointIndex;
+ if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
+ if (_destPointIndexDelta != 0) {
+ _destPointIndexDelta = 0;
+ } else {
+ // TODO Sound1ChList_deleteSoundByHash(0xD3B02847);
+ _soundResource.play(0x53B8284A);
+ }
+ }
+ }
+
+ if (_destPointIndex + _destPointIndexDelta < _pointIndex) {
+ _pointIndex--;
+ if (_pointIndex == 0)
+ _parentScene->sendMessage(0x2003, 0, this);
+ setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
+ _newHashListIndex = _pointIndex;
+ if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
+ if (_destPointIndexDelta != 0) {
+ _destPointIndexDelta = 0;
+ } else {
+ // TODO Sound1ChList_deleteSoundByHash(0xD3B02847);
+ _soundResource.play(0x53B8284A);
+ }
+ }
+ }
+
+ if (_pointIndex > 20 && _surface->getPriority() != 900) {
+ _parentScene->sendMessage(0x2002, 900, this);
+ } else if (_pointIndex < 20 && _surface->getPriority() != 1100) {
+ _parentScene->sendMessage(0x2002, 1100, this);
+ }
+
+ AnimatedSprite::update();
+
+ if (_destPointIndex + _destPointIndexDelta == _pointIndex && _isMoving) {
+ _parentScene->sendMessage(0x2004, 0, this);
+ _isMoving = false;
+ }
+
+}
+
+void AsScene2207Elevator::suSetPosition() {
+ _x = (*_pointArray)[_pointIndex].x;
+ _y = (*_pointArray)[_pointIndex].y - 60;
+ processDelta();
+}
+
+uint32 AsScene2207Elevator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ moveToY(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2207Elevator::moveToY(int16 y) {
+ int16 minDistance = 480;
+
+ if (!_pointArray || _pointArray->size() == 0)
+ return;
+
+ for (uint i = 0; i < _pointArray->size(); i++) {
+ int16 distance = ABS(y - (*_pointArray)[i].y);
+ if (distance < minDistance) {
+ minDistance = distance;
+ _destPointIndex = i;
+ }
+ }
+
+ if (_destPointIndex != _pointIndex) {
+ if (_destPointIndex == 0 || _destPointIndex == _pointArray->size() - 1) {
+ _destPointIndexDelta = 0;
+ } else if (_destPointIndex < _pointIndex) {
+ _destPointIndexDelta = -2;
+ } else {
+ _destPointIndexDelta = 2;
+ }
+ // TODO Sound1ChList_addSoundResource(0x02700413, 0xD3B02847, true);
+ // TODO Sound1ChList_playLooping(0xD3B02847);
+ }
+
+ _isMoving = true;
+
+}
+
+Class500::Class500(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1200), _soundResource1(vm), _soundResource2(vm),
+ _soundResource3(vm), _soundResource4(vm), _flag1(true) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class500::handleMessage);
+ createSurface1(0xCCFD6090, 100);
+ _x = 309;
+ _y = 320;
+ setFileHash(0xCCFD6090, 0, -1);
+ _newHashListIndex = 0;
+ _soundResource2.load(0x40330872);
+ _soundResource3.load(0x72A2914A);
+ _soundResource4.load(0xD4226080);
+}
+
+Class500::~Class500() {
+ // TODO Sound1ChList_sub_407AF0(0x80D00820);
+}
+
+uint32 Class500::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (!_flag1) {
+ if (param.asInteger() == 0x3423093) {
+ // TODO Sound1ChList_addSoundResource(0x80D00820, 0x12121943, true);
+ // TODO Sound1ChList_playLooping(0x12121943);
+ } else if (param.asInteger() == 0x834AB011) {
+ _soundResource1.stop();
+ _soundResource2.stop();
+ _soundResource3.stop();
+ _soundResource4.stop();
+ // TODO Sound1ChList_deleteSoundByHash(0x12121943);
+ } else if (param.asInteger() == 0x3A980501) {
+ _soundResource2.play();
+ } else if (param.asInteger() == 0x2A2AD498) {
+ _soundResource3.play();
+ } else if (param.asInteger() == 0xC4980008) {
+ _soundResource4.play();
+ } else if (param.asInteger() == 0x06B84228) {
+ _soundResource1.play(0xE0702146);
+ }
+ }
+ break;
+ case 0x2006:
+ sub441D50();
+ break;
+ case 0x2007:
+ sub441D90();
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class500::sub441D50() {
+ if (!_flag1) {
+ SetAnimationCallback3(NULL);
+ } else {
+ setFileHash(0xCCFD6090, 0, -1);
+ _flag1 = false;
+ _surface->setVisible(true);
+ }
+}
+
+void Class500::sub441D90() {
+ SetAnimationCallback3(&Class500::sub441DA0);
+}
+
+void Class500::sub441DA0() {
+ setFileHash1();
+ _soundResource1.stop();
+ _soundResource2.stop();
+ _soundResource3.stop();
+ _soundResource4.stop();
+ // TODO Sound1ChList_deleteSoundByHash(0x12121943);
+ _flag1 = true;
+ _surface->setVisible(false);
+}
+
+Class501::Class501(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _flag1(true) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class501::handleMessage);
+ createSurface1(0x8CAA0099, 100);
+ _x = 309;
+ _y = 320;
+ setFileHash(0x8CAA0099, 0, -1);
+ _newHashListIndex = 0;
+}
+
+uint32 Class501::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2006:
+ sub441FA0();
+ break;
+ case 0x2007:
+ sub441FE0();
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class501::sub441FA0() {
+ if (!_flag1) {
+ SetAnimationCallback3(NULL);
+ } else {
+ _surface->setVisible(true);
+ setFileHash(0x8CAA0099, 0, -1);
+ _flag1 = false;
+ }
+}
+
+void Class501::sub441FE0() {
+ SetAnimationCallback3(&Class501::sub441FF0);
+}
+
+void Class501::sub441FF0() {
+ setFileHash1();
+ _surface->setVisible(false);
+ _flag1 = true;
+}
+
+Class597::Class597(NeverhoodEngine *vm, uint32 fileHash, int index)
+ : StaticSprite(vm, fileHash, 100) {
+
+ _x = 330;
+ _y = 246 + index * 50;
+ StaticSprite::update();
+}
+
+Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
+ _flag1(true), _elevatorSurfacePriority(0) {
+
+ _vm->gameModule()->initScene3009Vars();
+
+ //DEBUG
+ setGlobalVar(0x4D080E54, 1);
+
+ if (!getSubVar(0x40050052, 0x88460852))
+ setSubVar(0x40050052, 0x88460852, 1);
+
+ SetMessageHandler(&Scene2207::handleMessage);
+ SetUpdateHandler(&Scene2207::update);
+ _surfaceFlag = true;
+
+ _klayman = new KmScene2207(_vm, this, 0, 0); // CHECKME: Stack vars are uninitialized?!
+ addSprite(_klayman);
+ _klayman->setRepl(64, 0);
+
+ setMessageList(0x004B38E8);
+
+ _asElevator = addSprite(new AsScene2207Elevator(_vm, this));
+
+ if (getGlobalVar(0x4D080E54)) {
+
+ _background = addBackground(new DirtyBackground(_vm, 0x88C00241, 0, 0));
+ _palette = new Palette(_vm, 0x88C00241);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x00245884, NULL));
+
+ _ssMaskPart1 = addSprite(new StaticSprite(_vm, 0xE20A28A0, 1200));
+ _ssMaskPart2 = addSprite(new StaticSprite(_vm, 0x688F62A5, 1100));
+ _ssMaskPart3 = addSprite(new StaticSprite(_vm, 0x0043B038, 1100));
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 4, 1100, 277, 428, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+// _class487 = addSprite(new Class487(_vm, this, 527, 333, 0));
+// _vm->_collisionMan->addSprite(_class487);
+
+ _class500 = addSprite(new Class500(_vm, this));
+ _class501 = addSprite(new Class501(_vm));
+
+ _class500->getSurface()->setVisible(false);
+ _class501->getSurface()->setVisible(false);
+
+ _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x2C4061C4, 100, 0));
+
+// _class487->getSurface()->getClipRect().x1 = 0;
+// _class487->getSurface()->getClipRect().y1 = 0;
+// _class487->getSurface()->getClipRect().x2 = _ssMaskPart3->getSurface()->getDrawRect().x + _ssMaskPart3->getSurface()->getDrawRect().width;
+// _class487->getSurface()->getClipRect().y2 = 480;
+
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = _ssMaskPart2->getSurface()->getDrawRect().y + _ssMaskPart2->getSurface()->getDrawRect().height;
+
+ _asElevator->getSurface()->getClipRect().x1 = 0;
+ _asElevator->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
+ _asElevator->getSurface()->getClipRect().x2 = 640;
+ _asElevator->getSurface()->getClipRect().y2 = _ssMaskPart2->getSurface()->getDrawRect().y + _ssMaskPart2->getSurface()->getDrawRect().height;
+
+ } else {
+
+ setGlobalVar(0x81890D14, 1);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x05C02A55, 0, 0));
+ _palette = new Palette(_vm, 0x05C02A55);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x02A51054, NULL));
+
+ _ssMaskPart1 = addSprite(new StaticSprite(_vm, 0x980E46A4, 1200));
+
+ addSprite(new Class597(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0));
+ addSprite(new Class597(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1));
+ addSprite(new Class597(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2));
+
+ _asTape = NULL;
+ _class487 = NULL;
+ _class500 = NULL;
+ _class501 = NULL;
+ _ssButton = NULL;
+
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+ _asElevator->getSurface()->getClipRect().x1 = 0;
+ _asElevator->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
+ _asElevator->getSurface()->getClipRect().x2 = 640;
+ _asElevator->getSurface()->getClipRect().y2 = 480;
+
+ }
+
+ _dataResource.load(0x00524846);
+
+ setRectList(0x004B38B8);
+
+ _klayman->sendEntityMessage(0x1014, _asElevator, this);
+ _klayman->sendMessage(0x2001, 0, this);
+ _asElevator->sendMessage(0x2000, 480, this);
+
+ _soundResource2.load(calcHash("fxFogHornSoft"));
+
+}
+
+void Scene2207::update() {
+ Scene::update();
+ if (_elevatorSurfacePriority != 0) {
+ setSurfacePriority(_asElevator->getSurface(), _elevatorSurfacePriority);
+ _elevatorSurfacePriority = 0;
+ }
+ if (_klayman->getY() == 423) {
+ _flag1 = _klayman->getX() > 459 && _klayman->getX() < 525;
+ }
+}
+
+uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x0014F275) {
+ if (_flag1) {
+ _asElevator->sendMessage(0x2000, _mouseClickPos.y, this);
+ _klayman->sendEntityMessage(0x1014, _asElevator, this);
+ _klayman->sendMessage(0x2001, 0, this);
+ } else {
+ messageList402220();
+ }
+ } else if (param.asInteger() == 0x34569073) {
+ if (_flag1) {
+ _messageListFlag1 = true;
+ _asElevator->sendMessage(0x2000, 0, this);
+ _klayman->sendEntityMessage(0x1014, _asElevator, this);
+ _klayman->sendMessage(0x2001, 0, this);
+ } else {
+ messageList402220();
+ }
+ } else if (param.asInteger() == 0x4054C877) {
+ if (_flag1) {
+ _asElevator->sendMessage(0x2000, 480, this);
+ _klayman->sendEntityMessage(0x1014, _asElevator, this);
+ _klayman->sendMessage(0x2001, 0, this);
+ } else {
+ messageList402220();
+ }
+ } else if (param.asInteger() == 0x0CBC6211) {
+ _klayman->sendEntityMessage(0x1014, _asElevator, this);
+ _klayman->sendMessage(0x2001, 0, this);
+ setRectList(0x004B38B8);
+ } else if (param.asInteger() == 0x402064D8) {
+ _klayman->sendEntityMessage(0x1014, _ssButton, this);
+ } else if (param.asInteger() == 0x231DA241) {
+ if (_ssButton) {
+ setMessageList(0x004B38F0);
+ } else {
+ setMessageList(0x004B37D8);
+ }
+ }
+ break;
+ case 0x2002:
+ _elevatorSurfacePriority = param.asInteger();
+ break;
+ case 0x2003:
+ _messageListFlag1 = false;
+ break;
+ case 0x4807:
+ _class500->sendMessage(0x2007, 0, this);
+ _class501->sendMessage(0x2007, 0, this);
+ break;
+ case 0x480B:
+ if (sender == _ssButton) {
+ if (getSubVar(0x14800353, 0x40119852)) {
+ setSubVar(0x14800353, 0x40119852, 0);
+ _soundResource1.play(calcHash("fx3LocksDisable"));
+ } else {
+ setSubVar(0x14800353, 0x40119852, 1);
+ _soundResource2.play();
+ }
+ }
+ break;
+ case 0x480F:
+ _class500->sendMessage(0x2006, 0, this);
+ _class501->sendMessage(0x2006, 0, this);
+ _class500->getSurface()->setVisible(true);
+ _class501->getSurface()->setVisible(true);
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ if (_klayman->getY() == 423) {
+ _klayman->sendEntityMessage(0x1014, _asTape, this);
+ setMessageList(0x004B3958);
+ }
+ } else if (_flag1) {
+ SetMessageHandler(&Scene2207::handleMessage2);
+ _asElevator->sendMessage(0x2000, 347, this);
+ _klayman->sendEntityMessage(0x1014, _asElevator, this);
+ _klayman->sendMessage(0x2001, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene2207::handleMessage2(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2002:
+ _elevatorSurfacePriority = param.asInteger();
+ break;
+ case 0x2004:
+ SetMessageHandler(&Scene2207::handleMessage);
+ _klayman->sendMessage(0x2005, 0, this);
+// _klayman->sendEntityMessage(0x1014, _class487, this);
+ setMessageList(0x004B3920);
+ setRectList(0x004B3948);
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index ef56c3f..cf53e69 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -353,6 +353,77 @@ protected:
void sub481B00();
};
+class AsScene2207Elevator : public AnimatedSprite {
+public:
+ AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene);
+ ~AsScene2207Elevator();
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ NPointArray *_pointArray;
+ int16 _pointIndex;
+ int16 _destPointIndex, _destPointIndexDelta;
+ bool _isMoving;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suSetPosition();
+ void moveToY(int16 y);
+};
+
+class Class500 : public AnimatedSprite {
+public:
+ Class500(NeverhoodEngine *vm, Scene *parentScene);
+ ~Class500();
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ bool _flag1;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub441D50();
+ void sub441D90();
+ void sub441DA0();
+};
+
+class Class501 : public AnimatedSprite {
+public:
+ Class501(NeverhoodEngine *vm);
+protected:
+ bool _flag1;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub441FA0();
+ void sub441FE0();
+ void sub441FF0();
+};
+
+class Class597 : public StaticSprite {
+public:
+ Class597(NeverhoodEngine *vm, uint32 fileHash, int index);
+};
+
+class Scene2207 : public Scene {
+public:
+ Scene2207(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ Sprite *_asElevator;
+ Sprite *_ssMaskPart1;
+ Sprite *_ssMaskPart2;
+ Sprite *_ssMaskPart3;
+ Sprite *_asTape;
+ Sprite *_class487;
+ Sprite *_class500;
+ Sprite *_class501;
+ Sprite *_ssButton;
+ int _elevatorSurfacePriority;
+ bool _flag1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage2(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
Commit: 50996201f417ca392add73535cbf636c685b95ed
https://github.com/scummvm/scummvm/commit/50996201f417ca392add73535cbf636c685b95ed
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Very small cleanup
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 69c6014..3387e2e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -53,12 +53,7 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
break;
}
} else if (which == 0) {
- //createScene1001(0);//Real
- // DEBUG: Jump to room
- setGlobalVar(0x8306F218, 1);
- createScene1002(2);
- //createScene1005(0);
- //createScene1004(0);
+ createScene1001(0);
} else if (which == 1) {
createScene1002(1);
}
@@ -884,16 +879,11 @@ AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Sce
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
SetSpriteCallback(&AsScene1002DoorSpy::spriteUpdate448AA0);
-
createSurface(800, 136, 147);
_surface->getClipRect() = clipRect;
-
spriteUpdate448AA0();
-
- // TODO _soundResource.load(0xC0C40298);
-
+ _soundResource.load(0xC0C40298);
setFileHash(0x586C1D48, 0, 0);
-
}
uint32 AsScene1002DoorSpy::handleMessage4489D0(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -903,7 +893,7 @@ uint32 AsScene1002DoorSpy::handleMessage4489D0(int messageNum, const MessagePara
if (param.asInteger() == 0xA61CA1C2) {
_class505->sendMessage(0x2004, 0, this);
} else if (param.asInteger() == 0x14CE0620) {
- // TODO _soundResource.play();
+ _soundResource.play();
}
break;
case 0x2003:
@@ -1212,7 +1202,6 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const Messag
}
void AsScene1002VenusFlyTrap::sub4484F0() {
- //ok
setDoDeltaX(2);
setFileHash(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
@@ -1221,7 +1210,6 @@ void AsScene1002VenusFlyTrap::sub4484F0() {
}
void AsScene1002VenusFlyTrap::sub448530() {
- //ok
setFileHash(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
@@ -1229,7 +1217,6 @@ void AsScene1002VenusFlyTrap::sub448530() {
}
void AsScene1002VenusFlyTrap::sub448560() {
- //ok
_parentScene->sendMessage(0x4807, 0, this);
setFileHash(0x82292851, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
@@ -1238,7 +1225,6 @@ void AsScene1002VenusFlyTrap::sub448560() {
}
void AsScene1002VenusFlyTrap::sub4485B0() {
- //ok
setDoDeltaX(1);
setFileHash(0x86A82A11, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
@@ -1247,14 +1233,12 @@ void AsScene1002VenusFlyTrap::sub4485B0() {
}
void AsScene1002VenusFlyTrap::sub4485F0() {
- //ok
setFileHash(0xB5A86034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
}
void AsScene1002VenusFlyTrap::sub448620() {
- //ok
setFileHash(0x31303094, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(NULL);
@@ -1284,7 +1268,6 @@ void AsScene1002VenusFlyTrap::sub448660() {
}
void AsScene1002VenusFlyTrap::sub448720() {
- //ok
setFileHash(0x152920C4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
@@ -1292,7 +1275,6 @@ void AsScene1002VenusFlyTrap::sub448720() {
}
void AsScene1002VenusFlyTrap::sub448750() {
- //ok
setFileHash(0x84001117, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
@@ -1300,7 +1282,6 @@ void AsScene1002VenusFlyTrap::sub448750() {
}
void AsScene1002VenusFlyTrap::sub448780() {
-debug("AsScene1002VenusFlyTrap::sub448780()");
if (_x - 15 < _klayman->getX() && _x + 15 > _klayman->getX()) {
if (_flag) {
setDoDeltaX(_x > 265 && _x < 330 ? 1 : 0);
@@ -1417,6 +1398,53 @@ void Class478::update() {
AnimatedSprite::update();
}
+Class479::Class479(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman)
+ : AnimatedSprite(vm, 1200), _parentScene(parentScene), _klayman(klayman),
+ _flag1(false) {
+
+ SetUpdateHandler(&Class479::update);
+ SetMessageHandler(&Class479::handleMessage);
+ createSurface(1000, 33, 41);
+ _surface->setVisible(false);
+}
+
+void Class479::update() {
+ if (_klayman->getCurrAnimFileHash() == 0xAC20C012 && _klayman->getFrameIndex() < 50) {
+ setFileHash(0x9820C913, _klayman->getFrameIndex(), -1);
+ _newHashListIndex = _klayman->getFrameIndex();
+ _surface->setVisible(true);
+ _x = _klayman->getX();
+ _y = _klayman->getY();
+ setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
+ } else {
+ _surface->setVisible(false);
+ }
+ AnimatedSprite::update();
+}
+
+uint32 Class479::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ _parentScene->sendMessage(0x1022, 1200, this);
+ _flag1 = true;
+ _savedClipRect = _surface->getClipRect();
+ _surface->getClipRect().x1 = 0;
+ _surface->getClipRect().y1 = 0;
+ _surface->getClipRect().x2 = 640;
+ _surface->getClipRect().y2 = 480;
+ } else if (param.asInteger() == 0x88001184) {
+ _parentScene->sendMessage(0x1022, 1000, this);
+ if (_flag1) {
+ _surface->getClipRect() = _savedClipRect;
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
_flag1B4(false), _flag1BE(false) {
@@ -1424,17 +1452,6 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
NRect tempClipRect;
Sprite *tempSprite;
- // TODO _field1B6 = -1;
- // TODO _resourceTable8.setResourceList(0x004B4110);
- // TODO _resourceTable7.setResourceList(0x004B4100);
- // TODO _resourceTable6.setResourceList(0x004B40E8);
- // TODO _resourceTable5.setResourceList(0x004B40C0);
- // TODO _resourceTable4.setResourceList(0x004B4080);
- // TODO _resourceTable3.setResourceList(0x004B4060);
- // TODO _resourceTable2.setResourceList(0x004B4000, true);
- // TODO _resourceTable1.setResourceList(0x004B3F90, true);
- // TODO _resourceTable1.loadSome(3000);
-
SetUpdateHandler(&Scene1002::update);
SetMessageHandler(&Scene1002::handleMessage);
@@ -1479,42 +1496,40 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
}
+ } else if (which == 1) {
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435);
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4478);
+ _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _vm->_gameState.field2 = 1;
+ } else if (which == 2) {
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645);
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4298);
+ _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _vm->_gameState.field2 = 1;
+ _klayman->sendMessage(0x4820, 0, this);
} else {
- if (which == 1) {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435);
- _class478 = addSprite(new Class478(_vm, _klayman));
- setMessageList(0x004B4478);
- _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
- _vm->_gameState.field2 = 1;
- } else if (which == 2) {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645);
- _class478 = addSprite(new Class478(_vm, _klayman));
- setMessageList(0x004B4298);
- _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
- _vm->_gameState.field2 = 1;
- _klayman->sendMessage(0x4820, 0, this);
- } else {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
- _class478 = addSprite(new Class478(_vm, _klayman));
- setMessageList(0x004B4470);
- _klayman->getSurface()->getClipRect().x1 = 31;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
- // TODO _class479 = addSprite(new Class479(_vm, this, _klayman));
- // TODO _class479->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
- _klayman->setRepl(64, 0);
- _vm->_gameState.field2 = 0;
- }
+ _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
+ _class478 = addSprite(new Class478(_vm, _klayman));
+ setMessageList(0x004B4470);
+ _klayman->getSurface()->getClipRect().x1 = 31;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height;
+ _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _class479 = addSprite(new Class479(_vm, this, _klayman));
+ _class479->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setRepl(64, 0);
+ _vm->_gameState.field2 = 0;
}
addSprite(_klayman);
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 5229e7a..385ac10 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -262,6 +262,18 @@ protected:
void update();
};
+class Class479 : public AnimatedSprite {
+public:
+ Class479(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman);
+protected:
+ Scene *_parentScene;
+ Klayman *_klayman;
+ bool _flag1;
+ NRect _savedClipRect;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene1002 : public Scene {
public:
Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: 730844f1b7455ff8beea78be207920c95d11bf15
https://github.com/scummvm/scummvm/commit/730844f1b7455ff8beea78be207920c95d11bf15
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Implement Scene2208 (viewer for Hall Of Records text)
- Implement Screen::drawSurface3 and Screen::drawUnk and move actual blitting code to Screen::blit
Changed paths:
engines/neverhood/background.h
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/neverhood.h
engines/neverhood/palette.cpp
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/background.h b/engines/neverhood/background.h
index 733f80b..8ac3581 100644
--- a/engines/neverhood/background.h
+++ b/engines/neverhood/background.h
@@ -38,6 +38,7 @@ public:
BaseSurface *getSurface() { return _surface; }
void createSurface(int surfacePriority, int16 width, int16 height);
void load(uint32 fileHash);
+ SpriteResource& getSpriteResource() { return _spriteResource; }
protected:
BaseSurface *_surface;
SpriteResource _spriteResource;
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index b987aa7..920893c 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 6;
+ _vm->gameState().sceneNum = 7;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 204e386..900ad57 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -52,8 +52,11 @@ BaseSurface::~BaseSurface() {
void BaseSurface::draw() {
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
- // TODO: _sysRect alternate drawing code (is that used?)
- _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent);
+ if (_sysRect.x == 0 && _sysRect.y == 0) {
+ _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent);
+ } else {
+ _vm->_screen->drawUnk(_surface, _drawRect, _sysRect, _clipRect, _transparent);
+ }
}
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 67c3be8..2fb3eec 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -240,6 +240,11 @@ void Module2200::createScene2207(int which) {
}
void Module2200::createScene2208(int which) {
+ if (which >= 0)
+ _vm->gameState().which = _vm->gameState().sceneNum;
+ _vm->gameState().sceneNum = 7;
+ _childObject = new Scene2208(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2208);
}
void Module2200::createScene2209(int which) {
@@ -470,6 +475,15 @@ void Module2200::updateScene2207() {
}
void Module2200::updateScene2208() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ // TODO
+ createScene2206(2);
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2209() {
@@ -2414,4 +2428,199 @@ uint32 Scene2207::handleMessage2(int messageNum, const MessageParam ¶m, Enti
return messageResult;
}
+static const uint32 kScene2208FileHashes1[] = {
+ 0x041023CB,
+ 0x041020CB,
+ 0x041026CB,
+ 0x04102ACB,
+ 0x041032CB,
+ 0x041002CB
+};
+
+static const uint32 kScene2208FileHashes2[] = {
+ 0x091206C9,
+ 0x091406C9,
+ 0x091806C9,
+ 0x090006C9,
+ 0x093006C9,
+ 0x095006C9
+};
+
+Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _textResource(vm) {
+
+ SpriteResource spriteResource(_vm);
+ const char *textStart, *textEnd;
+
+ if (!getGlobalVar(0xC8C28808))
+ setGlobalVar(0xC8C28808, calcHash("stLineagex"));
+
+ _textResource.load(getGlobalVar(0xC8C28808));
+
+ textStart = _textResource.getString(getGlobalVar(0x48A68852), textEnd);
+ while (textStart < textEnd) {
+ _strings.push_back(textStart);
+ textStart += strlen(textStart) + 1;
+ }
+
+ _maxRowIndex = 8 + 10 * (3 - (getGlobalVar(0xC8C28808) == calcHash("stLineagex") ? 1 : 0));
+
+ _background = new Background(_vm, 0);
+ _background->createSurface(0, 640, 528);
+ _background->getSpriteResource().getPosition().y = 480;
+ addBackground(_background);
+
+ _palette = new Palette(_vm, 0x08100289);
+ _palette->usePalette();
+ addEntity(_palette); // Why?
+
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x0028D089, 40, 600));
+
+ createFontSurface();
+
+ _backgroundSurface = new BaseSurface(_vm, 0, 640, 480);
+ spriteResource.load2(0x08100289);
+ _backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
+
+ _topBackgroundSurface = new BaseSurface(_vm, 0, 640, 192);
+ spriteResource.load2(!getGlobalVar(0x4CE79018) ? kScene2208FileHashes1[getGlobalVar(0x48A68852) % 6] : getGlobalVar(0x4CE79018));
+ _topBackgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
+
+ _bottomBackgroundSurface = new BaseSurface(_vm, 0, 640, 192);
+ spriteResource.load2(kScene2208FileHashes2[getGlobalVar(0x48A68852) % 6]);
+ _bottomBackgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
+
+ SetUpdateHandler(&Scene2208::update);
+ SetMessageHandler(&Scene2208::handleMessage);
+
+ _visibleRowsCount = 10;
+
+ _newRowIndex = (int16)getGlobalVar(0x49C40058);
+ if (_newRowIndex + _visibleRowsCount > _maxRowIndex)
+ _newRowIndex = _maxRowIndex - _visibleRowsCount;
+ if (_newRowIndex < 6)
+ _newRowIndex = 0;
+
+ _rowScrollY = 0;
+
+ _backgroundScrollY = 48 * _newRowIndex;
+
+ _currRowIndex = _newRowIndex;
+
+ for (int16 rowIndex = 0; rowIndex < _visibleRowsCount; rowIndex++)
+ drawRow(_newRowIndex + rowIndex);
+
+ _background->getSurface()->getSysRect().y = _backgroundScrollY;
+
+ // TODO Screen.yOffset = _backgroundScrollY;
+ // TODO Scene2208_sub409080 (creates background Sprites via the text, doesn't seem to be used?)
+
+}
+
+Scene2208::~Scene2208() {
+ delete _fontSurface;
+ delete _backgroundSurface;
+ delete _topBackgroundSurface;
+ delete _bottomBackgroundSurface;
+}
+
+void Scene2208::update() {
+
+ int16 mouseY = _vm->getMouseY();
+
+ if (mouseY < 48) {
+ if (_currRowIndex > 0)
+ _newRowIndex = _currRowIndex - 1;
+ } else if (mouseY > 432) {
+ if (_currRowIndex < _maxRowIndex - _visibleRowsCount)
+ _newRowIndex = _currRowIndex + 1;
+ } else {
+ if (_currRowIndex > _newRowIndex)
+ _newRowIndex = _currRowIndex;
+ }
+
+ if (_currRowIndex < _newRowIndex) {
+ if (_rowScrollY == 0) {
+ drawRow(_currRowIndex + _visibleRowsCount);
+ }
+ _backgroundScrollY += 4;
+ _rowScrollY += 4;
+ if (_rowScrollY == 48) {
+ _rowScrollY = 0;
+ _currRowIndex++;
+ }
+ _background->getSurface()->getSysRect().y = _backgroundScrollY;
+ } else if (_currRowIndex > _newRowIndex || _rowScrollY > 0) {
+ if (_rowScrollY == 0) {
+ drawRow(_currRowIndex - 1);
+ _currRowIndex--;
+ }
+ _backgroundScrollY -= 4;
+ if (_rowScrollY == 0)
+ _rowScrollY = 48;
+ _rowScrollY -= 4;
+ _background->getSurface()->getSysRect().y = _backgroundScrollY;
+ }
+
+ // TODO Screen.yOffset = _backgroundScrollY;
+ Scene::update();
+
+}
+
+uint32 Scene2208::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 40 || param.asPoint().x >= 600) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2208::createFontSurface() {
+ DataResource fontData(_vm);
+ SpriteResource spriteResource(_vm);
+ fontData.load(calcHash("asRecFont"));
+ uint16 numRows = fontData.getPoint(calcHash("meNumRows")).x;
+ uint16 firstChar = fontData.getPoint(calcHash("meFirstChar")).x;
+ uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
+ uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
+ NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
+ spriteResource.load2(0x0800090C);
+ _fontSurface = new FontSurface(_vm, tracking, numRows, firstChar, charWidth, charHeight);
+ _fontSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
+}
+
+void Scene2208::drawRow(int16 rowIndex) {
+ NDrawRect sourceRect;
+ int16 y = (rowIndex * 48) % 528;
+ if (rowIndex < 4) {
+ sourceRect.x = 0;
+ sourceRect.y = y;
+ sourceRect.width = 640;
+ sourceRect.height = 48;
+ _background->getSurface()->copyFrom(_topBackgroundSurface->getSurface(), 0, y, sourceRect, true);
+ } else if (rowIndex >= _maxRowIndex - 5) {
+ sourceRect.x = 0;
+ sourceRect.y = (rowIndex - _maxRowIndex + 4) * 48;
+ sourceRect.width = 640;
+ sourceRect.height = 48;
+ _background->getSurface()->copyFrom(_bottomBackgroundSurface->getSurface(), 0, y, sourceRect, true);
+ } else {
+ rowIndex -= 4;
+ sourceRect.x = 0;
+ sourceRect.y = (rowIndex * 48) % 480;
+ sourceRect.width = 640;
+ sourceRect.height = 48;
+ _background->getSurface()->copyFrom(_backgroundSurface->getSurface(), 0, y, sourceRect, true);
+ if (rowIndex < _strings.size()) {
+ const char *text = _strings[rowIndex];
+ // TODO/CHECKME: Use temporary string up to '{' character (see above)
+ _fontSurface->drawString(_background->getSurface(), 95, y, (const byte*)text);
+ }
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index cf53e69..7a75e12 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -27,6 +27,7 @@
#include "neverhood/module.h"
#include "neverhood/scene.h"
#include "neverhood/module1000.h"
+#include "neverhood/graphics.h"
namespace Neverhood {
@@ -424,6 +425,29 @@ protected:
uint32 handleMessage2(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2208 : public Scene {
+public:
+ Scene2208(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2208();
+protected:
+ FontSurface *_fontSurface;
+ BaseSurface *_backgroundSurface;
+ BaseSurface *_topBackgroundSurface;
+ BaseSurface *_bottomBackgroundSurface;
+ TextResource _textResource;
+ int16 _backgroundScrollY;
+ int16 _newRowIndex;
+ int16 _currRowIndex;
+ int16 _rowScrollY;
+ int16 _maxRowIndex;
+ int16 _visibleRowsCount;
+ Common::Array<const char*> _strings; // TODO: Move to TextResource
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createFontSurface();
+ void drawRow(int16 rowIndex);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index edb204c..b4bc333 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -49,6 +49,7 @@ struct NPoint;
struct GameState {
int sceneNum;
+ int which;
int field2;
};
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index 28fa81b..bd1d6b2 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -114,7 +114,7 @@ void Palette::startFadeToWhite(int counter) {
}
void Palette::update() {
- debug("Palette::update() _status = %d", _status);
+ debug(2, "Palette::update() _status = %d", _status);
if (_status == 1) {
if (_palCounter > 1) {
for (int i = 0; i < 256; i++) {
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index a884914..351e51a 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -125,7 +125,53 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
ddRect.y1 = 0;
}
- debug(2, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
+ //debug(2, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
+
+ blit(surface, destX, destY, ddRect, transparent);
+
+ // Useful for debugging
+ //_backScreen->frameRect(Common::Rect(clipRect.x1, clipRect.y1, clipRect.x2, clipRect.y2), 250);
+ //_backScreen->frameRect(Common::Rect(destX, destY, destX + ddRect.x2, destY + ddRect.y2), 255);
+ //_backScreen->frameRect(Common::Rect(drawRect.x, drawRect.y, drawRect.x + drawRect.width, drawRect.y + drawRect.height), 255);
+
+}
+
+void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent) {
+
+ int16 destX, destY;
+ NRect ddRect;
+
+ if (x + drawRect.width >= clipRect.x2)
+ ddRect.x2 = clipRect.x2 - drawRect.x - x;
+ else
+ ddRect.x2 = drawRect.x + drawRect.width;
+
+ if (x < clipRect.x1) {
+ destX = clipRect.x1;
+ ddRect.x1 = clipRect.x1 + drawRect.x - x;
+ } else {
+ destX = x;
+ ddRect.x1 = drawRect.x;
+ }
+
+ if (y + drawRect.height >= clipRect.y2)
+ ddRect.y2 = clipRect.y2 + drawRect.y - y;
+ else
+ ddRect.y2 = drawRect.y + drawRect.height;
+
+ if (y < clipRect.y1) {
+ destY = clipRect.y1;
+ ddRect.y1 = clipRect.y1 + drawRect.y - y;
+ } else {
+ destY = y;
+ ddRect.y1 = drawRect.y;
+ }
+
+ blit(surface, destX, destY, ddRect, transparent);
+
+}
+
+void Screen::blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent) {
const byte *source = (const byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
@@ -151,11 +197,6 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
}
}
- // Useful for debugging
- //_backScreen->frameRect(Common::Rect(clipRect.x1, clipRect.y1, clipRect.x2, clipRect.y2), 250);
- //_backScreen->frameRect(Common::Rect(destX, destY, destX + ddRect.x2, destY + ddRect.y2), 255);
- //_backScreen->frameRect(Common::Rect(drawRect.x, drawRect.y, drawRect.x + drawRect.width, drawRect.y + drawRect.height), 255);
-
}
void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect) {
@@ -176,4 +217,73 @@ void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &dra
}
+void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent) {
+
+ int16 x, y;
+ bool xflag, yflag;
+ NDrawRect newDrawRect;
+
+ x = sysRect.x;
+ if (sysRect.width <= x || -sysRect.width >= x) {
+ x = x % sysRect.width;
+ }
+ if (x < 0)
+ x += sysRect.width;
+
+ y = sysRect.y;
+ if (y >= sysRect.height || -sysRect.height >= y) {
+ y = y % sysRect.height;
+ }
+ if (y < 0)
+ y += sysRect.height;
+
+ xflag = x <= 0;
+ yflag = y <= 0;
+
+ newDrawRect.x = x;
+ newDrawRect.width = sysRect.width - x;
+ if (drawRect.width < newDrawRect.width) {
+ xflag = true;
+ newDrawRect.width = drawRect.width;
+ }
+
+ newDrawRect.y = y;
+ newDrawRect.height = sysRect.height - y;
+ if (drawRect.height < newDrawRect.height) {
+ yflag = true;
+ newDrawRect.height = drawRect.height;
+ }
+
+ drawSurface3(surface, drawRect.x, drawRect.y, newDrawRect, clipRect, transparent);
+
+ if (!xflag) {
+ newDrawRect.x = 0;
+ newDrawRect.y = y;
+ newDrawRect.width = x + drawRect.width - sysRect.width;
+ newDrawRect.height = sysRect.height - y;
+ if (drawRect.height < newDrawRect.height)
+ newDrawRect.height = drawRect.height;
+ drawSurface3(surface, sysRect.width + drawRect.x - x, drawRect.y, newDrawRect, clipRect, transparent);
+ }
+
+ if (!yflag) {
+ newDrawRect.x = x;
+ newDrawRect.y = 0;
+ newDrawRect.width = sysRect.width - x;
+ newDrawRect.height = y + drawRect.height - sysRect.height;
+ if (drawRect.width < newDrawRect.width)
+ newDrawRect.width = drawRect.width;
+ drawSurface3(surface, drawRect.x, sysRect.height + drawRect.y - y, newDrawRect, clipRect, transparent);
+ }
+
+ if (!xflag && !yflag) {
+ newDrawRect.x = 0;
+ newDrawRect.y = 0;
+ newDrawRect.width = x + drawRect.width - sysRect.width;
+ newDrawRect.height = y + drawRect.height - sysRect.height;
+ drawSurface3(surface, sysRect.width + drawRect.x - x, sysRect.height + drawRect.y - y, newDrawRect, clipRect, transparent);
+ }
+
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 922ad48..e813e63 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -43,7 +43,10 @@ public:
void updatePalette();
void clear();
void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent);
+ void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent);
+ void blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent);
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
+ void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent);
protected:
NeverhoodEngine *_vm;
Graphics::Surface *_backScreen;
Commit: 904f7ac33520a3b578ad46bb3b1552074ae57326
https://github.com/scummvm/scummvm/commit/904f7ac33520a3b578ad46bb3b1552074ae57326
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2242
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 597e67f..5f54df9 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -75,6 +75,9 @@ static const uint32 rectListOffsets[] = {
// Scene2207
3, 0x004B38B8,
1, 0x004B3948,
+ // Scene2242
+ 1, 0x004B3DC8,
+ 1, 0x004B3E18,
0, 0
};
@@ -222,6 +225,16 @@ static const uint32 messageListOffsets[] = {
2, 0x004B37D8,
2, 0x004B3958,
3, 0x004B3920,
+ // Scene2242
+ 1, 0x004B3C18,
+ 1, 0x004B3D60,
+ 1, 0x004B3D48,
+ 1, 0x004B3C20,
+ 2, 0x004B3D50,
+ 5, 0x004B3CF8,
+ 5, 0x004B3D20,
+ 4, 0x004B3CB8,
+ 4, 0x004B3CD8,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index fb991ee..d217943 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 9133d17cdf33a96fcb0423576e69d888323f2b00
https://github.com/scummvm/scummvm/commit/9133d17cdf33a96fcb0423576e69d888323f2b00
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Implement Scene2242
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 920893c..d9237b9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 41;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 3e90cf1..a20f91b 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -440,6 +440,14 @@ void Klayman::sub421310() {
/////////////////////////////////////////////////////////////////
+void Klayman::sub41CE70() {
+ _x4 = _x;
+ if (!_flagE1 && !_flagE2 && !_flagE3) {
+ setCallback2(NULL);
+ sub41C7B0();
+ }
+}
+
void Klayman::sub41D320(uint32 fileHash, AnimationCb callback) {
_resourceHandle = _vm->_res->useResource(fileHash);
if (_resourceHandle != -1) {
@@ -3751,7 +3759,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4837:
- // TODO sub41CE70();
+ sub41CE70();
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -3921,4 +3929,89 @@ void KmScene2207::sub4425A0() {
SetMessageHandler(&Klayman::handleMessage41D360);
}
+KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+void KmScene2242::xUpdate() {
+ setGlobalVar(0x18288913, _frameIndex);
+}
+
+uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&KmScene2242::sub444D20));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x4837:
+ sub41CE70();
+ break;
+ }
+ return 0;
+}
+
+void KmScene2242::sub444D20() {
+ int16 frameIndex = (int16)getGlobalVar(0x18288913) + 1;
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setFileHash(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetAnimationCallback3(&Klayman::sub41FA40);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 7187905..a5abc0f 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -113,6 +113,8 @@ public:
void sub41F9E0();
void sub41FA40();
void sub41FB30();
+
+ void sub41CE70();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
@@ -421,6 +423,15 @@ protected:
void sub4425A0();
};
+class KmScene2242 : public Klayman {
+public:
+ KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ void xUpdate();
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub444D20();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 2fb3eec..eb2829c 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -248,6 +248,9 @@ void Module2200::createScene2208(int which) {
}
void Module2200::createScene2209(int which) {
+ _vm->gameState().sceneNum = 8;
+ _childObject = new Scene2208(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2209);
}
void Module2200::createScene2210(int which) {
@@ -347,6 +350,9 @@ void Module2200::createScene2241(int which) {
}
void Module2200::createScene2242(int which) {
+ _vm->gameState().sceneNum = 41;
+ _childObject = new Scene2242(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2242);
}
void Module2200::createScene2243(int which) {
@@ -487,6 +493,14 @@ void Module2200::updateScene2208() {
}
void Module2200::updateScene2209() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene2206(3);
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2210() {
@@ -586,6 +600,22 @@ void Module2200::updateScene2241() {
}
void Module2200::updateScene2242() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2248(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ _childObject->handleUpdate();
+ } else {
+ createScene2241(1);
+ _childObject->handleUpdate();
+ }
+ }
}
void Module2200::updateScene2243() {
@@ -2623,4 +2653,130 @@ void Scene2208::drawRow(int16 rowIndex) {
}
}
+static const int16 kScene2242XPositions[] = {
+ 68,
+ 158
+};
+
+static const uint32 kScene2242MessageListIds2[] = {
+ 0x004B3CB8,
+ 0x004B3CD8
+};
+
+static const uint32 kScene2242MessageListIds1[] = {
+ 0x004B3CF8,
+ 0x004B3D20
+};
+
+Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _isKlaymanInLight(false) {
+
+ Palette2 *palette2;
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2242::handleMessage);
+ SetUpdateHandler(&Scene2242::update);
+
+ setGlobalVar(0x4D080E54,1);
+
+ if (getGlobalVar(0x4D080E54)) {
+ _background = addBackground(new DirtyBackground(_vm, 0x11840E24, 0, 0));
+ _palette = new Palette(_vm, 0x11840E24);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x40E20110, NULL));
+ setRectList(0x004B3DC8);
+ } else {
+ _background = addBackground(new DirtyBackground(_vm, 0x25848E24, 0, 0));
+ palette2 = new Palette2(_vm, 0x25848E24);
+ _palette = palette2;
+ _palette->usePalette();
+ addEntity(palette2);
+ ((Palette2*)_palette)->copyBasePalette(0, 256, 0);
+ _palette->addPalette(0x68033B1C, 0, 65, 0);
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x48E20250, NULL));
+ setRectList(0x004B3E18);
+ }
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 10, 1100, 464, 435, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+ if (which < 0) {
+ _klayman = new KmScene2242(_vm, this, 200, 430);
+ setMessageList(0x004B3C18);
+ } else if (which == 1) {
+ _klayman = new KmScene2242(_vm, this, 530, 430);
+ setMessageList(0x004B3D60);
+ } else if (which == 2) {
+ _klayman = new KmScene2242(_vm, this, kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
+ setMessageList(0x004B3D48);
+ if (getGlobalVar(0xC0418A02))
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmScene2242(_vm, this, 0, 430);
+ setMessageList(0x004B3C20);
+ }
+ addSprite(_klayman);
+
+ _klayman->setSoundFlag(true);
+
+}
+
+Scene2242::~Scene2242() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+void Scene2242::update() {
+ if (!getGlobalVar(0x4D080E54)) {
+ if (_isKlaymanInLight && _klayman->getX() < 440) {
+ ((Palette2*)_palette)->addPalette(0x68033B1C, 0, 65, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ _isKlaymanInLight = false;
+ } else if (!_isKlaymanInLight && _klayman->getX() >= 440) {
+ ((Palette2*)_palette)->addPalette(0x25848E24, 0, 65, 0);
+ ((Palette2*)_palette)->startFadeToPalette(12);
+ _isKlaymanInLight = true;
+ }
+ }
+ Scene::update();
+}
+
+uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x800C6694) {
+ sub4448D0();
+ }
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ _klayman->sendEntityMessage(0x1014, _asTape, this);
+ setMessageList(0x004B3D50);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2242::sub4448D0() {
+ int index;
+ if (_mouseClickPos.x < 108) {
+ setGlobalVar(0xC8C28808, 0x04290188);
+ setGlobalVar(0x48A68852, 42);
+ setGlobalVar(0x4CE79018, calcHash("bgRecPanelStart1"));
+ index = 0;
+ } else {
+ setGlobalVar(0xC8C28808, 0x04290188);
+ setGlobalVar(0x48A68852, 43);
+ setGlobalVar(0x4CE79018, calcHash("bgRecPanelStart2"));
+ index = 1;
+ }
+ setGlobalVar(0x49C40058, (_mouseClickPos.x - 100) / 7);
+ if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) {
+ setMessageList2(kScene2242MessageListIds1[index]);
+ } else {
+ setMessageList2(kScene2242MessageListIds2[index]);
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 7a75e12..d06f30b 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -448,6 +448,18 @@ protected:
void drawRow(int16 rowIndex);
};
+class Scene2242 : public Scene {
+public:
+ Scene2242(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2242();
+protected:
+ Sprite *_asTape;
+ bool _isKlaymanInLight;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub4448D0();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2200_H */
Commit: 49658b6b5a0537010680f25248f2912114021b85
https://github.com/scummvm/scummvm/commit/49658b6b5a0537010680f25248f2912114021b85
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Forgot to remove debug code
Changed paths:
engines/neverhood/module2200.cpp
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index eb2829c..15e1ca4 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2677,8 +2677,6 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2242::handleMessage);
SetUpdateHandler(&Scene2242::update);
- setGlobalVar(0x4D080E54,1);
-
if (getGlobalVar(0x4D080E54)) {
_background = addBackground(new DirtyBackground(_vm, 0x11840E24, 0, 0));
_palette = new Palette(_vm, 0x11840E24);
Commit: b16f34c376d16ca98fa7ef18e9781a30b159c918
https://github.com/scummvm/scummvm/commit/b16f34c376d16ca98fa7ef18e9781a30b159c918
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Add Scene2248
Changed paths:
engines/neverhood/module2200.cpp
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 15e1ca4..515e4bd 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -371,6 +371,19 @@ void Module2200::createScene2247(int which) {
}
void Module2200::createScene2248(int which) {
+ _vm->gameState().sceneNum = 47;
+ if (!getGlobalVar(0x98109F12)) {
+ if (getGlobalVar(0x4D080E54))
+ _childObject = new Class152(_vm, this, 0x83110287, 0x10283839);
+ else
+ _childObject = new Class152(_vm, this, 0x83412B9D, 0x12B9983C);
+ } else {
+ if (getGlobalVar(0x4D080E54))
+ _childObject = new Class152(_vm, this, 0x48632087, 0x3208348E);
+ else
+ _childObject = new Class152(_vm, this, 0x08C74886, 0x74882084);
+ }
+ SetUpdateHandler(&Module2200::updateScene2248);
}
void Module2200::updateScene2201() {
@@ -634,6 +647,14 @@ void Module2200::updateScene2247() {
}
void Module2200::updateScene2248() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene2242(1);
+ _childObject->handleUpdate();
+ }
}
// Scene2201
Commit: 9b151cefc352a8f42c005a7406d4b694aa4a221c
https://github.com/scummvm/scummvm/commit/9b151cefc352a8f42c005a7406d4b694aa4a221c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:36-07:00
Commit Message:
NEVERHOOD: Implement HallOfRecordsScene (and all HoR scenes) and Scene2247
- Load SceneInfo140 from neverhood.dat
- Some renaming
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamevars.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/scene.cpp
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d9237b9..31330f9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 41;
+ _vm->gameState().sceneNum = 46;
createModule2200(-1);
#endif
}
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index e0cae80..3e4e604 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -102,7 +102,7 @@ int16 GameVars::addSubVar(int16 varIndex, uint32 subNameHash, uint32 value) {
}
int16 GameVars::getSubVarIndex(int16 varIndex, uint32 subNameHash) {
- debug("GameVars::getSubVarIndex(%d, %08X)", varIndex, subNameHash);
+ //debug("GameVars::getSubVarIndex(%d, %08X)", varIndex, subNameHash);
int16 subVarIndex = findSubVarIndex(varIndex, subNameHash);
if (subVarIndex == -1) {
subVarIndex = addSubVar(varIndex, subNameHash, 0);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index a20f91b..e0359fc 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -150,7 +150,7 @@ uint32 Klayman::handleMessage41EB10(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FD90() {
- // TODO _soundResource1.stop(0);
+ _soundResource1.stop();
}
void Klayman::sub41FDA0() {
@@ -195,7 +195,7 @@ void Klayman::sub41FE00() {
}
void Klayman::sub41FE50() {
- // TODO _soundResource1.stop(0);
+ _soundResource1.stop();
}
uint32 Klayman::handleMessage41E9E0(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -485,7 +485,6 @@ bool Klayman::sub41CF10(AnimationCb callback) {
}
void Klayman::sub41C7B0() {
- //debug("Klayman::sub41C7B0()");
if (_callback1Cb) {
AnimationCb cb = _callback1Cb;
_callback1Cb = NULL;
@@ -515,7 +514,6 @@ void Klayman::sub41C790() {
}
void Klayman::sub41FC80() {
- //ok
if (!sub41CF10(AnimationCallback(&Klayman::sub41FC80))) {
_status2 = 1;
_flagE5 = true;
@@ -555,7 +553,6 @@ void Klayman::update41D0F0() {
}
uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41D360(%04X)", messageNum);
Sprite::handleMessage(messageNum, param, sender);
uint32 messageResult = xHandleMessage(messageNum, param);
switch (messageNum) {
@@ -603,7 +600,6 @@ void Klayman::sub41FF00() {
}
uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41D480(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -614,7 +610,6 @@ uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FCF0() {
- //ok
_status2 = 1;
_flagE5 = true;
setFileHash(0x5420E254, 0, -1);
@@ -624,7 +619,6 @@ void Klayman::sub41FCF0() {
}
uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41F140(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -640,7 +634,6 @@ uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, E
void Klayman::sub41C930(int16 x, bool flag) {
- //debug("Klayman::sub41C930(%d, %d)", x, flag);
int16 xdiff = ABS(x - _x);
if (x == _x) {
_x4 = x;
@@ -690,8 +683,6 @@ void Klayman::sub4211B0() {
}
uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
- //debug("Klayman::handleMessage41E920(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -720,7 +711,6 @@ bool Klayman::sub41CEB0(AnimationCb callback3) {
}
void Klayman::spriteUpdate41F250() {
- //debug("Klayman::spriteUpdate41F250()");
int16 xdiff = _x4 - _x;
@@ -752,7 +742,6 @@ void Klayman::spriteUpdate41F250() {
}
void Klayman::spriteUpdate41F5F0() {
- //debug("Klayman::spriteUpdate41F5F0()");
int16 xdiff = _x4 - _x;
@@ -817,7 +806,6 @@ void Klayman::sub41FBB0() {
}
uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41DD80(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -848,7 +836,6 @@ uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41CD70(int16 x) {
- //debug("Klayman::sub41CD70(%d)", x);
if (x > _x) {
if (ABS(x - _x) <= 105) {
sub41CAC0(x);
@@ -884,7 +871,6 @@ void Klayman::sub41FB30() {
}
uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41EC70(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -924,7 +910,6 @@ void Klayman::spriteUpdate41F300() {
}
uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41EB70(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1063,7 +1048,6 @@ void Klayman::sub41FF80() {
}
uint32 Klayman::handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41D4C0(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1101,7 +1085,6 @@ void Klayman::sub420120() {
}
uint32 Klayman::handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41DAD0(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1182,7 +1165,6 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
}
void Klayman::sub41CAC0(int16 x) {
- //debug("Klayman::sub41CAC0(%d)", x);
int16 xdiff = ABS(x - _x);
if (x == _x) {
_x4 = x;
@@ -1272,7 +1254,6 @@ void Klayman::spriteUpdate41F780() {
}
uint32 Klayman::handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41DF10(%04X)", messageNum);
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1318,7 +1299,6 @@ void Klayman::sub4208F0() {
}
uint32 Klayman::handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("Klayman::handleMessage41EEF0(%04X)", messageNum);
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2039,7 +2019,6 @@ KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
- //debug("KmScene1001::xHandleMessage() messageNum = %04X", messageNum);
switch (messageNum) {
case 0x4001:
case 0x4800:
@@ -2125,7 +2104,6 @@ void KmScene1001::sub44FA50() {
}
uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
- //debug("KmScene1001::handleMessage44FA00(%04X)", messageNum);
uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2160,8 +2138,6 @@ void KmScene1002::xUpdate() {
}
uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
- //ok
- //debug("KmScene1002::xHandleMessage(%04X)", messageNum);
switch (messageNum) {
case 0x2001:
setCallback2(AnimationCallback(&KmScene1002::sub449E90));
@@ -2263,7 +2239,6 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene1002::update4497D0() {
- //debug("KmScene1002::update4497D0()");
Klayman::update();
if (_counter1 != 0 && (--_counter1 == 0)) {
_surface->setVisible(true);
@@ -2272,7 +2247,6 @@ void KmScene1002::update4497D0() {
}
uint32 KmScene1002::handleMessage449800(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2299,7 +2273,6 @@ uint32 KmScene1002::handleMessage449800(int messageNum, const MessageParam ¶
}
uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
switch (messageNum) {
case 0x4811:
_soundResource1.play(0x5252A0E4);
@@ -2323,7 +2296,6 @@ uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam ¶
}
uint32 KmScene1002::handleMessage449990(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2376,7 +2348,6 @@ uint32 KmScene1002::handleMessage449A30(int messageNum, const MessageParam ¶
}
uint32 KmScene1002::handleMessage449BA0(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2395,7 +2366,6 @@ uint32 KmScene1002::handleMessage449BA0(int messageNum, const MessageParam ¶
}
uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
@@ -2420,7 +2390,6 @@ uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶
}
uint32 KmScene1002::handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender) {
- //ok
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2433,10 +2402,8 @@ uint32 KmScene1002::handleMessage449D60(int messageNum, const MessageParam ¶
}
void KmScene1002::spriteUpdate449DC0() {
- //debug("KmScene1002::spriteUpdate449DC0()");
AnimatedSprite::updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
- //debug("$$$ hitRect->type = %04X", hitRect->type);
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
processDelta();
@@ -2446,7 +2413,6 @@ void KmScene1002::spriteUpdate449DC0() {
}
void KmScene1002::sub449E20() {
- //debug("KmScene1002::sub449E20()");
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub449E20))) {
_status2 = 2;
_flagE5 = false;
@@ -2460,7 +2426,6 @@ void KmScene1002::sub449E20() {
}
void KmScene1002::sub449E90() {
- //debug("KmScene1002::sub449E90()");
_soundResource1.play(0x56548280);
_status2 = 0;
_flagE5 = false;
@@ -2472,8 +2437,6 @@ void KmScene1002::sub449E90() {
}
void KmScene1002::sub449EF0() {
- //ok
- //debug("KmScene1002::sub449EF0()");
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
@@ -2491,8 +2454,6 @@ void KmScene1002::sub449EF0() {
}
void KmScene1002::sub449F70() {
- //ok
- //debug("KmScene1002::sub449F70()");
_parentScene->sendMessage(0x1024, 1, this);
_soundResource1.play(0x41648271);
_status2 = 1;
@@ -2511,8 +2472,6 @@ void KmScene1002::sub449F70() {
}
void KmScene1002::sub44A050() {
- //ok
- //debug("KmScene1002::sub44A050()");
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
@@ -2526,8 +2485,6 @@ void KmScene1002::sub44A050() {
}
void KmScene1002::sub44A0D0() {
- //ok
- //debug("KmScene1002::sub44A0D0()");
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
@@ -2541,8 +2498,6 @@ void KmScene1002::sub44A0D0() {
}
void KmScene1002::sub44A150() {
- //ok
- //debug("KmScene1002::sub44A150()");
_parentScene->sendMessage(0x1024, 1, this);
_soundResource1.play(0x41648271);
_status2 = 1;
@@ -2561,15 +2516,11 @@ void KmScene1002::sub44A150() {
}
void KmScene1002::sub44A230() {
- //ok
- //debug("KmScene1002::sub44A230()");
setDoDeltaX(2);
sub41FC80();
}
void KmScene1002::sub44A250() {
- //ok
- //debug("KmScene1002::sub44A250()");
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A250))) {
_parentScene->sendMessage(0x1024, 3, this);
_status2 = 2;
@@ -2583,8 +2534,6 @@ void KmScene1002::sub44A250() {
}
void KmScene1002::sub44A2C0() {
- //ok
- //debug("KmScene1002::sub44A2C0()");
if (_attachedSprite) {
_x = ((Sprite*)_attachedSprite)->getX();
_attachedSprite->sendMessage(0x4807, 0, this);
@@ -2600,8 +2549,6 @@ void KmScene1002::sub44A2C0() {
}
void KmScene1002::sub44A330() {
- //ok
- //debug("KmScene1002::sub44A330()");
_status2 = 2;
_flagE5 = true;
setDoDeltaX(0);
@@ -2612,8 +2559,6 @@ void KmScene1002::sub44A330() {
}
void KmScene1002::sub44A370() {
- //ok
- //debug("KmScene1002::sub44A370()");
_status2 = 1;
_flagE5 = false;
setFileHash(0x35AA8059, 0, -1);
@@ -2624,13 +2569,10 @@ void KmScene1002::sub44A370() {
}
void KmScene1002::sub44A3C0() {
- //debug("KmScene1002::sub44A3C0()");
_parentScene->sendMessage(0x1024, 1, this);
}
void KmScene1002::sub44A3E0() {
- //ok
- //debug("KmScene1002::sub44A3E0()");
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A3E0))) {
_status2 = 2;
_flagE4 = false;
@@ -2645,8 +2587,6 @@ void KmScene1002::sub44A3E0() {
}
void KmScene1002::sub44A460() {
- //ok
- //debug("KmScene1002::sub44A460()");
_flagE4 = false;
_flagE5 = true;
setFileHash2(0x5C01A870, 0x01084280, 0);
@@ -4000,7 +3940,145 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene2242::sub444D20() {
- int16 frameIndex = (int16)getGlobalVar(0x18288913) + 1;
+ int16 frameIndex = (int16)getGlobalVar(0x18288913);
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setFileHash(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetAnimationCallback3(&Klayman::sub41FA40);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+}
+
+KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+void KmHallOfRecords::xUpdate() {
+ setGlobalVar(0x18288913, _frameIndex);
+}
+
+uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&KmHallOfRecords::sub43B130));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x4837:
+ sub41CE70();
+ break;
+ }
+ return 0;
+}
+
+void KmHallOfRecords::sub43B130() {
+ int16 frameIndex = (int16)getGlobalVar(0x18288913);
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _flagE1 = true;
+ _flagE5 = true;
+ setFileHash(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetAnimationCallback3(&Klayman::sub41FA40);
+ setCallback1(AnimationCallback(&Klayman::sub41FB30));
+}
+
+KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+void KmScene2247::xUpdate() {
+ setGlobalVar(0x18288913, _frameIndex);
+}
+
+uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&KmScene2247::sub453520));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x4837:
+ sub41CE70();
+ break;
+ }
+ return 0;
+}
+
+void KmScene2247::sub453520() {
+ int16 frameIndex = (int16)getGlobalVar(0x18288913);
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a5abc0f..12862e3 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -432,6 +432,24 @@ protected:
void sub444D20();
};
+class KmHallOfRecords : public Klayman {
+public:
+ KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ void xUpdate();
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub43B130();
+};
+
+class KmScene2247 : public Klayman {
+public:
+ KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ void xUpdate();
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub453520();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 515e4bd..fe6f36c 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -254,99 +254,195 @@ void Module2200::createScene2209(int which) {
}
void Module2200::createScene2210(int which) {
+ _vm->gameState().sceneNum = 9;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7180);
+ SetUpdateHandler(&Module2200::updateScene2210);
}
void Module2200::createScene2211(int which) {
+ _vm->gameState().sceneNum = 10;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7198);
+ SetUpdateHandler(&Module2200::updateScene2211);
}
void Module2200::createScene2212(int which) {
+ _vm->gameState().sceneNum = 11;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71B0);
+ SetUpdateHandler(&Module2200::updateScene2212);
}
void Module2200::createScene2213(int which) {
+ _vm->gameState().sceneNum = 12;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71C8);
+ SetUpdateHandler(&Module2200::updateScene2213);
}
-
+
void Module2200::createScene2214(int which) {
+ _vm->gameState().sceneNum = 13;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71E0);
+ SetUpdateHandler(&Module2200::updateScene2214);
}
void Module2200::createScene2215(int which) {
+ _vm->gameState().sceneNum = 14;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71F8);
+ SetUpdateHandler(&Module2200::updateScene2215);
}
void Module2200::createScene2216(int which) {
+ _vm->gameState().sceneNum = 15;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7210);
+ SetUpdateHandler(&Module2200::updateScene2216);
}
void Module2200::createScene2217(int which) {
+ _vm->gameState().sceneNum = 16;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7228);
+ SetUpdateHandler(&Module2200::updateScene2217);
}
void Module2200::createScene2218(int which) {
+ _vm->gameState().sceneNum = 17;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7240);
+ SetUpdateHandler(&Module2200::updateScene2218);
}
void Module2200::createScene2219(int which) {
+ _vm->gameState().sceneNum = 18;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7258);
+ SetUpdateHandler(&Module2200::updateScene2219);
}
void Module2200::createScene2220(int which) {
+ _vm->gameState().sceneNum = 19;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7270);
+ SetUpdateHandler(&Module2200::updateScene2220);
}
void Module2200::createScene2221(int which) {
+ _vm->gameState().sceneNum = 20;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7288);
+ SetUpdateHandler(&Module2200::updateScene2221);
}
void Module2200::createScene2222(int which) {
+ _vm->gameState().sceneNum = 21;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72A0);
+ SetUpdateHandler(&Module2200::updateScene2222);
}
void Module2200::createScene2223(int which) {
+ _vm->gameState().sceneNum = 22;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72B8);
+ SetUpdateHandler(&Module2200::updateScene2223);
}
void Module2200::createScene2224(int which) {
+ _vm->gameState().sceneNum = 23;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72D0);
+ SetUpdateHandler(&Module2200::updateScene2224);
}
void Module2200::createScene2225(int which) {
+ _vm->gameState().sceneNum = 24;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72E8);
+ SetUpdateHandler(&Module2200::updateScene2225);
}
void Module2200::createScene2226(int which) {
+ _vm->gameState().sceneNum = 25;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7300);
+ SetUpdateHandler(&Module2200::updateScene2226);
}
void Module2200::createScene2227(int which) {
+ _vm->gameState().sceneNum = 26;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7318);
+ SetUpdateHandler(&Module2200::updateScene2227);
}
void Module2200::createScene2228(int which) {
+ _vm->gameState().sceneNum = 27;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7330);
+ SetUpdateHandler(&Module2200::updateScene2228);
}
void Module2200::createScene2229(int which) {
+ _vm->gameState().sceneNum = 28;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7348);
+ SetUpdateHandler(&Module2200::updateScene2229);
}
void Module2200::createScene2230(int which) {
+ _vm->gameState().sceneNum = 29;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7360);
+ SetUpdateHandler(&Module2200::updateScene2230);
}
void Module2200::createScene2231(int which) {
+ _vm->gameState().sceneNum = 30;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7378);
+ SetUpdateHandler(&Module2200::updateScene2231);
}
void Module2200::createScene2232(int which) {
+ _vm->gameState().sceneNum = 31;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7390);
+ SetUpdateHandler(&Module2200::updateScene2232);
}
void Module2200::createScene2233(int which) {
+ _vm->gameState().sceneNum = 32;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73A8);
+ SetUpdateHandler(&Module2200::updateScene2233);
}
void Module2200::createScene2234(int which) {
+ _vm->gameState().sceneNum = 33;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73C0);
+ SetUpdateHandler(&Module2200::updateScene2234);
}
void Module2200::createScene2235(int which) {
+ _vm->gameState().sceneNum = 34;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73D8);
+ SetUpdateHandler(&Module2200::updateScene2235);
}
void Module2200::createScene2236(int which) {
+ _vm->gameState().sceneNum = 35;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73F0);
+ SetUpdateHandler(&Module2200::updateScene2236);
}
void Module2200::createScene2237(int which) {
+ _vm->gameState().sceneNum = 36;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7408);
+ SetUpdateHandler(&Module2200::updateScene2237);
}
void Module2200::createScene2238(int which) {
+ _vm->gameState().sceneNum = 37;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7420);
+ SetUpdateHandler(&Module2200::updateScene2238);
}
void Module2200::createScene2239(int which) {
+ _vm->gameState().sceneNum = 38;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7438);
+ SetUpdateHandler(&Module2200::updateScene2239);
}
void Module2200::createScene2240(int which) {
+ _vm->gameState().sceneNum = 39;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7450);
+ SetUpdateHandler(&Module2200::updateScene2240);
}
void Module2200::createScene2241(int which) {
+ _vm->gameState().sceneNum = 40;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7468);
+ SetUpdateHandler(&Module2200::updateScene2241);
}
void Module2200::createScene2242(int which) {
@@ -356,18 +452,33 @@ void Module2200::createScene2242(int which) {
}
void Module2200::createScene2243(int which) {
+ _vm->gameState().sceneNum = 42;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7480);
+ SetUpdateHandler(&Module2200::updateScene2243);
}
void Module2200::createScene2244(int which) {
+ _vm->gameState().sceneNum = 43;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7498);
+ SetUpdateHandler(&Module2200::updateScene2244);
}
void Module2200::createScene2245(int which) {
+ _vm->gameState().sceneNum = 44;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74B0);
+ SetUpdateHandler(&Module2200::updateScene2245);
}
void Module2200::createScene2246(int which) {
+ _vm->gameState().sceneNum = 45;
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74C8);
+ SetUpdateHandler(&Module2200::updateScene2246);
}
void Module2200::createScene2247(int which) {
+ _vm->gameState().sceneNum = 46;
+ _childObject = new Scene2247(_vm, this, which);
+ SetUpdateHandler(&Module2200::updateScene2247);
}
void Module2200::createScene2248(int which) {
@@ -420,14 +531,12 @@ void Module2200::updateScene2203() {
_childObject = NULL;
if (_field20 == 1) {
createScene2205(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createScene2204(0);
- _childObject->handleUpdate();
} else {
createScene2201(1);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
@@ -449,14 +558,12 @@ void Module2200::updateScene2205() {
_childObject = NULL;
if (_field20 == 1) {
createScene2206(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createScene2205(2);
- _childObject->handleUpdate();
} else {
createScene2203(1);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
@@ -468,17 +575,14 @@ void Module2200::updateScene2206() {
_childObject = NULL;
if (_field20 == 1) {
createScene2247(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createScene2207(0);
- _childObject->handleUpdate();
} else if (_field20 == 3) {
createScene2209(0);
- _childObject->handleUpdate();
} else {
createScene2205(1);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
@@ -499,8 +603,123 @@ void Module2200::updateScene2208() {
_done = false;
delete _childObject;
_childObject = NULL;
- // TODO
- createScene2206(2);
+ // This is madness!
+ switch (_vm->gameState().which) {
+ case 4:
+ createScene2205(2);
+ break;
+ case 9:
+ createScene2210(2);
+ break;
+ case 10:
+ createScene2211(2);
+ break;
+ case 11:
+ createScene2212(2);
+ break;
+ case 12:
+ createScene2213(2);
+ break;
+ case 13:
+ createScene2214(2);
+ break;
+ case 14:
+ createScene2215(2);
+ break;
+ case 15:
+ createScene2216(2);
+ break;
+ case 16:
+ createScene2217(2);
+ break;
+ case 17:
+ createScene2218(2);
+ break;
+ case 18:
+ createScene2219(2);
+ break;
+ case 19:
+ createScene2220(2);
+ break;
+ case 20:
+ createScene2221(2);
+ break;
+ case 21:
+ createScene2222(2);
+ break;
+ case 22:
+ createScene2223(2);
+ break;
+ case 23:
+ createScene2224(2);
+ break;
+ case 24:
+ createScene2225(2);
+ break;
+ case 25:
+ createScene2226(2);
+ break;
+ case 26:
+ createScene2227(2);
+ break;
+ case 27:
+ createScene2228(2);
+ break;
+ case 28:
+ createScene2229(2);
+ break;
+ case 29:
+ createScene2230(2);
+ break;
+ case 30:
+ createScene2231(2);
+ break;
+ case 31:
+ createScene2232(2);
+ break;
+ case 32:
+ createScene2233(2);
+ break;
+ case 33:
+ createScene2234(2);
+ break;
+ case 34:
+ createScene2235(2);
+ break;
+ case 35:
+ createScene2236(2);
+ break;
+ case 36:
+ createScene2237(2);
+ break;
+ case 37:
+ createScene2238(2);
+ break;
+ case 38:
+ createScene2239(2);
+ break;
+ case 39:
+ createScene2240(2);
+ break;
+ case 40:
+ createScene2241(2);
+ break;
+ case 41:
+ createScene2242(2);
+ break;
+ case 42:
+ createScene2243(2);
+ break;
+ case 43:
+ createScene2244(2);
+ break;
+ case 44:
+ createScene2245(2);
+ break;
+ case 46:
+ createScene2247(2);
+ break;
+ }
_childObject->handleUpdate();
}
}
@@ -517,99 +736,547 @@ void Module2200::updateScene2209() {
}
void Module2200::updateScene2210() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2211(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2247(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2211() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2212(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2210(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2212() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2213(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2211(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2213() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2214(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2212(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2214() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2215(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2213(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2215() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2216(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2214(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2216() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2217(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2215(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2217() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2218(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2216(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2218() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2219(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2217(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2219() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2220(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2218(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2220() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2221(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2219(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2221() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2222(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2220(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2222() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2223(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2221(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2223() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2224(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2222(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2224() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2225(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2223(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2225() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2226(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2224(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2226() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2227(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2225(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2227() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2228(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2226(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2228() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2229(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2227(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2229() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2230(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2228(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2230() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2231(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2229(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2231() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2232(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2230(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2232() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2233(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2231(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2233() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2234(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2232(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2234() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2235(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2233(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2235() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2243(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2234(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2236() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2237(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2246(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2237() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2238(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2236(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2238() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2239(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2237(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2239() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2240(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2238(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2240() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2241(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2239(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2241() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2242(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2240(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2242() {
@@ -632,18 +1299,88 @@ void Module2200::updateScene2242() {
}
void Module2200::updateScene2243() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2244(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2235(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2244() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2245(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2243(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2245() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2246(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2244(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2246() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2236(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2245(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2247() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene2210(0);
+ } else if (_field20 == 2) {
+ createScene2208(0);
+ } else {
+ createScene2206(1);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module2200::updateScene2248() {
@@ -1245,7 +1982,7 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2002:
_isTileMoving = false;
_doneMovingTileSprite = (Sprite*)sender;
- if (param.asInteger() >= 0 && param.asInteger() <= 2) {
+ if (param.asInteger() <= 2) {
_surfacePriority = 100;
} else if (param.asInteger() >= 3 && param.asInteger() <= 5) {
_surfacePriority = 300;
@@ -1318,7 +2055,7 @@ static const uint32 kAsScene2203DoorFileHashes[] = {
0x1A488110
};
-AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, int index)
+AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint index)
: AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene),
_index(index) {
@@ -2101,7 +2838,7 @@ void AsScene2207Elevator::moveToY(int16 y) {
}
if (_destPointIndex != _pointIndex) {
- if (_destPointIndex == 0 || _destPointIndex == _pointArray->size() - 1) {
+ if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1) {
_destPointIndexDelta = 0;
} else if (_destPointIndex < _pointIndex) {
_destPointIndexDelta = -2;
@@ -2116,12 +2853,73 @@ void AsScene2207Elevator::moveToY(int16 y) {
}
-Class500::Class500(NeverhoodEngine *vm, Scene *parentScene)
+AsScene2207Lever::AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207Lever::handleMessage);
+ createSurface(1010, 71, 73);
+ setDoDeltaX(doDeltaX);
+ setFileHash(0x80880090, 0, -1);
+ _newHashListIndex = 0;
+ _x = x;
+ _y = y;
+}
+
+uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x3002:
+ removeCallbacks();
+ setFileHash1();
+ break;
+ case 0x4807:
+ stLeverUp();
+ break;
+ case 0x480F:
+ stLeverDown();
+ break;
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 990, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1010, this);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2207Lever::stLeverDown() {
+ setFileHash(0x80880090, 1, -1);
+ setCallback1(AnimationCallback(&AsScene2207Lever::stLeverDownEvent));
+ _soundResource.play(0x40581882);
+}
+
+void AsScene2207Lever::stLeverDownEvent() {
+ _parentScene->sendMessage(0x480F, 0, this);
+}
+
+void AsScene2207Lever::stLeverUp() {
+ setFileHash(0x80880090, 6, -1);
+ setCallback1(AnimationCallback(&AsScene2207Lever::stLeverUpEvent));
+ _playBackwards = true;
+ _soundResource.play(0x40581882);
+}
+
+void AsScene2207Lever::stLeverUpEvent() {
+ _parentScene->sendMessage(0x4807, 0, this);
+}
+
+AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1200), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _soundResource4(vm), _flag1(true) {
+ _soundResource3(vm), _soundResource4(vm), _idle(true) {
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class500::handleMessage);
+ SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);
createSurface1(0xCCFD6090, 100);
_x = 309;
_y = 320;
@@ -2132,15 +2930,15 @@ Class500::Class500(NeverhoodEngine *vm, Scene *parentScene)
_soundResource4.load(0xD4226080);
}
-Class500::~Class500() {
+AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() {
// TODO Sound1ChList_sub_407AF0(0x80D00820);
}
-uint32 Class500::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (!_flag1) {
+ if (!_idle) {
if (param.asInteger() == 0x3423093) {
// TODO Sound1ChList_addSoundResource(0x80D00820, 0x12121943, true);
// TODO Sound1ChList_playLooping(0x12121943);
@@ -2162,10 +2960,10 @@ uint32 Class500::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
break;
case 0x2006:
- sub441D50();
+ stStartAnimation();
break;
case 0x2007:
- sub441D90();
+ stStopAnimation();
break;
case 0x3002:
removeCallbacks();
@@ -2174,36 +2972,36 @@ uint32 Class500::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class500::sub441D50() {
- if (!_flag1) {
+void AsScene2207WallRobotAnimation::stStartAnimation() {
+ if (!_idle) {
SetAnimationCallback3(NULL);
} else {
setFileHash(0xCCFD6090, 0, -1);
- _flag1 = false;
+ _idle = false;
_surface->setVisible(true);
}
}
-void Class500::sub441D90() {
- SetAnimationCallback3(&Class500::sub441DA0);
+void AsScene2207WallRobotAnimation::stStopAnimation() {
+ SetAnimationCallback3(&AsScene2207WallRobotAnimation::cbStopAnimation);
}
-void Class500::sub441DA0() {
+void AsScene2207WallRobotAnimation::cbStopAnimation() {
setFileHash1();
_soundResource1.stop();
_soundResource2.stop();
_soundResource3.stop();
_soundResource4.stop();
// TODO Sound1ChList_deleteSoundByHash(0x12121943);
- _flag1 = true;
+ _idle = true;
_surface->setVisible(false);
}
-Class501::Class501(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200), _flag1(true) {
+AsScene2207WallCannonAnimation::AsScene2207WallCannonAnimation(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _idle(true) {
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class501::handleMessage);
+ SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage);
createSurface1(0x8CAA0099, 100);
_x = 309;
_y = 320;
@@ -2211,14 +3009,14 @@ Class501::Class501(NeverhoodEngine *vm)
_newHashListIndex = 0;
}
-uint32 Class501::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2006:
- sub441FA0();
+ stStartAnimation();
break;
case 0x2007:
- sub441FE0();
+ stStopAnimation();
break;
case 0x3002:
removeCallbacks();
@@ -2227,27 +3025,27 @@ uint32 Class501::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class501::sub441FA0() {
- if (!_flag1) {
+void AsScene2207WallCannonAnimation::stStartAnimation() {
+ if (!_idle) {
SetAnimationCallback3(NULL);
} else {
_surface->setVisible(true);
setFileHash(0x8CAA0099, 0, -1);
- _flag1 = false;
+ _idle = false;
}
}
-void Class501::sub441FE0() {
- SetAnimationCallback3(&Class501::sub441FF0);
+void AsScene2207WallCannonAnimation::stStopAnimation() {
+ SetAnimationCallback3(&AsScene2207WallCannonAnimation::cbStopAnimation);
}
-void Class501::sub441FF0() {
+void AsScene2207WallCannonAnimation::cbStopAnimation() {
setFileHash1();
_surface->setVisible(false);
- _flag1 = true;
+ _idle = true;
}
-Class597::Class597(NeverhoodEngine *vm, uint32 fileHash, int index)
+SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int index)
: StaticSprite(vm, fileHash, 100) {
_x = 330;
@@ -2257,13 +3055,13 @@ Class597::Class597(NeverhoodEngine *vm, uint32 fileHash, int index)
Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
- _flag1(true), _elevatorSurfacePriority(0) {
-
- _vm->gameModule()->initScene3009Vars();
+ _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
//DEBUG
setGlobalVar(0x4D080E54, 1);
+ _vm->gameModule()->initScene3009Vars();
+
if (!getSubVar(0x40050052, 0x88460852))
setSubVar(0x40050052, 0x88460852, 1);
@@ -2293,21 +3091,21 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = addSprite(new AsScene1201Tape(_vm, this, 4, 1100, 277, 428, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
-// _class487 = addSprite(new Class487(_vm, this, 527, 333, 0));
-// _vm->_collisionMan->addSprite(_class487);
+ _asLever = addSprite(new AsScene2207Lever(_vm, this, 527, 333, 0));
+ _vm->_collisionMan->addSprite(_asLever);
- _class500 = addSprite(new Class500(_vm, this));
- _class501 = addSprite(new Class501(_vm));
+ _asWallRobotAnimation = addSprite(new AsScene2207WallRobotAnimation(_vm, this));
+ _asWallCannonAnimation = addSprite(new AsScene2207WallCannonAnimation(_vm));
- _class500->getSurface()->setVisible(false);
- _class501->getSurface()->setVisible(false);
+ _asWallRobotAnimation->getSurface()->setVisible(false);
+ _asWallCannonAnimation->getSurface()->setVisible(false);
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x2C4061C4, 100, 0));
-// _class487->getSurface()->getClipRect().x1 = 0;
-// _class487->getSurface()->getClipRect().y1 = 0;
-// _class487->getSurface()->getClipRect().x2 = _ssMaskPart3->getSurface()->getDrawRect().x + _ssMaskPart3->getSurface()->getDrawRect().width;
-// _class487->getSurface()->getClipRect().y2 = 480;
+ _asLever->getSurface()->getClipRect().x1 = 0;
+ _asLever->getSurface()->getClipRect().y1 = 0;
+ _asLever->getSurface()->getClipRect().x2 = _ssMaskPart3->getSurface()->getDrawRect().x + _ssMaskPart3->getSurface()->getDrawRect().width;
+ _asLever->getSurface()->getClipRect().y2 = 480;
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
@@ -2330,14 +3128,14 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssMaskPart1 = addSprite(new StaticSprite(_vm, 0x980E46A4, 1200));
- addSprite(new Class597(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0));
- addSprite(new Class597(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1));
- addSprite(new Class597(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2));
+ addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0));
+ addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1));
+ addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2));
_asTape = NULL;
- _class487 = NULL;
- _class500 = NULL;
- _class501 = NULL;
+ _asLever = NULL;
+ _asWallRobotAnimation = NULL;
+ _asWallCannonAnimation = NULL;
_ssButton = NULL;
_klayman->getSurface()->getClipRect().x1 = 0;
@@ -2371,7 +3169,7 @@ void Scene2207::update() {
_elevatorSurfacePriority = 0;
}
if (_klayman->getY() == 423) {
- _flag1 = _klayman->getX() > 459 && _klayman->getX() < 525;
+ _klaymanAtElevator = _klayman->getX() > 459 && _klayman->getX() < 525;
}
}
@@ -2380,7 +3178,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0014F275) {
- if (_flag1) {
+ if (_klaymanAtElevator) {
_asElevator->sendMessage(0x2000, _mouseClickPos.y, this);
_klayman->sendEntityMessage(0x1014, _asElevator, this);
_klayman->sendMessage(0x2001, 0, this);
@@ -2388,7 +3186,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageList402220();
}
} else if (param.asInteger() == 0x34569073) {
- if (_flag1) {
+ if (_klaymanAtElevator) {
_messageListFlag1 = true;
_asElevator->sendMessage(0x2000, 0, this);
_klayman->sendEntityMessage(0x1014, _asElevator, this);
@@ -2397,7 +3195,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageList402220();
}
} else if (param.asInteger() == 0x4054C877) {
- if (_flag1) {
+ if (_klaymanAtElevator) {
_asElevator->sendMessage(0x2000, 480, this);
_klayman->sendEntityMessage(0x1014, _asElevator, this);
_klayman->sendMessage(0x2001, 0, this);
@@ -2425,8 +3223,8 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
_messageListFlag1 = false;
break;
case 0x4807:
- _class500->sendMessage(0x2007, 0, this);
- _class501->sendMessage(0x2007, 0, this);
+ _asWallRobotAnimation->sendMessage(0x2007, 0, this);
+ _asWallCannonAnimation->sendMessage(0x2007, 0, this);
break;
case 0x480B:
if (sender == _ssButton) {
@@ -2440,10 +3238,10 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480F:
- _class500->sendMessage(0x2006, 0, this);
- _class501->sendMessage(0x2006, 0, this);
- _class500->getSurface()->setVisible(true);
- _class501->getSurface()->setVisible(true);
+ _asWallRobotAnimation->sendMessage(0x2006, 0, this);
+ _asWallCannonAnimation->sendMessage(0x2006, 0, this);
+ _asWallRobotAnimation->getSurface()->setVisible(true);
+ _asWallCannonAnimation->getSurface()->setVisible(true);
break;
case 0x4826:
if (sender == _asTape) {
@@ -2451,7 +3249,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
_klayman->sendEntityMessage(0x1014, _asTape, this);
setMessageList(0x004B3958);
}
- } else if (_flag1) {
+ } else if (_klaymanAtElevator) {
SetMessageHandler(&Scene2207::handleMessage2);
_asElevator->sendMessage(0x2000, 347, this);
_klayman->sendEntityMessage(0x1014, _asElevator, this);
@@ -2471,7 +3269,7 @@ uint32 Scene2207::handleMessage2(int messageNum, const MessageParam ¶m, Enti
case 0x2004:
SetMessageHandler(&Scene2207::handleMessage);
_klayman->sendMessage(0x2005, 0, this);
-// _klayman->sendEntityMessage(0x1014, _class487, this);
+ _klayman->sendEntityMessage(0x1014, _asLever, this);
setMessageList(0x004B3920);
setRectList(0x004B3948);
break;
@@ -2653,7 +3451,7 @@ void Scene2208::drawRow(int16 rowIndex) {
sourceRect.width = 640;
sourceRect.height = 48;
_background->getSurface()->copyFrom(_topBackgroundSurface->getSurface(), 0, y, sourceRect, true);
- } else if (rowIndex >= _maxRowIndex - 5) {
+ } else if (rowIndex > _maxRowIndex - 5) {
sourceRect.x = 0;
sourceRect.y = (rowIndex - _maxRowIndex + 4) * 48;
sourceRect.width = 640;
@@ -2666,7 +3464,7 @@ void Scene2208::drawRow(int16 rowIndex) {
sourceRect.width = 640;
sourceRect.height = 48;
_background->getSurface()->copyFrom(_backgroundSurface->getSurface(), 0, y, sourceRect, true);
- if (rowIndex < _strings.size()) {
+ if (rowIndex < (int)_strings.size()) {
const char *text = _strings[rowIndex];
// TODO/CHECKME: Use temporary string up to '{' character (see above)
_fontSurface->drawString(_background->getSurface(), 95, y, (const byte*)text);
@@ -2764,7 +3562,7 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x800C6694) {
- sub4448D0();
+ readClickedColumn();
}
break;
case 0x4826:
@@ -2777,7 +3575,7 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-void Scene2242::sub4448D0() {
+void Scene2242::readClickedColumn() {
int index;
if (_mouseClickPos.x < 108) {
setGlobalVar(0xC8C28808, 0x04290188);
@@ -2790,7 +3588,7 @@ void Scene2242::sub4448D0() {
setGlobalVar(0x4CE79018, calcHash("bgRecPanelStart2"));
index = 1;
}
- setGlobalVar(0x49C40058, (_mouseClickPos.x - 100) / 7);
+ setGlobalVar(0x49C40058, (_mouseClickPos.y - 100) / 7);
if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) {
setMessageList2(kScene2242MessageListIds1[index]);
} else {
@@ -2798,4 +3596,213 @@ void Scene2242::sub4448D0() {
}
}
+static const int16 kHallOfRecordsKlaymanXPos[] = {
+ 68,
+ 157,
+ 246,
+ 335,
+ 424,
+ 513,
+ 602
+};
+
+static const uint32 kHallOfRecordsSceneMessageListIds2[] = {
+ 0x004B2978,
+ 0x004B2998,
+ 0x004B29B8,
+ 0x004B29D8,
+ 0x004B29F8,
+ 0x004B2A18,
+ 0x004B2A38
+};
+
+static const uint32 kHallOfRecordsSceneMessageListIds1[] = {
+ 0x004B2A58,
+ 0x004B2A80,
+ 0x004B2AA8,
+ 0x004B2AD0,
+ 0x004B2AF8,
+ 0x004B2B20,
+ 0x004B2B48
+};
+
+HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id)
+ : Scene(vm, parentModule, true) {
+
+ _sceneInfo140 = _vm->_staticData->getSceneInfo140Item(sceneInfo140Id);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&HallOfRecordsScene::handleMessage);
+ SetUpdateHandler(&Scene::update);
+
+ if (!getGlobalVar(0x4D080E54) && _sceneInfo140->bgFilename2) {
+ setRectList(0x004B2BF8);
+ _background = addBackground(new DirtyBackground(_vm, _sceneInfo140->bgFilename2, 0, 0));
+ _palette = new Palette(_vm, _sceneInfo140->bgFilename2);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL));
+ } else {
+ setRectList(0x004B2BB8);
+ _background = addBackground(new DirtyBackground(_vm, _sceneInfo140->bgFilename1, 0, 0));
+ _palette = new Palette(_vm, _sceneInfo140->bgFilename1);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x63A40028, NULL));
+ }
+
+ if (which < 0) {
+ _klayman = new KmHallOfRecords(_vm, this, 200, 430);
+ setMessageList(0x004B2900);
+ } else if (which == 1) {
+ _klayman = new KmHallOfRecords(_vm, this, 640, 430);
+ setMessageList(0x004B2910);
+ } else if (which == 2) {
+ _klayman = new KmHallOfRecords(_vm, this, kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
+ setMessageList(0x004B2B70);
+ if (getGlobalVar(0xC0418A02))
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmHallOfRecords(_vm, this, 0, 430);
+ setMessageList(0x004B2908);
+ }
+ addSprite(_klayman);
+
+ _klayman->setSoundFlag(true);
+ _klayman->setKlaymanTable2();
+
+}
+
+HallOfRecordsScene::~HallOfRecordsScene() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x800C6694) {
+ readClickedColumn();
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void HallOfRecordsScene::readClickedColumn() {
+ int16 index = (_mouseClickPos.x - 23) / 89;
+ if (index >= _sceneInfo140->count) {
+ setMessageList2(0x004B2920);
+ } else {
+ setGlobalVar(0x48A68852, _sceneInfo140->xPosIndex + index);
+ setGlobalVar(0x49C40058, (_mouseClickPos.y - 100) / 7);
+ setGlobalVar(0xC8C28808, _sceneInfo140->txFilename);
+ if (index == 0 && _sceneInfo140->bgFilename3) {
+ setGlobalVar(0x4CE79018, _sceneInfo140->bgFilename3);
+ } else {
+ setGlobalVar(0x4CE79018, 0);
+ }
+ if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133) {
+ setMessageList2(kHallOfRecordsSceneMessageListIds1[index]);
+ } else {
+ setMessageList2(kHallOfRecordsSceneMessageListIds2[index]);
+ }
+ }
+}
+
+static const int16 kScene2247XPositions[] = {
+ 513,
+ 602
+};
+
+static const uint32 kScene2247MessageListIds2[] = {
+ 0x004B54A0,
+ 0x004B54C0
+};
+
+static const uint32 kScene2247MessageListIds1[] = {
+ 0x004B54E0,
+ 0x004B5508
+};
+
+Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ //DEBUG
+ setGlobalVar(0x4D080E54, 1);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2247::handleMessage);
+ SetUpdateHandler(&Scene::update);
+
+ if (getGlobalVar(0x4D080E54)) {
+ setRectList(0x004B5588);
+ _background = addBackground(new DirtyBackground(_vm, 0x40339414, 0, 0));
+ _palette = new Palette(_vm, 0x40339414);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x3941040B, NULL));
+ } else {
+ setRectList(0x004B55C8);
+ _background = addBackground(new DirtyBackground(_vm, 0x071963E5, 0, 0));
+ _palette = new Palette(_vm, 0x071963E5);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL));
+ }
+
+ if (which < 0) {
+ _klayman = new KmScene2247(_vm, this, 200, 430);
+ setMessageList(0x004B5428);
+ } else if (which == 1) {
+ _klayman = new KmScene2247(_vm, this, 640, 430);
+ setMessageList(0x004B5438);
+ } else if (which == 2) {
+ _klayman = new KmScene2247(_vm, this, kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
+ if (getGlobalVar(0xC0418A02))
+ _klayman->setDoDeltaX(1);
+ setMessageList(0x004B5530);
+ } else {
+ _klayman = new KmScene2247(_vm, this, 0, 430);
+ setMessageList(0x004B5430);
+ }
+ addSprite(_klayman);
+
+ _klayman->setSoundFlag(true);
+
+}
+
+Scene2247::~Scene2247() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ // TODO: Debug stuff
+ case 0x100D:
+ if (param.asInteger() == 0x800C6694) {
+ readClickedColumn();
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2247::readClickedColumn() {
+ int index;
+ if (_mouseClickPos.x < 553) {
+ setGlobalVar(0xC8C28808, 0x0008E486);
+ setGlobalVar(0x4CE79018, calcHash("bgFatherHeader"));
+ index = 0;
+ } else {
+ setGlobalVar(0xC8C28808, 0x03086004);
+ setGlobalVar(0x4CE79018, calcHash("bgQuaterHeader"));
+ index = 1;
+ }
+ setGlobalVar(0x48A68852, 0);
+ setGlobalVar(0x49C40058, (_mouseClickPos.y - 100) / 7);
+ if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133) {
+ setMessageList2(kScene2247MessageListIds1[index]);
+ } else {
+ setMessageList2(kScene2247MessageListIds2[index]);
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index d06f30b..4dfd827 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -259,12 +259,12 @@ protected:
class AsScene2203Door : public AnimatedSprite {
public:
- AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, int index);
+ AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint index);
protected:
Scene *_parentScene;
SoundResource _soundResource;
Sprite *_otherDoor;
- int _index;
+ uint _index;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void openDoor();
void closeDoor();
@@ -371,36 +371,49 @@ protected:
void moveToY(int16 y);
};
-class Class500 : public AnimatedSprite {
+class AsScene2207Lever : public AnimatedSprite {
public:
- Class500(NeverhoodEngine *vm, Scene *parentScene);
- ~Class500();
+ AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stLeverDown();
+ void stLeverDownEvent();
+ void stLeverUp();
+ void stLeverUpEvent();
+};
+
+class AsScene2207WallRobotAnimation : public AnimatedSprite {
+public:
+ AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene);
+ ~AsScene2207WallRobotAnimation();
protected:
SoundResource _soundResource1;
SoundResource _soundResource2;
SoundResource _soundResource3;
SoundResource _soundResource4;
- bool _flag1;
+ bool _idle;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub441D50();
- void sub441D90();
- void sub441DA0();
+ void stStartAnimation();
+ void stStopAnimation();
+ void cbStopAnimation();
};
-class Class501 : public AnimatedSprite {
+class AsScene2207WallCannonAnimation : public AnimatedSprite {
public:
- Class501(NeverhoodEngine *vm);
+ AsScene2207WallCannonAnimation(NeverhoodEngine *vm);
protected:
- bool _flag1;
+ bool _idle;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub441FA0();
- void sub441FE0();
- void sub441FF0();
+ void stStartAnimation();
+ void stStopAnimation();
+ void cbStopAnimation();
};
-class Class597 : public StaticSprite {
+class SsScene2207Symbol : public StaticSprite {
public:
- Class597(NeverhoodEngine *vm, uint32 fileHash, int index);
+ SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int index);
};
class Scene2207 : public Scene {
@@ -414,12 +427,12 @@ protected:
Sprite *_ssMaskPart2;
Sprite *_ssMaskPart3;
Sprite *_asTape;
- Sprite *_class487;
- Sprite *_class500;
- Sprite *_class501;
+ Sprite *_asLever;
+ Sprite *_asWallRobotAnimation;
+ Sprite *_asWallCannonAnimation;
Sprite *_ssButton;
int _elevatorSurfacePriority;
- bool _flag1;
+ bool _klaymanAtElevator;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage2(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -457,7 +470,26 @@ protected:
bool _isKlaymanInLight;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub4448D0();
+ void readClickedColumn();
+};
+
+class HallOfRecordsScene : public Scene {
+public:
+ HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id);
+ ~HallOfRecordsScene();
+protected:
+ SceneInfo140 *_sceneInfo140;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void readClickedColumn();
+};
+
+class Scene2247 : public Scene {
+public:
+ Scene2247(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2247();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void readClickedColumn();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 2a01bc2..8192216 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -234,7 +234,6 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
// TODO queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
break;
case 1: // mouse clicked
- debug("mouse clicked");
_mouseClicked = true;
_mouseClickPos = param.asPoint();
break;
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 42af497..d897d7a 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -125,6 +125,21 @@ void StaticData::load(const char *filename) {
_navigationLists[id] = navigationList;
}
+ // Load SceneInfo140 items
+ uint32 sceneInfo140ItemsCount = fd.readUint32LE();
+ debug("sceneInfo140ItemsCount: %d", sceneInfo140ItemsCount);
+ for (uint32 i = 0; i < sceneInfo140ItemsCount; i++) {
+ SceneInfo140 *sceneInfo140 = new SceneInfo140();
+ uint32 id = fd.readUint32LE();
+ sceneInfo140->bgFilename1 = fd.readUint32LE();
+ sceneInfo140->bgFilename2 = fd.readUint32LE();
+ sceneInfo140->txFilename = fd.readUint32LE();
+ sceneInfo140->bgFilename3 = fd.readUint32LE();
+ sceneInfo140->xPosIndex = fd.readByte();
+ sceneInfo140->count = fd.readByte();
+ _sceneInfo140Items[id] = sceneInfo140;
+ }
+
}
HitRectList *StaticData::getHitRectList(uint32 id) {
@@ -151,4 +166,10 @@ NavigationList *StaticData::getNavigationList(uint32 id) {
return _navigationLists[id];
}
+SceneInfo140 *StaticData::getSceneInfo140Item(uint32 id) {
+ if (!_sceneInfo140Items[id])
+ error("StaticData::getSceneInfo140Item() SceneInfo140 with id %08X not found", id);
+ return _sceneInfo140Items[id];
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index c19c060..2a0cc90 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -68,6 +68,15 @@ struct NavigationItem {
typedef Common::Array<NavigationItem> NavigationList;
+struct SceneInfo140 {
+ uint32 bgFilename1;
+ uint32 bgFilename2;
+ uint32 txFilename;
+ uint32 bgFilename3;
+ byte xPosIndex;
+ byte count;
+};
+
class StaticData {
public:
StaticData();
@@ -77,11 +86,13 @@ public:
RectList *getRectList(uint32 id);
MessageList *getMessageList(uint32 id);
NavigationList *getNavigationList(uint32 id);
+ SceneInfo140 *getSceneInfo140Item(uint32 id);
protected:
Common::HashMap<uint32, HitRectList*> _hitRectLists;
Common::HashMap<uint32, RectList*> _rectLists;
Common::HashMap<uint32, MessageList*> _messageLists;
Common::HashMap<uint32, NavigationList*> _navigationLists;
+ Common::HashMap<uint32, SceneInfo140*> _sceneInfo140Items;
};
} // End of namespace Neverhood
Commit: 5214284271d0ae050e5f33fe66d0fc0b8cbb94af
https://github.com/scummvm/scummvm/commit/5214284271d0ae050e5f33fe66d0fc0b8cbb94af
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1302
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 1efc616..2d11931 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -87,6 +87,7 @@ struct HitRect {
uint16 messageNum;
void load(uint32 offset) {
+ printf("Loading HitRect @ %08X...\n", offset);
byte *item = getData(offset);
x1 = READ_LE_UINT16(item + 0);
y1 = READ_LE_UINT16(item + 2);
@@ -116,6 +117,7 @@ struct MessageItem {
MessageItem(uint16 msgNum, uint32 msgParam) : messageNum(msgNum), messageParam(msgParam) {}
void load(uint32 offset) {
+ printf("Loading MessageItem @ %08X...\n", offset);
byte *item = getData(offset);
messageNum = READ_LE_UINT16(item + 0);
messageParam = READ_LE_UINT32(item + 4);
@@ -138,6 +140,7 @@ struct SubRectItem {
uint32 messageListOffset;
void load(uint32 offset) {
+ printf("Loading SubRectItem @ %08X...\n", offset);
byte *item = getData(offset);
x1 = READ_LE_UINT16(item + 0);
y1 = READ_LE_UINT16(item + 2);
@@ -170,6 +173,7 @@ struct RectItem {
std::vector<SubRectItem> subRectItems;
void load(uint32 offset) {
+ printf("Loading RectItem @ %08X...\n", offset);
byte *item = getData(offset);
uint32 subItemOffset;
x1 = READ_LE_UINT16(item + 0);
@@ -213,6 +217,7 @@ struct NavigationItem {
uint32 mouseCursorFileHash;
void load(uint32 offset) {
+ printf("Loading NavigationItem @ %08X...\n", offset);
byte *item = getData(offset);
fileHash = READ_LE_UINT32(item + 0);
leftSmackerFileHash = READ_LE_UINT32(item + 4);
@@ -240,6 +245,7 @@ struct NavigationItem {
};
struct SceneInfo140Item {
+ uint32 id;
uint32 bgFilename1;
uint32 bgFilename2;
uint32 txFilename;
@@ -249,6 +255,7 @@ struct SceneInfo140Item {
void load(uint32 offset) {
byte *item = getData(offset);
+ id = offset;
// Only save the hashes instead of the full names
bgFilename1 = calcHash(getStringP(READ_LE_UINT32(item + 0)));
bgFilename2 = calcHash(getStringP(READ_LE_UINT32(item + 4)));
@@ -259,6 +266,7 @@ struct SceneInfo140Item {
}
void save(FILE *fd) {
+ writeUint32LE(fd, id);
writeUint32LE(fd, bgFilename1);
writeUint32LE(fd, bgFilename2);
writeUint32LE(fd, txFilename);
@@ -353,6 +361,30 @@ public:
add(MessageItem(0x100D, 0x42845B19));
add(MessageItem(0x4805, 1));
return true;
+ // Scene 1302 rings
+ case 0x004B0888:
+ add(MessageItem(0x4800, 218));
+ add(MessageItem(0x100D, 0x4A845A00));
+ add(MessageItem(0x4805, 1));
+ return true;
+ case 0x004B08A0:
+ add(MessageItem(0x4800, 218 + 32));
+ add(MessageItem(0x100D, 0x43807801));
+ return true;
+ case 0x004B08B0:
+ add(MessageItem(0x4800, 218 + 32 + 32));
+ add(MessageItem(0x100D, 0x46C26A01));
+ add(MessageItem(0x4805, 1));
+ return true;
+ case 0x004B08C8:
+ add(MessageItem(0x4800, 218 + 32 + 32 + 32));
+ add(MessageItem(0x100D, 0x468C7B11));
+ return true;
+ case 0x004B08D8:
+ add(MessageItem(0x4800, 218 + 32 + 32 + 32 + 32));
+ add(MessageItem(0x100D, 0x42845B19));
+ add(MessageItem(0x4805, 4));
+ return true;
}
return false;
}
@@ -360,7 +392,6 @@ public:
};
class NavigationList : public StaticDataList<NavigationItem> {
-
};
template<class LISTCLASS>
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 5f54df9..7f80b8c 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -27,6 +27,8 @@ static const uint32 hitRectListOffsets[] = {
1, 0x004B4138,
// Scene1201
4, 0x004AEBD0,
+ // Scene1302
+ 1, 0x004B0858,
// Scene1705
1, 0x004B69D8,
// Scene2203
@@ -51,6 +53,8 @@ static const uint32 rectListOffsets[] = {
1, 0x004AEDC8,
1, 0x004AEE18,
1, 0x004AED88,
+ // Scene1302
+ 2, 0x004B0A38,
// Scene1401
1, 0x004B6758,
// Scene1402
@@ -78,6 +82,12 @@ static const uint32 rectListOffsets[] = {
// Scene2242
1, 0x004B3DC8,
1, 0x004B3E18,
+ // HallOfRecordsScene
+ 1, 0x004B2BF8,
+ 1, 0x004B2BB8,
+ // Scene2247
+ 1, 0x004B5588,
+ 1, 0x004B55C8,
0, 0
};
@@ -123,6 +133,18 @@ static const uint32 messageListOffsets[] = {
2, 0x004AECD0,
2, 0x004AECE0,
2, 0x004AED38,
+ // Scene1302
+ 4, 0x004B08F0,
+ 3, 0x004B0920,
+ 1, 0x004B0950,
+ 2, 0x004B0940,
+ 1, 0x004B0938,
+ 2, 0x004B0910,
+ 1, 0x004B0968,
+ 2, 0x004B0878,
+ 4, 0x004B0978,
+ 1, 0x004B0870,
+ 1, 0x004B0868,
// Scene1401
1, 0x004B65C8,
1, 0x004B65D0,
@@ -235,10 +257,45 @@ static const uint32 messageListOffsets[] = {
5, 0x004B3D20,
4, 0x004B3CB8,
4, 0x004B3CD8,
+ // HallOfRecordsScene
+ 1, 0x004B2900,
+ 2, 0x004B2910,
+ 1, 0x004B2B70,
+ 1, 0x004B2908,
+ 2, 0x004B2920,
+ 4, 0x004B2978,
+ 4, 0x004B2998,
+ 4, 0x004B29B8,
+ 4, 0x004B29D8,
+ 4, 0x004B29F8,
+ 4, 0x004B2A18,
+ 4, 0x004B2A38,
+ 5, 0x004B2A58,
+ 5, 0x004B2A80,
+ 5, 0x004B2AA8,
+ 5, 0x004B2AD0,
+ 5, 0x004B2AF8,
+ 5, 0x004B2B20,
+ 5, 0x004B2B48,
+ // Scene2247
+ 1, 0x004B5428,
+ 2, 0x004B5438,
+ 1, 0x004B5530,
+ 1, 0x004B5430,
+ 4, 0x004B54A0,
+ 4, 0x004B54C0,
+ 5, 0x004B54E0,
+ 5, 0x004B5508,
0, 0
};
static const uint32 navigationListOffsets[] = {
+ // Module1300
+ 6, 0x004B2718,
+ 2, 0x004B27A8,
+ 2, 0x004B27D8,
+ 2, 0x004B2808,
+ 2, 0x004B2838,
// Module1700
2, 0x004AE8B8,
3, 0x004AE8E8,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index d217943..decb83b 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: d4030b7a9ffc2a907c80948024f3ee369a08c760
https://github.com/scummvm/scummvm/commit/d4030b7a9ffc2a907c80948024f3ee369a08c760
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Start with Module1300 and implement Scene1302
Changed paths:
A engines/neverhood/module1300.cpp
A engines/neverhood/module1300.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 31330f9..f4159f3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -25,6 +25,7 @@
#include "neverhood/graphics.h"
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
+#include "neverhood/module1300.h"
#include "neverhood/module1400.h"
#include "neverhood/module1500.h"
#include "neverhood/module1700.h"
@@ -241,10 +242,14 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule2000(-1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 46;
createModule2200(-1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 1;
+ createModule1300(-1);
+#endif
}
void GameModule::createModule1000(int which) {
@@ -292,6 +297,30 @@ void GameModule::updateModule1200() {
}
}
+void GameModule::createModule1300(int which) {
+ setGlobalVar(0x91080831, 0x0061C090);
+ _childObject = new Module1300(_vm, this, which);
+ SetUpdateHandler(&GameModule::updateModule1300);
+}
+
+void GameModule::updateModule1300() {
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ // TODO _gameState.clear();
+ // TODO GameModule_handleKeyEscape
+ } else {
+ // TODO createModule2900(0);
+ _childObject->handleUpdate();
+ }
+ }
+}
+
void GameModule::createModule1400(int which) {
setGlobalVar(0x91080831, 0x00AD0012);
_childObject = new Module1400(_vm, this, which);
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 9ef1b92..ef199f7 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -55,6 +55,8 @@ protected:
void updateModule1000();
void createModule1200(int which);
void updateModule1200();
+ void createModule1300(int which);
+ void updateModule1300();
void createModule1400(int which);
void updateModule1400();
void createModule1500(int which);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 9122eaf..1b4d6e4 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -13,6 +13,7 @@ MODULE_OBJS = \
module.o \
module1000.o \
module1200.o \
+ module1300.o \
module1400.o \
module1500.o \
module1700.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 3387e2e..5e1ae6f 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1045,7 +1045,7 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- if (!flag) {
+ if (!_flag) {
if (getGlobalVar(0x8306F218)) {
setDoDeltaX(1);
_x = 366;
@@ -1110,7 +1110,7 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
break;
case 0x480B:
setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
- if (_flag) {
+ if (!_flag) {
if (getGlobalVar(0x8306F218)) {
sub448560();
} else {
@@ -1143,7 +1143,6 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
}
break;
case 0x4810:
- debug("trap collision");
sub448780();
break;
case 0x482A:
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
new file mode 100644
index 0000000..7c7beb7
--- /dev/null
+++ b/engines/neverhood/module1300.cpp
@@ -0,0 +1,664 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1300.h"
+#include "neverhood/module1000.h"
+#include "neverhood/diskplayerscene.h"
+#include "neverhood/navigationscene.h"
+#include "neverhood/smackerscene.h"
+
+namespace Neverhood {
+
+Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ debug("Create Module1300(%d)", which);
+
+ // TODO Music18hList_add(0x61C090, 0x203197);
+ // TODO Sound1ChList_addSoundResources(0x61C090, dword_4B2868, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, 0, 50, 600, 20, 150);
+ // TODO Sound1ChList_sub_407C70(0x61C090, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+
+ if (which < 0) {
+ switch (_vm->gameState().sceneNum) {
+ case 1:
+ createScene1302(-1);
+ break;
+ case 2:
+ createScene1303(-1);
+ break;
+ case 3:
+ createScene1304(-1);
+ break;
+ case 4:
+ createScene1305(-1);
+ break;
+ case 5:
+ createScene1306(-1);
+ break;
+ case 6:
+ createScene1307(-1);
+ break;
+ case 7:
+ createScene1308(-1);
+ break;
+ case 8:
+ createScene1309(-1);
+ break;
+ case 9:
+ createScene1310(-1);
+ break;
+ case 10:
+ createScene1311(-1);
+ break;
+ case 11:
+ createScene1312(-1);
+ break;
+ case 12:
+ createScene1313(-1);
+ break;
+ case 13:
+ createScene1314(-1);
+ break;
+ case 14:
+ createScene1315(-1);
+ break;
+ case 15:
+ createScene1316(-1);
+ break;
+ case 16:
+ createScene1317(-1);
+ break;
+ case 17:
+ createScene1318(-1);
+ break;
+ default:
+ createScene1312(0);
+ }
+ } else {
+ switch (which) {
+ case 0:
+ createScene1312(0);
+ break;
+ case 1:
+ createScene1314(0);
+ break;
+ case 2:
+ createScene1315(0);
+ break;
+ case 3:
+ createScene1316(0);
+ break;
+ case 4:
+ createScene1308(0);
+ break;
+ case 5:
+ createScene1306(1);
+ break;
+ case 6:
+ createScene1306(5);
+ break;
+ case 7:
+ createScene1304(0);
+ break;
+ case 8:
+ createScene1302(0);
+ break;
+ case 9:
+ createScene1303(0);
+ break;
+ case 10:
+ createScene1307(0);
+ break;
+ case 11:
+ createScene1305(0);
+ break;
+ default:
+ createScene1313(0);
+ break;
+ }
+ }
+
+}
+
+Module1300::~Module1300() {
+ // TODO Sound1ChList_sub_407A50(0x61C090);
+}
+
+void Module1300::createScene1302(int which) {
+ _vm->gameState().sceneNum = 1;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1302(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1302);
+}
+
+void Module1300::createScene1303(int which) {
+}
+
+void Module1300::createScene1304(int which) {
+}
+
+void Module1300::createScene1305(int which) {
+}
+
+void Module1300::createScene1306(int which) {
+}
+
+void Module1300::createScene1307(int which) {
+}
+
+void Module1300::createScene1308(int which) {
+}
+
+void Module1300::createScene1309(int which) {
+}
+
+void Module1300::createScene1310(int which) {
+}
+
+void Module1300::createScene1311(int which) {
+}
+
+void Module1300::createScene1312(int which) {
+ _vm->gameState().sceneNum = 11;
+ createNavigationScene(0x004B27A8, which);
+ SetUpdateHandler(&Module1300::updateScene1312);
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+}
+
+void Module1300::createScene1313(int which) {
+ _vm->gameState().sceneNum = 12;
+ createNavigationScene(0x004B2718, which);
+ SetUpdateHandler(&Module1300::updateScene1313);
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+}
+
+void Module1300::createScene1314(int which) {
+ _vm->gameState().sceneNum = 13;
+ createNavigationScene(0x004B27D8, which);
+ SetUpdateHandler(&Module1300::updateScene1314);
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+}
+
+void Module1300::createScene1315(int which) {
+ _vm->gameState().sceneNum = 14;
+ createNavigationScene(0x004B2808, which);
+ SetUpdateHandler(&Module1300::updateScene1315);
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+}
+
+void Module1300::createScene1316(int which) {
+ _vm->gameState().sceneNum = 15;
+ createNavigationScene(0x004B2838, which);
+ SetUpdateHandler(&Module1300::updateScene1316);
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+}
+
+void Module1300::createScene1317(int which) {
+}
+
+void Module1300::createScene1318(int which) {
+}
+
+void Module1300::updateScene1302() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 1) {
+ createScene1305(0);
+ } else {
+ createScene1308(1);
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1300::updateScene1303() {
+}
+
+void Module1300::updateScene1304() {
+}
+
+void Module1300::updateScene1305() {
+}
+
+void Module1300::updateScene1306() {
+}
+
+void Module1300::updateScene1307() {
+}
+
+void Module1300::updateScene1308() {
+}
+
+void Module1300::updateScene1309() {
+}
+
+void Module1300::updateScene1310() {
+}
+
+void Module1300::updateScene1311() {
+}
+
+void Module1300::updateScene1312() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1313(0);
+ } else if (_field20 == 1) {
+ createScene1312(1);
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1300::updateScene1313() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ switch (_field20) {
+ case 0:
+ createScene1315(1);
+ break;
+ case 1:
+ createScene1316(1);
+ break;
+ case 3:
+ createScene1312(1);
+ break;
+ case 5:
+ createScene1314(1);
+ break;
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1300::updateScene1314() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1313(2);
+ } else if (_field20 == 1) {
+ createScene1308(0);
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1300::updateScene1315() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1313(3);
+ } else if (_field20 == 1) {
+ createScene1310(-1);
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1300::updateScene1316() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1313(4);
+ } else if (_field20 == 1) {
+ createScene1304(0);
+ }
+ _childObject->handleUpdate();
+ }
+}
+
+void Module1300::updateScene1317() {
+}
+
+void Module1300::updateScene1318() {
+}
+
+AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _parentScene(parentScene) {
+
+ _x = 320;
+ _y = 240;
+ createSurface1(0x88148150, 500);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1302Bridge::handleMessage);
+ if (!getGlobalVar(0x13206309)) {
+ setFileHash(0x88148150, 0, -1);
+ _newHashListIndex = 0;
+ } else {
+ setFileHash(0x88148150, -1, -1);
+ _newHashListIndex = -2;
+ }
+ _soundResource1.load(0x68895082);
+ _soundResource2.load(0x689BD0C1);
+}
+
+uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ stLowerBridge();
+ break;
+ case 0x4809:
+ stRaiseBridge();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1302Bridge::stLowerBridge() {
+ setFileHash(0x88148150, 0, -1);
+ SetAnimationCallback3(&AsScene1302Bridge::cbLowerBridgeEvent);
+ _soundResource2.play();
+}
+
+void AsScene1302Bridge::stRaiseBridge() {
+ setFileHash(0x88148150, 7, -1);
+ _playBackwards = true;
+ _newHashListIndex = 0;
+ _soundResource1.play();
+}
+
+void AsScene1302Bridge::cbLowerBridgeEvent() {
+ _parentScene->sendMessage(0x2032, 0, this);
+ setFileHash(0x88148150, -1, -1);
+ _newHashListIndex = -2;
+}
+
+SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
+ : StaticSprite(vm, 0x11122122, 200), _soundResource1(vm), _soundResource2(vm) {
+
+ SetUpdateHandler(&SsScene1302Fence::update);
+ SetMessageHandler(&SsScene1302Fence::handleMessage);
+ SetSpriteCallback(NULL);
+ _firstY = _y;
+ if (getGlobalVar(0x80101B1E))
+ _y += 152;
+ _soundResource1.load(0x7A00400C);
+ _soundResource2.load(0x78184098);
+}
+
+void SsScene1302Fence::update() {
+ handleSpriteUpdate();
+ StaticSprite::update();
+}
+
+uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4808:
+ _soundResource1.play();
+ SetSpriteCallback(&SsScene1302Fence::suMoveDown);
+ SetMessageHandler(NULL);
+ break;
+ case 0x4809:
+ _soundResource2.play();
+ SetSpriteCallback(&SsScene1302Fence::suMoveUp);
+ SetMessageHandler(NULL);
+ break;
+ }
+ return messageResult;
+}
+
+void SsScene1302Fence::suMoveDown() {
+ if (_y < _firstY + 152)
+ _y += 8;
+ else {
+ SetMessageHandler(&SsScene1302Fence::handleMessage);
+ SetSpriteCallback(NULL);
+ }
+}
+
+void SsScene1302Fence::suMoveUp() {
+ if (_y > _firstY)
+ _y -= 8;
+ else {
+ SetMessageHandler(&SsScene1302Fence::handleMessage);
+ SetSpriteCallback(NULL);
+ }
+}
+
+Class595::Class595(NeverhoodEngine *vm, Scene *parentScene)
+ : StaticSprite(vm, 0xB0420130, 1015), _parentScene(parentScene) {
+
+ SetMessageHandler(&Class595::handleMessage);
+}
+
+uint32 Class595::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x482A:
+ _parentScene->sendMessage(0x1022, 995, this);
+ break;
+ case 0x482B:
+ _parentScene->sendMessage(0x1022, 1015, this);
+ break;
+ }
+ return messageResult;
+}
+
+Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm) {
+
+ SetMessageHandler(&Scene1302::handleMessage);
+ _vm->_collisionMan->setHitRects(0x004B0858);
+ setRectList(0x004B0A38);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x420643C4, 0, 0));
+ _palette = new Palette(_vm, 0x420643C4);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x643C0428, NULL));
+
+ _class595 = addSprite(new Class595(_vm, this));
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x942FC224, 300));
+ _sprite2 = addSprite(new StaticSprite(_vm, 0x70430830, 1200));
+ _sprite2->getSurface()->setVisible(false);
+ _sprite3 = addSprite(new StaticSprite(_vm, 0x16E01E20, 1100));
+
+ _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getSurface()->getDrawRect().y, false));
+ _asRing2 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32, 132, _class595->getSurface()->getDrawRect().y, getGlobalVar(0x13206309)));
+ _asRing3 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32, 122, _class595->getSurface()->getDrawRect().y, false));
+ _asRing4 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32 + 32 + 32, 132, _class595->getSurface()->getDrawRect().y, getGlobalVar(0x80101B1E)));
+ _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getSurface()->getDrawRect().y, false));
+
+ _asBridge = addSprite(new AsScene1302Bridge(_vm, this));
+ _ssFence = addSprite(new SsScene1302Fence(_vm));
+ _ssFence->getSurface()->getClipRect().x1 = 0;
+ _ssFence->getSurface()->getClipRect().y1 = 0;
+ _ssFence->getSurface()->getClipRect().x2 = 640;
+ _ssFence->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
+
+ if (which < 0) {
+ _klayman = new KmScene1002(_vm, this, _class595, NULL, 380, 364);
+ setMessageList(0x004B0868);
+ } else {
+ _klayman = new KmScene1002(_vm, this, _class595, NULL, 293, 330);
+ setMessageList(0x004B0870);
+ }
+ addSprite(_klayman);
+
+ _klayman->getSurface()->getClipRect().x1 = 0;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+ _asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, true));
+ _vm->_collisionMan->addSprite(_asVenusFlyTrap);
+
+ _klayman->sendEntityMessage(0x2007, _asVenusFlyTrap, this);
+
+}
+
+uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4A845A00) {
+ _klayman->sendEntityMessage(0x1014, _asRing1, this);
+ } else if (param.asInteger() == 0x43807801) {
+ if (!getGlobalVar(0x13206309)) {
+ _klayman->sendEntityMessage(0x1014, _asRing2, this);
+ if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) {
+ setMessageList(0x004B0940);
+ } else {
+ setMessageList(0x004B0938);
+ }
+ } else {
+ setMessageList(0x004B0950);
+ }
+ messageResult = 1;
+ } else if (param.asInteger() == 0x46C26A01) {
+ _klayman->sendEntityMessage(0x1014, _asRing3, this);
+ } else if (param.asInteger() == 0x468C7B11) {
+ if (!getGlobalVar(0x80101B1E)) {
+ _klayman->sendEntityMessage(0x1014, _asRing4, this);
+ if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) {
+ setMessageList(0x004B0940);
+ } else {
+ setMessageList(0x004B0938);
+ }
+ } else {
+ setMessageList(0x004B0950);
+ }
+ messageResult = 1;
+ } else if (param.asInteger() == 0x42845B19) {
+ _klayman->sendEntityMessage(0x1014, _asRing5, this);
+ } else if (param.asInteger() == 0x430A6060) {
+ if (getGlobalVar(0x13206309)) {
+ setMessageList2(0x004B0910);
+ } else {
+ messageList402220();
+ }
+ } else if (param.asInteger() == 0x012E2070) {
+ if (getGlobalVar(0x13206309)) {
+ setMessageList2(0x004B0968);
+ } else {
+ messageList402220();
+ }
+ } else if (param.asInteger() == 0x11C40840) {
+ if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342) {
+ setMessageList(0x004B0878);
+ } else {
+ setMessageList(0x004B0978);
+ }
+ }
+ break;
+ case 0x2000:
+ if (_klayman->getY() > 360) {
+ _klayman->sendEntityMessage(0x1014, _asVenusFlyTrap, this);
+ setMessageList2(0x004B08F0);
+ } else {
+ setMessageList2(0x004B0920);
+ }
+ break;
+ case 0x2002:
+ if (_klayman->getX() > 545) {
+ _parentModule->sendMessage(0x1009, 1, this);
+ }
+ break;
+ case 0x2032:
+ _sprite2->getSurface()->setVisible(true);
+ break;
+ case 0x4806:
+ _parentModule->sendMessage(0x1024, 2, this);
+ if (sender == _asRing1) {
+ _soundResource.play(0x665198C0);
+ } else if (sender == _asRing2) {
+ _asBridge->sendMessage(0x4808, 0, this);
+ setGlobalVar(0x13206309, 1);
+ } else if (sender == _asRing3) {
+ _soundResource.play(0xE2D389C0);
+ } else if (sender == _asRing4) {
+ _ssFence->sendMessage(0x4808, 0, this);
+ setGlobalVar(0x80101B1E, 1);
+ } else if (sender == _asRing5) {
+ _soundResource.play(0x40428A09);
+ }
+ break;
+ case 0x4807:
+ if (sender == _asRing2) {
+ _asBridge->sendMessage(0x4809, 0, this);
+ setGlobalVar(0x13206309, 0);
+ _sprite2->getSurface()->setVisible(false);
+ } else if (sender == _asRing4) {
+ _ssFence->sendMessage(0x4809, 0, this);
+ setGlobalVar(0x80101B1E, 0);
+ } else if (sender == _asVenusFlyTrap) {
+ if (getGlobalVar(0x13206309)) {
+ _asRing2->sendMessage(0x4807, 0, this);
+ } else {
+ _asRing4->sendMessage(0x4807, 0, this);
+ }
+ }
+ break;
+ case 0x480F:
+ if (sender == _asRing2) {
+ _soundResource.play(0x60755842);
+ _asBridge->sendMessage(0x4808, 0, this);
+ setGlobalVar(0x13206309, 1);
+ } else if (sender == _asRing4) {
+ _soundResource.play(0x60755842);
+ _ssFence->sendMessage(0x4808, 0, this);
+ setGlobalVar(0x80101B1E, 1);
+ }
+ break;
+ case 0x482A:
+ _asVenusFlyTrap->sendMessage(0x482B, 0, this);
+ break;
+ case 0x482B:
+ _asVenusFlyTrap->sendMessage(0x482A, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
new file mode 100644
index 0000000..25dde46
--- /dev/null
+++ b/engines/neverhood/module1300.h
@@ -0,0 +1,132 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1300_H
+#define NEVERHOOD_MODULE1300_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module1300
+
+class Module1300 : public Module {
+public:
+ Module1300(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1300();
+protected:
+ uint32 _musicFileHash;
+ void createScene1302(int which);
+ void createScene1303(int which);
+ void createScene1304(int which);
+ void createScene1305(int which);
+ void createScene1306(int which);
+ void createScene1307(int which);
+ void createScene1308(int which);
+ void createScene1309(int which);
+ void createScene1310(int which);
+ void createScene1311(int which);
+ void createScene1312(int which);
+ void createScene1313(int which);
+ void createScene1314(int which);
+ void createScene1315(int which);
+ void createScene1316(int which);
+ void createScene1317(int which);
+ void createScene1318(int which);
+ void updateScene1302();
+ void updateScene1303();
+ void updateScene1304();
+ void updateScene1305();
+ void updateScene1306();
+ void updateScene1307();
+ void updateScene1308();
+ void updateScene1309();
+ void updateScene1310();
+ void updateScene1311();
+ void updateScene1312();
+ void updateScene1313();
+ void updateScene1314();
+ void updateScene1315();
+ void updateScene1316();
+ void updateScene1317();
+ void updateScene1318();
+};
+
+class AsScene1302Bridge : public AnimatedSprite {
+public:
+ AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stLowerBridge();
+ void stRaiseBridge();
+ void cbLowerBridgeEvent();
+};
+
+class SsScene1302Fence : public StaticSprite {
+public:
+ SsScene1302Fence(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ int16 _firstY;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suMoveDown();
+ void suMoveUp();
+};
+
+class Class595 : public StaticSprite {
+public:
+ Class595(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1302 : public Scene {
+public:
+ Scene1302(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource;
+ Sprite *_asVenusFlyTrap;
+ Sprite *_asBridge;
+ Sprite *_ssFence;
+ Sprite *_asRing1;
+ Sprite *_asRing2;
+ Sprite *_asRing3;
+ Sprite *_asRing4;
+ Sprite *_asRing5;
+ Sprite *_class595;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1300_H */
Commit: b5fc6ed2c0db21d132873fb8d35510bc8c186899
https://github.com/scummvm/scummvm/commit/b5fc6ed2c0db21d132873fb8d35510bc8c186899
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1303
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 7f80b8c..bcd7584 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -55,6 +55,8 @@ static const uint32 rectListOffsets[] = {
1, 0x004AED88,
// Scene1302
2, 0x004B0A38,
+ // Scene1303
+ 1, 0x004AF9E8,
// Scene1401
1, 0x004B6758,
// Scene1402
@@ -145,6 +147,9 @@ static const uint32 messageListOffsets[] = {
4, 0x004B0978,
1, 0x004B0870,
1, 0x004B0868,
+ // Scene1303
+ 1, 0x004AF9A0,
+ 2, 0x004AF9B8,
// Scene1401
1, 0x004B65C8,
1, 0x004B65D0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index decb83b..bb53d46 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 9d6e3b95758a16c1b2a441aa5f206c50593202fd
https://github.com/scummvm/scummvm/commit/9d6e3b95758a16c1b2a441aa5f206c50593202fd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Add Scene1303
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index f4159f3..8b984e2 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -247,7 +247,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 1;
+ _vm->gameState().sceneNum = 2;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index e0359fc..d8b1dbe 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2892,6 +2892,92 @@ void KmScene1201::sub40E040() {
}
}
+KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // Empty
+}
+
+uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4804:
+ setCallback2(AnimationCallback(&KmScene1303::sub4161D0));
+ break;
+ case 0x483B:
+ setCallback2(AnimationCallback(&KmScene1303::sub4162B0));
+ break;
+ case 0x483C:
+ setCallback2(AnimationCallback(&KmScene1303::sub416210));
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene1303::handleMessage4160A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == calcHash("PopBalloon")) {
+ _parentScene->sendMessage(0x2000, 0, this);
+ } else if (param.asInteger() == 0x02B20220) {
+ _soundResource1.play(0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ _soundResource1.play(0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ _soundResource1.play(0x44051000);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1303::update4161A0() {
+ Klayman::update();
+ _counter3++;
+ if (_counter3 >= _counter3Max)
+ sub416250();
+}
+
+void KmScene1303::sub4161D0() {
+ _status2 = 0;
+ _flagE5 = true;
+ setFileHash(0xAC20C012, 8, 37);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetAnimationCallback3(&KmScene1303::sub416250);
+}
+
+void KmScene1303::sub416210() {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0xAC20C012, 43, 49);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+}
+
+void KmScene1303::sub416250() {
+ _counter3 = 0;
+ _status2 = 0;
+ _flagE5 = true;
+ _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ setFileHash(0xAC20C012, 38, 42);
+ SetUpdateHandler(&KmScene1303::update4161A0);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ _newHashListIndex = 42;
+}
+
+void KmScene1303::sub4162B0() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x2426932E, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1303::handleMessage4160A0);
+}
+
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 12862e3..31a96f7 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -322,6 +322,19 @@ protected:
void sub40E040();
};
+class KmScene1303 : public Klayman {
+public:
+ KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage4160A0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void update4161A0();
+ void sub4161D0();
+ void sub416210();
+ void sub416250();
+ void sub4162B0();
+};
+
class KmScene1401 : public Klayman {
public:
KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 7c7beb7..d893e8f 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -155,6 +155,11 @@ void Module1300::createScene1302(int which) {
}
void Module1300::createScene1303(int which) {
+ _vm->gameState().sceneNum = 2;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new Scene1303(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1303);
}
void Module1300::createScene1304(int which) {
@@ -243,6 +248,14 @@ void Module1300::updateScene1302() {
}
void Module1300::updateScene1303() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1306(3);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1304() {
@@ -661,4 +674,100 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+
+ // TODO createSurface3(200, dword_4AF9F8);
+ createSurface(200, 640, 480); //TODO: Remeove once the line above is done
+ _x = 289;
+ _y = 390;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1303Balloon::handleMessage);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ setFileHash(0x800278D2, 0, -1);
+}
+
+uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x2000:
+ stPopBalloon();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x020B0003) {
+ _soundResource.play(0x742B0055);
+ }
+ break;
+ case 0x3002:
+ _soundResource.play(0x470007EE);
+ setFileHash1();
+ SetMessageHandler(NULL);
+ _surface->setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1303Balloon::stPopBalloon() {
+ setFileHash(0xAC004CD0, 0, -1);
+ SetMessageHandler(&AsScene1303Balloon::hmBalloonPopped);
+}
+
+Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1303::handleMessage);
+ setRectList(0x004AF9E8);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x01581A9C, 0, 0));
+ _palette = new Palette(_vm, 0x01581A9C);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x81A9801D, NULL));
+
+ if (!getGlobalVar(0xAC00C0D0)) {
+ _asBalloon = addSprite(new AsScene1303Balloon(_vm, this));
+ _vm->_collisionMan->addSprite(_asBalloon);
+ }
+
+ _sprite1 = addSprite(new StaticSprite(_vm, 0xA014216B, 1100));
+
+ _klayman = new KmScene1303(_vm, this, 207, 332);
+ addSprite(_klayman);
+ setMessageList(0x004AF9A0);
+
+ _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+}
+
+uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ setGlobalVar(0xAC00C0D0, 1);
+ _asBalloon->sendMessage(0x2000, 0, this);
+ break;
+ case 0x4826:
+ if (sender == _asBalloon && getGlobalVar(0x31C63C51)) {
+ setMessageList(0x004AF9B8);
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 25dde46..edabe4f 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -127,6 +127,26 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class AsScene1303Balloon : public AnimatedSprite {
+public:
+ AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stPopBalloon();
+};
+
+class Scene1303 : public Scene {
+public:
+ Scene1303(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_asBalloon;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
Commit: 4c7930bd342740c2dd89eb1477c6b4b47ba41ca3
https://github.com/scummvm/scummvm/commit/4c7930bd342740c2dd89eb1477c6b4b47ba41ca3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1304
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index bcd7584..30ae94d 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -57,6 +57,8 @@ static const uint32 rectListOffsets[] = {
2, 0x004B0A38,
// Scene1303
1, 0x004AF9E8,
+ // Scene1304
+ 1, 0x004B91A8,
// Scene1401
1, 0x004B6758,
// Scene1402
@@ -150,6 +152,12 @@ static const uint32 messageListOffsets[] = {
// Scene1303
1, 0x004AF9A0,
2, 0x004AF9B8,
+ // Scene1304
+ 1, 0x004B90E8,
+ 1, 0x004B90F0,
+ 2, 0x004B9158,
+ 2, 0x004B9130,
+ 2, 0x004B9140,
// Scene1401
1, 0x004B65C8,
1, 0x004B65D0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index bb53d46..4b510ce 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 086879a4aac6ef0d9662293dfb6a7dce4d61cb57
https://github.com/scummvm/scummvm/commit/086879a4aac6ef0d9662293dfb6a7dce4d61cb57
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Add Scene1304
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/module1400.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 8b984e2..4c70ff2 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -247,7 +247,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 2;
+ _vm->gameState().sceneNum = 3;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index d8b1dbe..57e1274 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2978,6 +2978,59 @@ void KmScene1303::sub4162B0() {
SetMessageHandler(&KmScene1303::handleMessage4160A0);
}
+KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+}
+
+uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 31a96f7..77c4160 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -335,6 +335,13 @@ protected:
void sub4162B0();
};
+class KmScene1304 : public Klayman {
+public:
+ KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene1401 : public Klayman {
public:
KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index d893e8f..c6dfd38 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -22,6 +22,7 @@
#include "neverhood/module1300.h"
#include "neverhood/module1000.h"
+#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
@@ -163,6 +164,11 @@ void Module1300::createScene1303(int which) {
}
void Module1300::createScene1304(int which) {
+ _vm->gameState().sceneNum = 3;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new Scene1304(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1304);
}
void Module1300::createScene1305(int which) {
@@ -259,6 +265,14 @@ void Module1300::updateScene1303() {
}
void Module1300::updateScene1304() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1316(0);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1305() {
@@ -770,4 +784,103 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+Class544::Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y)
+ : AnimatedSprite(vm, 0x548E9411, surfacePriority, x, y), _parentScene(parentScene) {
+
+ if (getGlobalVar(0x31C63C51)) {
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ } else {
+ SetMessageHandler(&Class544::handleMessage);
+ }
+}
+
+uint32 Class544::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ _parentScene->sendMessage(0x4826, 0, this);
+ messageResult = 1;
+ break;
+ case 0x4806:
+ setGlobalVar(0x31C63C51, 1);
+ _surface->setVisible(false);
+ SetMessageHandler(NULL);
+ break;
+ }
+ return messageResult;
+}
+
+Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1304::handleMessage);
+ setRectList(0x004B91A8);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x062C0214, 0, 0));
+ _palette = new Palette(_vm, 0x062C0214);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0xC021006A, NULL));
+
+ if (getGlobalVar(0xAC00C0D0)) {
+ _class545 = addSprite(new Class545(_vm, this, 0, 1100, 278, 347));
+ _vm->_collisionMan->addSprite(_class545);
+ } else {
+ _class545 = addSprite(new AnimatedSprite(_vm, 0x80106018, 100, 279, 48));
+ // TODO _class545->setUpdateDeltaXY();
+ }
+
+ if (!getGlobalVar(0x31C63C51)) {
+ _class544 = addSprite(new Class544(_vm, this, 1100, 278, 347));
+ _vm->_collisionMan->addSprite(_class544);
+ } else {
+ _class544 = NULL;
+ }
+
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x0562E621, 1100));
+ addSprite(new StaticSprite(_vm, 0x012AE033, 1100));
+ addSprite(new StaticSprite(_vm, 0x090AF033, 1100));
+
+ if (which < 0) {
+ _klayman = new KmScene1304(_vm, this, 217, 347);
+ setMessageList(0x004B90E8);
+ } else {
+ _klayman = new KmScene1304(_vm, this, 100, 347);
+ setMessageList(0x004B90F0);
+ }
+ addSprite(_klayman);
+
+ _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+
+}
+
+uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x415634A4) {
+ if (getGlobalVar(0xAC00C0D0)) {
+ messageList402220();
+ } else {
+ setMessageList(0x004B9158);
+ }
+ }
+ break;
+ case 0x4826:
+ if (sender == _class544) {
+ _klayman->sendEntityMessage(0x1014, _class544, this);
+ setMessageList(0x004B9130);
+ } else if (sender == _class545) {
+ _klayman->sendEntityMessage(0x1014, _class545, this);
+ setMessageList(0x004B9140);
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index edabe4f..ca53147 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -147,6 +147,24 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Class544 : public AnimatedSprite {
+public:
+ Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1304 : public Scene {
+public:
+ Scene1304(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_class545;
+ Sprite *_class544;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 52e5ae7..7835520 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -22,6 +22,7 @@
#include "neverhood/module1400.h"
#include "neverhood/module1000.h"
+#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/gamemodule.h"
@@ -1456,7 +1457,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_class401_1->getSurface()->setVisible(false);
_class401_2 = addSprite(new StaticSprite(_vm, 0x04442520, 995));
-
+
_class401_3 = addSprite(new StaticSprite(_vm, 0x08742271, 995));
_asTape1 = new AsScene1201Tape(_vm, this, 12, 1100, 201, 468, 0x9148A011);
@@ -1578,8 +1579,8 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_mouseCursor = addSprite(new Mouse433(_vm, 0xB006BAC8, NULL));
if (getGlobalVar(0x13382860) == 5) {
- // TODO _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
- // TODO _vm->_collisionMan->addSprite(_class545);
+ _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
+ _vm->_collisionMan->addSprite(_class545);
}
_sprite1 = addSprite(new StaticSprite(_vm, 0x1900A1F8, 1100));
Commit: a29c62ce5a801e245a44daa680f5c109f965f750
https://github.com/scummvm/scummvm/commit/a29c62ce5a801e245a44daa680f5c109f965f750
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:37-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1305
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 30ae94d..207f2f7 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -59,6 +59,8 @@ static const uint32 rectListOffsets[] = {
1, 0x004AF9E8,
// Scene1304
1, 0x004B91A8,
+ // Scene1305
+ 1, 0x004B6E98,
// Scene1401
1, 0x004B6758,
// Scene1402
@@ -158,6 +160,9 @@ static const uint32 messageListOffsets[] = {
2, 0x004B9158,
2, 0x004B9130,
2, 0x004B9140,
+ // Scene1305
+ 1, 0x004B6E40,
+ 1, 0x004B6E48,
// Scene1401
1, 0x004B65C8,
1, 0x004B65D0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 4b510ce..7e94af3 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: a6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1
https://github.com/scummvm/scummvm/commit/a6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add Scene1305
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 4c70ff2..1487e8c 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -247,7 +247,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 3;
+ _vm->gameState().sceneNum = 4;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 57e1274..3f03faa 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2981,6 +2981,7 @@ void KmScene1303::sub4162B0() {
KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
}
uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3031,6 +3032,48 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene1305::KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // Empty
+}
+
+uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ setCallback2(AnimationCallback(&KmScene1305::sub46BEF0));
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ }
+ return 0;
+}
+
+void KmScene1305::sub46BEF0() {
+ _soundResource1.play(0x41648271);
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash2(0x000BAB02, 0x88003000, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetAnimationCallback3(&KmScene1305::sub46BF60);
+}
+
+void KmScene1305::sub46BF60() {
+ setDoDeltaX(2);
+ sub41FC80();
+}
+
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 77c4160..c269e91 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -342,6 +342,15 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene1305 : public Klayman {
+public:
+ KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub46BEF0();
+ void sub46BF60();
+};
+
class KmScene1401 : public Klayman {
public:
KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index c6dfd38..4814f41 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -172,6 +172,11 @@ void Module1300::createScene1304(int which) {
}
void Module1300::createScene1305(int which) {
+ _vm->gameState().sceneNum = 4;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1305(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1305);
}
void Module1300::createScene1306(int which) {
@@ -276,6 +281,14 @@ void Module1300::updateScene1304() {
}
void Module1300::updateScene1305() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1317(-1);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1306() {
@@ -883,4 +896,31 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1305::handleMessage);
+ setRectList(0x004B6E98);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x28801B64, 0, 0));
+ _palette = new Palette(_vm, 0x28801B64);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x01B60280, NULL));
+
+ if (which < 0) {
+ _klayman = new KmScene1305(_vm, this, 212, 441);
+ setMessageList(0x004B6E40);
+ } else {
+ _klayman = new KmScene1305(_vm, this, 212, 441);
+ setMessageList(0x004B6E48);
+ }
+ addSprite(_klayman);
+
+}
+
+uint32 Scene1305::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ return Scene::handleMessage(messageNum, param, sender);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index ca53147..03e3d6e 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -165,6 +165,13 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene1305 : public Scene {
+public:
+ Scene1305(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
Commit: 089ada55ba0eb1ba877921e9fd175ff16a9b7320
https://github.com/scummvm/scummvm/commit/089ada55ba0eb1ba877921e9fd175ff16a9b7320
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1306
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 207f2f7..54eed45 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -61,6 +61,9 @@ static const uint32 rectListOffsets[] = {
1, 0x004B91A8,
// Scene1305
1, 0x004B6E98,
+ // Scene1306
+ 1, 0x004AFD28,
+ 1, 0x004AFD18,
// Scene1401
1, 0x004B6758,
// Scene1402
@@ -163,6 +166,19 @@ static const uint32 messageListOffsets[] = {
// Scene1305
1, 0x004B6E40,
1, 0x004B6E48,
+ // Scene1306
+ 1, 0x004AFAD0,
+ 2, 0x004AFAF0,
+ 1, 0x004AFBC8,
+ 1, 0x004AFC30,
+ 4, 0x004AFC38,
+ 2, 0x004AFB00,
+ 1, 0x004AFBD0,
+ 4, 0x004AFBD8,
+ 2, 0x004AFAE0,
+ 1, 0x004AFAD8,
+ 2, 0x004AFC58,
+ 2, 0x004AFC68,
// Scene1401
1, 0x004B65C8,
1, 0x004B65D0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 7e94af3..3d08f66 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 30ff790a0756466bfcd19b1193e9efb4e2bb377c
https://github.com/scummvm/scummvm/commit/30ff790a0756466bfcd19b1193e9efb4e2bb377c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add Scene1306
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/sprite.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1487e8c..93ea6c5 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -247,7 +247,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 4;
+ _vm->gameState().sceneNum = 5;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 3f03faa..739c8ad 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3074,6 +3074,163 @@ void KmScene1305::sub46BF60() {
sub41FC80();
}
+KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ _flag1 = false;
+}
+
+uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x2000:
+ _flag1 = param.asInteger() != 0;
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub421350));
+ else
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481A:
+ setCallback2(AnimationCallback(&Klayman::sub420680));
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ else
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub421510));
+ else
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub421030));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub421070));
+ }
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x4835:
+ _parentScene->sendMessage(0x2000, 1, this);
+ _flag1 = true;
+ setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ break;
+ case 0x4836:
+ _parentScene->sendMessage(0x2000, 0, this);
+ _flag1 = false;
+ setCallback2(AnimationCallback(&Klayman::sub421310));
+ break;
+ case 0x483D:
+ sub417D40();
+ break;
+ case 0x483E:
+ sub417D80();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1306::sub417D40() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xEE084A04, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1306::handleMessage417CB0);
+}
+
+void KmScene1306::sub417D80() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xB86A4274, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1306::handleMessage417CB0);
+}
+
+uint32 KmScene1306::handleMessage417CB0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ _soundResource1.play(0x85B10BB8);
+ } else if (param.asInteger() == 0x4E6A0CA0) {
+ _soundResource1.play(0xC5B709B0);
+ }
+ }
+ return messageResult;
+}
+
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index c269e91..118e813 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -351,6 +351,17 @@ protected:
void sub46BF60();
};
+class KmScene1306 : public Klayman {
+public:
+ KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag1;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage417CB0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub417D40();
+ void sub417D80();
+};
+
class KmScene1401 : public Klayman {
public:
KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 4814f41..f437ddc 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -22,6 +22,7 @@
#include "neverhood/module1300.h"
#include "neverhood/module1000.h"
+#include "neverhood/module1200.h"
#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/navigationscene.h"
@@ -180,6 +181,11 @@ void Module1300::createScene1305(int which) {
}
void Module1300::createScene1306(int which) {
+ _vm->gameState().sceneNum = 5;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1306(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1306);
}
void Module1300::createScene1307(int which) {
@@ -292,6 +298,24 @@ void Module1300::updateScene1305() {
}
void Module1300::updateScene1306() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 2) {
+ createScene1309(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 3) {
+ createScene1303(0);
+ _childObject->handleUpdate();
+ } else if (_field20 == 0) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ } else if (_field20 == 1) {
+ createScene1311(-1);
+ _childObject->handleUpdate();
+ }
+ }
}
void Module1300::updateScene1307() {
@@ -923,4 +947,270 @@ uint32 Scene1305::handleMessage(int messageNum, const MessageParam ¶m, Entit
return Scene::handleMessage(messageNum, param, sender);
}
+AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene, AnimatedSprite *asElevatorDoor)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
+ _parentScene(parentScene), _asElevatorDoor(asElevatorDoor), _isUp(false), _isDown(true),
+ _countdown(0) {
+
+ _x = 320;
+ _y = 240;
+ createSurface1(0x043B0270, 100);
+ setFileHash(0x043B0270, 0, -1);
+ _newHashListIndex = 0;
+ SetMessageHandler(&AsScene1306Elevator::handleMessage);
+ _soundResource1.load(0x1C100E83);
+ _soundResource2.load(0x1C08CEC5);
+ _soundResource3.load(0x5D011E87);
+}
+
+void AsScene1306Elevator::update() {
+ if (_isUp && _countdown != 0 && (--_countdown == 0)) {
+ stGoingDown();
+ }
+ AnimatedSprite::update();
+ if (_frameIndex == 7) {
+ _soundResource3.play();
+ _asElevatorDoor->getSurface()->setVisible(false);
+ }
+}
+
+void AsScene1306Elevator::upGoingDown() {
+ AnimatedSprite::update();
+ if (_frameIndex == 5) {
+ _asElevatorDoor->getSurface()->setVisible(true);
+ }
+}
+
+uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2001:
+ if (_isUp)
+ _countdown = 144;
+ messageResult = _isUp ? 1 : 0;
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ if (_isDown)
+ stGoingUp();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1306Elevator::stGoingUp() {
+ _surface->setVisible(true);
+ _isDown = false;
+ SetUpdateHandler(&AsScene1306Elevator::update);
+ setFileHash(0x043B0270, 0, -1);
+ SetAnimationCallback3(&AsScene1306Elevator::cbGoingUpEvent);
+ _soundResource1.play();
+}
+
+void AsScene1306Elevator::cbGoingUpEvent() {
+ SetUpdateHandler(&AsScene1306Elevator::update);
+ _parentScene->sendMessage(0x4808, 0, this);
+ _isUp = true;
+ _countdown = 144;
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+void AsScene1306Elevator::stGoingDown() {
+ SetUpdateHandler(&AsScene1306Elevator::upGoingDown);
+ _isUp = false;
+ _surface->setVisible(true);
+ setFileHash(0x043B0270, -1, -1);
+ _playBackwards = true;
+ SetAnimationCallback3(&AsScene1306Elevator::cbGoingDownEvent);
+ _soundResource2.play();
+}
+
+void AsScene1306Elevator::cbGoingDownEvent() {
+ _isDown = true;
+ _parentScene->sendMessage(0x4809, 0, this);
+ SetUpdateHandler(&AsScene1306Elevator::update);
+ setFileHash1();
+}
+
+Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860))
+ setGlobalVar(0x13382860, 4);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1306::handleMessage);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x05303114, 0, 0));
+ _palette = new Palette(_vm, 0x05303114);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x0311005B, NULL));
+
+ if (!getGlobalVar(0x13382860)) {
+ _class545 = addSprite(new Class545(_vm, this, 2, 1100, 435, 445));
+ _vm->_collisionMan->addSprite(_class545);
+ }
+
+ _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x404A36A0, 100, 0x440C1000));
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 19, 1100, 359, 445, 0x9148A011));
+
+ _asElevatorDoor = new AnimatedSprite(_vm, 0x043B0270, 90, 320, 240);
+ _asElevatorDoor->setFileHash(0x043B0270, 6, -1);
+ _asElevatorDoor->setNewHashListIndex(6);
+ addSprite(_asElevatorDoor);
+
+ _asElevator = addSprite(new AsScene1306Elevator(_vm, this, _asElevatorDoor));
+
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x036A1EE0, 80));
+
+ addSprite(new StaticSprite(_vm, 0x00042313, 1100));
+
+ if (which < 0) {
+ _klayman = new KmScene1306(_vm, this, 380, 440);
+ setMessageList(0x004AFAD0);
+ sendMessage(0x2000, 0, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else if (which == 1) {
+ _klayman = new KmScene1306(_vm, this, 136, 440);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004AFAF0);
+ sendMessage(0x2000, 1, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else if (which == 2) {
+ if (getGlobalVar(0xC0418A02)) {
+ _klayman = new KmScene1306(_vm, this, 515, 440);
+ _klayman->setDoDeltaX(1);
+ } else {
+ _klayman = new KmScene1306(_vm, this, 355, 440);
+ }
+ setMessageList(0x004AFBC8);
+ sendMessage(0x2000, 0, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else if (which == 3) {
+ _klayman = new KmScene1306(_vm, this, 534, 440);
+ setMessageList(0x004AFC30);
+ sendMessage(0x2000, 0, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else if (which == 4) {
+ _klayman = new KmScene1306(_vm, this, 136, 440);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004AFC38);
+ sendMessage(0x2000, 1, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else if (which == 5) {
+ _klayman = new KmScene1306(_vm, this, 136, 440);
+ _klayman->sendMessage(0x2000, 1, this);
+ setMessageList(0x004AFB00);
+ sendMessage(0x2000, 1, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else {
+ _klayman = new KmScene1306(_vm, this, 286, 408);
+ setSurfacePriority(_asElevator->getSurface(), 1100);
+ setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
+ setSurfacePriority(_sprite1->getSurface(), 1080);
+ sendMessage(0x2000, 0, this);
+ SetMessageHandler(&Scene1306::handleMessage416EB0);
+ clearRectList();
+ _asElevator->sendMessage(0x4808, 0, this);
+ }
+ addSprite(_klayman);
+
+}
+
+Scene1306::~Scene1306() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+if (messageNum) debug("%04X", messageNum);
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x402064D8) {
+ _klayman->sendEntityMessage(0x1014, _ssButton, this);
+ } else if (param.asInteger() == 0x01C66840) {
+ if (_asElevator->sendMessage(0x2001, 0, this) != 0) {
+ setMessageList(0x004AFBD8);
+ } else {
+ setMessageList(0x004AFAE0);
+ }
+ } else if (param.asInteger() == 0x8E646E00) {
+ setMessageList(0x004AFAD8);
+ clearRectList();
+ SetMessageHandler(&Scene1306::handleMessage416EB0);
+ }
+ break;
+ case 0x2000:
+ if (param.asInteger() != 0) {
+ setRectList(0x004AFD28);
+ _klayman->setKlaymanTable3();
+ } else {
+ setRectList(0x004AFD18);
+ _klayman->setKlaymanTable1();
+ }
+ break;
+ case 0x480B:
+ if (sender == _ssButton) {
+ _asElevator->sendMessage(0x4808, 0, this);
+ }
+ break;
+ case 0x4826:
+ if (sender == _class545) {
+ if (_klayman->getX() >= 249) {
+ _klayman->sendEntityMessage(0x1014, _class545, this);
+ setMessageList(0x004AFC58);
+ }
+ } else if (sender == _asTape) {
+ if (_klayman->getX() >= 249) {
+ _klayman->sendEntityMessage(0x1014, _class545, this);
+ setMessageList(0x004AFC68);
+ }
+ }
+ break;
+ case 0x482A:
+ setSurfacePriority(_asElevator->getSurface(), 1100);
+ setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
+ setSurfacePriority(_sprite1->getSurface(), 1080);
+ break;
+ case 0x482B:
+ setSurfacePriority(_asElevator->getSurface(), 100);
+ setSurfacePriority(_asElevatorDoor->getSurface(), 90);
+ setSurfacePriority(_sprite1->getSurface(), 80);
+ sendMessage(0x2000, 0, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ break;
+ }
+ return 0;
+}
+
+uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4808:
+ setMessageList(0x004AFBD0);
+ SetMessageHandler(&Scene1306::handleMessage);
+ break;
+ case 0x4809:
+ _parentModule->sendMessage(0x1009, 1, this);
+ break;
+ case 0x482A:
+ setSurfacePriority(_asElevator->getSurface(), 1100);
+ setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
+ setSurfacePriority(_sprite1->getSurface(), 1080);
+ break;
+ case 0x482B:
+ setSurfacePriority(_asElevator->getSurface(), 100);
+ setSurfacePriority(_asElevatorDoor->getSurface(), 90);
+ setSurfacePriority(_sprite1->getSurface(), 80);
+ sendMessage(0x2000, 0, this);
+ _vm->_collisionMan->addSprite(_asTape);
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 03e3d6e..33f5fb5 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -172,6 +172,42 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class AsScene1306Elevator : public AnimatedSprite {
+public:
+ AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene, AnimatedSprite *asElevatorDoor);
+protected:
+ Scene *_parentScene;
+ AnimatedSprite *_asElevatorDoor;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ bool _isUp;
+ bool _isDown;
+ int _countdown;
+ void update();
+ void upGoingDown();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stGoingUp();
+ void cbGoingUpEvent();
+ void stGoingDown();
+ void cbGoingDownEvent();
+};
+
+class Scene1306 : public Scene {
+public:
+ Scene1306(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene1306();
+protected:
+ Sprite *_ssButton;
+ Sprite *_asTape;
+ AnimatedSprite *_asElevatorDoor;
+ Sprite *_asElevator;
+ Sprite *_sprite1;
+ Sprite *_class545;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage416EB0(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 7ec5d91..16d7931 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -114,6 +114,8 @@ public:
void clearRepl();
uint32 getCurrAnimFileHash() const { return _currAnimFileHash; }
int16 getFrameIndex() const { return _frameIndex; }
+ void setNewHashListIndex(int value) { _newHashListIndex = value; }
+ void setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4);
protected:
typedef void (AnimatedSprite::*AnimationCb)();
AnimResource _animResource;
@@ -154,7 +156,6 @@ protected:
void updateFrameIndex();
void updateFrameInfo();
void createSurface1(uint32 fileHash, int surfacePriority);
- void setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4);
void setFileHash1();
void setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5);
void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
Commit: e13b8740c9b6d3bfa74ca583aea3f1d101b78bc9
https://github.com/scummvm/scummvm/commit/e13b8740c9b6d3bfa74ca583aea3f1d101b78bc9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add Scene1307
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 93ea6c5..277b55d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -85,6 +85,43 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
}
}
+void GameModule::initScene1307Vars() {
+
+ if (getSubVar(0x40050052, 0x25400B10))
+ return;
+
+ for (uint i = 0; i < 3; i++) {
+ bool more;
+ do {
+ more = false;
+ setSubVar(0x0C10A000, i, _vm->_rnd->getRandomNumber(16 - 1));
+ if (i > 0) {
+ for (uint j = 0; j < i && !more; j++) {
+ more = getSubVar(0x0C10A000, j) == getSubVar(0x0C10A000, i);
+ }
+ }
+ } while (more);
+ }
+
+ for (uint i = 0; i < 3; i++) {
+ bool more;
+ do {
+ more = false;
+ setSubVar(0xA010B810, i, _vm->_rnd->getRandomNumber(16 - 1));
+ if (i > 0) {
+ for (uint j = 0; j < i && !more; j++) {
+ more = getSubVar(0xA010B810, j) == getSubVar(0xA010B810, i);
+ }
+ }
+ if (getSubVar(0xA010B810, i) == getSubVar(0x0C10A000, i))
+ more = true;
+ } while (more);
+ }
+
+ setSubVar(0x40050052, 0x25400B10, 1);
+
+}
+
void GameModule::initScene1405Vars() {
// TODO: Give better names
@@ -247,7 +284,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 6;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index ef199f7..02f16c5 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -37,6 +37,7 @@ public:
void startup();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
+ void initScene1307Vars();
void initScene1405Vars();
void initScene3009Vars();
protected:
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index f437ddc..27f8a11 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -24,6 +24,7 @@
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
#include "neverhood/module2200.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
@@ -189,6 +190,11 @@ void Module1300::createScene1306(int which) {
}
void Module1300::createScene1307(int which) {
+ _vm->gameState().sceneNum = 6;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1307(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1307);
}
void Module1300::createScene1308(int which) {
@@ -319,6 +325,14 @@ void Module1300::updateScene1306() {
}
void Module1300::updateScene1307() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1308(2);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1308() {
@@ -1126,7 +1140,6 @@ Scene1306::~Scene1306() {
}
uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
-if (messageNum) debug("%04X", messageNum);
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1213,4 +1226,375 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
return 0;
}
+static const uint32 kAsScene1307KeyResourceList1[] = {
+ 0x0438069C,
+ 0x45B0023C,
+ 0x05700217
+};
+
+static const uint32 kAsScene1307KeyResourceList2[] = {
+ 0x04441334,
+ 0x061433F0,
+ 0x06019390
+};
+
+static const uint32 kAsScene1307KeyResourceList3[] = {
+ 0x11A80030,
+ 0x178812B1,
+ 0x1488121C
+};
+
+static const uint32 *kAsScene1307KeyResourceLists[] = {
+ kAsScene1307KeyResourceList1,
+ kAsScene1307KeyResourceList2,
+ kAsScene1307KeyResourceList3
+};
+
+static const int kAsScene1307KeySurfacePriorities[] = {
+ 700,
+ 500,
+ 300,
+ 100
+};
+
+const uint kAsScene1307KeyPointsCount = 12;
+
+static const NPoint kAsScene1307KeyPoints[] = {
+ {-2, 0},
+ {-5, 0},
+ { 5, 0},
+ {12, 0},
+ {17, 0},
+ {25, 0},
+ {16, -2},
+ {10, -6},
+ { 0, -7},
+ {-7, -3},
+ {-3, 4},
+ { 2, 2}
+};
+
+const uint kAsScene1307KeyFrameIndicesCount = 20;
+
+static const int16 kAsScene1307KeyFrameIndices[] = {
+ 1, 4, 8, 11, 15, 16, 17, 17, 17, 16,
+ 15, 14, 12, 10, 9, 7, 5, 3, 2, 1
+};
+
+const int kAsScene1307KeyDivValue = 200;
+
+const int16 kAsScene1307KeyXDelta = 70;
+const int16 kAsScene1307KeyYDelta = -12;
+
+AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
+ _soundResource4(vm), _parentScene(parentScene), _index(index), _clipRects(clipRects),
+ _isClickable(true) {
+
+ NPoint pt;
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+
+ _dataResource.load(0x22102142);
+ _pointList = _dataResource.getPointArray(0xAC849240);
+
+ pt = (*_pointList)[getSubVar(0xA010B810, _index)];
+ _x = pt.x;
+ _y = pt.y;
+
+ // TODO createSurface3(kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4], fileHashes);
+ createSurface(kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4], 640, 480); //TODO: Remeove once the line above is done
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1307Key::handleMessage);
+
+ setFileHash(fileHashes[0], 0, -1);
+
+ _soundResource1.load(0xDC4A1280);
+ _soundResource2.load(0xCC021233);
+ _soundResource3.load(0xC4C23844);
+ _soundResource3.load(0xC4523208);
+
+}
+
+uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_isClickable) {
+ _parentScene->sendMessage(0x4826, 0, this);
+ stRemoveKey();
+ messageResult = 1;
+ }
+ break;
+ case 0x2000:
+ _isClickable = param.asInteger() != 0;
+ break;
+ case 0x2001:
+ setSubVar(0xA010B810, _index, param.asInteger());
+ stMoveKey();
+ break;
+ case 0x2003:
+ _soundResource4.play();
+ stUnlock();
+ break;
+ case 0x2004:
+ _soundResource3.play();
+ stInsert();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1307Key::suRemoveKey() {
+ if (_pointIndex < kAsScene1307KeyPointsCount) {
+ _x += kAsScene1307KeyPoints[_pointIndex].x;
+ _y += kAsScene1307KeyPoints[_pointIndex].y;
+ processDelta();
+ _pointIndex++;
+ } else {
+ SetSpriteCallback(NULL);
+ }
+}
+
+void AsScene1307Key::suInsertKey() {
+ if (_pointIndex < kAsScene1307KeyPointsCount) {
+ _x -= kAsScene1307KeyPoints[kAsScene1307KeyPointsCount - _pointIndex - 1].x;
+ _y -= kAsScene1307KeyPoints[kAsScene1307KeyPointsCount - _pointIndex - 1].y;
+ processDelta();
+ _pointIndex++;
+ if (_pointIndex == 7)
+ _soundResource1.play();
+ } else {
+ SetSpriteCallback(NULL);
+ _parentScene->sendMessage(0x2002, 0, this);
+ }
+}
+
+void AsScene1307Key::suMoveKey() {
+ if (_pointIndex < kAsScene1307KeyFrameIndicesCount) {
+ _frameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
+ _x = _prevX + (_deltaX * _frameIndex) / kAsScene1307KeyDivValue;
+ _y = _prevY + (_deltaY * _frameIndex) / kAsScene1307KeyDivValue;
+ processDelta();
+ _pointIndex++;
+ } else {
+ NPoint pt = (*_pointList)[getSubVar(0xA010B810, _index)];
+ _x = pt.x + kAsScene1307KeyXDelta;
+ _y = pt.y + kAsScene1307KeyYDelta;
+ stInsertKey();
+ }
+}
+
+void AsScene1307Key::stRemoveKey() {
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ _pointIndex = 0;
+ SetSpriteCallback(&AsScene1307Key::suRemoveKey);
+ setFileHash(fileHashes[0], 0, -1);
+ _soundResource2.play();
+}
+
+void AsScene1307Key::stInsertKey() {
+ _pointIndex = 0;
+ _parentScene->sendMessage(0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4], this);
+ _surface->getClipRect() = _clipRects[getSubVar(0xA010B810, _index) % 4];
+ SetSpriteCallback(&AsScene1307Key::suInsertKey);
+ _newHashListIndex = -2;
+}
+
+void AsScene1307Key::stMoveKey() {
+ NPoint pt = (*_pointList)[getSubVar(0xA010B810, _index)];
+ int16 newX = pt.x + kAsScene1307KeyXDelta;
+ int16 newY = pt.y + kAsScene1307KeyYDelta;
+ _parentScene->sendMessage(0x1022, 1000, this);
+ _surface->getClipRect().x1 = 0;
+ _surface->getClipRect().y1 = 0;
+ _surface->getClipRect().x2 = 640;
+ _surface->getClipRect().y2 = 480;
+ _prevX = _x;
+ _prevY = _y;
+ if (newX == _x && newY == _y) {
+ stInsertKey();
+ } else {
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ _pointIndex = 0;
+ _frameIndex = 0;
+ _deltaX = newX - _x;
+ _deltaY = newY - _y;
+ SetSpriteCallback(&AsScene1307Key::suMoveKey);
+ setFileHash(fileHashes[0], 0, -1);
+ }
+}
+
+void AsScene1307Key::stUnlock() {
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ setFileHash(fileHashes[1], 0, -1);
+ _newHashListIndex = -2;
+}
+
+void AsScene1307Key::stInsert() {
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ setFileHash(fileHashes[2], 0, -1);
+ _newHashListIndex = -2;
+}
+
+Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm), _countdown(0),
+ _asCurrKey(NULL), _isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
+
+ //DEBUG
+ setSubVar(0x08D0AB11, 0, 1);
+ setSubVar(0x08D0AB11, 1, 1);
+ setSubVar(0x08D0AB11, 2, 1);
+
+ Sprite *tempSprite;
+
+ _vm->gameModule()->initScene1307Vars();
+
+ _dataResource.load(0x22102142);
+ _keyHolePoints = _dataResource.getPointArray(0xAC849240);
+
+ for (uint i = 0; i < 16; i++) {
+ NPoint pt = (*_keyHolePoints)[i];
+ _keyHoleRects[i].x1 = pt.x - 15;
+ _keyHoleRects[i].y1 = pt.y - 15;
+ _keyHoleRects[i].x2 = pt.x + 15;
+ _keyHoleRects[i].y2 = pt.y + 15;
+ }
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1307::handleMessage);
+ SetUpdateHandler(&Scene1307::update);
+
+ _background = addBackground(new DirtyBackground(_vm, 0xA8006200, 0, 0));
+ _palette = new Palette(_vm, 0xA8006200);
+ _palette->usePalette();
+ addEntity(_palette);
+ _mouseCursor = addSprite(new Mouse435(_vm, 0x06204A88, 20, 620));
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x00A3621C, 800));
+ _clipRects[0].x1 = tempSprite->getSurface()->getDrawRect().x;
+ _clipRects[0].y1 = 0;
+ _clipRects[0].x2 = 640;
+ _clipRects[0].y2 = 480;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x00A3641C, 600));
+ _clipRects[1].x1 = tempSprite->getSurface()->getDrawRect().x;
+ _clipRects[1].y1 = 0;
+ _clipRects[1].x2 = 640;
+ _clipRects[1].y2 = 480;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x00A3681C, 400));
+ _clipRects[2].x1 = tempSprite->getSurface()->getDrawRect().x;
+ _clipRects[2].y1 = 0;
+ _clipRects[2].x2 = 640;
+ _clipRects[2].y2 = 480;
+
+ tempSprite = addSprite(new StaticSprite(_vm, 0x00A3701C, 200));
+ _clipRects[3].x1 = tempSprite->getSurface()->getDrawRect().x;
+ _clipRects[3].y1 = 0;
+ _clipRects[3].x2 = 640;
+ _clipRects[3].y2 = 480;
+
+ for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
+ if (getSubVar(0x08D0AB11, keyIndex)) {
+ _asKeys[keyIndex] = addSprite(new AsScene1307Key(_vm, this, keyIndex, _clipRects));
+ _vm->_collisionMan->addSprite(_asKeys[keyIndex]);
+ } else {
+ _asKeys[keyIndex] = NULL;
+ }
+ }
+
+ _soundResource.load(0x68E25540);
+
+}
+
+void Scene1307::update() {
+ Scene::update();
+ if (_countdown && (--_countdown == 0)) {
+ _doLeaveScene = true;
+ } else if (_countdown == 20) {
+ _palette->startFadeToWhite(40);
+ }
+ if (_doLeaveScene && !_soundResource.isPlaying()) {
+ _parentModule->sendMessage(0x1009, 1, this);
+ setGlobalVar(0x80455A41, 1);
+ }
+}
+
+uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO Debug stuff
+ if (!_isPuzzleSolved) {
+ if (param.asPoint().x > 20 && param.asPoint().x < 620) {
+ if (_asCurrKey && !_isInsertingKey) {
+ int16 mouseX = param.asPoint().x;
+ int16 mouseY = param.asPoint().y;
+ uint clickedKeyHoleIndex;
+ for (clickedKeyHoleIndex = 0; clickedKeyHoleIndex < 16; clickedKeyHoleIndex++) {
+ if (mouseX >= _keyHoleRects[clickedKeyHoleIndex].x1 && mouseX <= _keyHoleRects[clickedKeyHoleIndex].x2 &&
+ mouseY >= _keyHoleRects[clickedKeyHoleIndex].y1 && mouseY <= _keyHoleRects[clickedKeyHoleIndex].y2)
+ break;
+ }
+ if (clickedKeyHoleIndex < 16) {
+ // Check if the clicked keyhole is already occupied with a key
+ bool occupied = false;
+ for (uint keyIndex = 0; keyIndex < 3 && !occupied; keyIndex++) {
+ if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex] != _asCurrKey) {
+ if (getSubVar(0xA010B810, keyIndex) == clickedKeyHoleIndex)
+ occupied = true;
+ }
+ }
+ if (!occupied) {
+ // If the keyhole is free, insert the current key
+ _asCurrKey->sendMessage(0x2001, clickedKeyHoleIndex, this);
+ _isInsertingKey = true;
+ _mouseClicked = false;
+ }
+ }
+ }
+ } else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey) {
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ }
+ break;
+ // TODO Debug stuff
+ case 0x2002:
+ // Check if all keys are in the correct keyholes
+ if (getSubVar(0x08D0AB11, 0) && getSubVar(0xA010B810, 0) == getSubVar(0x0C10A000, 0) &&
+ getSubVar(0x08D0AB11, 1) && getSubVar(0xA010B810, 1) == getSubVar(0x0C10A000, 1) &&
+ getSubVar(0x08D0AB11, 2) && getSubVar(0xA010B810, 2) == getSubVar(0x0C10A000, 2)) {
+ // Play unlock animations for all keys
+ for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
+ if (_asKeys[keyIndex])
+ _asKeys[keyIndex]->sendMessage(0x2003, 1, this);
+ }
+ _soundResource.play();
+ _isPuzzleSolved = true;
+ _countdown = 47;
+ } else {
+ for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
+ if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex]) {
+ _asKeys[keyIndex]->sendMessage(0x2000, 1, this);
+ }
+ }
+ _asCurrKey->sendMessage(0x2004, 1, this);
+ }
+ _asCurrKey = NULL;
+ _isInsertingKey = false;
+ break;
+ case 0x4826:
+ _asCurrKey = (Sprite*)sender;
+ for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
+ if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex]) {
+ _asKeys[keyIndex]->sendMessage(0x2000, 0, this);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 33f5fb5..80b2774 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -208,6 +208,52 @@ protected:
uint32 handleMessage416EB0(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class AsScene1307Key : public AnimatedSprite {
+public:
+ AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ NPointArray *_pointList;
+ uint _pointIndex;
+ int _frameIndex;
+ uint _index;
+ NRect *_clipRects;
+ bool _isClickable;
+ int16 _prevX, _prevY;
+ int16 _deltaX, _deltaY;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suRemoveKey();
+ void suInsertKey();
+ void suMoveKey();
+ void stRemoveKey();
+ void stInsertKey();
+ void stMoveKey();
+ void stUnlock();
+ void stInsert();
+};
+
+class Scene1307 : public Scene {
+public:
+ Scene1307(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource;
+ NPointArray *_keyHolePoints;
+ NRect _keyHoleRects[16];
+ NRect _clipRects[4];
+ Sprite *_asKeys[3];
+ int _countdown;
+ Sprite *_asCurrKey;
+ bool _isInsertingKey;
+ bool _doLeaveScene;
+ bool _isPuzzleSolved;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
Commit: 85a216737cd1a8c8946dfd4ac7eafd68caeb6c09
https://github.com/scummvm/scummvm/commit/85a216737cd1a8c8946dfd4ac7eafd68caeb6c09
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1308
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 54eed45..ef32a22 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -64,6 +64,10 @@ static const uint32 rectListOffsets[] = {
// Scene1306
1, 0x004AFD28,
1, 0x004AFD18,
+ // Scene1308
+ 1, 0x004B5990,
+ 1, 0x004B5980,
+ 1, 0x004B59A0,
// Scene1401
1, 0x004B6758,
// Scene1402
@@ -179,6 +183,18 @@ static const uint32 messageListOffsets[] = {
1, 0x004AFAD8,
2, 0x004AFC58,
2, 0x004AFC68,
+ // Scene1308
+ 1, 0x004B57C0,
+ 1, 0x004B57C8,
+ 1, 0x004B58B0,
+ 3, 0x004B57D0,
+ 3, 0x004B57E8,
+ 2, 0x004B5868,
+ 4, 0x004B5848,
+ 3, 0x004B5830,
+ 2, 0x004B5800,
+ 2, 0x004B5868,
+ 2, 0x004B58E0,
// Scene1401
1, 0x004B65C8,
1, 0x004B65D0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 3d08f66..f902613 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 3e122b002c08162fdbc841e9df8a73c95358b0a4
https://github.com/scummvm/scummvm/commit/3e122b002c08162fdbc841e9df8a73c95358b0a4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add Scene1308 (renaming of stuff todo)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 277b55d..6e7eb15 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -284,7 +284,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 6;
+ _vm->gameState().sceneNum = 7;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 739c8ad..26f9d1a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3231,6 +3231,141 @@ uint32 KmScene1306::handleMessage417CB0(int messageNum, const MessageParam ¶
return messageResult;
}
+KmScene1308::KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ _flag1 = false;
+}
+
+uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x480A:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420600));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420550));
+ }
+ break;
+ case 0x480D:
+ setCallback2(AnimationCallback(&KmScene1001::sub420C50));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481A:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&KmScene1308::sub456150));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420680));
+ }
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x4827:
+ setCallback2(AnimationCallback(&Klayman::sub420E20));
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene1308::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (!_flag1 && param.asInteger() == 0x06040580) {
+ setFileHash3(0xDC409440, 0x46431401, 0);
+ } else if (_flag1 && param.asInteger() == 0x46431401) {
+ _flag1 = false;
+ setFileHash2(0xDC409440, 0x01084280, 0);
+ } else if (param.asInteger() == 0x062A1510) {
+ _soundResource1.play(0x41688704);
+ } else if (param.asInteger() == 0x02B20220) {
+ _soundResource1.play(0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ _soundResource1.play(0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ _soundResource1.play(0x44051000);
+ } else if (param.asInteger() == 0x0E4C8141) {
+ _soundResource1.play(0xDC4A1280);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1308::sub456150() {
+ if (!sub41CF10(AnimationCallback(&KmScene1308::sub456150))) {
+ _status2 = 2;
+ _flag1 = false;
+ for (uint i = 0; i < 3; i++) {
+ if (getSubVar(0x0090EA95, i)) {
+ bool more;
+ setSubVar(0x08D0AB11, i, 1);
+ setSubVar(0x0090EA95, i, 0);
+ do {
+ more = false;
+ setSubVar(0xA010B810, i, _vm->_rnd->getRandomNumber(16 - 1));
+ for (uint j = 0; j < i && !more; j++) {
+ if (getSubVar(0x08D0AB11, j) && getSubVar(0xA010B810, j) == getSubVar(0xA010B810, i))
+ more = true;
+ }
+ if (getSubVar(0xA010B810, i) == getSubVar(0x0C10A000, i))
+ more = true;
+ } while (more);
+ _flag1 = true;
+ }
+ }
+ if (!_flag1) {
+ setCallback2(NULL);
+ sub41C7B0();
+ } else {
+ _flagE5 = false;
+ setFileHash(0xDC409440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetMessageHandler(&KmScene1308::handleMessage);
+ _flag1 = false;
+ }
+ }
+}
+
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 118e813..a5381c8 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -362,6 +362,16 @@ protected:
void sub417D80();
};
+class KmScene1308 : public Klayman {
+public:
+ KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag1;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub456150();
+};
+
class KmScene1401 : public Klayman {
public:
KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 27f8a11..c5d2870 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -23,6 +23,7 @@
#include "neverhood/module1300.h"
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
+#include "neverhood/module1400.h"
#include "neverhood/module2200.h"
#include "neverhood/gamemodule.h"
#include "neverhood/diskplayerscene.h"
@@ -198,6 +199,11 @@ void Module1300::createScene1307(int which) {
}
void Module1300::createScene1308(int which) {
+ _vm->gameState().sceneNum = 7;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1308(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1308);
}
void Module1300::createScene1309(int which) {
@@ -336,6 +342,20 @@ void Module1300::updateScene1307() {
}
void Module1300::updateScene1308() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_field20 == 0) {
+ createScene1314(0);
+ } else if (_field20 == 1) {
+ createScene1302(0);
+ } else if (_field20 == 2) {
+ createScene1307(0);
+ }
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1309() {
@@ -1597,4 +1617,378 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+static const uint32 kScene1308FileHashes[] = {
+ 0x08006320,
+ 0x10006320,
+ 0x20006320,
+ 0x40006320,
+ 0x80006320,
+ 0x00006321,
+ 0x00006322,
+ 0x00006324,
+ 0x00006328,
+ 0x08306320,
+ 0x10306320,
+ 0x20306320,
+ 0x40306320,
+ 0x80306320,
+ 0x00306321,
+ 0x00306322
+};
+
+Class549::Class549(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _soundResource(vm),
+ _parentScene(parentScene) {
+
+ SetMessageHandler(&Class549::handleMessage);
+ _surface->setVisible(false);
+ setFileHash1();
+}
+
+uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ sub455470();
+ break;
+ case 0x4809:
+ sub4554F0();
+ break;
+ }
+ return messageResult;
+}
+
+void Class549::sub455470() {
+ setFileHash(0xBA0AE050, 0, -1);
+ _surface->setVisible(true);
+ SetAnimationCallback3(&Class549::hide);
+ _soundResource.play(calcHash("fxDoorOpen38"));
+}
+
+void Class549::hide() {
+ _parentScene->sendMessage(0x2000, 0, this);
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+void Class549::sub4554F0() {
+ setFileHash(0xBA0AE050, -1, -1);
+ _playBackwards = true;
+ _surface->setVisible(true);
+ SetAnimationCallback3(&Class549::sub455550);
+ _soundResource.play(calcHash("fxDoorClose38"));
+}
+
+void Class549::sub455550() {
+ _parentScene->sendMessage(0x2001, 0, this);
+ setFileHash1();
+}
+
+Class592::Class592(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _soundResource(vm),
+ _parentScene(parentScene) {
+
+ SetMessageHandler(&Class592::handleMessage);
+ SetAnimationCallback3(&Class592::sub455710);
+ _soundResource.play(0x51456049);
+}
+
+uint32 Class592::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class592::sub455710() {
+ setFileHash(0x6238B191, 0, -1);
+ SetAnimationCallback3(&Class592::sub455740);
+ _x = 580;
+ _y = 383;
+}
+
+void Class592::sub455740() {
+ _parentScene->sendMessage(0x2004, 0, this);
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+Class593::Class593(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 0x80180A10, 100, 320, 240), _parentScene(parentScene) {
+
+ SetMessageHandler(&Class593::handleMessage);
+ _surface->setVisible(false);
+ setFileHash1();
+ Entity::_priority = 1200;
+}
+
+uint32 Class593::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2002:
+ sub4558F0();
+ break;
+ case 0x2003:
+ sub455920();
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void Class593::sub4558F0() {
+ setFileHash(0x80180A10, 0, -1);
+ _surface->setVisible(false);
+ _newHashListIndex = -2;
+}
+
+void Class593::sub455920() {
+ setFileHash(0x80180A10, -1, -1);
+ _playBackwards = true;
+ SetAnimationCallback3(&Class593::sub455950);
+}
+
+void Class593::sub455950() {
+ _parentScene->sendMessage(0x2003, 0, this);
+ setFileHash1();
+ _surface->setVisible(false);
+}
+
+Class601::Class601(NeverhoodEngine *vm, uint32 fileHash, int index)
+ : StaticSprite(vm, fileHash, 100) {
+
+ _surface->setVisible(false);
+ _x = _spriteResource.getPosition().x + index * 20;
+ StaticSprite::update();
+}
+
+Class513::Class513(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100), _soundResource(vm) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class513::handleMessage);
+ _x = 286;
+ _y = 429;
+ createSurface1(0xA282C472, 100);
+ setFileHash(0xA282C472, 0, -1);
+}
+
+uint32 Class513::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x66382026) {
+ _soundResource.play(0x0CD84468);
+ } else if (param.asInteger() == 0x6E28061C) {
+ _soundResource.play(0x78C8402C);
+ } else if (param.asInteger() == 0x462F0410) {
+ _soundResource.play(0x60984E28);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _flag1(false) {
+
+ _vm->gameModule()->initScene1307Vars();
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1308::handleMessage);
+
+ _background = addBackground(new DirtyBackground(_vm, 0x41024202, 0, 0));
+ _palette = new Palette(_vm, 0x41024202);
+ _palette->usePalette();
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x24206418, NULL));
+
+ _asTape = addSprite(new AsScene1201Tape(_vm, this, 17, 1100, 502, 445, 0x9148A011));
+ _vm->_collisionMan->addSprite(_asTape);
+
+ if (getGlobalVar(0x01023818)) {
+ addSprite(new Class513(_vm));
+ addSprite(new AnimatedSprite(_vm, 0x461A1490, 200, 235, 429));
+ }
+
+ _sprite1 = addSprite(new StaticSprite(_vm, 0x0A042060, 1100));
+ _class549 = addSprite(new Class549(_vm, this));
+ _class593 = addSprite(new Class593(_vm, this));
+
+ _class601_1 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 1)], 0));
+ _class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1));
+ _class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2));
+
+ _sprite2 = addSprite(new StaticSprite(_vm, 0x40043120, 995));
+ _sprite3 = addSprite(new StaticSprite(_vm, 0x43003100, 995));
+ _sprite4 = NULL;
+
+ if (which < 0) {
+ _klayman = new KmScene1308(_vm, this, 380, 440);
+ setMessageList(0x004B57C0);
+ if (getGlobalVar(0x80455A41)) {
+ _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ setRectList(0x004B5990);
+ } else {
+ _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ setRectList(0x004B5980);
+ }
+ } else if (which == 1) {
+ _klayman = new KmScene1308(_vm, this, 640, 440);
+ setMessageList(0x004B57C8);
+ if (getGlobalVar(0x80455A41)) {
+ _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ setRectList(0x004B5990);
+ } else {
+ _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ setRectList(0x004B5980);
+ }
+ } else if (which == 2) {
+ _klayman = new KmScene1308(_vm, this, 475, 440);
+ setMessageList(0x004B58B0);
+ if (getGlobalVar(0x80455A41)) {
+ _sprite5 = addSprite(new Class592(_vm, this));
+ _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ _sprite4->getSurface()->setVisible(false);
+ } else {
+ _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ setRectList(0x004B5980);
+ }
+ } else {
+ _klayman = new KmScene1308(_vm, this, 41, 440);
+ setMessageList(0x004B57D0);
+ _class549->sendMessage(0x4808, 0, this);
+ _sprite1->getSurface()->setVisible(false);
+ if (getGlobalVar(0x80455A41)) {
+ _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ _klayman->getSurface()->setVisible(false);
+ } else {
+ _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ _klayman->getSurface()->setVisible(false);
+ }
+ }
+ addSprite(_klayman);
+
+ if (_sprite4) {
+ _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = _sprite4->getSurface()->getDrawRect().x + _sprite4->getSurface()->getDrawRect().width;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ } else {
+ _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
+ _klayman->getSurface()->getClipRect().y1 = 0;
+ _klayman->getSurface()->getClipRect().x2 = 640;
+ _klayman->getSurface()->getClipRect().y2 = 480;
+ }
+
+ if (getGlobalVar(0x04A105B3) == 4) {
+ _class489 = new Class489(_vm, this, _klayman, 0);
+ addSprite(_class489);
+ _vm->_collisionMan->addSprite(_class489);
+ _class489->getSurface()->getClipRect().x1 = 0;
+ _class489->getSurface()->getClipRect().y1 = 0;
+ _class489->getSurface()->getClipRect().x2 = 0;
+ _class489->getSurface()->getClipRect().y2 = _sprite2->getSurface()->getDrawRect().y + _sprite2->getSurface()->getDrawRect().height;
+ _class489->setRepl(64, 0);
+ } else {
+ _class489 = NULL;
+ }
+
+}
+
+uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x88C11390) {
+ setRectList(0x004B59A0);
+ _flag1 = true;
+ } else if (param.asInteger() == 0x08821382) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ if (getGlobalVar(0x80455A41)) {
+ setRectList(0x004B5990);
+ } else {
+ setRectList(0x004B5980);
+ }
+ _flag1 = false;
+ } else if (param.asInteger() == 0x4AC68808) {
+ clearRectList();
+ _class549->sendMessage(0x4809, 0, this);
+ _sprite1->getSurface()->setVisible(false);
+ _klayman->getSurface()->setVisible(false);
+ }
+ break;
+ case 0x1022:
+ if (sender == _class489) {
+ if (param.asInteger() >= 1000)
+ setSurfacePriority(_sprite3->getSurface(), 1100);
+ else
+ setSurfacePriority(_sprite3->getSurface(), 995);
+ }
+ break;
+ case 0x2000:
+ if (getGlobalVar(0x80455A41)) {
+ setRectList(0x004B5990);
+ } else {
+ setRectList(0x004B5980);
+ }
+ setMessageList(0x004B57E8);
+ _sprite1->getSurface()->setVisible(true);
+ _klayman->getSurface()->setVisible(true);
+ break;
+ case 0x2001:
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ case 0x2003:
+ _class601_1->getSurface()->setVisible(false);
+ _class601_2->getSurface()->setVisible(false);
+ _class601_3->getSurface()->setVisible(false);
+ break;
+ case 0x2004:
+ _sprite4->getSurface()->setVisible(true);
+ setRectList(0x004B5990);
+ break;
+ case 0x4807:
+ _class593->sendMessage(0x2003, 0, this);
+ break;
+ case 0x480F:
+ _class593->sendMessage(0x2002, 0, this);
+ _class601_1->getSurface()->setVisible(true);
+ _class601_2->getSurface()->setVisible(true);
+ _class601_3->getSurface()->setVisible(true);
+ break;
+ case 0x4826:
+ if (sender == _class489) {
+ if (_flag1) {
+ setMessageList2(0x004B5868);
+ } else {
+ if (param.asInteger() == 1) {
+ _klayman->sendMessage(0x1014, _class489, this);
+ setMessageList2(0x004B5848);
+ } else if (_class489->sendMessage(0x480C, _klayman->getX() <= _class489->getX() ? 0 : 1, this) != 0) {
+ _klayman->sendEntityMessage(0x1014, _class489, this);
+ setMessageList2(0x004B5830);
+ } else {
+ setMessageList2(0x004B5800);
+ }
+ }
+ } else if (sender == _asTape) {
+ if (_flag1) {
+ setMessageList2(0x004B5868);
+ } else if (_messageListStatus != 2) {
+ _klayman->sendMessage(0x1014, _asTape, this);
+ setMessageList2(0x004B58E0);
+ }
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 80b2774..8e14202 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -254,6 +254,74 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Class549 : public AnimatedSprite {
+public:
+ Class549(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub455470();
+ void hide();
+ void sub4554F0();
+ void sub455550();
+};
+
+class Class592 : public AnimatedSprite {
+public:
+ Class592(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub455710();
+ void sub455740();
+};
+
+class Class593 : public AnimatedSprite {
+public:
+ Class593(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub4558F0();
+ void sub455920();
+ void sub455950();
+};
+
+class Class601 : public StaticSprite {
+public:
+ Class601(NeverhoodEngine *vm, uint32 fileHash, int index);
+};
+
+class Class513 : public AnimatedSprite {
+public:
+ Class513(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1308 : public Scene {
+public:
+ Scene1308(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_asTape;
+ Sprite *_class549;
+ Sprite *_class593;
+ Sprite *_class601_1;
+ Sprite *_class601_2;
+ Sprite *_class601_3;
+ AnimatedSprite *_class489;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_sprite4;
+ Sprite *_sprite5;
+ bool _flag1;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
Commit: 38378d2090ef637c632e7d867d9519f57ef5db6e
https://github.com/scummvm/scummvm/commit/38378d2090ef637c632e7d867d9519f57ef5db6e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add Scene1317
- Fix SmackerPlayer (last frame was dropped, this hopefully doesn't break other stuff...)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6e7eb15..fc2ca8e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -284,7 +284,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 16;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index c5d2870..7de50b1 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -207,6 +207,11 @@ void Module1300::createScene1308(int which) {
}
void Module1300::createScene1309(int which) {
+ _vm->gameState().sceneNum = 8;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 1);
+ SetUpdateHandler(&Module1300::updateScene1309);
}
void Module1300::createScene1310(int which) {
@@ -256,6 +261,11 @@ void Module1300::createScene1316(int which) {
}
void Module1300::createScene1317(int which) {
+ _vm->gameState().sceneNum = 16;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new Scene1317(_vm, this, which);
+ SetUpdateHandler(&Module1300::updateScene1317);
}
void Module1300::createScene1318(int which) {
@@ -359,6 +369,14 @@ void Module1300::updateScene1308() {
}
void Module1300::updateScene1309() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1306(2);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1310() {
@@ -452,6 +470,14 @@ void Module1300::updateScene1316() {
}
void Module1300::updateScene1317() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ createScene1318(-1);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1318() {
@@ -1991,4 +2017,159 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ SetMessageHandler(&Scene1317::handleMessage);
+ _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false));
+ _mouseCursor = addSprite(new Mouse433(_vm, 0x08284011, NULL));
+ _mouseCursor->getSurface()->setVisible(false);
+ _smackerFileHash = 0;
+ _smackerFlag1 = false;
+}
+
+void Scene1317::update() {
+ if (_smackerFileHash) {
+ _smackerPlayer->open(_smackerFileHash, _smackerFlag1);
+ _smackerFileHash = 0;
+ }
+ Scene::update();
+}
+
+void Scene1317::upChooseKing() {
+ if (!_klaymanBlinks && _klaymanBlinkCountdown != 0 && (--_klaymanBlinkCountdown == 0))
+ _klaymanBlinks = true;
+
+ if (!_klaymanBlinks && _smackerPlayer->getFrameNumber() + 1 >= 2) {
+ _smackerPlayer->rewind();
+ } else if (_klaymanBlinks && _smackerPlayer->getFrameNumber() + 1 >= 6) {
+ _smackerPlayer->rewind();
+ _klaymanBlinks = false;
+ _klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15;
+ }
+
+ if (!_klaymanBlinks && _decisionCountdown != 0 && (--_decisionCountdown == 0))
+ stNoDecisionYet();
+
+ if (_smackerFileHash) {
+ _smackerPlayer->open(_smackerFileHash, _smackerFlag1);
+ _smackerFileHash = 0;
+ }
+
+ Scene::update();
+
+}
+
+uint32 Scene1317::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ stChooseKing();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene1317::hmChooseKing(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x >= 21 && param.asPoint().y >= 24 &&
+ param.asPoint().x <= 261 && param.asPoint().y <= 280) {
+ stHoborgAsKing();
+ } else if (param.asPoint().x >= 313 && param.asPoint().y >= 184 &&
+ param.asPoint().x <= 399 && param.asPoint().y <= 379) {
+ stKlaymanAsKing();
+ } else if (param.asPoint().x >= 347 && param.asPoint().y >= 380 &&
+ param.asPoint().x <= 418 && param.asPoint().y <= 474) {
+ stKlaymanAsKing();
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene1317::hmNoDecisionYet(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ stChooseKing();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene1317::hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ stEndMovie();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene1317::hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ _parentModule->sendMessage(0x1009, 0, this);
+ break;
+ }
+ return messageResult;
+}
+
+void Scene1317::stChooseKing() {
+ _mouseCursor->getSurface()->setVisible(true);
+ SetMessageHandler(&Scene1317::hmChooseKing);
+ SetUpdateHandler(&Scene1317::upChooseKing);
+ _smackerFileHash = 0x10982841;
+ _smackerFlag1 = true;
+ _decisionCountdown = 450;
+ _klaymanBlinks = false;
+ _klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15;
+}
+
+void Scene1317::stNoDecisionYet() {
+ _mouseCursor->getSurface()->setVisible(false);
+ SetMessageHandler(&Scene1317::hmNoDecisionYet);
+ SetUpdateHandler(&Scene1317::update);
+ _smackerFileHash = 0x20982841;
+ _smackerFlag1 = false;
+}
+
+void Scene1317::stHoborgAsKing() {
+ _mouseCursor->getSurface()->setVisible(false);
+ SetMessageHandler(&Scene1317::hmHoborgAsKing);
+ SetUpdateHandler(&Scene1317::update);
+ _smackerFileHash = 0x40982841;
+ _smackerFlag1 = false;
+}
+
+void Scene1317::stKlaymanAsKing() {
+ _mouseCursor->getSurface()->setVisible(false);
+ SetMessageHandler(&Scene1317::hmKlaymanAsKing);
+ SetUpdateHandler(&Scene1317::update);
+ _smackerFileHash = 0x80982841;
+ _smackerFlag1 = false;
+}
+
+void Scene1317::stEndMovie() {
+ _mouseCursor->getSurface()->setVisible(false);
+ SetMessageHandler(&Scene1317::hmEndMovie);
+ SetUpdateHandler(&Scene1317::update);
+ _smackerFileHash = 0x40800711;
+ _smackerFlag1 = false;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 8e14202..0e9837c 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/smackerplayer.h"
namespace Neverhood {
@@ -322,6 +323,31 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene1317 : public Scene {
+public:
+ Scene1317(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SmackerPlayer *_smackerPlayer;
+ bool _klaymanBlinks;
+ int _klaymanBlinkCountdown;
+ int _decisionCountdown;
+ uint32 _smackerFileHash;
+ bool _smackerFlag1;
+ void update();
+ void upChooseKing();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmChooseKing(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmNoDecisionYet(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stChooseKing();
+ void stNoDecisionYet();
+ void stHoborgAsKing();
+ void stKlaymanAsKing();
+ void stEndMovie();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 39f49cb..0ebec5e 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -170,10 +170,9 @@ void SmackerPlayer::update() {
_dirtyFlag = false;
}
+#if 0
if (!_smackerDecoder->endOfVideo()) {
-
updateFrame();
-
if (_smackerDecoder->endOfVideo() && !_keepLastFrame) {
// Inform the scene about the end of the video playback
if (_scene) {
@@ -187,8 +186,23 @@ void SmackerPlayer::update() {
}
_flag2 = false;
}
-
}
+#endif
+
+ if (!_smackerDecoder->endOfVideo()) {
+ updateFrame();
+ } else if (!_keepLastFrame) {
+ // Inform the scene about the end of the video playback
+ if (_scene) {
+ _scene->sendMessage(0x3002, 0, this);
+ }
+ _flag2 = true;
+ } else {
+ rewind();
+ updateFrame();
+ _flag2 = false;
+ }
+
}
void SmackerPlayer::updateFrame() {
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index fb7f6da..883cb52 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -59,6 +59,7 @@ public:
uint32 getFrameNumber();
uint getStatus();
void setDrawPos(int16 x, int16 y);
+ void rewind();
protected:
Scene *_scene;
Palette *_palette;
@@ -72,7 +73,6 @@ protected:
bool _flag2;
bool _dirtyFlag;
int _drawX, _drawY;
- void rewind();
void update();
void updateFrame();
void updatePalette();
Commit: a21f9ef891d32487b0f6a57651aee2d8f7106a40
https://github.com/scummvm/scummvm/commit/a21f9ef891d32487b0f6a57651aee2d8f7106a40
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Add Scene1310 and Scene1311
Changed paths:
engines/neverhood/module1300.cpp
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 7de50b1..04f4a2e 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -215,9 +215,19 @@ void Module1300::createScene1309(int which) {
}
void Module1300::createScene1310(int which) {
+ _vm->gameState().sceneNum = 9;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createSmackerScene(0x20082818, true, true, false);
+ SetUpdateHandler(&Module1300::updateScene1310);
}
void Module1300::createScene1311(int which) {
+ _vm->gameState().sceneNum = 10;
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createSmackerScene(0x20082828, true, true, false);
+ SetUpdateHandler(&Module1300::updateScene1310);
}
void Module1300::createScene1312(int which) {
@@ -269,6 +279,7 @@ void Module1300::createScene1317(int which) {
}
void Module1300::createScene1318(int which) {
+ // TODO: Credits scene
}
void Module1300::updateScene1302() {
@@ -380,6 +391,17 @@ void Module1300::updateScene1309() {
}
void Module1300::updateScene1310() {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ if (_vm->gameState().sceneNum == 9)
+ createScene1315(0);
+ else
+ createScene1306(0);
+ _childObject->handleUpdate();
+ }
}
void Module1300::updateScene1311() {
Commit: b757e22f881797f51fa1fb951dd78a88d3ae15d9
https://github.com/scummvm/scummvm/commit/b757e22f881797f51fa1fb951dd78a88d3ae15d9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Multiple changes to make the game logic code cleaner (hopefully :)
- Introduce Scene::insertStaticSprite to create static sprites instead of the old "addSprite(new StaticSprite" (not used everywhere yet)
- Introduce macro InsertKlayman to create the Klayman object
- Change sendMessage semantics from "receiver->sendMessage(num,arg,sender)" to "sendMessage(receiver,num,arg)", the sender is always the sending object ("this")
- Similar changes using macros will follow
- And fixed a bug in the elevator
Changed paths:
engines/neverhood/collisionman.cpp
engines/neverhood/diskplayerscene.cpp
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerscene.cpp
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index 4296b91..a1314bf 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -98,7 +98,7 @@ void CollisionMan::checkCollision(Sprite *sprite, uint16 flags, int messageNum,
for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
Sprite *collSprite = *iter;
if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getRect())) {
- collSprite->sendMessage(messageNum, messageParam, sprite);
+ sprite->sendMessage(collSprite, messageNum, messageParam);
}
}
}
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index dd2c837..3eeef92 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -225,10 +225,10 @@ uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam &p
case 0x1011:
if (!_diskplayerScene->getFlag3()) {
if (_isPlaying) {
- _diskplayerScene->sendMessage(0x2001, 0, this);
+ sendMessage(_diskplayerScene, 0x2001, 0);
release();
} else {
- _diskplayerScene->sendMessage(0x2000, 0, this);
+ sendMessage(_diskplayerScene, 0x2000, 0);
press();
}
}
@@ -500,7 +500,7 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
case 0x0001:
// TODO: Debug/Cheat
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else if (!_flag3 &&
param.asPoint().x > 38 && param.asPoint().x < 598 &&
param.asPoint().y > 400 && param.asPoint().y < 460) {
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index e49aa94..582e93f 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -96,20 +96,23 @@ public:
(this->*_updateHandlerCb)();
}
bool hasMessageHandler() const { return _messageHandlerCb != NULL; }
- uint32 sendMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug(2, "sendMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
+ uint32 receiveMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug(2, "receiveMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
}
// NOTE: These were overloaded before for the various message parameter types
// it caused some problems so each type gets its own sendMessage variant now
- uint32 sendMessage(int messageNum, uint32 param, Entity *sender) {
- return sendMessage(messageNum, MessageParam(param), sender);
+ uint32 sendMessage(Entity *receiver, int messageNum, const MessageParam ¶m) {
+ return receiver->receiveMessage(messageNum, param, this);
}
- uint32 sendPointMessage(int messageNum, const NPoint ¶m, Entity *sender) {
- return sendMessage(messageNum, MessageParam(param), sender);
+ uint32 sendMessage(Entity *receiver, int messageNum, uint32 param) {
+ return receiver->receiveMessage(messageNum, MessageParam(param), this);
}
- uint32 sendEntityMessage(int messageNum, Entity *param, Entity *sender) {
- return sendMessage(messageNum, MessageParam((Entity*)param), sender);
+ uint32 sendPointMessage(Entity *receiver, int messageNum, const NPoint ¶m) {
+ return receiver->receiveMessage(messageNum, MessageParam(param), this);
+ }
+ uint32 sendEntityMessage(Entity *receiver, int messageNum, Entity *param) {
+ return receiver->receiveMessage(messageNum, MessageParam((Entity*)param), this);
}
int getPriority() const { return _priority; }
// Shortcuts for game variable access
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index fc2ca8e..650287b 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -71,7 +71,7 @@ void GameModule::handleMouseMove(int16 x, int16 y) {
mousePos.x = x;
mousePos.y = y;
debug(2, "GameModule::handleMouseMove(%d, %d)", x, y);
- _childObject->sendPointMessage(0, mousePos, this);
+ sendPointMessage(_childObject, 0, mousePos);
}
}
@@ -81,7 +81,7 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
mousePos.x = x;
mousePos.y = y;
debug(2, "GameModule::handleMouseDown(%d, %d)", x, y);
- _childObject->sendPointMessage(1, mousePos, this);
+ sendPointMessage(_childObject, 1, mousePos);
}
}
@@ -267,9 +267,9 @@ void GameModule::startup() {
//createModule1700(-1);
//createModule1700(1);
//createModule1400(-1);
-#if 0
- _vm->gameState().sceneNum = 10;
- createModule3000(-1);
+#if 1
+ _vm->gameState().sceneNum = 1;
+ createModule1000(-1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -280,11 +280,11 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 0
- _vm->gameState().sceneNum = 46;
+ _vm->gameState().sceneNum = 0;
createModule2200(-1);
#endif
-#if 1
- _vm->gameState().sceneNum = 16;
+#if 0
+ _vm->gameState().sceneNum = 5;
createModule1300(-1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 26f9d1a..e0ca57c 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -57,7 +57,7 @@ static const KlaymanTableItem klaymanTable4[] = {
// Klayman
-Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority)
+Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
_counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
_counter2(0), /*_field118(0), */_status2(0), _flagE5(true), _attachedSprite(NULL), _flagE1(false),
@@ -360,7 +360,7 @@ uint32 Klayman::handleMessage41D640(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0xC1380080) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x4806, 0, this);
+ sendMessage(_attachedSprite, 0x4806, 0);
_soundResource1.play(0xC8004340);
}
} else if (param.asInteger() == 0x02B20220) {
@@ -499,7 +499,7 @@ void Klayman::sub41C7B0() {
removeCallbackList();
#endif
} else {
- _parentScene->sendMessage(0x1006, 0, this);
+ sendMessage(_parentScene, 0x1006, 0);
}
}
@@ -975,15 +975,15 @@ void Klayman::spriteUpdate41F320() {
_deltaX = 0;
if (xdiff == 0) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
} else if (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
} else if (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
} else if (_status3 == 3 && xdiff < 30) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
} else if (_status3 == 3 && xdiff < 150 && _frameIndex >= 6) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdelta;
@@ -1026,9 +1026,9 @@ uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
break;
}
@@ -1053,7 +1053,7 @@ uint32 Klayman::handleMessage41D4C0(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0xC1380080) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x4806, 0, this);
+ sendMessage(_attachedSprite, 0x4806, 0);
}
_soundResource1.play(0x40208200);
} else if (param.asInteger() == 0x02B20220) {
@@ -1090,7 +1090,7 @@ uint32 Klayman::handleMessage41DAD0(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0x0D01B294) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x480B, 0, this);
+ sendMessage(_attachedSprite, 0x480B, 0);
}
} else if (param.asInteger() == 0x32180101) {
_soundResource1.play(0x4924AAC4);
@@ -1375,7 +1375,7 @@ void Klayman::sub4201C0() {
SetMessageHandler(&Klayman::handleMessage41D790);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetAnimationCallback3(&Klayman::sub420340);
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
uint32 Klayman::handleMessage41D790(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1384,15 +1384,15 @@ uint32 Klayman::handleMessage41D790(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0x168050A0) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x4806, 0, this);
+ sendMessage(_attachedSprite, 0x4806, 0);
}
_flagE5 = true;
} else if (param.asInteger() == 0x320AC306) {
_soundResource1.play(0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
break;
}
@@ -1430,7 +1430,7 @@ void Klayman::sub420290() {
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D880);
SetAnimationCallback3(&Klayman::sub420380);
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
}
@@ -1440,14 +1440,14 @@ uint32 Klayman::handleMessage41D880(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0x168050A0) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x4806, 0, this);
+ sendMessage(_attachedSprite, 0x4806, 0);
}
} else if (param.asInteger() == 0x320AC306) {
_soundResource1.play(0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
break;
}
@@ -1475,7 +1475,7 @@ void Klayman::sub4203C0() {
_status2 = 1;
_flagE5 = false;
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x4807, 0, this);
+ sendMessage(_attachedSprite, 0x4807, 0);
_attachedSprite = NULL;
}
setFileHash(0xB869A4B9, 0, -1);
@@ -1597,11 +1597,11 @@ uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, E
}
if (_statusE0 == 1) {
if (_y4 >= _y - 30) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
}
} else {
if (_y4 <= _y) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
}
}
}
@@ -1651,9 +1651,9 @@ uint32 Klayman::handleMessage41E490(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5) {
- _parentScene->sendMessage(0x482A, 0, this);
+ sendMessage(_parentScene, 0x482A, 0);
} else if (param.asInteger() == 0x110010D1) {
- _parentScene->sendMessage(0x482B, 0, this);
+ sendMessage(_parentScene, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
if (_soundFlag) {
_soundResource1.play(0x48498E46);
@@ -1795,7 +1795,7 @@ void Klayman::sub420F20() {
void Klayman::spriteUpdate41F5A0() {
if (!_flagF8 && ABS(_x4 - _x) < 80) {
- _parentScene->sendMessage(0x4829, 0, this);
+ sendMessage(_parentScene, 0x4829, 0);
_flagF8 = true;
}
AnimatedSprite::updateDeltaXY();
@@ -1812,7 +1812,7 @@ void Klayman::sub420600() {
}
void Klayman::sub420660() {
- _attachedSprite->sendMessage(0x4807, 0, this);
+ sendMessage(_attachedSprite, 0x4807, 0);
}
uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1820,9 +1820,9 @@ uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0x01084280) {
if (_attachedSprite)
- _attachedSprite->sendMessage(0x480B, _doDeltaX ? 1 : 0, this);
+ sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
} else if (param.asInteger() == 0x02421405) {
- if (_flagE4 && _attachedSprite->hasMessageHandler() && _attachedSprite->sendMessage(0x480C, _doDeltaX ? 1 : 0, this) != 0) {
+ if (_flagE4 && _attachedSprite->hasMessageHandler() && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
sub4205C0();
} else {
setCallback1(AnimationCallback(&Klayman::sub420660));
@@ -1869,7 +1869,7 @@ void Klayman::sub420C50() {
if (_flagF7) {
sub420D50();
} else {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
setFileHash(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
@@ -1882,7 +1882,7 @@ void Klayman::sub420C50() {
void Klayman::sub420CD0() {
setFileHash(0x0D318140, 0, -1);
- _attachedSprite->sendMessage(0x480F, 0, this);
+ sendMessage(_attachedSprite, 0x480F, 0);
SetAnimationCallback3(&Klayman::sub420D10);
}
@@ -1900,14 +1900,14 @@ void Klayman::sub420D50() {
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
- _attachedSprite->sendMessage(0x4807, 0, this);
+ sendMessage(_attachedSprite, 0x4807, 0);
SetAnimationCallback3(&Klayman::sub420DA0);
_flagE5 = false;
}
void Klayman::sub420DA0() {
setFileHash(0x0D318140, 0, -1);
- _attachedSprite->sendMessage(0x480F, 0, this);
+ sendMessage(_attachedSprite, 0x480F, 0);
SetAnimationCallback3(&Klayman::sub420DE0);
}
@@ -1927,7 +1927,7 @@ void Klayman::sub420E20() {
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
- _attachedSprite->sendMessage(0x4807, 0, this);
+ sendMessage(_attachedSprite, 0x4807, 0);
SetAnimationCallback3(&Klayman::sub420E90);
_flagE5 = false;
_flagF7 = false;
@@ -1942,7 +1942,7 @@ void Klayman::sub420E90() {
}
void Klayman::sub420EB0() {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
}
void Klayman::sub420680() {
@@ -2002,7 +2002,7 @@ uint32 Klayman::handleMessage41DD20(int messageNum, const MessageParam ¶m, E
case 0x100D:
if (param.asInteger() == 0x040D4186) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x4808, 0, this);
+ sendMessage(_attachedSprite, 0x4808, 0);
}
}
break;
@@ -2078,7 +2078,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4836:
if (param.asInteger() == 1) {
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
setCallback2(AnimationCallback(&Klayman::sub4211F0));
}
break;
@@ -2108,7 +2108,7 @@ uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x480F, 0, this);
+ sendMessage(_attachedSprite, 0x480F, 0);
}
break;
}
@@ -2117,8 +2117,8 @@ uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶
// KmScene1002
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, Sprite *class599, Sprite *ssLadderArch, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _class599(class599), _ssLadderArch(ssLadderArch), _otherSprite(NULL),
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL),
_status(0) {
setKlaymanTable1();
@@ -2197,21 +2197,21 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41CCE0(param.asInteger());
break;
case 0x4820:
- _parentScene->sendMessage(0x2005, 0, this);
+ sendMessage(_parentScene, 0x2005, 0);
setCallback2(AnimationCallback(&Klayman::sub420970));
break;
case 0x4821:
- _parentScene->sendMessage(0x2005, 0, this);
+ sendMessage(_parentScene, 0x2005, 0);
_y4 = param.asInteger();
setCallback2(AnimationCallback(&Klayman::sub4209D0));
break;
case 0x4822:
- _parentScene->sendMessage(0x2005, 0, this);
+ sendMessage(_parentScene, 0x2005, 0);
_y4 = param.asInteger();
setCallback2(AnimationCallback(&Klayman::sub420AD0));
break;
case 0x4823:
- _parentScene->sendMessage(0x2006, 0, this);
+ sendMessage(_parentScene, 0x2006, 0);
setCallback2(AnimationCallback(&Klayman::sub420BC0));
break;
case 0x482E:
@@ -2252,19 +2252,19 @@ uint32 KmScene1002::handleMessage449800(int messageNum, const MessageParam ¶
case 0x100D:
if (param.asInteger() == 0x168050A0) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x480F, 0, this);
+ sendMessage(_attachedSprite, 0x480F, 0);
}
} else if (param.asInteger() == 0x586B0300) {
if (_otherSprite) {
- _otherSprite->sendMessage(0x480E, 1, this);
+ sendMessage(_otherSprite, 0x480E, 1);
}
} else if (param.asInteger() == 0x4AB28209) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
}
} else if (param.asInteger() == 0x88001184) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
}
break;
@@ -2301,12 +2301,12 @@ uint32 KmScene1002::handleMessage449990(int messageNum, const MessageParam ¶
case 0x100D:
if (param.asInteger() == 0x942D2081) {
_flagE5 = false;
- _attachedSprite->sendMessage(0x2003, 0, this);
+ sendMessage(_attachedSprite, 0x2003, 0);
} else if (param.asInteger() == 0xDA600012) {
sub44A370();
} else if (param.asInteger() == 0x0D01B294) {
_flagE5 = false;
- _attachedSprite->sendMessage(0x480B, 0, this);
+ sendMessage(_attachedSprite, 0x480B, 0);
}
break;
}
@@ -2318,12 +2318,12 @@ uint32 KmScene1002::handleMessage449A30(int messageNum, const MessageParam ¶
case 0x100D:
if (param.asInteger() == 0x01084280) {
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x480B, (uint32)_doDeltaX, this);
+ sendMessage(_attachedSprite, 0x480B, (uint32)_doDeltaX);
}
} else if (param.asInteger() == 0x02421405) {
if (_flagE4) {
if (_attachedSprite) {
- if (_attachedSprite->sendMessage(0x480C, (uint32)_doDeltaX, this) != 0) {
+ if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0) {
sub44A460();
}
}
@@ -2331,9 +2331,9 @@ uint32 KmScene1002::handleMessage449A30(int messageNum, const MessageParam ¶
SetMessageHandler(&KmScene1002::handleMessage449BA0);
}
} else if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
_soundResource1.play(0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
@@ -2352,9 +2352,9 @@ uint32 KmScene1002::handleMessage449BA0(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
_soundResource1.play(0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
@@ -2407,7 +2407,7 @@ void KmScene1002::spriteUpdate449DC0() {
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
processDelta();
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
}
_vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
}
@@ -2421,7 +2421,7 @@ void KmScene1002::sub449E20() {
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1002::handleMessage449800);
SetAnimationCallback3(&Klayman::sub420420);
- _attachedSprite->sendMessage(0x482B, 0, this);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
}
@@ -2449,12 +2449,12 @@ void KmScene1002::sub449EF0() {
SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
SetAnimationCallback3(&KmScene1002::sub449F70);
- _class599->sendMessage(0x482A, 0, this);
- _ssLadderArch->sendMessage(0x482A, 0, this);
+ sendMessage(_class599, 0x482A, 0);
+ sendMessage(_ssLadderArch, 0x482A, 0);
}
void KmScene1002::sub449F70() {
- _parentScene->sendMessage(0x1024, 1, this);
+ sendMessage(_parentScene, 0x1024, 1);
_soundResource1.play(0x41648271);
_status2 = 1;
_flagE5 = false;
@@ -2464,11 +2464,11 @@ void KmScene1002::sub449F70() {
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1002::handleMessage41D480);
SetAnimationCallback3(&KmScene1002::sub44A230);
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
- _class599->sendMessage(0x482B, 0, this);
- _ssLadderArch->sendMessage(0x482B, 0, this);
+ sendMessage(_class599, 0x482B, 0);
+ sendMessage(_ssLadderArch, 0x482B, 0);
}
void KmScene1002::sub44A050() {
@@ -2480,8 +2480,8 @@ void KmScene1002::sub44A050() {
SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
SetMessageHandler(&Klayman::handleMessage41D480);
SetAnimationCallback3(&KmScene1002::sub449F70);
- _class599->sendMessage(0x482A, 0, this);
- _ssLadderArch->sendMessage(0x482A, 0, this);
+ sendMessage(_class599, 0x482A, 0);
+ sendMessage(_ssLadderArch, 0x482A, 0);
}
void KmScene1002::sub44A0D0() {
@@ -2493,12 +2493,12 @@ void KmScene1002::sub44A0D0() {
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
SetAnimationCallback3(&KmScene1002::sub44A150);
- _class599->sendMessage(0x482A, 0, this);
- _ssLadderArch->sendMessage(0x482A, 0, this);
+ sendMessage(_class599, 0x482A, 0);
+ sendMessage(_ssLadderArch, 0x482A, 0);
}
void KmScene1002::sub44A150() {
- _parentScene->sendMessage(0x1024, 1, this);
+ sendMessage(_parentScene, 0x1024, 1);
_soundResource1.play(0x41648271);
_status2 = 1;
_flagE5 = false;
@@ -2508,11 +2508,11 @@ void KmScene1002::sub44A150() {
SetMessageHandler(&KmScene1002::handleMessage41D480);
SetSpriteCallback(NULL);
SetAnimationCallback3(&KmScene1002::sub44A230);
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
- _class599->sendMessage(0x482B, 0, this);
- _ssLadderArch->sendMessage(0x482B, 0, this);
+ sendMessage(_class599, 0x482B, 0);
+ sendMessage(_ssLadderArch, 0x482B, 0);
}
void KmScene1002::sub44A230() {
@@ -2522,7 +2522,7 @@ void KmScene1002::sub44A230() {
void KmScene1002::sub44A250() {
if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A250))) {
- _parentScene->sendMessage(0x1024, 3, this);
+ sendMessage(_parentScene, 0x1024, 3);
_status2 = 2;
_flagE5 = false;
setFileHash(0xB93AB151, 0, -1);
@@ -2536,7 +2536,7 @@ void KmScene1002::sub44A250() {
void KmScene1002::sub44A2C0() {
if (_attachedSprite) {
_x = ((Sprite*)_attachedSprite)->getX();
- _attachedSprite->sendMessage(0x4807, 0, this);
+ sendMessage(_attachedSprite, 0x4807, 0);
_attachedSprite = NULL;
}
_status2 = 2;
@@ -2569,7 +2569,7 @@ void KmScene1002::sub44A370() {
}
void KmScene1002::sub44A3C0() {
- _parentScene->sendMessage(0x1024, 1, this);
+ sendMessage(_parentScene, 0x1024, 1);
}
void KmScene1002::sub44A3E0() {
@@ -2597,7 +2597,7 @@ void KmScene1002::sub44A460() {
}
void KmScene1002::sub44A4B0() {
- _attachedSprite->sendMessage(0x482A, 0, this);
+ sendMessage(_attachedSprite, 0x482A, 0);
}
// KmScene1004
@@ -2628,30 +2628,30 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&KmScene1004::sub478170));
break;
case 0x4820:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
setCallback2(AnimationCallback(&Klayman::sub420970));
break;
case 0x4821:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_y4 = param.asInteger();
setCallback2(AnimationCallback(&Klayman::sub4209D0));
break;
case 0x4822:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_y4 = param.asInteger();
setCallback2(AnimationCallback(&Klayman::sub420AD0));
break;
case 0x4823:
- _parentScene->sendMessage(0x2001, 0, this);
+ sendMessage(_parentScene, 0x2001, 0);
setCallback2(AnimationCallback(&Klayman::sub420BC0));
break;
case 0x4824:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_y4 = _dataResource.getPoint(param.asInteger()).y;
setCallback2(AnimationCallback(&Klayman::sub4209D0));
break;
case 0x4825:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_y4 = _dataResource.getPoint(param.asInteger()).y;
setCallback2(AnimationCallback(&Klayman::sub420AD0));
break;
@@ -2674,7 +2674,7 @@ uint32 KmScene1004::handleMessage478110(int messageNum, const MessageParam ¶
case 0x100D:
if (param.asInteger() == 0x04684052) {
_flagE5 = true;
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
}
break;
}
@@ -2818,7 +2818,7 @@ uint32 KmScene1201::handleMessage40DDF0(int messageNum, const MessageParam ¶
if (param.asInteger() == 0x01084280) {
_soundResource1.play(0x405002D8);
if (_attachedSprite) {
- _attachedSprite->sendMessage(0x480B, 0, this);
+ sendMessage(_attachedSprite, 0x480B, 0);
}
} else if (param.asInteger() == 0x02421405) {
if (_countdown != 0) {
@@ -2876,7 +2876,7 @@ void KmScene1201::sub40DFA0() {
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::handleMessage40DEA0);
SetAnimationCallback3(&Klayman::sub41FC80);
- _class464->sendMessage(0x2006, 0, this);
+ sendMessage(_class464, 0x2006, 0);
_soundResource1.play(0x62E0A356);
}
}
@@ -2918,7 +2918,7 @@ uint32 KmScene1303::handleMessage4160A0(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == calcHash("PopBalloon")) {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
} else if (param.asInteger() == 0x02B20220) {
_soundResource1.play(0xC5408620);
} else if (param.asInteger() == 0x0A720138) {
@@ -3175,12 +3175,12 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&Klayman::sub421160));
break;
case 0x4835:
- _parentScene->sendMessage(0x2000, 1, this);
+ sendMessage(_parentScene, 0x2000, 1);
_flag1 = true;
setCallback2(AnimationCallback(&Klayman::sub4212C0));
break;
case 0x4836:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_flag1 = false;
setCallback2(AnimationCallback(&Klayman::sub421310));
break;
@@ -3702,12 +3702,12 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&Klayman::sub421160));
break;
case 0x4835:
- _parentScene->sendMessage(0x2000, 1, this);
+ sendMessage(_parentScene, 0x2000, 1);
_flag = true;
setCallback2(AnimationCallback(&Klayman::sub4212C0));
break;
case 0x4836:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_flag = false;
setCallback2(AnimationCallback(&Klayman::sub421310));
break;
@@ -3741,7 +3741,7 @@ void KmScene1705::spriteUpdate468A30() {
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
processDelta();
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
}
}
@@ -3821,12 +3821,12 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
setCallback2(AnimationCallback(&Klayman::sub421160));
break;
case 0x4835:
- _parentScene->sendMessage(0x2000, 1, this);
+ sendMessage(_parentScene, 0x2000, 1);
_flag = true;
setCallback2(AnimationCallback(&Klayman::sub4212C0));
break;
case 0x4836:
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_flag = false;
setCallback2(AnimationCallback(&Klayman::sub421310));
break;
@@ -4189,14 +4189,14 @@ void KmScene2206::spriteUpdate482450() {
_yDelta++;
_y += _yDelta;
if (_y > 600) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
}
}
void KmScene2206::sub482490() {
if (!sub41CF10(AnimationCallback(&KmScene2206::sub482490))) {
_status2 = 1;
- _parentScene->sendMessage(0x4803, 0, this);
+ sendMessage(_parentScene, 0x4803, 0);
_flagE5 = false;
_yDelta = 0;
setFileHash(0x5420E254, 0, -1);
@@ -4322,7 +4322,7 @@ void KmScene2207::sub4424B0() {
void KmScene2207::sub442520() {
setFileHash(0x0D318140, 0, -1);
SetAnimationCallback3(&KmScene2207::sub442560);
- _attachedSprite->sendMessage(0x480F, 0, this);
+ sendMessage(_attachedSprite, 0x480F, 0);
}
void KmScene2207::sub442560() {
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a5381c8..23bd110 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -41,7 +41,8 @@ struct KlaymanTableItem {
class Klayman : public AnimatedSprite {
public:
- Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000);
+ Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
+ void init() { }
void update();
@@ -259,7 +260,11 @@ protected:
class KmScene1002 : public Klayman {
public:
- KmScene1002(NeverhoodEngine *vm, Entity *parentScene, Sprite *class599, Sprite *ssLadderArch, int16 x, int16 y);
+ KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ void init(Sprite *class599, Sprite *ssLadderArch) {
+ _class599 = class599;
+ _ssLadderArch = ssLadderArch;
+ }
protected:
Sprite *_class599;
Sprite *_ssLadderArch;
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index edf67c7..c38b96e 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -47,7 +47,7 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
switch (messageNum) {
case 0x0008:
if (_parentModule)
- _parentModule->sendMessage(8, 0, this);
+ sendMessage(_parentModule, 8, 0);
return 0;
case 0x1009:
_field24 = -1;
@@ -67,7 +67,7 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
return 0;
default:
if (_childObject && sender == _parentModule)
- return _childObject->sendMessage(messageNum, param, sender);
+ return sender->sendMessage(_childObject, messageNum, param);
}
return 0;
}
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 5e1ae6f..011ea9e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -67,7 +67,6 @@ Module1000::~Module1000() {
void Module1000::createScene1001(int which) {
_vm->gameState().sceneNum = 0;
_childObject = new Scene1001(_vm, this, which);
- // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3);
// TODO Music18hList_play(0x061880C6, 0, 0, 1);
SetUpdateHandler(&Module1000::updateScene1001);
}
@@ -75,7 +74,6 @@ void Module1000::createScene1001(int which) {
void Module1000::createScene1002(int which) {
_vm->gameState().sceneNum = 1;
_childObject = new Scene1002(_vm, this, which);
- // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
// TODO Music18hList_play(0x061880C6, 0, 0, 1);
SetUpdateHandler(&Module1000::updateScene1002);
}
@@ -91,7 +89,6 @@ void Module1000::createScene1004(int which) {
_vm->gameState().sceneNum = 3;
_childObject = new Scene1004(_vm, this, which);
SetUpdateHandler(&Module1000::updateScene1004);
- // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1);
// TODO Music18hList_stop(0x061880C6, 0, 2);
}
@@ -106,7 +103,6 @@ void Module1000::createScene1005(int which) {
void Module1000::updateScene1001() {
_childObject->handleUpdate();
if (_done) {
- debug("SCENE 1001 DONE; _field20 = %d", _field20);
_done = false;
delete _childObject;
_childObject = NULL;
@@ -118,30 +114,16 @@ void Module1000::updateScene1001() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 2) {
- // TODO ResourceTable_multiLoad(&_resourceTable2, &_resourceTable1, &_resourceTable3);
- _field24 = -1;
- } else {
- // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable1);
- _field24 = -1;
- }
- }
- if (_field26 >= 0) {
- // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3);
- _field26 = -1;
- }
}
void Module1000::updateScene1002() {
_childObject->handleUpdate();
if (_done) {
- debug("SCENE 1002 DONE; _field20 = %d", _field20);
_done = false;
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else if (_field20 == 2) {
createScene1004(0);
_childObject->handleUpdate();
@@ -150,27 +132,6 @@ void Module1000::updateScene1002() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 1) {
- _parentModule->sendMessage(0x100A, 0, this);
- } else if (_field24 == 2) {
- // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1);
- } else {
- // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable3);
- }
- _field24 = -1;
- }
- if (_field26 >= 0) {
- if (_field26 == 1) {
- _parentModule->sendMessage(0x1023, 0, this);
- } else {
- // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
- }
- _field26 = -1;
- }
- if (_field28 >= 0) {
- _field28 = -1;
- }
}
void Module1000::updateScene1003() {
@@ -187,7 +148,6 @@ void Module1000::updateScene1003() {
void Module1000::updateScene1004() {
_childObject->handleUpdate();
if (_done) {
- debug("SCENE 1004 DONE; _field20 = %d", _field20);
_done = false;
delete _childObject;
_childObject = NULL;
@@ -199,22 +159,11 @@ void Module1000::updateScene1004() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 0) {
- // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1);
- }
- _field24 = -1;
- }
- if (_field26 >= 0) {
- // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1);
- _field26 = -1;
- }
}
void Module1000::updateScene1005() {
_childObject->handleUpdate();
if (_done) {
- debug("SCENE 1005 DONE");
// TODO Music18hList_stop(_musicFileHash, 0, 1);
_done = false;
delete _childObject;
@@ -323,7 +272,7 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
case 0x100D:
if (param.asInteger() == 0x00352100) {
if (_asDoor) {
- _asDoor->sendMessage(0x2000, 0, this);
+ sendMessage(_asDoor, 0x2000, 0);
}
} else if (param.asInteger() == 0x0A1A0109) {
_soundResource.play(0x66410886);
@@ -388,13 +337,13 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x00C0C444) {
- _parentScene->sendMessage(0x480F, 0, this);
+ sendMessage(_parentScene, 0x480F, 0);
} else if (param.asInteger() == 0xC41A02C0) {
_soundResource.play(0x40581882);
}
break;
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x3002:
@@ -405,10 +354,10 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
setFileHash(0x04A98C36, 0, -1);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -434,7 +383,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x480B:
- _parentScene->sendMessage(0x480B, 0, this);
+ sendMessage(_parentScene, 0x480B, 0);
_surface->setVisible(true);
_countdown = 8;
_soundResource.play(_soundFileHash);
@@ -483,7 +432,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
addSprite(_klayman);
- tempSprite = addSprite(new StaticSprite(_vm, 0x2080A3A8, 1300));
+ tempSprite = insertStaticSprite(0x2080A3A8, 1300);
// TODO: This sucks somehow, find a better way
_klayman->getSurface()->getClipRect().x1 = 0;
@@ -503,13 +452,13 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_asLever = addSprite(new AsScene1001Lever(_vm, this, 150, 433, 1));
- addSprite(new StaticSprite(_vm, 0x809861A6, 950));
- addSprite(new StaticSprite(_vm, 0x89C03848, 1100));
+ insertStaticSprite(0x809861A6, 950);
+ insertStaticSprite(0x89C03848, 1100);
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x15288120, 100, 0));
if (getGlobalVar(0x03C698DA) == 0) {
- tempSprite = addSprite(new StaticSprite(_vm, 0x8C066150, 200));
+ tempSprite = insertStaticSprite(0x8C066150, 200);
_asWindow = addSprite(new AsScene1001Window(_vm));
_asWindow->getSurface()->getClipRect().x1 = tempSprite->getSurface()->getDrawRect().x;
_asWindow->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
@@ -534,18 +483,18 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x000D:
if (param.asInteger() == 0x188B2105) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
messageResult = 1;
}
break;
case 0x100D:
if (param.asInteger() == 0x00342624) {
- _klayman->sendMessage(0x1014, _asLever, this);
+ sendEntityMessage(_klayman, 0x1014, _asLever);
setMessageList2(0x004B4910);
messageResult = 1;
} else if (param.asInteger() == 0x21E64A00) {
@@ -556,7 +505,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
messageResult = 1;
} else if (param.asInteger() == 0x040424D0) {
- _klayman->sendMessage(0x1014, _ssButton, this);
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x80006358) {
if (getGlobalVar(0x03C698DA)) {
setMessageList(0x004B4938);
@@ -570,12 +519,12 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (_asWindow) {
- _asWindow->sendMessage(0x2001, 0, this);
+ sendMessage(_asWindow, 0x2001, 0);
}
break;
case 0x480F:
if (_asHammer) {
- _asHammer->sendMessage(0x2000, 0, this);
+ sendMessage(_asHammer, 0x2000, 0);
}
break;
}
@@ -594,10 +543,10 @@ uint32 SsScene1002LadderArch::handleMessage(int messageNum, const MessageParam &
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x482A:
- _parentScene->sendMessage(0x1022, 995, this);
+ sendMessage(_parentScene, 0x1022, 995);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1015, this);
+ sendMessage(_parentScene, 0x1022, 1015);
break;
}
return messageResult;
@@ -613,10 +562,10 @@ uint32 Class599::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x482A:
- _parentScene->sendMessage(0x1022, 995, this);
+ sendMessage(_parentScene, 0x1022, 995);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1015, this);
+ sendMessage(_parentScene, 0x1022, 1015);
break;
}
return messageResult;
@@ -666,7 +615,7 @@ uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam &
switch (messageNum) {
case 0x4806:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
- _parentScene->sendMessage(0x4806, 0, this);
+ sendMessage(_parentScene, 0x4806, 0);
SetMessageHandler(&AsScene1002Ring::handleMessage447760);
if (_flag1) {
setFileHash(0x87502558, 0, -1);
@@ -676,15 +625,15 @@ uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam &
break;
case 0x480F:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
- _parentScene->sendMessage(0x480F, 0, this);
+ sendMessage(_parentScene, 0x480F, 0);
SetMessageHandler(&AsScene1002Ring::handleMessage447890);
setFileHash(0x861A2020, 0, -1);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -703,16 +652,16 @@ uint32 AsScene1002Ring::handleMessage447760(int messageNum, const MessageParam &
}
break;
case 0x4807:
- _parentScene->sendMessage(0x4807, 0, this);
+ sendMessage(_parentScene, 0x4807, 0);
setDoDeltaX(_vm->_rnd->getRandomNumber(1));
setFileHash(0x8258A030, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -726,10 +675,10 @@ uint32 AsScene1002Ring::handleMessage447890(int messageNum, const MessageParam &
SetMessageHandler(&AsScene1002Ring::handleMessage447930);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -739,16 +688,16 @@ uint32 AsScene1002Ring::handleMessage447930(int messageNum, const MessageParam &
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4807:
- _parentScene->sendMessage(0x4807, 0, this);
+ sendMessage(_parentScene, 0x4807, 0);
setDoDeltaX(_vm->_rnd->getRandomNumber(1));
setFileHash(0x8258A030, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -766,10 +715,10 @@ uint32 AsScene1002Ring::handleMessage447A00(int messageNum, const MessageParam &
setFileHash(0xA85C4011, 0, -1);
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -891,7 +840,7 @@ uint32 AsScene1002DoorSpy::handleMessage4489D0(int messageNum, const MessagePara
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xA61CA1C2) {
- _class505->sendMessage(0x2004, 0, this);
+ sendMessage(_class505, 0x2004, 0);
} else if (param.asInteger() == 0x14CE0620) {
_soundResource.play();
}
@@ -1025,7 +974,7 @@ uint32 Class426::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x480B:
- _parentScene->sendMessage(0x480B, 0, this);
+ sendMessage(_parentScene, 0x480B, 0);
_status = 1;
_countdown = 4;
_surface->setVisible(true);
@@ -1098,12 +1047,12 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
case 0x1011:
if (_flag) {
if (_x >= 154 && _x <= 346) {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
messageResult = 1;
}
} else {
if (_x >= 174 && _x <= 430) {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
messageResult = 1;
}
}
@@ -1146,10 +1095,10 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
sub448780();
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 995, this);
+ sendMessage(_parentScene, 0x1022, 995);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1015, this);
+ sendMessage(_parentScene, 0x1022, 1015);
break;
}
return messageResult;
@@ -1174,14 +1123,14 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const Messag
} else if (param.asInteger() == 0x41881801) {
if (_flag) {
if (_x > 330) {
- _klayman->sendMessage(0x4811, 2, this);
+ sendMessage(_klayman, 0x4811, 2);
} else if (_x > 265) {
- _klayman->sendMessage(0x4811, 0, this);
+ sendMessage(_klayman, 0x4811, 0);
} else {
- _klayman->sendMessage(0x4811, 0, this);
+ sendMessage(_klayman, 0x4811, 0);
}
} else {
- _klayman->sendMessage(0x4811, 0, this);
+ sendMessage(_klayman, 0x4811, 0);
}
} else if (param.asInteger() == 0x522200A0) {
_soundResource.play(0x931080C8);
@@ -1191,10 +1140,10 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const Messag
removeCallbacks();
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 995, this);
+ sendMessage(_parentScene, 0x1022, 995);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1015, this);
+ sendMessage(_parentScene, 0x1022, 1015);
break;
}
return messageResult;
@@ -1216,7 +1165,7 @@ void AsScene1002VenusFlyTrap::sub448530() {
}
void AsScene1002VenusFlyTrap::sub448560() {
- _parentScene->sendMessage(0x4807, 0, this);
+ sendMessage(_parentScene, 0x4807, 0);
setFileHash(0x82292851, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
@@ -1287,7 +1236,7 @@ void AsScene1002VenusFlyTrap::sub448780() {
} else {
setDoDeltaX(_x > 320 ? 1 : 0);
}
- _klayman->sendMessage(0x2001, 0, this);
+ sendMessage(_klayman, 0x2001, 0);
setFileHash(0x8C2C80D4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
@@ -1426,7 +1375,7 @@ uint32 Class479::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
- _parentScene->sendMessage(0x1022, 1200, this);
+ sendMessage(_parentScene, 0x1022, 1200);
_flag1 = true;
_savedClipRect = _surface->getClipRect();
_surface->getClipRect().x1 = 0;
@@ -1434,7 +1383,7 @@ uint32 Class479::handleMessage(int messageNum, const MessageParam ¶m, Entity
_surface->getClipRect().x2 = 640;
_surface->getClipRect().y2 = 480;
} else if (param.asInteger() == 0x88001184) {
- _parentScene->sendMessage(0x1022, 1000, this);
+ sendMessage(_parentScene, 0x1022, 1000);
if (_flag1) {
_surface->getClipRect() = _savedClipRect;
}
@@ -1464,19 +1413,19 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_flag = false;
- addSprite(new StaticSprite(_vm, 0x06149428, 1100));
- addSprite(new StaticSprite(_vm, 0x312C8774, 1100));
+ insertStaticSprite(0x06149428, 1100);
+ insertStaticSprite(0x312C8774, 1100);
_ssLadderArch = addSprite(new SsScene1002LadderArch(_vm, this));
- _ssLadderArchPart1 = addSprite(new StaticSprite(_vm, 0x060000A0, 1200));
- _ssLadderArchPart2 = addSprite(new StaticSprite(_vm, 0xB2A423B0, 1100));
- _ssLadderArchPart3 = addSprite(new StaticSprite(_vm, 0x316E0772, 1100));
+ _ssLadderArchPart1 = insertStaticSprite(0x060000A0, 1200);
+ _ssLadderArchPart2 = insertStaticSprite(0xB2A423B0, 1100);
+ _ssLadderArchPart3 = insertStaticSprite(0x316E0772, 1100);
_class599 = addSprite(new Class599(_vm, this));
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
+ InsertKlayman(KmScene1002, 90, 226, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
_klayman->getSurface()->getClipRect().x1 = 31;
@@ -1486,7 +1435,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435);
+ InsertKlayman(KmScene1002, 379, 435, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
_klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
@@ -1496,7 +1445,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
}
} else if (which == 1) {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435);
+ InsertKlayman(KmScene1002, 650, 435, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
_klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
@@ -1506,7 +1455,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_vm->_gameState.field2 = 1;
} else if (which == 2) {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645);
+ InsertKlayman(KmScene1002, 68, 645, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4298);
_klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
@@ -1515,9 +1464,9 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_vm->_gameState.field2 = 1;
- _klayman->sendMessage(0x4820, 0, this);
+ sendMessage(_klayman, 0x4820, 0);
} else {
- _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226);
+ InsertKlayman(KmScene1002, 90, 226, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4470);
_klayman->getSurface()->getClipRect().x1 = 31;
@@ -1531,11 +1480,9 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.field2 = 0;
}
- addSprite(_klayman);
-
_mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL));
- tempSprite = addSprite(new StaticSprite(_vm, 0xB3242310, 825));
+ tempSprite = insertStaticSprite(0xB3242310, 825);
tempClipRect.x1 = tempSprite->getSurface()->getDrawRect().x;
tempClipRect.y1 = tempSprite->getSurface()->getDrawRect().y;
tempClipRect.x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
@@ -1558,7 +1505,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
- _klayman->sendEntityMessage(0x2007, _asVenusFlyTrap, this);
+ sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
_class506 = addSprite(new Class506(_vm));
@@ -1587,7 +1534,7 @@ void Scene1002::update() {
}
if (_flag1BE && _klayman->getY() > 422) {
- _parentModule->sendMessage(0x1024, 1, this);
+ sendMessage(_parentModule, 0x1024, 1);
_flag1BE = false;
}
@@ -1602,14 +1549,14 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
setGlobalVar(0x8306F218, 1);
setGlobalVar(0x1B144052, 3);
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
break;
case 0x000D:
if (param.asInteger() == 0x48848178) {
setGlobalVar(0x8306F218, 1);
setGlobalVar(0x1B144052, 3);
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
messageResult = 1;
break;
@@ -1624,15 +1571,15 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageResult = 1;
} else if (param.asInteger() == 0x4A845A00) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _asRing1, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing1);
} else if (param.asInteger() == 0x43807801) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _asRing2, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing2);
} else if (param.asInteger() == 0x46C26A01) {
if (getGlobalVar(0x8306F218)) {
setMessageList(0x004B44B8);
} else {
- _klayman->sendEntityMessage(0x1014, _asRing3, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing3);
if (_asVenusFlyTrap->getX() - 10 < 366 && _asVenusFlyTrap->getX() + 10 > 366) {
setGlobalVar(0x2B514304, 1);
setMessageList(0x004B44A8);
@@ -1644,12 +1591,12 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
messageResult = 1;
} else if (param.asInteger() == 0x468C7B11) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _asRing4, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing4);
} else if (param.asInteger() == 0x42845B19) {
// TODO _resourceTable4.load();
- _klayman->sendEntityMessage(0x1014, _asRing5, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing5);
} else if (param.asInteger() == 0xC0A07458) {
- _klayman->sendEntityMessage(0x1014, _class426, this);
+ sendEntityMessage(_klayman, 0x1014, _class426);
}
break;
case 0x1024:
@@ -1658,14 +1605,14 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 3) {
// TODO _resourceTable2.load();
}
- _parentModule->sendMessage(0x1024, param, this);
+ sendMessage(_parentModule, 0x1024, param.asInteger());
break;
case 0x2000:
if (_flag) {
setMessageList2(0x004B43D0);
} else {
if (_klayman->getY() > 420) {
- _klayman->sendEntityMessage(0x1014, _asVenusFlyTrap, this);
+ sendEntityMessage(_klayman, 0x1014, _asVenusFlyTrap);
setMessageList2(0x004B4480);
} else if (_klayman->getY() > 227) {
setMessageList2(0x004B41E0);
@@ -1686,7 +1633,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B43A0);
break;
case 0x4806:
- _parentModule->sendMessage(0x1024, 2, this);
+ sendMessage(_parentModule, 0x1024, 2);
_flag1BE = true;
if (sender == _asRing1) {
setGlobalVar(0x4DE80AC0, 0);
@@ -1697,8 +1644,8 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (sender == _asRing3) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource2.play();
- _asDoor->sendMessage(0x4808, 0, this);
- _class506->sendMessage(0x4808, 0, this);
+ sendMessage(_asDoor, 0x4808, 0);
+ sendMessage(_class506, 0x4808, 0);
} else if (sender == _asRing4) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource1.play(0xE0558848);
@@ -1710,22 +1657,22 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x4807:
if (sender == _asRing3) {
_soundResource3.play();
- _asDoor->sendMessage(0x4809, 0, this);
- _class506->sendMessage(0x4809, 0, this);
+ sendMessage(_asDoor, 0x4809, 0);
+ sendMessage(_class506, 0x4809, 0);
} else if (sender == _asVenusFlyTrap) {
if (getGlobalVar(0x8306F218)) {
- _asRing3->sendMessage(0x4807, 0, this);
+ sendMessage(_asRing3, 0x4807, 0);
}
}
break;
case 0x480B:
- _klayman->sendEntityMessage(0x1014, _asDoorSpy, this);
+ sendEntityMessage(_klayman, 0x1014, _asDoorSpy);
break;
case 0x480F:
setGlobalVar(0x4DE80AC0, 0);
_soundResource2.play();
- _asDoor->sendMessage(0x4808, 0, this);
- _class506->sendMessage(0x4808, 0, this);
+ sendMessage(_asDoor, 0x4808, 0);
+ sendMessage(_class506, 0x4808, 0);
break;
}
return messageResult;
@@ -1751,7 +1698,7 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
}
@@ -1837,10 +1784,10 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
_class478 = addSprite(new Class478(_vm, _klayman));
- addSprite(new StaticSprite(_vm, 0x800034A0, 1100));
- addSprite(new StaticSprite(_vm, 0x64402020, 1100));
- addSprite(new StaticSprite(_vm, 0x3060222E, 1300));
- tempSprite = addSprite(new StaticSprite(_vm, 0x0E002004, 1300));
+ insertStaticSprite(0x800034A0, 1100);
+ insertStaticSprite(0x64402020, 1100);
+ insertStaticSprite(0x3060222E, 1300);
+ tempSprite = insertStaticSprite(0x0E002004, 1300);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
@@ -1874,7 +1821,7 @@ uint32 Scene1004::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B7C70);
break;
case 0x2002:
- _asTrashCan->sendMessage(0x2002, 0, this);
+ sendMessage(_asTrashCan, 0x2002, 0);
break;
}
return messageResult;
@@ -1909,14 +1856,14 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
_background = addBackground(new DirtyBackground(_vm, 0x2800E011, 0, 0));
_palette = new Palette(_vm, 0x2800E011);
_palette->usePalette();
- addSprite(new StaticSprite(_vm, 0x492D5AD7, 100));
+ insertStaticSprite(0x492D5AD7, 100);
_mouseCursor = addSprite(new Mouse435(_vm, 0x0E015288, 20, 620));
} else {
_background = addBackground(new DirtyBackground(_vm, 0x8870A546, 0, 0));
_palette = new Palette(_vm, 0x8870A546);
_palette->usePalette();
- addSprite(new StaticSprite(_vm, 0x40D1E0A9, 100));
- addSprite(new StaticSprite(_vm, 0x149C00A6, 100));
+ insertStaticSprite(0x40D1E0A9, 100);
+ insertStaticSprite(0x149C00A6, 100);
_mouseCursor = addSprite(new Mouse435(_vm, 0x0A54288F, 20, 620));
}
@@ -1929,7 +1876,7 @@ uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index ff494e7..163fc63 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -97,11 +97,11 @@ void Module1200::updateScene1201() {
createScene1202(0);
_childObject->handleUpdate();
} else if (_moduleDoneStatus == 2) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
createScene1203(-1);
} else {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
}
}
@@ -245,7 +245,7 @@ uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x4806:
@@ -417,13 +417,13 @@ uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x092870C0) {
- _class466->sendMessage(0x2006, 0, this);
+ sendMessage(_class466, 0x2006, 0);
} else if (param.asInteger() == 0x11CA0144) {
_soundResource.play(0x51800A04);
}
break;
case 0x1011:
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
messageResult = 1;
case 0x480B:
if (!_flag) {
@@ -570,7 +570,7 @@ uint32 AsScene1201Match::handleMessage40C360(int messageNum, const MessageParam
uint32 messageResult = handleMessage40C2D0(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x2001, 0, this);
+ sendMessage(_parentScene, 0x2001, 0);
messageResult = 1;
break;
case 0x4806:
@@ -693,8 +693,8 @@ uint32 AsScene1201Creature::handleMessage40C830(int messageNum, const MessagePar
case 0x100D:
if (param.asInteger() == 0x02060018) {
_soundResource.play(0xCD298116);
- _parentScene->sendMessage(0x4814, 0, this);
- _klayman->sendMessage(0x4814, 0, this);
+ sendMessage(_parentScene, 0x4814, 0);
+ sendMessage(_klayman, 0x4814, 0);
}
break;
case 0x3002:
@@ -1014,12 +1014,12 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x07053000) {
_flag = true;
- _asCreature->sendMessage(0x2004, 0, this);
+ sendMessage(_asCreature, 0x2004, 0);
} else if (param.asInteger() == 0x140E5744) {
- _asCreature->sendMessage(0x2005, 0, this);
+ sendMessage(_asCreature, 0x2005, 0);
} else if (param.asInteger() == 0x40253C40) {
_messageListFlag = false;
- _asCreature->sendMessage(0x2006, 0, this);
+ sendMessage(_asCreature, 0x2006, 0);
} else if (param.asInteger() == 0x090EB048) {
if (_klayman->getX() < 572) {
setMessageList2(0x004AEC90);
@@ -1032,16 +1032,16 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (!getGlobalVar(0x0112090A)) {
setMessageList2(0x004AECB0);
} else {
- _klayman->sendEntityMessage(0x1014, _asMatch, this);
+ sendEntityMessage(_klayman, 0x1014, _asMatch);
setMessageList2(0x004AECC0);
}
break;
case 0x2002:
if (getGlobalVar(0x20A0C516)) {
- _klayman->sendEntityMessage(0x1014, _asTntMan, this);
+ sendEntityMessage(_klayman, 0x1014, _asTntMan);
setMessageList2(0x004AECF0);
} else if (getGlobalVar(0x0112090A) == 3) {
- _klayman->sendEntityMessage(0x1014, _asTntMan, this);
+ sendEntityMessage(_klayman, 0x1014, _asTntMan);
if (_klayman->getX() > _asTntMan->getX()) {
setMessageList(0x004AECD0);
} else {
@@ -1054,12 +1054,12 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _asTape) {
- _klayman->sendEntityMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004AED38);
}
break;
case 0x4829:
- _asRightDoor->sendMessage(0x4829, 0, this);
+ sendMessage(_asRightDoor, 0x4829, 0);
break;
}
return messageResult;
@@ -1131,7 +1131,7 @@ uint32 AsScene1202TntItem::handleMessage453FE0(int messageNum, const MessagePara
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x2000, _index, this);
+ sendMessage(_parentScene, 0x2000, _index);
messageResult = 1;
break;
case 0x2001:
@@ -1174,7 +1174,7 @@ void AsScene1202TntItem::sub454100() {
}
void AsScene1202TntItem::sub454160() {
- _parentScene->sendMessage(0x2002, _index, this);
+ sendMessage(_parentScene, 0x2002, _index);
sub4540A0();
}
@@ -1230,7 +1230,7 @@ void Scene1202::update() {
Scene::update();
if (_soundFlag) {
if (!_soundResource4.isPlaying()) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
} else if (_counter == 0 && isSolved()) {
SetMessageHandler(&Scene1202::handleMessage453D90);
@@ -1240,8 +1240,8 @@ void Scene1202::update() {
_soundFlag = true;
} else if (_index >= 0 && _counter == 0) {
int index2 = kScene1202Table[_index];
- _asTntItems[_index]->sendMessage(0x2001, getSubVar(0x10055D14, index2), this);
- _asTntItems[index2]->sendMessage(0x2001, getSubVar(0x10055D14, _index), this);
+ sendMessage(_asTntItems[_index], 0x2001, getSubVar(0x10055D14, index2));
+ sendMessage(_asTntItems[index2], 0x2001, getSubVar(0x10055D14, _index));
int temp = getSubVar(0x10055D14, index2);
setSubVar(0x10055D14, index2, getSubVar(0x10055D14, _index));
setSubVar(0x10055D14, _index, temp);
@@ -1263,7 +1263,7 @@ uint32 Scene1202::handleMessage453C10(int messageNum, const MessageParam ¶m,
case 0x0001:
// TODO: Debug/Cheat stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_soundFlag) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x000D:
@@ -1287,7 +1287,7 @@ uint32 Scene1202::handleMessage453D90(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 04f4a2e..b8b7b8b 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -336,6 +336,7 @@ void Module1300::updateScene1306() {
_done = false;
delete _childObject;
_childObject = NULL;
+ debug("_field20 = %d", _field20);
if (_field20 == 2) {
createScene1309(0);
_childObject->handleUpdate();
@@ -343,7 +344,7 @@ void Module1300::updateScene1306() {
createScene1303(0);
_childObject->handleUpdate();
} else if (_field20 == 0) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else if (_field20 == 1) {
createScene1311(-1);
_childObject->handleUpdate();
@@ -397,9 +398,9 @@ void Module1300::updateScene1310() {
delete _childObject;
_childObject = NULL;
if (_vm->gameState().sceneNum == 9)
- createScene1315(0);
- else
createScene1306(0);
+ else
+ createScene1315(0);
_childObject->handleUpdate();
}
}
@@ -554,7 +555,7 @@ void AsScene1302Bridge::stRaiseBridge() {
}
void AsScene1302Bridge::cbLowerBridgeEvent() {
- _parentScene->sendMessage(0x2032, 0, this);
+ sendMessage(_parentScene, 0x2032, 0);
setFileHash(0x88148150, -1, -1);
_newHashListIndex = -2;
}
@@ -622,10 +623,10 @@ uint32 Class595::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x482A:
- _parentScene->sendMessage(0x1022, 995, this);
+ sendMessage(_parentScene, 0x1022, 995);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1015, this);
+ sendMessage(_parentScene, 0x1022, 1015);
break;
}
return messageResult;
@@ -663,10 +664,10 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFence->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
if (which < 0) {
- _klayman = new KmScene1002(_vm, this, _class595, NULL, 380, 364);
+// _klayman = new KmScene1002(_vm, this, _class595, NULL, 380, 364);
setMessageList(0x004B0868);
} else {
- _klayman = new KmScene1002(_vm, this, _class595, NULL, 293, 330);
+// _klayman = new KmScene1002(_vm, this, _class595, NULL, 293, 330);
setMessageList(0x004B0870);
}
addSprite(_klayman);
@@ -679,7 +680,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, true));
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
- _klayman->sendEntityMessage(0x2007, _asVenusFlyTrap, this);
+ sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
}
@@ -689,10 +690,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4A845A00) {
- _klayman->sendEntityMessage(0x1014, _asRing1, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing1);
} else if (param.asInteger() == 0x43807801) {
if (!getGlobalVar(0x13206309)) {
- _klayman->sendEntityMessage(0x1014, _asRing2, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing2);
if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) {
setMessageList(0x004B0940);
} else {
@@ -703,10 +704,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
messageResult = 1;
} else if (param.asInteger() == 0x46C26A01) {
- _klayman->sendEntityMessage(0x1014, _asRing3, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing3);
} else if (param.asInteger() == 0x468C7B11) {
if (!getGlobalVar(0x80101B1E)) {
- _klayman->sendEntityMessage(0x1014, _asRing4, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing4);
if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) {
setMessageList(0x004B0940);
} else {
@@ -717,7 +718,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
messageResult = 1;
} else if (param.asInteger() == 0x42845B19) {
- _klayman->sendEntityMessage(0x1014, _asRing5, this);
+ sendEntityMessage(_klayman, 0x1014, _asRing5);
} else if (param.asInteger() == 0x430A6060) {
if (getGlobalVar(0x13206309)) {
setMessageList2(0x004B0910);
@@ -740,7 +741,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2000:
if (_klayman->getY() > 360) {
- _klayman->sendEntityMessage(0x1014, _asVenusFlyTrap, this);
+ sendEntityMessage(_klayman, 0x1014, _asVenusFlyTrap);
setMessageList2(0x004B08F0);
} else {
setMessageList2(0x004B0920);
@@ -748,23 +749,23 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2002:
if (_klayman->getX() > 545) {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
break;
case 0x2032:
_sprite2->getSurface()->setVisible(true);
break;
case 0x4806:
- _parentModule->sendMessage(0x1024, 2, this);
+ sendMessage(_parentModule, 0x1024, 2);
if (sender == _asRing1) {
_soundResource.play(0x665198C0);
} else if (sender == _asRing2) {
- _asBridge->sendMessage(0x4808, 0, this);
+ sendMessage(_asBridge, 0x4808, 0);
setGlobalVar(0x13206309, 1);
} else if (sender == _asRing3) {
_soundResource.play(0xE2D389C0);
} else if (sender == _asRing4) {
- _ssFence->sendMessage(0x4808, 0, this);
+ sendMessage(_ssFence, 0x4808, 0);
setGlobalVar(0x80101B1E, 1);
} else if (sender == _asRing5) {
_soundResource.play(0x40428A09);
@@ -772,36 +773,36 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4807:
if (sender == _asRing2) {
- _asBridge->sendMessage(0x4809, 0, this);
+ sendMessage(_asBridge, 0x4809, 0);
setGlobalVar(0x13206309, 0);
_sprite2->getSurface()->setVisible(false);
} else if (sender == _asRing4) {
- _ssFence->sendMessage(0x4809, 0, this);
+ sendMessage(_ssFence, 0x4809, 0);
setGlobalVar(0x80101B1E, 0);
} else if (sender == _asVenusFlyTrap) {
if (getGlobalVar(0x13206309)) {
- _asRing2->sendMessage(0x4807, 0, this);
+ sendMessage(_asRing2, 0x4807, 0);
} else {
- _asRing4->sendMessage(0x4807, 0, this);
+ sendMessage(_asRing4, 0x4807, 0);
}
}
break;
case 0x480F:
if (sender == _asRing2) {
_soundResource.play(0x60755842);
- _asBridge->sendMessage(0x4808, 0, this);
+ sendMessage(_asBridge, 0x4808, 0);
setGlobalVar(0x13206309, 1);
} else if (sender == _asRing4) {
_soundResource.play(0x60755842);
- _ssFence->sendMessage(0x4808, 0, this);
+ sendMessage(_ssFence, 0x4808, 0);
setGlobalVar(0x80101B1E, 1);
}
break;
case 0x482A:
- _asVenusFlyTrap->sendMessage(0x482B, 0, this);
+ sendMessage(_asVenusFlyTrap, 0x482B, 0);
break;
case 0x482B:
- _asVenusFlyTrap->sendMessage(0x482A, 0, this);
+ sendMessage(_asVenusFlyTrap, 0x482A, 0);
break;
}
return messageResult;
@@ -824,7 +825,7 @@ uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam &par
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x2000:
@@ -864,7 +865,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1303::handleMessage);
setRectList(0x004AF9E8);
- _background = addBackground(new DirtyBackground(_vm, 0x01581A9C, 0, 0));
+ setBackground(0x01581A9C);
_palette = new Palette(_vm, 0x01581A9C);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x81A9801D, NULL));
@@ -892,7 +893,7 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x2000:
setGlobalVar(0xAC00C0D0, 1);
- _asBalloon->sendMessage(0x2000, 0, this);
+ sendMessage(_asBalloon, 0x2000, 0);
break;
case 0x4826:
if (sender == _asBalloon && getGlobalVar(0x31C63C51)) {
@@ -918,7 +919,7 @@ uint32 Class544::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x4806:
@@ -937,7 +938,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1304::handleMessage);
setRectList(0x004B91A8);
- _background = addBackground(new DirtyBackground(_vm, 0x062C0214, 0, 0));
+ setBackground(0x062C0214);
_palette = new Palette(_vm, 0x062C0214);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0xC021006A, NULL));
@@ -991,10 +992,10 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _class544) {
- _klayman->sendEntityMessage(0x1014, _class544, this);
+ sendEntityMessage(_klayman, 0x1014, _class544);
setMessageList(0x004B9130);
} else if (sender == _class545) {
- _klayman->sendEntityMessage(0x1014, _class545, this);
+ sendEntityMessage(_klayman, 0x1014, _class545);
setMessageList(0x004B9140);
}
break;
@@ -1093,7 +1094,7 @@ void AsScene1306Elevator::stGoingUp() {
void AsScene1306Elevator::cbGoingUpEvent() {
SetUpdateHandler(&AsScene1306Elevator::update);
- _parentScene->sendMessage(0x4808, 0, this);
+ sendMessage(_parentScene, 0x4808, 0);
_isUp = true;
_countdown = 144;
setFileHash1();
@@ -1112,7 +1113,7 @@ void AsScene1306Elevator::stGoingDown() {
void AsScene1306Elevator::cbGoingDownEvent() {
_isDown = true;
- _parentScene->sendMessage(0x4809, 0, this);
+ sendMessage(_parentScene, 0x4809, 0);
SetUpdateHandler(&AsScene1306Elevator::update);
setFileHash1();
}
@@ -1154,13 +1155,13 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
_klayman = new KmScene1306(_vm, this, 380, 440);
setMessageList(0x004AFAD0);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 1) {
_klayman = new KmScene1306(_vm, this, 136, 440);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
@@ -1170,34 +1171,34 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman = new KmScene1306(_vm, this, 355, 440);
}
setMessageList(0x004AFBC8);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 3) {
_klayman = new KmScene1306(_vm, this, 534, 440);
setMessageList(0x004AFC30);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 4) {
_klayman = new KmScene1306(_vm, this, 136, 440);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 5) {
_klayman = new KmScene1306(_vm, this, 136, 440);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else {
_klayman = new KmScene1306(_vm, this, 286, 408);
setSurfacePriority(_asElevator->getSurface(), 1100);
setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
setSurfacePriority(_sprite1->getSurface(), 1080);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
SetMessageHandler(&Scene1306::handleMessage416EB0);
clearRectList();
- _asElevator->sendMessage(0x4808, 0, this);
+ sendMessage(_asElevator, 0x4808, 0);
}
addSprite(_klayman);
@@ -1212,9 +1213,9 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x402064D8) {
- _klayman->sendEntityMessage(0x1014, _ssButton, this);
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x01C66840) {
- if (_asElevator->sendMessage(0x2001, 0, this) != 0) {
+ if (sendMessage(_asElevator, 0x2001, 0) != 0) {
setMessageList(0x004AFBD8);
} else {
setMessageList(0x004AFAE0);
@@ -1236,18 +1237,18 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (sender == _ssButton) {
- _asElevator->sendMessage(0x4808, 0, this);
+ sendMessage(_asElevator, 0x4808, 0);
}
break;
case 0x4826:
if (sender == _class545) {
if (_klayman->getX() >= 249) {
- _klayman->sendEntityMessage(0x1014, _class545, this);
+ sendEntityMessage(_klayman, 0x1014, _class545);
setMessageList(0x004AFC58);
}
} else if (sender == _asTape) {
if (_klayman->getX() >= 249) {
- _klayman->sendEntityMessage(0x1014, _class545, this);
+ sendEntityMessage(_klayman, 0x1014, _class545);
setMessageList(0x004AFC68);
}
}
@@ -1261,7 +1262,7 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
setSurfacePriority(_asElevator->getSurface(), 100);
setSurfacePriority(_asElevatorDoor->getSurface(), 90);
setSurfacePriority(_sprite1->getSurface(), 80);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
break;
}
@@ -1276,7 +1277,7 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
SetMessageHandler(&Scene1306::handleMessage);
break;
case 0x4809:
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
break;
case 0x482A:
setSurfacePriority(_asElevator->getSurface(), 1100);
@@ -1287,7 +1288,7 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
setSurfacePriority(_asElevator->getSurface(), 100);
setSurfacePriority(_asElevatorDoor->getSurface(), 90);
setSurfacePriority(_sprite1->getSurface(), 80);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
break;
}
@@ -1389,7 +1390,7 @@ uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x1011:
if (_isClickable) {
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
stRemoveKey();
messageResult = 1;
}
@@ -1434,7 +1435,7 @@ void AsScene1307Key::suInsertKey() {
_soundResource1.play();
} else {
SetSpriteCallback(NULL);
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
}
}
@@ -1463,7 +1464,7 @@ void AsScene1307Key::stRemoveKey() {
void AsScene1307Key::stInsertKey() {
_pointIndex = 0;
- _parentScene->sendMessage(0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4], this);
+ sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4]);
_surface->getClipRect() = _clipRects[getSubVar(0xA010B810, _index) % 4];
SetSpriteCallback(&AsScene1307Key::suInsertKey);
_newHashListIndex = -2;
@@ -1473,7 +1474,7 @@ void AsScene1307Key::stMoveKey() {
NPoint pt = (*_pointList)[getSubVar(0xA010B810, _index)];
int16 newX = pt.x + kAsScene1307KeyXDelta;
int16 newY = pt.y + kAsScene1307KeyYDelta;
- _parentScene->sendMessage(0x1022, 1000, this);
+ sendMessage(_parentScene, 0x1022, 1000);
_surface->getClipRect().x1 = 0;
_surface->getClipRect().y1 = 0;
_surface->getClipRect().x2 = 640;
@@ -1584,7 +1585,7 @@ void Scene1307::update() {
_palette->startFadeToWhite(40);
}
if (_doLeaveScene && !_soundResource.isPlaying()) {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
setGlobalVar(0x80455A41, 1);
}
}
@@ -1617,14 +1618,14 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
if (!occupied) {
// If the keyhole is free, insert the current key
- _asCurrKey->sendMessage(0x2001, clickedKeyHoleIndex, this);
+ sendMessage(_asCurrKey, 0x2001, clickedKeyHoleIndex);
_isInsertingKey = true;
_mouseClicked = false;
}
}
}
} else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
break;
@@ -1637,7 +1638,7 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Play unlock animations for all keys
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (_asKeys[keyIndex])
- _asKeys[keyIndex]->sendMessage(0x2003, 1, this);
+ sendMessage(_asKeys[keyIndex], 0x2003, 1);
}
_soundResource.play();
_isPuzzleSolved = true;
@@ -1645,10 +1646,10 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else {
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex]) {
- _asKeys[keyIndex]->sendMessage(0x2000, 1, this);
+ sendMessage(_asKeys[keyIndex], 0x2000, 1);
}
}
- _asCurrKey->sendMessage(0x2004, 1, this);
+ sendMessage(_asCurrKey, 0x2004, 1);
}
_asCurrKey = NULL;
_isInsertingKey = false;
@@ -1657,7 +1658,7 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
_asCurrKey = (Sprite*)sender;
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex]) {
- _asKeys[keyIndex]->sendMessage(0x2000, 0, this);
+ sendMessage(_asKeys[keyIndex], 0x2000, 0);
}
}
break;
@@ -1717,7 +1718,7 @@ void Class549::sub455470() {
}
void Class549::hide() {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
setFileHash1();
_surface->setVisible(false);
}
@@ -1731,7 +1732,7 @@ void Class549::sub4554F0() {
}
void Class549::sub455550() {
- _parentScene->sendMessage(0x2001, 0, this);
+ sendMessage(_parentScene, 0x2001, 0);
setFileHash1();
}
@@ -1762,7 +1763,7 @@ void Class592::sub455710() {
}
void Class592::sub455740() {
- _parentScene->sendMessage(0x2004, 0, this);
+ sendMessage(_parentScene, 0x2004, 0);
setFileHash1();
_surface->setVisible(false);
}
@@ -1804,7 +1805,7 @@ void Class593::sub455920() {
}
void Class593::sub455950() {
- _parentScene->sendMessage(0x2003, 0, this);
+ sendMessage(_parentScene, 0x2003, 0);
setFileHash1();
_surface->setVisible(false);
}
@@ -1911,7 +1912,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
_klayman = new KmScene1308(_vm, this, 41, 440);
setMessageList(0x004B57D0);
- _class549->sendMessage(0x4808, 0, this);
+ sendMessage(_class549, 0x4808, 0);
_sprite1->getSurface()->setVisible(false);
if (getGlobalVar(0x80455A41)) {
_sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
@@ -1958,7 +1959,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B59A0);
_flag1 = true;
} else if (param.asInteger() == 0x08821382) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
if (getGlobalVar(0x80455A41)) {
setRectList(0x004B5990);
} else {
@@ -1967,7 +1968,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
_flag1 = false;
} else if (param.asInteger() == 0x4AC68808) {
clearRectList();
- _class549->sendMessage(0x4809, 0, this);
+ sendMessage(_class549, 0x4809, 0);
_sprite1->getSurface()->setVisible(false);
_klayman->getSurface()->setVisible(false);
}
@@ -1991,7 +1992,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
_klayman->getSurface()->setVisible(true);
break;
case 0x2001:
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
case 0x2003:
_class601_1->getSurface()->setVisible(false);
@@ -2003,10 +2004,10 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B5990);
break;
case 0x4807:
- _class593->sendMessage(0x2003, 0, this);
+ sendMessage(_class593, 0x2003, 0);
break;
case 0x480F:
- _class593->sendMessage(0x2002, 0, this);
+ sendMessage(_class593, 0x2002, 0);
_class601_1->getSurface()->setVisible(true);
_class601_2->getSurface()->setVisible(true);
_class601_3->getSurface()->setVisible(true);
@@ -2017,10 +2018,10 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList2(0x004B5868);
} else {
if (param.asInteger() == 1) {
- _klayman->sendMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B5848);
- } else if (_class489->sendMessage(0x480C, _klayman->getX() <= _class489->getX() ? 0 : 1, this) != 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ } else if (sendMessage(_class489, 0x480C, _klayman->getX() <= _class489->getX() ? 0 : 1) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B5830);
} else {
setMessageList2(0x004B5800);
@@ -2030,7 +2031,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_flag1) {
setMessageList2(0x004B5868);
} else if (_messageListStatus != 2) {
- _klayman->sendMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList2(0x004B58E0);
}
}
@@ -2135,7 +2136,7 @@ uint32 Scene1317::hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Ent
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
}
return messageResult;
@@ -2145,7 +2146,7 @@ uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
}
return messageResult;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 7835520..60e5279 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -133,7 +133,7 @@ void Module1400::updateScene1401() {
createScene1404(0);
_childObject->handleUpdate();
} else {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
}
@@ -505,7 +505,7 @@ uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x4807:
@@ -534,10 +534,10 @@ uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
case 0x4828:
sub435040();
@@ -552,14 +552,14 @@ uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m,
case 0x1011:
if (param.asPoint().x - _x >= 17 && param.asPoint().x - _x <= 56 &&
param.asPoint().y - _y >= -120 && param.asPoint().y - _y <= -82) {
- _parentScene->sendMessage(0x4826, 1, this);
+ sendMessage(_parentScene, 0x4826, 1);
} else {
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
}
messageResult = 1;
break;
case 0x4807:
- _parentScene->sendMessage(0x4807, 0, this);
+ sendMessage(_parentScene, 0x4807, 0);
sub434F80();
break;
case 0x480B:
@@ -583,10 +583,10 @@ uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m,
sub434EC0();
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -610,11 +610,11 @@ void Class489::spriteUpdate434B60() {
sub434C80();
if (_remX == _x) {
if (getGlobalVar(0x04A10F33) == 0 && _class489Item->flag4 != 0) {
- _parentScene->sendMessage(0x1019, 0, this);
+ sendMessage(_parentScene, 0x1019, 0);
incGlobalVar(0x04A105B3, -1);
setGlobalVar(0x04A10F33, kClass489Items[getGlobalVar(0x04A105B3)].varIndex1);
} else if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex1 && _class489Item->flag != 0) {
- _parentScene->sendMessage(0x1019, 1, this);
+ sendMessage(_parentScene, 0x1019, 1);
incGlobalVar(0x04A105B3, +1);
setGlobalVar(0x04A10F33, 0);
}
@@ -666,7 +666,7 @@ void Class489::sub434C80() {
void Class489::sub434D80() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
- _class525->sendMessage(0x483A, 0, this);
+ sendMessage(_class525, 0x483A, 0);
setFileHash1();
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(NULL);
@@ -713,7 +713,7 @@ void Class489::sub434EC0() {
}
void Class489::sub434F40() {
- _parentScene->sendMessage(0x480F, 0, this);
+ sendMessage(_parentScene, 0x480F, 0);
setFileHash(0xD833207F, 0, -1);
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage4348E0);
@@ -799,12 +799,12 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_class489 = addSprite(new Class489(_vm, this, _klayman, _class525));
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 6) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
_klayman->setX(_class489->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B6670);
} else if (getGlobalVar(0x04A10F33) == 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
_klayman->setX(_class489->getX() - 100);
_klayman->processDelta();
setMessageList(0x004B6670);
@@ -821,7 +821,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().y2 = 480;
if (which == 0 && _class489 && _class489->hasMessageHandler()) {
- _class489->sendMessage(0x482B, 0, this);
+ sendMessage(_class489, 0x482B, 0);
}
_class528 = addSprite(new Class528(_vm, _klayman, which == 1));
@@ -843,11 +843,11 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02144CB1) {
- _klayman->sendEntityMessage(0x1014, _class427, this);
+ sendEntityMessage(_klayman, 0x1014, _class427);
} else if (param.asInteger() == 0x402064D8) {
- _klayman->sendEntityMessage(0x1014, _ssButton, this);
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x01C66840) {
- if (_class528->hasMessageHandler() && _class528->sendMessage(0x2001, 0, this) != 0) {
+ if (_class528->hasMessageHandler() && sendMessage(_class528, 0x2001, 0) != 0) {
setMessageList(0x004B6690);
} else {
setMessageList(0x004B66B0);
@@ -856,30 +856,30 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x1019:
if (param.asInteger() != 0) {
- _parentModule->sendMessage(0x1009, 2, this);
+ sendMessage(_parentModule, 0x1009, 2);
} else {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
break;
case 0x480B:
if (sender == _class427) {
- _class525->sendMessage(0x2000, 0, this);
+ sendMessage(_class525, 0x2000, 0);
if (!getGlobalVar(0x01023818)) {
- _class526->sendMessage(0x4839, 0, this);
- _class527->sendMessage(0x4839, 0, this);
+ sendMessage(_class526, 0x4839, 0);
+ sendMessage(_class527, 0x4839, 0);
setGlobalVar(0x01023818, 1);
}
if (_class489 && _class489->getX() > 404 && _class489->getX() < 504) {
- _class489 ->sendMessage(0x4839, 0, this);
+ sendMessage(_class489 , 0x4839, 0);
}
} else if (sender == _ssButton) {
- _ssButton->sendMessage(0x4808, 0, this);
+ sendMessage(_ssButton, 0x4808, 0);
}
break;
case 0x4826:
if (sender == _class489) {
- if (_class489->sendMessage(0x480C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ if (sendMessage(_class489, 0x480C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B6658);
} else {
setMessageList2(0x004B65F0);
@@ -889,13 +889,13 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x482A:
_sprite1->getSurface()->setVisible(true);
if (_class489) {
- _class489->sendMessage(0x482B, 0, this);
+ sendMessage(_class489, 0x482B, 0);
}
break;
case 0x482B:
_sprite1->getSurface()->setVisible(false);
if (_class489) {
- _class489->sendMessage(0x482A, 0, this);
+ sendMessage(_class489, 0x482A, 0);
}
break;
}
@@ -955,19 +955,19 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Class482::sub428500() {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
setFileHash1();
_surface->setVisible(false);
}
void Class482::sub428530() {
- _parentScene->sendMessage(0x2001, 0, this);
+ sendMessage(_parentScene, 0x2001, 0);
setFileHash1();
_surface->setVisible(false);
}
void Class482::sub428560() {
- _parentScene->sendMessage(0x2003, 0, this);
+ sendMessage(_parentScene, 0x2003, 0);
setFileHash1();
}
@@ -1035,12 +1035,12 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_class489 = addSprite(new Class489(_vm, this, _klayman, 0));
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x4A10F33) == 4) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
_klayman->setX(_class489->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B0BD0);
} else if (getGlobalVar(0x4A10F33) == 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
_klayman->setX(_class489->getX() - 100);
_klayman->processDelta();
setMessageList(0x004B0BD0);
@@ -1086,21 +1086,21 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x00F43389) {
if (getGlobalVar(0x70A1189C)) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else {
clearRectList();
_klayman->getSurface()->setVisible(false);
_mouseCursor->getSurface()->setVisible(false);
- _class482->sendMessage(0x2002, 0, this);
+ sendMessage(_class482, 0x2002, 0);
sub428220();
}
}
break;
case 0x1019:
if (param.asInteger()) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
break;
case 0x2000:
@@ -1110,15 +1110,15 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2001:
sub428230();
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
case 0x2003:
sub428230();
break;
case 0x4826:
if (sender == _class489) {
- if (_class489->sendMessage(0x408C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ if (sendMessage(_class489, 0x408C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B0BB8);
} else {
setMessageList2(0x004B0B68);
@@ -1249,7 +1249,7 @@ void AsScene1407Mouse::suWalkTo() {
xdelta = -_deltaX;
_deltaX = 0;
if (_walkDestX == _x) {
- sendMessage(0x1019, 0, this);
+ sendMessage(this, 0x1019, 0);
} else {
_x += xdelta;
processDelta();
@@ -1362,7 +1362,7 @@ void AsScene1407Mouse::stArriveAtHole() {
_x = kScene1407MouseHoles[_nextHoleIndex].x;
_y = kScene1407MouseFloorY[kScene1407MouseHoles[_nextHoleIndex].floorIndex];
if (_nextHoleIndex == 1) {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_walkDestX = 512;
stWalkToDest();
_surface->setVisible(true);
@@ -1396,7 +1396,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1407::update() {
Scene::update();
if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0)) {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
} else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0)) {
_ssResetButton->getSurface()->setVisible(false);
}
@@ -1410,17 +1410,17 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO: Debug/Cheat stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
// Exit scene
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else if (param.asPoint().x >= 75 && param.asPoint().x <= 104 &&
param.asPoint().y >= 62 && param.asPoint().y <= 90) {
// The reset button was clicked
- _asMouse->sendMessage(0x2001, 0, this);
+ sendMessage(_asMouse, 0x2001, 0);
_ssResetButton->getSurface()->setVisible(true);
_soundResource.play(0x44045000);
_resetButtonCountdown = 12;
} else {
// Handle the mouse
- _asMouse->sendMessage(messageNum, param, this);
+ sendMessage(_asMouse, messageNum, param);
}
}
break;
@@ -1487,7 +1487,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
addSprite(_class489);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 4) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
_klayman->setX(_class489->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B1F70);
@@ -1509,13 +1509,13 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B2008);
_flag = true;
} else if (param.asInteger() == 0x08821382) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
setRectList(0x004B1FF8);
_flag = false;
}
break;
case 0x1019:
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
case 0x1022:
if (sender == _class489) {
@@ -1537,10 +1537,10 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_flag) {
setMessageList2(0x004B1FA8);
} else if (param.asInteger() == 1) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B1F88);
- } else if (_class489->sendMessage(0x480C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ } else if (sendMessage(_class489, 0x480C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B1F58);
} else {
setMessageList2(0x004B1F28);
@@ -1549,7 +1549,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_flag) {
setMessageList2(0x004B1FA8);
} else if (_messageListStatus != 2) {
- _klayman->sendEntityMessage(0x1014, sender, this);
+ sendEntityMessage(_klayman, 0x1014, sender);
setMessageList2(0x004B1FB8);
}
}
@@ -1612,7 +1612,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_class489 = addSprite(new Class489(_vm, this, _klayman, 0));
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ sendEntityMessage(_klayman, 0x1014, _class489);
_klayman->setX(_class489->getX() - 100);
_klayman->processDelta();
setMessageList(0x004B8CB8);
@@ -1647,21 +1647,21 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x1019:
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
case 0x4826:
if (sender == _class489) {
- if (_class489->sendMessage(0x480C, _klayman->getX() > _class489->getX() ? 1 : 0, this) != 0) {
- _klayman->sendEntityMessage(0x1014, _class489, this);
+ if (sendMessage(_class489, 0x480C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _class489);
setMessageList2(0x004B8CA0);
} else {
setMessageList2(0x004B8C40);
}
} else if (sender == _asTape && _messageListStatus != 2) {
- _klayman->sendEntityMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B8CD0);
} else if (sender == _class545 && _messageListStatus != 2) {
- _klayman->sendEntityMessage(0x1014, _class545, this);
+ sendEntityMessage(_klayman, 0x1014, _class545);
setMessageList(0x004B8D18);
}
break;
@@ -1757,7 +1757,7 @@ uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m,
case 0x1011:
if (getSubVar(0xCCE0280F, _index) == 0 && _parentScene->getCountdown() == 0) {
show();
- _parentScene->sendMessage(0x2000, _index, this);
+ sendMessage(_parentScene, 0x2000, _index);
}
messageResult = 1;
break;
@@ -1841,7 +1841,7 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x0001:
// TODO: Debug/Cheat stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x000D:
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 9506f80..40b15b3 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -63,14 +63,14 @@ void Module1500::update() {
if (_flag) {
createScene1503();
} else {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 3:
createScene1501();
break;
default:
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
break;
}
}
@@ -91,7 +91,7 @@ void Module1500::createScene1502() {
}
void Module1500::createScene1503() {
- _parentModule->sendMessage(0x0800, 0, this);
+ sendMessage(_parentModule, 0x0800, 0);
_vm->gameState().sceneNum = 2;
createSmackerScene(0x001A0005, true, true, true);
SetUpdateHandler(&Module1500::update);
@@ -148,7 +148,7 @@ void Scene1501::update() {
_countdown1--;
if (_countdown1 == 0) {
_vm->_screen->clear();
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
} else if ((_countdown2 != 0 && (--_countdown2 == 0)) /*|| !_soundResource.isPlaying()*/) {
_countdown1 = 12;
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index e6cbe62..b281b38 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -161,7 +161,7 @@ void Module1700::updateScene1705() {
_done = false;
delete _childObject;
_childObject = NULL;
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
}
@@ -211,7 +211,7 @@ uint32 Class606::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x4806:
@@ -264,43 +264,43 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
_klayman = new KmScene1705(_vm, this, 231, 434);
setMessageList(0x004B69E8);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else if (which == 1) {
_klayman = new KmScene1705(_vm, this, 431, 434);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else if (which == 2) {
_klayman = new KmScene1705(_vm, this, 431, 434);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else if (which == 3) {
_klayman = new KmScene1705(_vm, this, 431, 434);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else {
_klayman = new KmScene1705(_vm, this, 231, 74);
- _klayman->sendMessage(0x2000, 0, this);
+ sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
tempSprite = addSprite(new StaticSprite(_vm, 0x30303822, 1100));
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
@@ -339,7 +339,7 @@ uint32 Scene1705::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _class606 && _klayman->getX() <= 318) {
- _klayman->sendEntityMessage(0x1014, sender, this);
+ sendEntityMessage(_klayman, 0x1014, sender);
setMessageList(0x004B6AC0);
}
break;
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index e2c88dc..f503848 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -196,12 +196,12 @@ void Module1800::updateScene1803() {
createScene1801(2);
_childObject->handleUpdate();
} else if (_field20 == 3) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else if (_field20 == 6) {
createScene1809(-1);
_childObject->handleUpdate();
} else if (_field20 == 7) {
- _parentModule->sendMessage(0x1009, 3, this);
+ sendMessage(_parentModule, 0x1009, 3);
}
}
}
@@ -251,7 +251,7 @@ void Module1800::updateScene1806() {
delete _childObject;
_childObject = NULL;
if (_field20 == 0) {
- _parentModule->sendMessage(0x1009, 2, this);
+ sendMessage(_parentModule, 0x1009, 2);
} else if (_field20 == 1) {
createScene1805(3);
_childObject->handleUpdate();
@@ -271,7 +271,7 @@ void Module1800::updateScene1809() {
_done = false;
delete _childObject;
_childObject = NULL;
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
// TODO GameState stuff
}
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 9f45db2..1af7799 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -89,7 +89,7 @@ void Module2000::updateScene2001() {
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
} else {
createScene2002(0);
}
@@ -144,26 +144,26 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
_klayman = new KmScene2001(_vm, this, 300, 345);
setMessageList(0x004B3538);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
} else if (which == 1) {
_klayman = new KmScene2001(_vm, this, 116, 345);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3540);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
} else if (which == 2) {
_klayman = new KmScene2001(_vm, this, 116, 345);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B35F0);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
} else if (which == 3) {
_klayman = new KmScene2001(_vm, this, 116, 345);
- _klayman->sendMessage(0x2000, 1, this);
+ sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3550);
- sendMessage(0x2000, 1, this);
+ sendMessage(this, 0x2000, 1);
} else {
_klayman = new KmScene2001(_vm, this, 390, 345);
setMessageList(0x004B3530);
- sendMessage(0x2000, 0, this);
+ sendMessage(this, 0x2000, 0);
_klayman->setDoDeltaX(1);
}
addSprite(_klayman);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index fe6f36c..3faad25 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -508,7 +508,7 @@ void Module2200::updateScene2201() {
} else if (_field20 == 2) {
createScene2202(0);
} else {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
}
@@ -1529,22 +1529,22 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_rect2.y2 = 480;
if (!getGlobalVar(0x404290D5)) {
- addSprite(new StaticSprite(_vm, 0x00026027, 900));
+ insertStaticSprite(0x00026027, 900);
}
- tempSprite = addSprite(new StaticSprite(_vm, 0x030326A0, 1100));
+ tempSprite = insertStaticSprite(0x030326A0, 1100);
_rect1.x1 = tempSprite->getSurface()->getDrawRect().x;
- addSprite(new StaticSprite(_vm, 0x811DA061, 1100));
+ insertStaticSprite(0x811DA061, 1100);
- tempSprite = addSprite(new StaticSprite(_vm, 0x11180022, 1100));
+ tempSprite = insertStaticSprite(0x11180022, 1100);
_rect2.x1 = tempSprite->getSurface()->getDrawRect().x;
- tempSprite = addSprite(new StaticSprite(_vm, 0x0D411130, 1100));
+ tempSprite = insertStaticSprite(0x0D411130, 1100);
_rect1.y2 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
_rect2.y1 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
- _doorLightSprite = addSprite(new StaticSprite(_vm, 0xA4062212, 900));
+ _doorLightSprite = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
_klayman = new KmScene2201(_vm, this, 300, 427, &_rect1, 2);
@@ -1595,9 +1595,9 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x402064D8) {
- _klayman->sendEntityMessage(0x1014, _ssDoorButton, this);
+ sendEntityMessage(_klayman, 0x1014, _ssDoorButton);
} else if (param.asInteger() == 0x35803198) {
- if (_asDoor->hasMessageHandler() && _asDoor->sendMessage(0x2000, 0, this)) {
+ if (_asDoor->hasMessageHandler() && sendMessage(_asDoor, 0x2000, 0)) {
setMessageList(0x004B81A0);
} else {
setMessageList(0x004B81B8);
@@ -1620,12 +1620,12 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (sender == _ssDoorButton) {
- _asDoor->sendMessage(0x4808, 0, this);
+ sendMessage(_asDoor, 0x4808, 0);
}
break;
case 0x4826:
if (sender == _asTape) {
- _klayman->sendEntityMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B81C8);
}
break;
@@ -1705,7 +1705,7 @@ uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam &
switch (messageNum) {
case 0x1011:
if (!_isMoving && !getGlobalVar(0x404290D5)) {
- _parentScene->sendMessage(0x2000, _tileIndex, this);
+ sendMessage(_parentScene, 0x2000, _tileIndex);
}
messageResult = 1;
break;
@@ -1878,7 +1878,7 @@ void SsScene2202PuzzleTile::stopMoving() {
_needRefresh = true;
SetSpriteCallback(NULL);
_isMoving = false;
- _parentScene->sendMessage(0x2002, _tileIndex, this);
+ sendMessage(_parentScene, 0x2002, _tileIndex);
}
Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1912,9 +1912,9 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
}
}
- addSprite(new StaticSprite(_vm, 0x55C043B8, 200));
- addSprite(new StaticSprite(_vm, 0x85500158, 400));
- addSprite(new StaticSprite(_vm, 0x25547028, 600));
+ insertStaticSprite(0x55C043B8, 200);
+ insertStaticSprite(0x85500158, 400);
+ insertStaticSprite(0x25547028, 600);
_soundResource1.load(0x68E25540);
_soundResource2.load(0x40400457);
@@ -1932,7 +1932,7 @@ void Scene2202::update() {
Scene::update();
if (_leaveScene && !_soundResource2.isPlaying()) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
if (_isSolved && !_soundResource1.isPlaying()) {
@@ -1945,7 +1945,7 @@ void Scene2202::update() {
int16 value = getFreeTileIndex(_movingTileIndex);
if (value != -1) {
setSurfacePriority(_movingTileSprite->getSurface(), 700);
- _movingTileSprite->sendMessage(0x2001, value, this);
+ sendMessage(_movingTileSprite, 0x2001, value);
_movingTileSprite = NULL;
_isTileMoving = true;
}
@@ -1969,7 +1969,7 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x0001:
// TODO Debug stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x000D:
@@ -2039,7 +2039,7 @@ uint32 Class545::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x4806:
@@ -2078,9 +2078,9 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x1011:
if (_index == getGlobalVar(0x9A500914))
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
else
- _parentScene->sendMessage(0x2001, 0, this);
+ sendMessage(_parentScene, 0x2001, 0);
messageResult = 1;
break;
case 0x2000:
@@ -2088,17 +2088,17 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
break;
case 0x3002:
if (_index == getGlobalVar(0x9A500914))
- _parentScene->sendMessage(0x4808, 0, this);
+ sendMessage(_parentScene, 0x4808, 0);
setFileHash1();
break;
case 0x4808:
setGlobalVar(0x9A500914, _index);
- _otherDoor->sendMessage(0x4809, 0, this);
+ sendMessage(_otherDoor, 0x4809, 0);
openDoor();
break;
case 0x4809:
closeDoor();
- _parentScene->sendMessage(0x2003, 0, this);
+ sendMessage(_parentScene, 0x2003, 0);
break;
}
return messageResult;
@@ -2142,8 +2142,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_asLeftDoor = addSprite(new AsScene2203Door(_vm, this, 0));
_asRightDoor = addSprite(new AsScene2203Door(_vm, this, 1));
- _ssSmallLeftDoor = addSprite(new StaticSprite(_vm, 0x542CC072, 1100));
- _ssSmallRightDoor = addSprite(new StaticSprite(_vm, 0x0A2C0432, 1100));
+ _ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
+ _ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100);
_leftDoorClipRect.x1 = _ssSmallLeftDoor->getSurface()->getDrawRect().x;
_leftDoorClipRect.y1 = 0;
@@ -2155,8 +2155,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_rightDoorClipRect.x2 = _ssSmallRightDoor->getSurface()->getDrawRect().x + _ssSmallRightDoor->getSurface()->getDrawRect().width;
_rightDoorClipRect.y2 = 480;
- _asLeftDoor->sendEntityMessage(0x2000, _asRightDoor, this);
- _asRightDoor->sendEntityMessage(0x2000, _asLeftDoor, this);
+ sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);
+ sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor);
_vm->_collisionMan->addSprite(_asLeftDoor);
_vm->_collisionMan->addSprite(_asRightDoor);
@@ -2201,7 +2201,7 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2001:
- _klayman->sendEntityMessage(0x1014, sender, this);
+ sendEntityMessage(_klayman, 0x1014, sender);
if (sender == _asLeftDoor) {
setMessageList2(0x004B83B0);
} else {
@@ -2233,10 +2233,10 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _asTape) {
- _klayman->sendEntityMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B83E0);
} else if (sender == _class545) {
- _klayman->sendEntityMessage(0x1014, _class545, this);
+ sendEntityMessage(_klayman, 0x1014, _class545);
setMessageList(0x004B83F0);
}
break;
@@ -2352,7 +2352,7 @@ void Scene2205::update() {
_palette->addPalette(0x0008028D, 0, 256, 0);
_background->load(0x0008028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0x2D309030);
- _ssDoorFrame->sendMessage(0x2000, 0, this);
+ sendMessage(_ssDoorFrame, 0x2000, 0);
((Mouse433*)_mouseCursor)->load(0x80289008);
((Mouse433*)_mouseCursor)->updateCursor();
_isLightOn = true;
@@ -2360,7 +2360,7 @@ void Scene2205::update() {
_palette->addPalette(0xD00A028D, 0, 256, 0);
_background->load(0xD00A028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84);
- _ssDoorFrame->sendMessage(0x2000, 0, this);
+ sendMessage(_ssDoorFrame, 0x2000, 0);
((Mouse433*)_mouseCursor)->load(0xA0289D08);
((Mouse433*)_mouseCursor)->updateCursor();
_isKlaymanInLight = true;
@@ -2394,7 +2394,7 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x2841369C) {
setMessageList(0x004B0630);
} else if (param.asInteger() == 0x402064D8) {
- _klayman->sendEntityMessage(0x1014, _ssLightSwitch, this);
+ sendEntityMessage(_klayman, 0x1014, _ssLightSwitch);
}
break;
case 0x480B:
@@ -2531,7 +2531,7 @@ uint32 Class607::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x4806:
@@ -2555,9 +2555,9 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
fileHash = 0x41983216;
- _sprite1 = addSprite(new StaticSprite(_vm, 0x2201266A, 100));
- _sprite2 = addSprite(new StaticSprite(_vm, 0x3406A333, 300));
- _sprite3 = addSprite(new StaticSprite(_vm, 0x24A223A2, 100));
+ _sprite1 = insertStaticSprite(0x2201266A, 100);
+ _sprite2 = insertStaticSprite(0x3406A333, 300);
+ _sprite3 = insertStaticSprite(0x24A223A2, 100);
_sprite4 = addSprite(new Class603(_vm, 0x26133023));
_sprite4->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
_sprite4->getSurface()->getClipRect().y1 = 0;
@@ -2570,9 +2570,9 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_class604 = addSprite(new Class604(_vm, 0x085E25E0));
} else {
fileHash = 0xE0102A45;
- _sprite1 = addSprite(new StaticSprite(_vm, 0x1C1106B8, 100));
- _sprite2 = addSprite(new StaticSprite(_vm, 0x020462E0, 300));
- _sprite3 = addSprite(new StaticSprite(_vm, 0x900626A2, 100));
+ _sprite1 = insertStaticSprite(0x1C1106B8, 100);
+ _sprite2 = insertStaticSprite(0x020462E0, 300);
+ _sprite3 = insertStaticSprite(0x900626A2, 100);
_sprite4 = addSprite(new Class603(_vm, 0x544822A8));
_sprite4->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
_sprite4->getSurface()->getClipRect().y1 = 0;
@@ -2644,7 +2644,7 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asInteger() == 0x800C6694) {
sub481B00();
} else if (param.asInteger() == 0x402064D8) {
- _klayman->sendEntityMessage(0x1014, _sprite5, this);
+ sendEntityMessage(_klayman, 0x1014, _sprite5);
} else if (param.asInteger() == 0x11C40840) {
if (getGlobalVar(0x18890C91))
setMessageList(0x004B8948);
@@ -2653,19 +2653,19 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4803:
- _class604->sendMessage(0x4803, 0, this);
+ sendMessage(_class604, 0x4803, 0);
break;
case 0x480B:
if (sender == _sprite5) {
setGlobalVar(0x18890C91, getGlobalVar(0x18890C91) ? 0 : 1);
if (getGlobalVar(0x18890C91))
- _sprite4->sendMessage(0x4808, 0, this);
+ sendMessage(_sprite4, 0x4808, 0);
else
- _sprite4->sendMessage(0x4809, 0, this);
+ sendMessage(_sprite4, 0x4809, 0);
}
break;
case 0x4826:
- _klayman->sendEntityMessage(0x1014, _class607, this);
+ sendEntityMessage(_klayman, 0x1014, _class607);
setMessageList(0x004B8988);
break;
case 0x482A:
@@ -2779,7 +2779,7 @@ void AsScene2207Elevator::update() {
if (_destPointIndex + _destPointIndexDelta < _pointIndex) {
_pointIndex--;
if (_pointIndex == 0)
- _parentScene->sendMessage(0x2003, 0, this);
+ sendMessage(_parentScene, 0x2003, 0);
setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newHashListIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
@@ -2793,15 +2793,15 @@ void AsScene2207Elevator::update() {
}
if (_pointIndex > 20 && _surface->getPriority() != 900) {
- _parentScene->sendMessage(0x2002, 900, this);
+ sendMessage(_parentScene, 0x2002, 900);
} else if (_pointIndex < 20 && _surface->getPriority() != 1100) {
- _parentScene->sendMessage(0x2002, 1100, this);
+ sendMessage(_parentScene, 0x2002, 1100);
}
AnimatedSprite::update();
if (_destPointIndex + _destPointIndexDelta == _pointIndex && _isMoving) {
- _parentScene->sendMessage(0x2004, 0, this);
+ sendMessage(_parentScene, 0x2004, 0);
_isMoving = false;
}
@@ -2870,7 +2870,7 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- _parentScene->sendMessage(0x4826, 0, this);
+ sendMessage(_parentScene, 0x4826, 0);
messageResult = 1;
break;
case 0x3002:
@@ -2884,10 +2884,10 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
stLeverDown();
break;
case 0x482A:
- _parentScene->sendMessage(0x1022, 990, this);
+ sendMessage(_parentScene, 0x1022, 990);
break;
case 0x482B:
- _parentScene->sendMessage(0x1022, 1010, this);
+ sendMessage(_parentScene, 0x1022, 1010);
break;
}
return messageResult;
@@ -2900,7 +2900,7 @@ void AsScene2207Lever::stLeverDown() {
}
void AsScene2207Lever::stLeverDownEvent() {
- _parentScene->sendMessage(0x480F, 0, this);
+ sendMessage(_parentScene, 0x480F, 0);
}
void AsScene2207Lever::stLeverUp() {
@@ -2911,7 +2911,7 @@ void AsScene2207Lever::stLeverUp() {
}
void AsScene2207Lever::stLeverUpEvent() {
- _parentScene->sendMessage(0x4807, 0, this);
+ sendMessage(_parentScene, 0x4807, 0);
}
AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene)
@@ -3084,9 +3084,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x00245884, NULL));
- _ssMaskPart1 = addSprite(new StaticSprite(_vm, 0xE20A28A0, 1200));
- _ssMaskPart2 = addSprite(new StaticSprite(_vm, 0x688F62A5, 1100));
- _ssMaskPart3 = addSprite(new StaticSprite(_vm, 0x0043B038, 1100));
+ _ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);
+ _ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
+ _ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 4, 1100, 277, 428, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
@@ -3126,7 +3126,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x02A51054, NULL));
- _ssMaskPart1 = addSprite(new StaticSprite(_vm, 0x980E46A4, 1200));
+ _ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0));
addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1));
@@ -3154,9 +3154,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B38B8);
- _klayman->sendEntityMessage(0x1014, _asElevator, this);
- _klayman->sendMessage(0x2001, 0, this);
- _asElevator->sendMessage(0x2000, 480, this);
+ sendEntityMessage(_klayman, 0x1014, _asElevator);
+ sendMessage(_klayman, 0x2001, 0);
+ sendMessage(_asElevator, 0x2000, 480);
_soundResource2.load(calcHash("fxFogHornSoft"));
@@ -3179,35 +3179,35 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x0014F275) {
if (_klaymanAtElevator) {
- _asElevator->sendMessage(0x2000, _mouseClickPos.y, this);
- _klayman->sendEntityMessage(0x1014, _asElevator, this);
- _klayman->sendMessage(0x2001, 0, this);
+ sendMessage(_asElevator, 0x2000, _mouseClickPos.y);
+ sendEntityMessage(_klayman, 0x1014, _asElevator);
+ sendMessage(_klayman, 0x2001, 0);
} else {
messageList402220();
}
} else if (param.asInteger() == 0x34569073) {
if (_klaymanAtElevator) {
_messageListFlag1 = true;
- _asElevator->sendMessage(0x2000, 0, this);
- _klayman->sendEntityMessage(0x1014, _asElevator, this);
- _klayman->sendMessage(0x2001, 0, this);
+ sendMessage(_asElevator, 0x2000, 0);
+ sendEntityMessage(_klayman, 0x1014, _asElevator);
+ sendMessage(_klayman, 0x2001, 0);
} else {
messageList402220();
}
} else if (param.asInteger() == 0x4054C877) {
if (_klaymanAtElevator) {
- _asElevator->sendMessage(0x2000, 480, this);
- _klayman->sendEntityMessage(0x1014, _asElevator, this);
- _klayman->sendMessage(0x2001, 0, this);
+ sendMessage(_asElevator, 0x2000, 480);
+ sendEntityMessage(_klayman, 0x1014, _asElevator);
+ sendMessage(_klayman, 0x2001, 0);
} else {
messageList402220();
}
} else if (param.asInteger() == 0x0CBC6211) {
- _klayman->sendEntityMessage(0x1014, _asElevator, this);
- _klayman->sendMessage(0x2001, 0, this);
+ sendEntityMessage(_klayman, 0x1014, _asElevator);
+ sendMessage(_klayman, 0x2001, 0);
setRectList(0x004B38B8);
} else if (param.asInteger() == 0x402064D8) {
- _klayman->sendEntityMessage(0x1014, _ssButton, this);
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x231DA241) {
if (_ssButton) {
setMessageList(0x004B38F0);
@@ -3223,8 +3223,8 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
_messageListFlag1 = false;
break;
case 0x4807:
- _asWallRobotAnimation->sendMessage(0x2007, 0, this);
- _asWallCannonAnimation->sendMessage(0x2007, 0, this);
+ sendMessage(_asWallRobotAnimation, 0x2007, 0);
+ sendMessage(_asWallCannonAnimation, 0x2007, 0);
break;
case 0x480B:
if (sender == _ssButton) {
@@ -3238,22 +3238,22 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480F:
- _asWallRobotAnimation->sendMessage(0x2006, 0, this);
- _asWallCannonAnimation->sendMessage(0x2006, 0, this);
+ sendMessage(_asWallRobotAnimation, 0x2006, 0);
+ sendMessage(_asWallCannonAnimation, 0x2006, 0);
_asWallRobotAnimation->getSurface()->setVisible(true);
_asWallCannonAnimation->getSurface()->setVisible(true);
break;
case 0x4826:
if (sender == _asTape) {
if (_klayman->getY() == 423) {
- _klayman->sendEntityMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B3958);
}
} else if (_klaymanAtElevator) {
SetMessageHandler(&Scene2207::handleMessage2);
- _asElevator->sendMessage(0x2000, 347, this);
- _klayman->sendEntityMessage(0x1014, _asElevator, this);
- _klayman->sendMessage(0x2001, 0, this);
+ sendMessage(_asElevator, 0x2000, 347);
+ sendEntityMessage(_klayman, 0x1014, _asElevator);
+ sendMessage(_klayman, 0x2001, 0);
}
break;
}
@@ -3268,8 +3268,8 @@ uint32 Scene2207::handleMessage2(int messageNum, const MessageParam ¶m, Enti
break;
case 0x2004:
SetMessageHandler(&Scene2207::handleMessage);
- _klayman->sendMessage(0x2005, 0, this);
- _klayman->sendEntityMessage(0x1014, _asLever, this);
+ sendMessage(_klayman, 0x2005, 0);
+ sendEntityMessage(_klayman, 0x1014, _asLever);
setMessageList(0x004B3920);
setRectList(0x004B3948);
break;
@@ -3421,7 +3421,7 @@ uint32 Scene2208::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 40 || param.asPoint().x >= 600) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
}
@@ -3567,7 +3567,7 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _asTape) {
- _klayman->sendEntityMessage(0x1014, _asTape, this);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B3D50);
}
break;
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 6bd10bb..19861ac 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -134,19 +134,9 @@ void Module2300::updateScene2301() {
createScene2302(4);
_childObject->handleUpdate();
} else {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
- if (_field24 >= 0) {
- if (_field24 == 0) {
- _parentModule->sendMessage(0x100A, 0, this);
- }
- _field24 = -1;
- }
- if (_field26 >= 0) {
- _parentModule->sendMessage(0x1023, 0, this);
- _field26 = -1;
- }
}
void Module2300::updateScene2302() {
@@ -185,9 +175,9 @@ void Module2300::updateScene2302() {
createScene2304(1);
_childObject->handleUpdate();
} else if (_field20 == 5) {
- _parentModule->sendMessage(0x1009, 3, this);
+ sendMessage(_parentModule, 0x1009, 3);
} else {
- _parentModule->sendMessage(0x1009, 4, this);
+ sendMessage(_parentModule, 0x1009, 4);
}
}
}
@@ -199,7 +189,7 @@ void Module2300::updateScene2303() {
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
- _parentModule->sendMessage(0x1009, 3, this);
+ sendMessage(_parentModule, 0x1009, 3);
} else {
createScene2302(5);
_childObject->handleUpdate();
@@ -229,24 +219,12 @@ void Module2300::updateScene2304() {
delete _childObject;
_childObject = NULL;
if (_field20 == 1) {
- _parentModule->sendMessage(0x1009, 2, this);
+ sendMessage(_parentModule, 0x1009, 2);
} else {
createScene2302(1);
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 0) {
- _parentModule->sendMessage(0x100A, 2, this);
- }
- _field24 = -1;
- }
- if (_field26 >= 0) {
- if (_field26 == 1) {
- _parentModule->sendMessage(0x1023, 2, this);
- }
- _field26 = -1;
- }
}
void Module2300::updateScene2305() {
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 51940ba..2c819a4 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -286,7 +286,7 @@ void Module3000::updateScene3002() {
createScene3010(-1);
_childObject->handleUpdate();
} else if (_moduleDoneStatus == 1) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
} else {
if (_moduleDoneStatus == 0) {
@@ -298,7 +298,7 @@ void Module3000::updateScene3002() {
_childObject->handleUpdate();
}
} else if (_moduleDoneStatus == 1) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
}
@@ -325,7 +325,7 @@ void Module3000::updateScene3002b() {
createScene3009(-1);
break;
case 11:
- _parentModule->sendMessage(0x1009, 3, this);
+ sendMessage(_parentModule, 0x1009, 3);
break;
case 12:
createScene3002(0);
@@ -431,7 +431,7 @@ void Module3000::updateScene3005() {
delete _childObject;
_childObject = NULL;
if (_moduleDoneStatus == 0) {
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
} else if (_moduleDoneStatus == 1) {
createScene3008(-1);
_childObject->handleUpdate();
@@ -650,7 +650,7 @@ SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Sc
void SsScene3009FireCannonButton::update() {
StaticSprite::update();
if (_flag1 && !_soundResource.isPlaying()) {
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_surface->setVisible(false);
}
}
@@ -794,7 +794,7 @@ uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
_soundResource.play();
- _asSymbol->sendMessage(0x2005, _incrDecr, this);
+ sendMessage(_asSymbol, 0x2005, _incrDecr);
}
messageResult = 1;
break;
@@ -827,7 +827,7 @@ uint32 AsScene3009VerticalIndicator::handleMessage(int messageNum, const Message
switch (messageNum) {
case 0x1011:
if (_enabled) {
- _parentScene->sendMessage(0x2002, 0, this);
+ sendMessage(_parentScene, 0x2002, 0);
}
messageResult = 1;
break;
@@ -857,7 +857,7 @@ uint32 AsScene3009HorizontalIndicator::handleMessage(int messageNum, const Messa
switch (messageNum) {
case 0x1011:
if (_enabled) {
- _parentScene->sendMessage(0x2004, 0, this);
+ sendMessage(_parentScene, 0x2004, 0);
}
messageResult = 1;
break;
@@ -942,9 +942,9 @@ uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶
_newHashListIndex = _symbolIndex;
setSubVar(0x00000914, _index, _symbolIndex);
if (_index / 3 == 0) {
- _parentScene->sendMessage(0x2001, 0, this);
+ sendMessage(_parentScene, 0x2001, 0);
} else {
- _parentScene->sendMessage(0x2003, 0, this);
+ sendMessage(_parentScene, 0x2003, 0);
}
messageResult = 1;
break;
@@ -1025,7 +1025,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
// DEBUG: Set the correct code
for (int i = 0; i < 6; i++)
setSubVar(0x00000914, i, _correctSymbols[i]);
- sendMessage(0x2003, 0, this);
+ sendMessage(this, 0x2003, 0);
//setGlobalVar(0x610210B7, 1);
}
@@ -1108,7 +1108,7 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO: Debug stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !getGlobalVar(0x000809C2)) {
setGlobalVar(0x20580A86, 0);
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x000D:
@@ -1191,7 +1191,7 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene3009::playExtVideo() {
setGlobalVar(0x20580A86, _cannonLocation);
setGlobalVar(0xF0402B0A, kScene3009CannonLocationFileHashes[_cannonLocation]);
- _parentModule->sendMessage(0x1009, 1, this);
+ sendMessage(_parentModule, 0x1009, 1);
}
bool Scene3009::isSymbolsPart1Solved() {
@@ -1303,9 +1303,9 @@ uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessagePar
_soundResource3.play();
_surface->setVisible(true);
_buttonLocked = true;
- _parentScene->sendMessage(0x2000, _buttonIndex, this);
+ sendMessage(_parentScene, 0x2000, _buttonIndex);
} else {
- _parentScene->sendMessage(0x2002, _buttonIndex, this);
+ sendMessage(_parentScene, 0x2002, _buttonIndex);
}
_needRefresh = true;
StaticSprite::update();
@@ -1418,7 +1418,7 @@ void AsScene3010DeadBolt::unlock(bool skipAnim) {
void AsScene3010DeadBolt::stIdleMessage() {
setFileHash1();
SetMessageHandler(&Sprite::handleMessage);
- _parentScene->sendMessage(0x2001, _boltIndex, this);
+ sendMessage(_parentScene, 0x2001, _boltIndex);
}
void AsScene3010DeadBolt::lock() {
@@ -1454,7 +1454,7 @@ void AsScene3010DeadBolt::stDisabled() {
void AsScene3010DeadBolt::stDisabledMessage() {
_surface->setVisible(false);
- _parentScene->sendMessage(0x2003, _boltIndex, this);
+ sendMessage(_parentScene, 0x2003, _boltIndex);
}
Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1513,7 +1513,7 @@ void Scene3010::update() {
_checkUnlocked = false;
}
if (_countdown != 0 && (--_countdown == 0)) {
- _parentModule->sendMessage(0x1009, _doorUnlocked ? 1 : 0, this);
+ sendMessage(_parentModule, 0x1009, _doorUnlocked ? 1 : 0);
}
}
@@ -1646,7 +1646,7 @@ uint32 SsScene3011Button::handleMessage(int messageNum, const MessageParam ¶
if (_countdown == 0) {
_surface->setVisible(true);
_countdown = 4;
- _parentScene->sendMessage(0x2000, 0, this);
+ sendMessage(_parentScene, 0x2000, 0);
_soundResource.play();
}
messageResult = 1;
@@ -1797,7 +1797,7 @@ uint32 Scene3011::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x2000:
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 7bc1551..6b36571 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -55,7 +55,7 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
_vm->_screen->clear();
- _parentModule->sendMessage(0x100A, _navigationIndex, this);
+ sendMessage(_parentModule, 0x100A, _navigationIndex);
}
@@ -68,7 +68,7 @@ int NavigationScene::getNavigationAreaType() {
NPoint mousePos;
mousePos.x = _mouseCursor->getX();
mousePos.y = _mouseCursor->getY();
- return _mouseCursor->sendPointMessage(0x2064, mousePos, this);
+ return sendPointMessage(_mouseCursor, 0x2064, mousePos);
}
void NavigationScene::update() {
@@ -80,7 +80,7 @@ void NavigationScene::update() {
_smackerFileHash = 0;
} else if (_smackerDone) {
if (_done) {
- _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ sendMessage(_parentModule, 0x1009, _navigationIndex);
} else {
const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
createMouseCursor();
@@ -93,7 +93,7 @@ void NavigationScene::update() {
_smackerDone = false;
_smackerPlayer->open(navigationItem.fileHash, true);
_vm->_screen->clear();
- _parentModule->sendMessage(0x100A, _navigationIndex, this);
+ sendMessage(_parentModule, 0x100A, _navigationIndex);
}
}
Scene::update();
@@ -103,7 +103,7 @@ uint32 NavigationScene::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x0000:
if (_interactive)
- _mouseCursor->sendMessage(0x4002, param, this);
+ sendMessage(_mouseCursor, 0x4002, param);
break;
case 0x0001:
if (_interactive)
@@ -144,7 +144,7 @@ void NavigationScene::createMouseCursor() {
}
_mouseCursor = addSprite(new NavigationMouse(_vm, mouseCursorFileHash, areaType));
- _mouseCursor->sendPointMessage(0x4002, _vm->getMousePos(), this);
+ sendPointMessage(_mouseCursor, 0x4002, _vm->getMousePos());
}
@@ -153,7 +153,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
bool oldSoundFlag1 = _soundFlag1;
bool oldSoundFlag2 = _soundFlag2;
- uint32 direction = _mouseCursor->sendPointMessage(0x2064, mousePos, this);
+ uint32 direction = sendPointMessage(_mouseCursor, 0x2064, mousePos);
switch (direction) {
// TODO: Merge cases 0 and 1?
@@ -170,7 +170,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
} while (!(*_navigationList)[_navigationIndex].interactive);
setGlobalVar(0x4200189E, _navigationIndex);
} else {
- _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ sendMessage(_parentModule, 0x1009, _navigationIndex);
}
break;
case 1:
@@ -186,14 +186,14 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
} while (!(*_navigationList)[_navigationIndex].interactive);
setGlobalVar(0x4200189E, _navigationIndex);
} else {
- _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ sendMessage(_parentModule, 0x1009, _navigationIndex);
}
break;
case 2:
case 3:
case 4:
if (navigationItem.middleFlag) {
- _parentModule->sendMessage(0x1009, _navigationIndex, this);
+ sendMessage(_parentModule, 0x1009, _navigationIndex);
} else if (navigationItem.middleSmackerFileHash != 0) {
_smackerFileHash = navigationItem.middleSmackerFileHash;
_interactive = false;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 8192216..c6f9f12 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -178,6 +178,18 @@ Background *Scene::addBackground(Background *background) {
return background;
}
+void Scene::setBackground(uint32 fileHash, bool dirtyBackground) {
+ _background = addBackground(new DirtyBackground(_vm, fileHash, 0, 0));
+}
+
+void Scene::changeBackground(uint32 fileHash) {
+ _background->load(fileHash);
+}
+
+Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
+ return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
+}
+
SmackerPlayer *Scene::addSmackerPlayer(SmackerPlayer *smackerPlayer) {
addEntity(smackerPlayer);
addSurface(smackerPlayer->getSurface());
@@ -202,12 +214,12 @@ void Scene::update() {
if (_klayman) {
// TODO: Merge later
if (_klayman->hasMessageHandler() &&
- _klayman->sendMessage(0x1008, 0, this) != 0 &&
+ sendMessage(_klayman, 0x1008, 0) != 0 &&
_messageListFlag &&
queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
} else if (_klayman->hasMessageHandler() &&
- _klayman->sendMessage(0x1008, 0, this) != 0 &&
+ sendMessage(_klayman, 0x1008, 0) != 0 &&
_messageListFlag) {
_mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
}
@@ -230,7 +242,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
switch (messageNum) {
case 0: // mouse moved
if (_mouseCursor && _mouseCursor->hasMessageHandler())
- _mouseCursor->sendMessage(0x4002, param, this);
+ sendMessage(_mouseCursor, 0x4002, param);
// TODO queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
break;
case 1: // mouse clicked
@@ -253,13 +265,13 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
#endif
break;
case 6:
- _parentModule->sendMessage(0x1009, param, this);
+ sendMessage(_parentModule, 0x1009, param);
break;
case 0x1006:
if (_messageListFlag1) {
_messageListFlag1 = false;
if (_messageListIndex == _messageListCount)
- _klayman->sendMessage(0x4004, 0, this);
+ sendMessage(_klayman, 0x4004, 0);
else {
runMessageList();
}
@@ -269,7 +281,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
if (_messageListFlag1) {
_messageListFlag1 = false;
_messageList = NULL;
- _klayman->sendMessage(0x4004, 0, this);
+ sendMessage(_klayman, 0x4004, 0);
}
break;
case 0x101D:
@@ -281,7 +293,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
case 0x101E:
if (_prevVisible && _mouseCursor) {
_mouseCursor->getSurface()->setVisible(false);
- // TODO _mouseCursor->sendMessage(0x4002, g_Screen->_mousePos, this);
+ // TODO sendMessage(_mouseCursor, 0x4002, g_Screen->_mousePos);
}
break;
case 0x1022:
@@ -322,7 +334,7 @@ bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
for (uint i = 0; i < _vm->_collisionMan->getSpriteCount(); i++) {
Sprite *sprite = _vm->_collisionMan->getSprite(i);
if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
- sprite->sendPointMessage(0x1011, _mouseClickPos, this) != 0) {
+ sendPointMessage(sprite, 0x1011, _mouseClickPos) != 0) {
return true;
}
}
@@ -369,7 +381,7 @@ void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool
_messageListFlag = messageListFlag;
_systemCallbackFlag = systemCallbackFlag;
_messageListStatus = 1;
- _klayman->sendMessage(0x101C, 0, this);
+ sendMessage(_klayman, 0x101C, 0);
// DEBUG: Show message list
for (uint i = 0; i < messageList->size(); i++) {
@@ -397,7 +409,7 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
if (_messageListStatus == 1) {
if (messageList != _messageList2) {
if (_messageValue >= 0) {
- _parentModule->sendMessage(0x1023, _messageValue, this);
+ sendMessage(_parentModule, 0x1023, _messageValue);
_messageValue = -1;
}
_messageList2 = messageList;
@@ -407,7 +419,7 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
} else if (_messageListStatus == 2) {
if (messageList == _messageList2) {
if (_messageValue >= 0) {
- _parentModule->sendMessage(0x1023, _messageValue, this);
+ sendMessage(_parentModule, 0x1023, _messageValue);
_messageValue = -1;
}
_messageList2 = messageList;
@@ -416,7 +428,7 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
}
} else {
if (_messageValue >= 0) {
- _parentModule->sendMessage(0x1023, _messageValue, this);
+ sendMessage(_parentModule, 0x1023, _messageValue);
_messageValue = -1;
}
_messageList2 = messageList;
@@ -449,22 +461,22 @@ void Scene::runMessageList() {
_messageListIndex++;
if (_messageListIndex == _messageListCount) {
- _klayman->sendMessage(0x1021, 0, this);
+ sendMessage(_klayman, 0x1021, 0);
}
if (_systemCallbackFlag) {
messageNum = convertMessageNum(messageNum);
}
if (messageNum != 0x4003) {
if (messageNum == 0x1009 || messageNum == 0x1024) {
- _parentModule->sendMessage(messageNum, messageParam, this);
+ sendMessage(_parentModule, messageNum, messageParam);
} else if (messageNum == 0x100A) {
_messageValue = messageParam;
- _parentModule->sendMessage(messageNum, messageParam, this);
+ sendMessage(_parentModule, messageNum, messageParam);
} else if (messageNum == 0x4001) {
_messageListFlag1 = true;
- _klayman->sendPointMessage(0x4001, _mouseClickPos, this);
+ sendPointMessage(_klayman, 0x4001, _mouseClickPos);
} else if (messageNum == 0x100D) {
- if (this->hasMessageHandler() && this->sendMessage(0x100D, messageParam, this) != 0)
+ if (this->hasMessageHandler() && sendMessage(this, 0x100D, messageParam) != 0)
continue;
} else if (messageNum == 0x101A) {
_messageListStatus = 0;
@@ -473,13 +485,13 @@ void Scene::runMessageList() {
} else if (messageNum == 0x1020) {
_messageListFlag = false;
} else if (messageNum >= 0x2000 && messageNum <= 0x2FFF) {
- if (this->hasMessageHandler() && this->sendMessage(messageNum, messageParam, this) != 0) {
+ if (this->hasMessageHandler() && sendMessage(this, messageNum, messageParam) != 0) {
_messageListFlag2 = false;
return;
}
} else {
_messageListFlag1 = true;
- if (_klayman->hasMessageHandler() && _klayman->sendMessage(messageNum, messageParam, this) != 0) {
+ if (_klayman->hasMessageHandler() && sendMessage(_klayman, messageNum, messageParam) != 0) {
_messageListFlag1 = false;
}
}
@@ -499,7 +511,7 @@ void Scene::messageList402220() {
_messageListFlag1 = false;
_messageList = NULL;
_messageListFlag = true;
- _klayman->sendMessage(0x4004, 0, this);
+ sendMessage(_klayman, 0x4004, 0);
}
void Scene::setRectList(uint32 id) {
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index e3ed273..067e86f 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -37,6 +37,8 @@
namespace Neverhood {
+#define InsertKlayman(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
+
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
@@ -50,6 +52,9 @@ public:
void setSurfacePriority(BaseSurface *surface, int priority);
void deleteSprite(Sprite **sprite);
Background *addBackground(Background *background);
+ void setBackground(uint32 fileHash, bool dirtyBackground = true);
+ void changeBackground(uint32 fileHash);
+ Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
protected:
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 0ebec5e..9ae7e14 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -176,7 +176,7 @@ void SmackerPlayer::update() {
if (_smackerDecoder->endOfVideo() && !_keepLastFrame) {
// Inform the scene about the end of the video playback
if (_scene) {
- _scene->sendMessage(0x3002, 0, this);
+ sendMessage(_scene, 0x3002, 0);
}
_flag2 = true;
} else {
@@ -194,7 +194,7 @@ void SmackerPlayer::update() {
} else if (!_keepLastFrame) {
// Inform the scene about the end of the video playback
if (_scene) {
- _scene->sendMessage(0x3002, 0, this);
+ sendMessage(_scene, 0x3002, 0);
}
_flag2 = true;
} else {
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index ace77f9..ae29063 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -73,7 +73,7 @@ void SmackerScene::nextVideo() {
uint32 smackerFileHash = _fileHashList[_fileHashListIndex];
if (_vm->_res->getResourceTypeByHash(smackerFileHash) != 10) {
// Not a Smacker file
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
return;
}
_fieldDF = getSubVar(0x00800410, smackerFileHash);
@@ -89,7 +89,7 @@ void SmackerScene::nextVideo() {
_smackerPlayer->open(smackerFileHash, false);
}
} else {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
@@ -111,7 +111,7 @@ uint32 SmackerScene::handleMessage(int messageNum, const MessageParam ¶m, En
break;
case 0x000C:
if (_canAbort) {
- _parentModule->sendMessage(0x1009, 0, this);
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
case 0x3002:
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index deb54af..828c0dd 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -392,7 +392,7 @@ void AnimatedSprite::updateFrameIndex() {
} else {
// Inform self about end of current animation
// The caller can then e.g. set a new animation fileHash
- sendMessage(0x3002, 0, this);
+ sendMessage(this, 0x3002, 0);
if (_fileHash1 == 0)
_frameIndex = 0;
}
@@ -400,7 +400,7 @@ void AnimatedSprite::updateFrameIndex() {
if (_frameIndex > 0) {
_frameIndex--;
} else {
- sendMessage(0x3002, 0, this);
+ sendMessage(this, 0x3002, 0);
if (_fileHash1 == 0)
_frameIndex = _frameIndex2;
}
@@ -424,7 +424,7 @@ void AnimatedSprite::updateFrameInfo() {
_needRefresh = true;
if (frameInfo.frameHash != 0) {
- sendMessage(0x100D, frameInfo.frameHash, this);
+ sendMessage(this, 0x100D, frameInfo.frameHash);
}
}
Commit: cac9a090e7fad2a9d8951b969816d0199c7133a8
https://github.com/scummvm/scummvm/commit/cac9a090e7fad2a9d8951b969816d0199c7133a8
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Use insertStaticSprite
Changed paths:
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module3000.cpp
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 163fc63..5a564cc 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -816,16 +816,16 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = addSprite(new AsScene1201Tape(_vm, this, 3, 1100, 243, 340, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
- tempSprite = addSprite(new StaticSprite(_vm, 0x03C82530, 100));
+ tempSprite = insertStaticSprite(0x03C82530, 100);
topY1 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
- tempSprite = addSprite(new StaticSprite(_vm, 0x88182069, 200));
+ tempSprite = insertStaticSprite(0x88182069, 200);
topY2 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
- tempSprite = addSprite(new StaticSprite(_vm, 0x476014E0, 300));
+ tempSprite = insertStaticSprite(0x476014E0, 300);
topY3 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
- tempSprite = addSprite(new StaticSprite(_vm, 0x04063110, 500));
+ tempSprite = insertStaticSprite(0x04063110, 500);
topY4 = tempSprite->getY() + 1;
_class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1));
@@ -834,12 +834,12 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_class466->getSurface()->getClipRect().x2 = 640;
_class466->getSurface()->getClipRect().y2 = 480;
- addSprite(new StaticSprite(_vm, 0x400B04B0, 1200));
+ insertStaticSprite(0x400B04B0, 1200);
- tempSprite = addSprite(new StaticSprite(_vm, 0x40295462, 1200));
+ tempSprite = insertStaticSprite(0x40295462, 1200);
x1 = tempSprite->getX();
- tempSprite = addSprite(new StaticSprite(_vm, 0xA29223FA, 1200));
+ tempSprite = insertStaticSprite(0xA29223FA, 1200);
x2 = tempSprite->getX() + tempSprite->getSurface()->getDrawRect().width;
class464 = addSprite(new Class464(_vm));
@@ -892,7 +892,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x000CF819)) {
- addSprite(new StaticSprite(_vm, 0x10002ED8, 500));
+ insertStaticSprite(0x10002ED8, 500);
if (!getGlobalVar(0x0A18CA33)) {
AsScene1201TntMan *asTntMan;
asTntMan = new AsScene1201TntMan(_vm, this, _class466, which == 1);
@@ -940,7 +940,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
- addSprite(new StaticSprite(_vm, 0x8E8A1981, 900));
+ insertStaticSprite(0x8E8A1981, 900);
uint32 tntIndex = 0;
while (tntIndex < 18) {
@@ -968,7 +968,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
}
- tempSprite = addSprite(new StaticSprite(_vm, 0x63D400BC, 900));
+ tempSprite = insertStaticSprite(0x63D400BC, 900);
_asLeftDoor = addSprite(new AsScene1201LeftDoor(_vm, _klayman));
_asLeftDoor->getSurface()->getClipRect().x1 = x1;
@@ -1207,7 +1207,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTntItems[i]);
}
- addSprite(new StaticSprite(_vm, 0x8E8419C1, 1100));
+ insertStaticSprite(0x8E8419C1, 1100);
if (getGlobalVar(0x000CF819)) {
SetMessageHandler(&Scene1202::handleMessage453D90);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index b8b7b8b..d148018 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -645,10 +645,10 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_mouseCursor = addSprite(new Mouse433(_vm, 0x643C0428, NULL));
_class595 = addSprite(new Class595(_vm, this));
- _sprite1 = addSprite(new StaticSprite(_vm, 0x942FC224, 300));
- _sprite2 = addSprite(new StaticSprite(_vm, 0x70430830, 1200));
+ _sprite1 = insertStaticSprite(0x942FC224, 300);
+ _sprite2 = insertStaticSprite(0x70430830, 1200);
_sprite2->getSurface()->setVisible(false);
- _sprite3 = addSprite(new StaticSprite(_vm, 0x16E01E20, 1100));
+ _sprite3 = insertStaticSprite(0x16E01E20, 1100);
_asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getSurface()->getDrawRect().y, false));
_asRing2 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32, 132, _class595->getSurface()->getDrawRect().y, getGlobalVar(0x13206309)));
@@ -875,7 +875,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asBalloon);
}
- _sprite1 = addSprite(new StaticSprite(_vm, 0xA014216B, 1100));
+ _sprite1 = insertStaticSprite(0xA014216B, 1100);
_klayman = new KmScene1303(_vm, this, 207, 332);
addSprite(_klayman);
@@ -958,9 +958,9 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
_class544 = NULL;
}
- _sprite1 = addSprite(new StaticSprite(_vm, 0x0562E621, 1100));
- addSprite(new StaticSprite(_vm, 0x012AE033, 1100));
- addSprite(new StaticSprite(_vm, 0x090AF033, 1100));
+ _sprite1 = insertStaticSprite(0x0562E621, 1100);
+ insertStaticSprite(0x012AE033, 1100);
+ insertStaticSprite(0x090AF033, 1100);
if (which < 0) {
_klayman = new KmScene1304(_vm, this, 217, 347);
@@ -1148,9 +1148,9 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
_asElevator = addSprite(new AsScene1306Elevator(_vm, this, _asElevatorDoor));
- _sprite1 = addSprite(new StaticSprite(_vm, 0x036A1EE0, 80));
+ _sprite1 = insertStaticSprite(0x036A1EE0, 80);
- addSprite(new StaticSprite(_vm, 0x00042313, 1100));
+ insertStaticSprite(0x00042313, 1100);
if (which < 0) {
_klayman = new KmScene1306(_vm, this, 380, 440);
@@ -1540,25 +1540,25 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
_mouseCursor = addSprite(new Mouse435(_vm, 0x06204A88, 20, 620));
- tempSprite = addSprite(new StaticSprite(_vm, 0x00A3621C, 800));
+ tempSprite = insertStaticSprite(0x00A3621C, 800);
_clipRects[0].x1 = tempSprite->getSurface()->getDrawRect().x;
_clipRects[0].y1 = 0;
_clipRects[0].x2 = 640;
_clipRects[0].y2 = 480;
- tempSprite = addSprite(new StaticSprite(_vm, 0x00A3641C, 600));
+ tempSprite = insertStaticSprite(0x00A3641C, 600);
_clipRects[1].x1 = tempSprite->getSurface()->getDrawRect().x;
_clipRects[1].y1 = 0;
_clipRects[1].x2 = 640;
_clipRects[1].y2 = 480;
- tempSprite = addSprite(new StaticSprite(_vm, 0x00A3681C, 400));
+ tempSprite = insertStaticSprite(0x00A3681C, 400);
_clipRects[2].x1 = tempSprite->getSurface()->getDrawRect().x;
_clipRects[2].y1 = 0;
_clipRects[2].x2 = 640;
_clipRects[2].y2 = 480;
- tempSprite = addSprite(new StaticSprite(_vm, 0x00A3701C, 200));
+ tempSprite = insertStaticSprite(0x00A3701C, 200);
_clipRects[3].x1 = tempSprite->getSurface()->getDrawRect().x;
_clipRects[3].y1 = 0;
_clipRects[3].x2 = 640;
@@ -1866,7 +1866,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
addSprite(new AnimatedSprite(_vm, 0x461A1490, 200, 235, 429));
}
- _sprite1 = addSprite(new StaticSprite(_vm, 0x0A042060, 1100));
+ _sprite1 = insertStaticSprite(0x0A042060, 1100);
_class549 = addSprite(new Class549(_vm, this));
_class593 = addSprite(new Class593(_vm, this));
@@ -1874,28 +1874,28 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1));
_class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2));
- _sprite2 = addSprite(new StaticSprite(_vm, 0x40043120, 995));
- _sprite3 = addSprite(new StaticSprite(_vm, 0x43003100, 995));
+ _sprite2 = insertStaticSprite(0x40043120, 995);
+ _sprite3 = insertStaticSprite(0x43003100, 995);
_sprite4 = NULL;
if (which < 0) {
_klayman = new KmScene1308(_vm, this, 380, 440);
setMessageList(0x004B57C0);
if (getGlobalVar(0x80455A41)) {
- _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ _sprite4 = insertStaticSprite(0x0101A624, 1100);
setRectList(0x004B5990);
} else {
- _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ _sprite5 = insertStaticSprite(0x080811A0, 100);
setRectList(0x004B5980);
}
} else if (which == 1) {
_klayman = new KmScene1308(_vm, this, 640, 440);
setMessageList(0x004B57C8);
if (getGlobalVar(0x80455A41)) {
- _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ _sprite4 = insertStaticSprite(0x0101A624, 1100);
setRectList(0x004B5990);
} else {
- _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ _sprite5 = insertStaticSprite(0x080811A0, 100);
setRectList(0x004B5980);
}
} else if (which == 2) {
@@ -1903,10 +1903,10 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
_sprite5 = addSprite(new Class592(_vm, this));
- _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ _sprite4 = insertStaticSprite(0x0101A624, 1100);
_sprite4->getSurface()->setVisible(false);
} else {
- _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ _sprite5 = insertStaticSprite(0x080811A0, 100);
setRectList(0x004B5980);
}
} else {
@@ -1915,10 +1915,10 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
sendMessage(_class549, 0x4808, 0);
_sprite1->getSurface()->setVisible(false);
if (getGlobalVar(0x80455A41)) {
- _sprite4 = addSprite(new StaticSprite(_vm, 0x0101A624, 1100));
+ _sprite4 = insertStaticSprite(0x0101A624, 1100);
_klayman->getSurface()->setVisible(false);
} else {
- _sprite5 = addSprite(new StaticSprite(_vm, 0x080811A0, 100));
+ _sprite5 = insertStaticSprite(0x080811A0, 100);
_klayman->getSurface()->setVisible(false);
}
}
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 60e5279..5dc7478 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -769,11 +769,11 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_class527 = addSprite(new Class527(_vm, _class525));
}
- _sprite3 = addSprite(new StaticSprite(_vm, 0xA82BA811, 1100));
- addSprite(new StaticSprite(_vm, 0x0A116C60, 1100));
+ _sprite3 = insertStaticSprite(0xA82BA811, 1100);
+ insertStaticSprite(0x0A116C60, 1100);
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0xB84B1100, 100, 0));
- _sprite1 = addSprite(new StaticSprite(_vm, 0x38EA100C, 1005));
- _sprite2 = addSprite(new StaticSprite(_vm, 0x98D0223C, 1200));
+ _sprite1 = insertStaticSprite(0x38EA100C, 1005);
+ _sprite2 = insertStaticSprite(0x98D0223C, 1200);
_sprite2->getSurface()->setVisible(false);
if (which < 0) {
@@ -1388,7 +1388,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
_mouseCursor = addSprite(new Mouse435(_vm, 0x4222100C, 20, 620));
_asMouse = addSprite(new AsScene1407Mouse(_vm, this));
- _ssResetButton = addSprite(new StaticSprite(_vm, 0x12006600, 100));
+ _ssResetButton = insertStaticSprite(0x12006600, 100);
_ssResetButton->getSurface()->setVisible(false);
}
@@ -1453,12 +1453,12 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x0A230219, NULL));
- _class401_1 = addSprite(new StaticSprite(_vm, 0x01102A33, 100));
+ _class401_1 = insertStaticSprite(0x01102A33, 100);
_class401_1->getSurface()->setVisible(false);
- _class401_2 = addSprite(new StaticSprite(_vm, 0x04442520, 995));
+ _class401_2 = insertStaticSprite(0x04442520, 995);
- _class401_3 = addSprite(new StaticSprite(_vm, 0x08742271, 995));
+ _class401_3 = insertStaticSprite(0x08742271, 995);
_asTape1 = new AsScene1201Tape(_vm, this, 12, 1100, 201, 468, 0x9148A011);
addSprite(_asTape1);
@@ -1583,7 +1583,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_class545);
}
- _sprite1 = addSprite(new StaticSprite(_vm, 0x1900A1F8, 1100));
+ _sprite1 = insertStaticSprite(0x1900A1F8, 1100);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 14, 1100, 281, 411, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index b281b38..30fe952 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -254,7 +254,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1));
addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2));
- _sprite = addSprite(new StaticSprite(_vm, 0x31313A22, 1100));
+ _sprite = insertStaticSprite(0x31313A22, 1100);
_class606 = addSprite(new Class606(_vm, this, 15, 1100, 238, 439, 0x02363852));
_vm->_collisionMan->addSprite(_class606);
@@ -301,7 +301,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
sendMessage(this, 0x2000, 0);
- tempSprite = addSprite(new StaticSprite(_vm, 0x30303822, 1100));
+ tempSprite = insertStaticSprite(0x30303822, 1100);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 1af7799..ecd4e70 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -139,7 +139,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x17240A6C, NULL));
- _class401 = addSprite(new StaticSprite(_vm, 0x0D641724, 1100));
+ _class401 = insertStaticSprite(0x0D641724, 1100);
if (which < 0) {
_klayman = new KmScene2001(_vm, this, 300, 345);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 2c819a4..009895c 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1000,7 +1000,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_smackerPlayer->setDrawPos(89, 37);
_palette->usePalette();
- addSprite(new StaticSprite(_vm, 0x8540252C, 400));
+ insertStaticSprite(0x8540252C, 400);
for (int i = 0; i < 2; i++) {
_ssSymbolEdges[i] = new SsScene3009SymbolEdges(_vm, i);
Commit: 4a88ce37ddfc66d124e0e7bb8f6e3f87f993083a
https://github.com/scummvm/scummvm/commit/4a88ce37ddfc66d124e0e7bb8f6e3f87f993083a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:38-07:00
Commit Message:
NEVERHOOD: Use InsertKlayman
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index e0ca57c..7102870 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2125,6 +2125,11 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
+void KmScene1002::init(Sprite *class599, Sprite *ssLadderArch) {
+ _class599 = class599;
+ _ssLadderArch = ssLadderArch;
+}
+
void KmScene1002::xUpdate() {
if (_x >= 250 && _x <= 435 && _y >= 420) {
if (_status == 0) {
@@ -2692,14 +2697,18 @@ void KmScene1004::sub478170() {
// KmScene1201
-KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, Entity *class464, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) {
+KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) {
// TODO setKlaymanTable(dword_4AEF10, 3);
_flagF6 = true;
}
+void KmScene1201::init(Entity *class464) {
+ _class464 = class464;
+}
+
uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
@@ -3872,7 +3881,7 @@ void KmScene2001::sub440270() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
-KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *rect1, int16 unk)
+KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
// TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3880,6 +3889,10 @@ KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
_flagF6 = false;
}
+void KmScene2201::init(NRect *clipRects, int clipRectsCount) {
+ // TODO
+}
+
uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 23bd110..a25176e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -261,10 +261,7 @@ protected:
class KmScene1002 : public Klayman {
public:
KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(Sprite *class599, Sprite *ssLadderArch) {
- _class599 = class599;
- _ssLadderArch = ssLadderArch;
- }
+ void init(Sprite *class599, Sprite *ssLadderArch);
protected:
Sprite *_class599;
Sprite *_ssLadderArch;
@@ -310,7 +307,8 @@ protected:
class KmScene1201 : public Klayman {
public:
- KmScene1201(NeverhoodEngine *vm, Entity *parentScene, Entity *class464, int16 x, int16 y);
+ KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ void init(Entity *class464);
protected:
Entity *_class464;
int _countdown;
@@ -431,7 +429,8 @@ protected:
class KmScene2201 : public Klayman {
public:
- KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *rect1, int16 unk);
+ KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ void init(NRect *clipRects, int clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 011ea9e..7c3c3ba 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -410,27 +410,26 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
setRectList(0x004B49F0);
- _klayman = new KmScene1001(_vm, this, 200, 433);
+ InsertKlayman(KmScene1001, 200, 433);
setMessageList(0x004B4888);
} else if (which == 1) {
setRectList(0x004B49F0);
- _klayman = new KmScene1001(_vm, this, 640, 433);
+ InsertKlayman(KmScene1001, 640, 433);
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
if (getGlobalVar(0xC0418A02)) {
- _klayman = new KmScene1001(_vm, this, 390, 433);
+ InsertKlayman(KmScene1001, 390, 433);
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene1001(_vm, this, 300, 433);
+ InsertKlayman(KmScene1001, 300, 433);
}
setMessageList(0x004B4970);
} else {
setRectList(0x004B4A00);
- _klayman = new KmScene1001(_vm, this, 200, 433);
+ InsertKlayman(KmScene1001, 200, 433);
setMessageList(0x004B4890);
}
- addSprite(_klayman);
tempSprite = insertStaticSprite(0x2080A3A8, 1300);
@@ -1425,7 +1424,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
- InsertKlayman(KmScene1002, 90, 226, (_class599, _ssLadderArch));
+ InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
_klayman->getSurface()->getClipRect().x1 = 31;
@@ -1435,7 +1434,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
- InsertKlayman(KmScene1002, 379, 435, (_class599, _ssLadderArch));
+ InsertKlaymanInitArgs(KmScene1002, 379, 435, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
_klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
@@ -1445,7 +1444,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
}
} else if (which == 1) {
- InsertKlayman(KmScene1002, 650, 435, (_class599, _ssLadderArch));
+ InsertKlaymanInitArgs(KmScene1002, 650, 435, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
_klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
@@ -1455,7 +1454,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_vm->_gameState.field2 = 1;
} else if (which == 2) {
- InsertKlayman(KmScene1002, 68, 645, (_class599, _ssLadderArch));
+ InsertKlaymanInitArgs(KmScene1002, 68, 645, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4298);
_klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
@@ -1466,7 +1465,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.field2 = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
- InsertKlayman(KmScene1002, 90, 226, (_class599, _ssLadderArch));
+ InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4470);
_klayman->getSurface()->getClipRect().x1 = 31;
@@ -1766,20 +1765,18 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
setRectList(0x004B7C70);
- _klayman = new KmScene1004(_vm, this, 330, 327);
+ InsertKlayman(KmScene1004, 330, 327);
setMessageList(0x004B7C18);
} else if (which == 1) {
setRectList(0x004B7C70);
- _klayman = new KmScene1004(_vm, this, 330, 327);
+ InsertKlayman(KmScene1004, 330, 327);
setMessageList(0x004B7C08);
} else {
loadDataResource(0x01900A04);
- _klayman = new KmScene1004(_vm, this, _dataResource.getPoint(0x80052A29).x, 27);
+ InsertKlayman(KmScene1004, _dataResource.getPoint(0x80052A29).x, 27);
setMessageList(0x004B7BF0);
}
- addSprite(_klayman);
-
updatePaletteArea();
_class478 = addSprite(new Class478(_vm, _klayman));
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 5a564cc..212fc87 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -845,29 +845,29 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
class464 = addSprite(new Class464(_vm));
if (which < 0) {
- _klayman = new KmScene1201(_vm, this, class464, 364, 333);
+ InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
setMessageList(0x004AEC08);
} else if (which == 3) {
- _klayman = new KmScene1201(_vm, this, class464, 400, 329);
+ InsertKlaymanInitArgs(KmScene1201, 400, 329, (class464));
setMessageList(0x004AEC08);
} else if (which == 2) {
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- _klayman = new KmScene1201(_vm, this, class464, 374, 333);
+ InsertKlaymanInitArgs(KmScene1201, 374, 333, (class464));
setMessageList(0x004AEC08);
} else {
- _klayman = new KmScene1201(_vm, this, class464, 640, 329);
+ InsertKlaymanInitArgs(KmScene1201, 640, 329, (class464));
setMessageList(0x004AEC20);
}
} else if (which == 1) {
if (getGlobalVar(0xC0418A02)) {
- _klayman = new KmScene1201(_vm, this, class464, 364, 333);
+ InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene1201(_vm, this, class464, 246, 333);
+ InsertKlaymanInitArgs(KmScene1201, 246, 333, (class464));
}
setMessageList(0x004AEC30);
} else {
- _klayman = new KmScene1201(_vm, this, class464, 0, 336);
+ InsertKlaymanInitArgs(KmScene1201, 0, 336, (class464));
setMessageList(0x004AEC10);
}
@@ -877,8 +877,6 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().y2 = 480;
_klayman->setRepl(64, 0);
- addSprite(_klayman);
-
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
_background = addBackground(new DirtyBackground(_vm, 0x4019A2C4, 0, 0));
_palette = new Palette(_vm, 0x4019A2C4);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index d148018..8085eb6 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -664,13 +664,12 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFence->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
if (which < 0) {
-// _klayman = new KmScene1002(_vm, this, _class595, NULL, 380, 364);
+ InsertKlaymanInitArgs(KmScene1002, 380, 364, (_class595, NULL));
setMessageList(0x004B0868);
} else {
-// _klayman = new KmScene1002(_vm, this, _class595, NULL, 293, 330);
+ InsertKlaymanInitArgs(KmScene1002, 293, 330, (_class595, NULL));
setMessageList(0x004B0870);
}
- addSprite(_klayman);
_klayman->getSurface()->getClipRect().x1 = 0;
_klayman->getSurface()->getClipRect().y1 = 0;
@@ -877,8 +876,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0xA014216B, 1100);
- _klayman = new KmScene1303(_vm, this, 207, 332);
- addSprite(_klayman);
+ InsertKlayman(KmScene1303, 207, 332);
setMessageList(0x004AF9A0);
_klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
@@ -963,13 +961,12 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x090AF033, 1100);
if (which < 0) {
- _klayman = new KmScene1304(_vm, this, 217, 347);
+ InsertKlayman(KmScene1304, 217, 347);
setMessageList(0x004B90E8);
} else {
- _klayman = new KmScene1304(_vm, this, 100, 347);
+ InsertKlayman(KmScene1304, 100, 347);
setMessageList(0x004B90F0);
}
- addSprite(_klayman);
_klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
_klayman->getSurface()->getClipRect().y1 = 0;
@@ -1016,13 +1013,12 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
_mouseCursor = addSprite(new Mouse433(_vm, 0x01B60280, NULL));
if (which < 0) {
- _klayman = new KmScene1305(_vm, this, 212, 441);
+ InsertKlayman(KmScene1305, 212, 441);
setMessageList(0x004B6E40);
} else {
- _klayman = new KmScene1305(_vm, this, 212, 441);
+ InsertKlayman(KmScene1305, 212, 441);
setMessageList(0x004B6E48);
}
- addSprite(_klayman);
}
@@ -1153,45 +1149,45 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x00042313, 1100);
if (which < 0) {
- _klayman = new KmScene1306(_vm, this, 380, 440);
+ InsertKlayman(KmScene1306, 380, 440);
setMessageList(0x004AFAD0);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 1) {
- _klayman = new KmScene1306(_vm, this, 136, 440);
+ InsertKlayman(KmScene1306, 136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- _klayman = new KmScene1306(_vm, this, 515, 440);
+ InsertKlayman(KmScene1306, 515, 440);
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene1306(_vm, this, 355, 440);
+ InsertKlayman(KmScene1306, 355, 440);
}
setMessageList(0x004AFBC8);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 3) {
- _klayman = new KmScene1306(_vm, this, 534, 440);
+ InsertKlayman(KmScene1306, 534, 440);
setMessageList(0x004AFC30);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 4) {
- _klayman = new KmScene1306(_vm, this, 136, 440);
+ InsertKlayman(KmScene1306, 136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 5) {
- _klayman = new KmScene1306(_vm, this, 136, 440);
+ InsertKlayman(KmScene1306, 136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else {
- _klayman = new KmScene1306(_vm, this, 286, 408);
+ InsertKlayman(KmScene1306, 286, 408);
setSurfacePriority(_asElevator->getSurface(), 1100);
setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
setSurfacePriority(_sprite1->getSurface(), 1080);
@@ -1200,7 +1196,6 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
clearRectList();
sendMessage(_asElevator, 0x4808, 0);
}
- addSprite(_klayman);
}
@@ -1879,7 +1874,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite4 = NULL;
if (which < 0) {
- _klayman = new KmScene1308(_vm, this, 380, 440);
+ InsertKlayman(KmScene1308, 380, 440);
setMessageList(0x004B57C0);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1889,7 +1884,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 1) {
- _klayman = new KmScene1308(_vm, this, 640, 440);
+ InsertKlayman(KmScene1308, 640, 440);
setMessageList(0x004B57C8);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1899,7 +1894,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 2) {
- _klayman = new KmScene1308(_vm, this, 475, 440);
+ InsertKlayman(KmScene1308, 475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
_sprite5 = addSprite(new Class592(_vm, this));
@@ -1910,7 +1905,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else {
- _klayman = new KmScene1308(_vm, this, 41, 440);
+ InsertKlayman(KmScene1308, 41, 440);
setMessageList(0x004B57D0);
sendMessage(_class549, 0x4808, 0);
_sprite1->getSurface()->setVisible(false);
@@ -1922,7 +1917,6 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->setVisible(false);
}
}
- addSprite(_klayman);
if (_sprite4) {
_klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 5dc7478..b4f0744 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -777,23 +777,22 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2->getSurface()->setVisible(false);
if (which < 0) {
- _klayman = new KmScene1401(_vm, this, 380, 447);
+ InsertKlayman(KmScene1401, 380, 447);
setMessageList(0x004B65C8);
_sprite1->getSurface()->setVisible(false);
} else if (which == 1) {
- _klayman = new KmScene1401(_vm, this, 0, 447);
+ InsertKlayman(KmScene1401, 0, 447);
setMessageList(0x004B65D0);
_sprite1->getSurface()->setVisible(false);
} else if (which == 2) {
- _klayman = new KmScene1401(_vm, this, 660, 447);
+ InsertKlayman(KmScene1401, 660, 447);
setMessageList(0x004B65D8);
_sprite1->getSurface()->setVisible(false);
} else {
- _klayman = new KmScene1401(_vm, this, 290, 413);
+ InsertKlayman(KmScene1401, 290, 413);
setMessageList(0x004B65E8);
_sprite1->getSurface()->setVisible(false);
}
- addSprite(_klayman);
if (getGlobalVar(0x04A105B3) == 2) {
_class489 = addSprite(new Class489(_vm, this, _klayman, _class525));
@@ -994,16 +993,16 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B0C98);
if (which < 0) {
- _klayman = new KmScene1402(_vm, this, 377, 391);
+ InsertKlayman(KmScene1402, 377, 391);
setMessageList(0x004B0B48);
if (!getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 0));
}
} else if (which == 1) {
- _klayman = new KmScene1402(_vm, this, 42, 391);
+ InsertKlayman(KmScene1402, 42, 391);
setMessageList(0x004B0B50);
} else if (which == 2) {
- _klayman = new KmScene1402(_vm, this, 377, 391);
+ InsertKlayman(KmScene1402, 377, 391);
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
if (getGlobalVar(0x70A1189C)) {
@@ -1015,14 +1014,13 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_class482 = addSprite(new Class482(_vm, this, 0));
}
} else {
- _klayman = new KmScene1402(_vm, this, 513, 391);
+ InsertKlayman(KmScene1402, 513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 2));
sub428220();
}
}
- addSprite(_klayman);
if (_class482) {
_class482->getSurface()->getClipRect().x1 = 0;
@@ -1471,13 +1469,12 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape2->setRepl(64, 0);
if (which < 0) {
- _klayman = new KmScene1403(_vm, this, 380, 463);
+ InsertKlayman(KmScene1403, 380, 463);
setMessageList(0x004B1F18);
} else {
- _klayman = new KmScene1403(_vm, this, 640, 463);
+ InsertKlayman(KmScene1403, 640, 463);
setMessageList(0x004B1F20);
}
- addSprite(_klayman);
_klayman->setRepl(64, 0);
if (getGlobalVar(0x04A105B3) == 4) {
@@ -1589,24 +1586,23 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
- _klayman = new KmScene1404(_vm, this, 376, 406);
+ InsertKlayman(KmScene1404, 376, 406);
setMessageList(0x004B8C28);
} else if (which == 1) {
- _klayman = new KmScene1404(_vm, this, 376, 406);
+ InsertKlayman(KmScene1404, 376, 406);
setMessageList(0x004B8C30);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- _klayman = new KmScene1404(_vm, this, 347, 406);
+ InsertKlayman(KmScene1404, 347, 406);
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene1404(_vm, this, 187, 406);
+ InsertKlayman(KmScene1404, 187, 406);
}
setMessageList(0x004B8D28);
} else {
- _klayman = new KmScene1404(_vm, this, 30, 406);
+ InsertKlayman(KmScene1404, 30, 406);
setMessageList(0x004B8C38);
}
- addSprite(_klayman);
if (getGlobalVar(0x04A105B3) == 3) {
_class489 = addSprite(new Class489(_vm, this, _klayman, 0));
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 30fe952..43a30f9 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -262,7 +262,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
which = 4;
if (which < 0) {
- _klayman = new KmScene1705(_vm, this, 231, 434);
+ InsertKlayman(KmScene1705, 231, 434);
setMessageList(0x004B69E8);
sendMessage(this, 0x2000, 0);
_klayman->getSurface()->getClipRect().x1 = 0;
@@ -270,7 +270,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else if (which == 1) {
- _klayman = new KmScene1705(_vm, this, 431, 434);
+ InsertKlayman(KmScene1705, 431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08);
sendMessage(this, 0x2000, 1);
@@ -279,7 +279,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else if (which == 2) {
- _klayman = new KmScene1705(_vm, this, 431, 434);
+ InsertKlayman(KmScene1705, 431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0);
sendMessage(this, 0x2000, 1);
@@ -288,7 +288,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else if (which == 3) {
- _klayman = new KmScene1705(_vm, this, 431, 434);
+ InsertKlayman(KmScene1705, 431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18);
sendMessage(this, 0x2000, 1);
@@ -297,7 +297,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
_klayman->getSurface()->getClipRect().y2 = 480;
} else {
- _klayman = new KmScene1705(_vm, this, 231, 74);
+ InsertKlayman(KmScene1705, 231, 74);
sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
sendMessage(this, 0x2000, 0);
@@ -308,8 +308,6 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->getSurface()->getClipRect().y2 = 480;
}
- addSprite(_klayman);
-
}
void Scene1705::update() {
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index ecd4e70..bca54eb 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -142,31 +142,30 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_class401 = insertStaticSprite(0x0D641724, 1100);
if (which < 0) {
- _klayman = new KmScene2001(_vm, this, 300, 345);
+ InsertKlayman(KmScene2001, 300, 345);
setMessageList(0x004B3538);
sendMessage(this, 0x2000, 0);
} else if (which == 1) {
- _klayman = new KmScene2001(_vm, this, 116, 345);
+ InsertKlayman(KmScene2001, 116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3540);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
- _klayman = new KmScene2001(_vm, this, 116, 345);
+ InsertKlayman(KmScene2001, 116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B35F0);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
- _klayman = new KmScene2001(_vm, this, 116, 345);
+ InsertKlayman(KmScene2001, 116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3550);
sendMessage(this, 0x2000, 1);
} else {
- _klayman = new KmScene2001(_vm, this, 390, 345);
+ InsertKlayman(KmScene2001, 390, 345);
setMessageList(0x004B3530);
sendMessage(this, 0x2000, 0);
_klayman->setDoDeltaX(1);
}
- addSprite(_klayman);
_klayman->getSurface()->getClipRect().x1 = _class401->getSurface()->getDrawRect().x;
_klayman->getSurface()->getClipRect().y1 = 0;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 3faad25..27fb21a 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -1547,29 +1547,28 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_doorLightSprite = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
- _klayman = new KmScene2201(_vm, this, 300, 427, &_rect1, 2);
+ InsertKlaymanInitArgs(KmScene2201, 300, 427, (&_rect1, 2));
setMessageList(0x004B8118);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else if (which == 1) {
- _klayman = new KmScene2201(_vm, this, 412, 393, &_rect1, 2);
+ InsertKlaymanInitArgs(KmScene2201, 412, 393, (&_rect1, 2));
setMessageList(0x004B8130);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- _klayman = new KmScene2201(_vm, this, 379, 427, &_rect1, 2);
+ InsertKlaymanInitArgs(KmScene2201, 379, 427, (&_rect1, 2));
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene2201(_vm, this, 261, 427, &_rect1, 2);
+ InsertKlaymanInitArgs(KmScene2201, 261, 427, (&_rect1, 2));
}
setMessageList(0x004B8178);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
- _klayman = new KmScene2201(_vm, this, pt.x, pt.y, &_rect1, 2);
+ InsertKlaymanInitArgs(KmScene2201, pt.x, pt.y, (&_rect1, 2));
setMessageList(0x004B8120);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, true));
}
- addSprite(_klayman);
addSprite(new AsScene2201CeilingFan(_vm));
@@ -2162,24 +2161,23 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asRightDoor);
if (which < 0) {
- _klayman = new KmScene2203(_vm, this, 200, 427);
+ InsertKlayman(KmScene2203, 200, 427);
setMessageList(0x004B8340);
} else if (which == 1) {
- _klayman = new KmScene2203(_vm, this, 640, 427);
+ InsertKlayman(KmScene2203, 640, 427);
setMessageList(0x004B8350);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- _klayman = new KmScene2203(_vm, this, 362, 427);
+ InsertKlayman(KmScene2203, 362, 427);
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene2203(_vm, this, 202, 427);
+ InsertKlayman(KmScene2203, 202, 427);
}
setMessageList(0x004B8358);
} else {
- _klayman = new KmScene2203(_vm, this, 0, 427);
+ InsertKlayman(KmScene2203, 0, 427);
setMessageList(0x004B8348);
}
- addSprite(_klayman);
if (getGlobalVar(0x9A500914)) {
_ssSmallLeftDoor->getSurface()->setVisible(false);
@@ -2315,25 +2313,24 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
if (which < 0) {
- _klayman = new KmScene2205(_vm, this, 320, 417);
+ InsertKlayman(KmScene2205, 320, 417);
setMessageList(0x004B0658);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else if (which == 1) {
- _klayman = new KmScene2205(_vm, this, 640, 417);
+ InsertKlayman(KmScene2205, 640, 417);
setMessageList(0x004B0648);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else {
- _klayman = new KmScene2205(_vm, this, 0, 417);
+ InsertKlayman(KmScene2205, 0, 417);
setMessageList(0x004B0640);
_isKlaymanInLight = true;
}
- addSprite(_klayman);
_klayman->getSurface()->getClipRect().x1 = _ssDoorFrame->getSurface()->getDrawRect().x;
_klayman->getSurface()->getClipRect().y1 = 0;
@@ -2606,27 +2603,26 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_class607);
if (which < 0) {
- _klayman = new KmScene2206(_vm, this, 200, 430);
+ InsertKlayman(KmScene2206, 200, 430);
setMessageList(0x004B88A8);
} else if (which == 1) {
- _klayman = new KmScene2206(_vm, this, 640, 430);
+ InsertKlayman(KmScene2206, 640, 430);
setMessageList(0x004B88B8);
} else if (which == 2) {
- _klayman = new KmScene2206(_vm, this, 205, 396);
+ InsertKlayman(KmScene2206, 205, 396);
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
sub4819D0();
_soundResource.play(0x53B8284A);
} else if (which == 3) {
- _klayman = new KmScene2206(_vm, this, kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
+ InsertKlayman(KmScene2206, kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
setMessageList(0x004B8A70);
} else {
- _klayman = new KmScene2206(_vm, this, 0, 430);
+ InsertKlayman(KmScene2206, 0, 430);
setMessageList(0x004B88B0);
}
- addSprite(_klayman);
_klayman->setSoundFlag(true);
_klayman->setKlaymanTable2();
@@ -3069,8 +3065,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2207::update);
_surfaceFlag = true;
- _klayman = new KmScene2207(_vm, this, 0, 0); // CHECKME: Stack vars are uninitialized?!
- addSprite(_klayman);
+ InsertKlayman(KmScene2207, 0, 0);
_klayman->setRepl(64, 0);
setMessageList(0x004B38E8);
@@ -3518,21 +3513,20 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
- _klayman = new KmScene2242(_vm, this, 200, 430);
+ InsertKlayman(KmScene2242, 200, 430);
setMessageList(0x004B3C18);
} else if (which == 1) {
- _klayman = new KmScene2242(_vm, this, 530, 430);
+ InsertKlayman(KmScene2242, 530, 430);
setMessageList(0x004B3D60);
} else if (which == 2) {
- _klayman = new KmScene2242(_vm, this, kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
+ InsertKlayman(KmScene2242, kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
setMessageList(0x004B3D48);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmScene2242(_vm, this, 0, 430);
+ InsertKlayman(KmScene2242, 0, 430);
setMessageList(0x004B3C20);
}
- addSprite(_klayman);
_klayman->setSoundFlag(true);
@@ -3650,21 +3644,20 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
}
if (which < 0) {
- _klayman = new KmHallOfRecords(_vm, this, 200, 430);
+ InsertKlayman(KmHallOfRecords, 200, 430);
setMessageList(0x004B2900);
} else if (which == 1) {
- _klayman = new KmHallOfRecords(_vm, this, 640, 430);
+ InsertKlayman(KmHallOfRecords, 640, 430);
setMessageList(0x004B2910);
} else if (which == 2) {
- _klayman = new KmHallOfRecords(_vm, this, kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
+ InsertKlayman(KmHallOfRecords, kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
setMessageList(0x004B2B70);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
} else {
- _klayman = new KmHallOfRecords(_vm, this, 0, 430);
+ InsertKlayman(KmHallOfRecords, 0, 430);
setMessageList(0x004B2908);
}
- addSprite(_klayman);
_klayman->setSoundFlag(true);
_klayman->setKlaymanTable2();
@@ -3748,21 +3741,20 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
- _klayman = new KmScene2247(_vm, this, 200, 430);
+ InsertKlayman(KmScene2247, 200, 430);
setMessageList(0x004B5428);
} else if (which == 1) {
- _klayman = new KmScene2247(_vm, this, 640, 430);
+ InsertKlayman(KmScene2247, 640, 430);
setMessageList(0x004B5438);
} else if (which == 2) {
- _klayman = new KmScene2247(_vm, this, kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
+ InsertKlayman(KmScene2247, kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
setMessageList(0x004B5530);
} else {
- _klayman = new KmScene2247(_vm, this, 0, 430);
+ InsertKlayman(KmScene2247, 0, 430);
setMessageList(0x004B5430);
}
- addSprite(_klayman);
_klayman->setSoundFlag(true);
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 067e86f..9b928bb 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -37,7 +37,8 @@
namespace Neverhood {
-#define InsertKlayman(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
+#define InsertKlayman(KlaymanClass, X, Y) _klayman = new KlaymanClass(_vm, this, X, Y); addSprite(_klayman)
+#define InsertKlaymanInitArgs(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
class Scene : public Entity {
public:
Commit: 5d63bef6a25a990603444026a8cb033108410019
https://github.com/scummvm/scummvm/commit/5d63bef6a25a990603444026a8cb033108410019
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Use setBackground
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 7c3c3ba..1e5b076 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -403,7 +403,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->setHitRects(0x004B4860);
_surfaceFlag = false;
- _background = addBackground(new DirtyBackground(_vm, 0x4086520E, 0, 0));
+ setBackground(0x4086520E);
_palette = new Palette(_vm, 0x4086520E);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x6520A400, NULL));
@@ -1406,7 +1406,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x12C23307, 0, 0));
+ setBackground(0x12C23307);
_palette = new Palette(_vm, 0x12C23307);
_palette->usePalette();
@@ -1686,7 +1686,7 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF
SetMessageHandler(&Class152::handleMessage);
- _background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
+ setBackground(backgroundFileHash);
_palette = new Palette(_vm, backgroundFileHash);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse435(_vm, cursorFileHash, 20, 620));
@@ -1748,7 +1748,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1004::update);
SetMessageHandler(&Scene1004::handleMessage);
- _background = addBackground(new DirtyBackground(_vm, 0x50C03005, 0, 0));
+ setBackground(0x50C03005);
if (getGlobalVar(0x0D0A14D10)) {
palette2 = new Palette2(_vm, 0xA30BA329);
@@ -1850,13 +1850,13 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
if (getGlobalVar(0xD0A14D10)) {
- _background = addBackground(new DirtyBackground(_vm, 0x2800E011, 0, 0));
+ setBackground(0x2800E011);
_palette = new Palette(_vm, 0x2800E011);
_palette->usePalette();
insertStaticSprite(0x492D5AD7, 100);
_mouseCursor = addSprite(new Mouse435(_vm, 0x0E015288, 20, 620));
} else {
- _background = addBackground(new DirtyBackground(_vm, 0x8870A546, 0, 0));
+ setBackground(0x8870A546);
_palette = new Palette(_vm, 0x8870A546);
_palette->usePalette();
insertStaticSprite(0x40D1E0A9, 100);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 212fc87..a12f1cc 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -878,12 +878,12 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setRepl(64, 0);
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- _background = addBackground(new DirtyBackground(_vm, 0x4019A2C4, 0, 0));
+ setBackground(0x4019A2C4);
_palette = new Palette(_vm, 0x4019A2C4);
_palette->usePalette();
_asRightDoor = NULL;
} else {
- _background = addBackground(new DirtyBackground(_vm, 0x40206EC5, 0, 0));
+ setBackground(0x40206EC5);
_palette = new Palette(_vm, 0x40206EC5);
_palette->usePalette();
_asRightDoor = addSprite(new AsScene1201RightDoor(_vm, _klayman, which == 2));
@@ -1188,7 +1188,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x60210ED5, 0, 0));
+ setBackground(0x60210ED5);
palette2 = new Palette2(_vm, 0x60210ED5);
palette2->usePalette();
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 8085eb6..46597e0 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -639,7 +639,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->setHitRects(0x004B0858);
setRectList(0x004B0A38);
- _background = addBackground(new DirtyBackground(_vm, 0x420643C4, 0, 0));
+ setBackground(0x420643C4);
_palette = new Palette(_vm, 0x420643C4);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x643C0428, NULL));
@@ -1007,7 +1007,7 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1305::handleMessage);
setRectList(0x004B6E98);
- _background = addBackground(new DirtyBackground(_vm, 0x28801B64, 0, 0));
+ setBackground(0x28801B64);
_palette = new Palette(_vm, 0x28801B64);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x01B60280, NULL));
@@ -1123,7 +1123,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
SetMessageHandler(&Scene1306::handleMessage);
- _background = addBackground(new DirtyBackground(_vm, 0x05303114, 0, 0));
+ setBackground(0x05303114);
_palette = new Palette(_vm, 0x05303114);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x0311005B, NULL));
@@ -1529,7 +1529,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1307::handleMessage);
SetUpdateHandler(&Scene1307::update);
- _background = addBackground(new DirtyBackground(_vm, 0xA8006200, 0, 0));
+ setBackground(0xA8006200);
_palette = new Palette(_vm, 0xA8006200);
_palette->usePalette();
addEntity(_palette);
@@ -1848,7 +1848,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
SetMessageHandler(&Scene1308::handleMessage);
- _background = addBackground(new DirtyBackground(_vm, 0x41024202, 0, 0));
+ setBackground(0x41024202);
_palette = new Palette(_vm, 0x41024202);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x24206418, NULL));
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index b4f0744..4dac2a7 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -756,7 +756,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B6758);
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x08221FA5, 0, 0));
+ setBackground(0x08221FA5);
_palette = new Palette(_vm, 0x08221FA5);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x21FA108A, NULL));
@@ -1380,7 +1380,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1407::handleMessage);
SetUpdateHandler(&Scene1407::update);
- _background = addBackground(new DirtyBackground(_vm, 0x00442225, 0, 0));
+ setBackground(0x00442225);
_palette = new Palette(_vm, 0x00442225);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse435(_vm, 0x4222100C, 20, 620));
@@ -1446,7 +1446,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B1FF8);
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x2110A234, 0, 0));
+ setBackground(0x2110A234);
_palette = new Palette(_vm, 0x2110A234);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x0A230219, NULL));
@@ -1569,7 +1569,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B8D80);
- _background = addBackground(new DirtyBackground(_vm, 0xAC0B006F, 0, 0));
+ setBackground(0xAC0B006F);
_palette = new Palette(_vm, 0xAC0B006F);
_palette->addPalette(0x00801510, 0, 65, 0);
_palette->usePalette();
@@ -1784,7 +1784,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene1405Vars();
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x0C0C007D, 0, 0));
+ setBackground(0x0C0C007D);
_palette = new Palette(_vm, 0x0C0C007D);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse435(_vm, 0xC00790C8, 20, 620));
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 40b15b3..a014844 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -118,7 +118,7 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
+ setBackground(backgroundFileHash);
palette2 = new Palette2(_vm);
palette2->usePalette();
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 43a30f9..a36d358 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -239,7 +239,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x03118226, 0, 0));
+ setBackground(0x03118226);
palette2 = new Palette2(_vm, 0x03118226);
palette2->addPalette(0x91D3A391, 0, 64, 0);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index bca54eb..2b6a647 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -134,7 +134,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
SetMessageHandler(&Scene2001::handleMessage);
- _background = addBackground(new DirtyBackground(_vm, 0xA6417244, 0, 0));
+ setBackground(0xA6417244);
_palette = new Palette(_vm, 0xA6417244);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x17240A6C, NULL));
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 27fb21a..62aec28 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -1507,7 +1507,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x04104242);
loadHitRectList();
- _background = addBackground(new DirtyBackground(_vm, 0x40008208, 0, 0));
+ setBackground(0x40008208);
_palette = new Palette(_vm, 0x40008208);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x0820C408, NULL));
@@ -1892,7 +1892,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x08100A0C, 0, 0));
+ setBackground(0x08100A0C);
palette2 = new Palette2(_vm, 0x08100A0C);
_palette = palette2;
_palette->usePalette();
@@ -2123,7 +2123,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2203::handleMessage);
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x82C80334, 0, 0));
+ setBackground(0x82C80334);
_palette = new Palette(_vm, 0x82C80334);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x80330824, NULL));
@@ -2288,7 +2288,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
_isLightOn = true;
- _background = addBackground(new DirtyBackground(_vm, 0x0008028D, 0, 0));
+ setBackground(0x0008028D);
palette2 = new Palette2(_vm, 0x0008028D);
_palette = palette2;
_palette->usePalette();
@@ -2298,7 +2298,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
addSprite(_ssLightSwitch);
} else {
_isLightOn = false;
- _background = addBackground(new DirtyBackground(_vm, 0xD00A028D, 0, 0));
+ setBackground(0xD00A028D);
palette2 = new Palette2(_vm, 0xD00A028D);
_palette = palette2;
_palette->usePalette();
@@ -2587,7 +2587,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_class604->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
_class604->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
- _background = addBackground(new DirtyBackground(_vm, fileHash, 0, 0));
+ setBackground(fileHash);
palette2 = new Palette2(_vm, fileHash);
_palette = palette2;
@@ -3074,7 +3074,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
- _background = addBackground(new DirtyBackground(_vm, 0x88C00241, 0, 0));
+ setBackground(0x88C00241);
_palette = new Palette(_vm, 0x88C00241);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x00245884, NULL));
@@ -3116,7 +3116,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(0x81890D14, 1);
- _background = addBackground(new DirtyBackground(_vm, 0x05C02A55, 0, 0));
+ setBackground(0x05C02A55);
_palette = new Palette(_vm, 0x05C02A55);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x02A51054, NULL));
@@ -3492,13 +3492,13 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2242::update);
if (getGlobalVar(0x4D080E54)) {
- _background = addBackground(new DirtyBackground(_vm, 0x11840E24, 0, 0));
+ setBackground(0x11840E24);
_palette = new Palette(_vm, 0x11840E24);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x40E20110, NULL));
setRectList(0x004B3DC8);
} else {
- _background = addBackground(new DirtyBackground(_vm, 0x25848E24, 0, 0));
+ setBackground(0x25848E24);
palette2 = new Palette2(_vm, 0x25848E24);
_palette = palette2;
_palette->usePalette();
@@ -3631,13 +3631,13 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
if (!getGlobalVar(0x4D080E54) && _sceneInfo140->bgFilename2) {
setRectList(0x004B2BF8);
- _background = addBackground(new DirtyBackground(_vm, _sceneInfo140->bgFilename2, 0, 0));
+ setBackground(_sceneInfo140->bgFilename2);
_palette = new Palette(_vm, _sceneInfo140->bgFilename2);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL));
} else {
setRectList(0x004B2BB8);
- _background = addBackground(new DirtyBackground(_vm, _sceneInfo140->bgFilename1, 0, 0));
+ setBackground(_sceneInfo140->bgFilename1);
_palette = new Palette(_vm, _sceneInfo140->bgFilename1);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x63A40028, NULL));
@@ -3728,13 +3728,13 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
setRectList(0x004B5588);
- _background = addBackground(new DirtyBackground(_vm, 0x40339414, 0, 0));
+ setBackground(0x40339414);
_palette = new Palette(_vm, 0x40339414);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x3941040B, NULL));
} else {
setRectList(0x004B55C8);
- _background = addBackground(new DirtyBackground(_vm, 0x071963E5, 0, 0));
+ setBackground(0x071963E5);
_palette = new Palette(_vm, 0x071963E5);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL));
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 009895c..cc617a3 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -971,7 +971,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_screen->clear();
- _background = addBackground(new DirtyBackground(_vm, 0xD000420C, 0, 0));
+ setBackground(0xD000420C);
_palette = new Palette(_vm, 0xD000420C);
_mouseCursor = addSprite(new Mouse435(_vm, 0x04208D08, 20, 620));
@@ -1470,7 +1470,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x80802626, 0, 0));
+ setBackground(0x80802626);
_palette = new Palette(_vm, 0x80802626);
_palette->usePalette();
@@ -1724,7 +1724,7 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO _vm->gameModule()->initScene3011Vars();
_index1 = getGlobalVar(0x2414C2F2);
- _background = addBackground(new DirtyBackground(_vm, 0x92124A04, 0, 0));
+ setBackground(0x92124A04);
palette2 = new Palette2(_vm, 0xA4070114);
addEntity(palette2);
Commit: c30e16628e01b5be671330b24ed73d1294205f6b
https://github.com/scummvm/scummvm/commit/c30e16628e01b5be671330b24ed73d1294205f6b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Add Module::updateChild and use it (in most places)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 650287b..6ef58e4 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -268,8 +268,8 @@ void GameModule::startup() {
//createModule1700(1);
//createModule1400(-1);
#if 1
- _vm->gameState().sceneNum = 1;
- createModule1000(-1);
+ _vm->gameState().sceneNum = 0;
+ createModule1200(-1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -296,14 +296,7 @@ void GameModule::createModule1000(int which) {
}
void GameModule::updateModule1000() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- // TODO _resourceTable3.load();
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createModule2300(0);
_childObject->handleUpdate();
}
@@ -316,13 +309,7 @@ void GameModule::createModule1200(int which) {
}
void GameModule::updateModule1200() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
error("// TODO createModule2600(0);");
// TODO createModule2600(0);
@@ -341,13 +328,7 @@ void GameModule::createModule1300(int which) {
}
void GameModule::updateModule1300() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
// TODO _gameState.clear();
// TODO GameModule_handleKeyEscape
@@ -365,13 +346,7 @@ void GameModule::createModule1400(int which) {
}
void GameModule::updateModule1400() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
error("WEIRD!");
} else {
@@ -389,13 +364,7 @@ void GameModule::createModule1500(int which) {
}
void GameModule::updateModule1500() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createModule1000(0);
_childObject->handleUpdate();
}
@@ -408,13 +377,7 @@ void GameModule::createModule1700(int which) {
}
void GameModule::updateModule1700() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
debug("Module1700 done; _field20 = %d", _field20);
if (_field20 == 1) {
// TODO createModule2900(3);
@@ -433,13 +396,7 @@ void GameModule::createModule1800(int which) {
}
void GameModule::updateModule1800() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
// TODO GameState_clear();
// TODO GameModule_handleKeyEscape();
@@ -463,13 +420,7 @@ void GameModule::createModule2000(int which) {
}
void GameModule::updateModule2000() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// TODO createModule2900(4);
_childObject->handleUpdate();
}
@@ -482,13 +433,7 @@ void GameModule::createModule2200(int which) {
}
void GameModule::updateModule2200() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createModule2300(1);
_childObject->handleUpdate();
}
@@ -501,40 +446,19 @@ void GameModule::createModule2300(int which) {
}
void GameModule::updateModule2300() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createModule2200(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createModule1200(0);
- _childObject->handleUpdate();
} else if (_field20 == 3) {
// TODO createModule2400(0);
- // TODO _childObject->handleUpdate();
} else if (_field20 == 4) {
// TODO createModule3000(0);
- // TODO _childObject->handleUpdate();
} else {
createModule1000(1);
- _childObject->handleUpdate();
- }
- }
- if (_field24 >= 0) {
- if (_field24 == 2) {
- // TODO _resourceTable4.load();
- } else if (_field24 == 0) {
- // TODO _resourceTable3.load();
}
- _field24 = -1;
- }
- if (_field26 >= 0) {
- _field26 = -1;
+ _childObject->handleUpdate();
}
}
@@ -549,13 +473,7 @@ void GameModule::createModule3000(int which) {
}
void GameModule::updateModule3000() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
// TODO createModule1900(0);
// TODO _childObject->handleUpdate();
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index c38b96e..6d49838 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -89,4 +89,17 @@ void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1,
_childObject = smackerScene;
}
+bool Module::updateChild() {
+ if (_childObject) {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ return false;
+ }
+ }
+ return true;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 470fe36..a37fd52 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -53,6 +53,7 @@ protected:
NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
+ bool updateChild();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 1e5b076..51e1d19 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -101,11 +101,7 @@ void Module1000::createScene1005(int which) {
}
void Module1000::updateScene1001() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 2) {
createScene1003(0);
_childObject->handleUpdate();
@@ -117,11 +113,7 @@ void Module1000::updateScene1001() {
}
void Module1000::updateScene1002() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
} else if (_field20 == 2) {
@@ -135,22 +127,14 @@ void Module1000::updateScene1002() {
}
void Module1000::updateScene1003() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1001(2);
_childObject->handleUpdate();
}
}
void Module1000::updateScene1004() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1005(0);
_childObject->handleUpdate();
@@ -162,12 +146,8 @@ void Module1000::updateScene1004() {
}
void Module1000::updateScene1005() {
- _childObject->handleUpdate();
- if (_done) {
+ if (!updateChild()) {
// TODO Music18hList_stop(_musicFileHash, 0, 1);
- _done = false;
- delete _childObject;
- _childObject = NULL;
createScene1004(1);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index a12f1cc..fa0bea0 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -25,10 +25,12 @@
namespace Neverhood {
Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _moduleDone(false) {
+ : Module(vm, parentModule) {
// TODO _resourceTable.setResourceList(0x004B3E68);
SetMessageHandler(&Module1200::handleMessage);
+
+ debug("Module1200: which = %d", which);
if (which < 0) {
switch (_vm->gameState().sceneNum) {
@@ -56,17 +58,6 @@ Module1200::~Module1200() {
// TODO Music18hList_deleteGroup(0x00478311);
}
-uint32 Module1200::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Module::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1009:
- _moduleDone = true;
- _moduleDoneStatus = param.asInteger();
- break;
- }
- return messageResult;
-}
-
void Module1200::createScene1201(int which) {
_vm->gameState().sceneNum = 0;
_childObject = new Scene1201(_vm, this, which);
@@ -88,41 +79,31 @@ void Module1200::createScene1203(int which) {
}
void Module1200::updateScene1201() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 1) {
+ if (!updateChild()) {
+ if (_field20 == 1) {
createScene1202(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 2) {
- sendMessage(_parentModule, 0x1009, 0);
- } else if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
- createScene1203(-1);
+ } else if (_field20 == 2) {
+ if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
+ createScene1203(-1);
+ } else {
+ sendMessage(_parentModule, 0x1009, 1);
+ }
} else {
- sendMessage(_parentModule, 0x1009, 1);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
}
void Module1200::updateScene1202() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1201(1);
_childObject->handleUpdate();
}
}
void Module1200::updateScene1203() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1201(3);
_childObject->handleUpdate();
// TODO Music18hList_play(0x62222CAE, 0, 0, 1);
@@ -788,15 +769,6 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
int16 x1, x2;
Sprite *tempSprite, *class464;
- // TODO _resourceTable2.setResourceList(ex_sub_41C730(), true);
- if (getGlobalVar(0x0A18CA33)) {
- // TODO _resourceTable1.setResourceList(0x004AEA10, true);
- } else if (getGlobalVar(0x0A310817)) {
- // TODO _resourceTable1.setResourceList(0x004AEA70, true);
- } else {
- // TODO _resourceTable1.setResourceList(0x004AEB18, true);
- }
-
SetUpdateHandler(&Scene1201::update);
SetMessageHandler(&Scene1201::handleMessage);
@@ -844,6 +816,8 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
class464 = addSprite(new Class464(_vm));
+ debug("Scene1201: which = %d", which);
+
if (which < 0) {
InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
setMessageList(0x004AEC08);
@@ -1006,7 +980,6 @@ void Scene1201::update() {
}
uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Scene1201::handleMessage(%04X)", messageNum);
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index 3ffed44..df1ed41 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -37,9 +37,6 @@ public:
virtual ~Module1200();
protected:
// TODO ResourceTable _resourceTable;
- bool _moduleDone;
- uint32 _moduleDoneStatus;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createScene1201(int which);
void createScene1202(int which);
void createScene1203(int which);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 46597e0..149af4a 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -283,11 +283,7 @@ void Module1300::createScene1318(int which) {
}
void Module1300::updateScene1302() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1305(0);
} else {
@@ -298,45 +294,28 @@ void Module1300::updateScene1302() {
}
void Module1300::updateScene1303() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1306(3);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1304() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1316(0);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1305() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1317(-1);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1306() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
- debug("_field20 = %d", _field20);
+ if (!updateChild()) {
if (_field20 == 2) {
createScene1309(0);
_childObject->handleUpdate();
@@ -353,22 +332,14 @@ void Module1300::updateScene1306() {
}
void Module1300::updateScene1307() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1308(2);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1308() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1314(0);
} else if (_field20 == 1) {
@@ -381,22 +352,14 @@ void Module1300::updateScene1308() {
}
void Module1300::updateScene1309() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1306(2);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1310() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_vm->gameState().sceneNum == 9)
createScene1306(0);
else
@@ -409,11 +372,7 @@ void Module1300::updateScene1311() {
}
void Module1300::updateScene1312() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(0);
} else if (_field20 == 1) {
@@ -424,11 +383,7 @@ void Module1300::updateScene1312() {
}
void Module1300::updateScene1313() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
switch (_field20) {
case 0:
createScene1315(1);
@@ -448,11 +403,7 @@ void Module1300::updateScene1313() {
}
void Module1300::updateScene1314() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(2);
} else if (_field20 == 1) {
@@ -463,11 +414,7 @@ void Module1300::updateScene1314() {
}
void Module1300::updateScene1315() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(3);
} else if (_field20 == 1) {
@@ -478,11 +425,7 @@ void Module1300::updateScene1315() {
}
void Module1300::updateScene1316() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(4);
} else if (_field20 == 1) {
@@ -493,11 +436,7 @@ void Module1300::updateScene1316() {
}
void Module1300::updateScene1317() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1318(-1);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 4dac2a7..edc47f5 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -121,11 +121,7 @@ void Module1400::createScene1407(int which) {
}
void Module1400::updateScene1401() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1402(0);
_childObject->handleUpdate();
@@ -139,14 +135,7 @@ void Module1400::updateScene1401() {
}
void Module1400::updateScene1402() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
-
- debug("Scene1402: _field20 = %d", _field20);
-
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1403(0);
_childObject->handleUpdate();
@@ -161,23 +150,14 @@ void Module1400::updateScene1402() {
}
void Module1400::updateScene1403() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1402(1);
_childObject->handleUpdate();
}
}
void Module1400::updateScene1404() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
- debug("Scene1404; _field20 = %d", _field20);
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1405(0);
_childObject->handleUpdate();
@@ -192,33 +172,21 @@ void Module1400::updateScene1404() {
}
void Module1400::updateScene1405() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1404(1);
_childObject->handleUpdate();
}
}
void Module1400::updateScene1406() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1404(2);
_childObject->handleUpdate();
}
}
void Module1400::updateScene1407() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1402(2);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index a014844..b942d8b 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -50,11 +50,7 @@ Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, boo
}
void Module1500::update() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
createScene1502();
@@ -77,7 +73,6 @@ void Module1500::update() {
}
void Module1500::createScene1501() {
- debug("createScene1501");
_vm->gameState().sceneNum = 0;
_childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
SetUpdateHandler(&Module1500::update);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index a36d358..528161e 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -100,11 +100,7 @@ void Module1700::createScene1705(int which) {
}
void Module1700::updateScene1701() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_vm->gameState().sceneNum == 3) {
createScene1705(0);
_childObject->handleUpdate();
@@ -117,11 +113,7 @@ void Module1700::updateScene1701() {
}
void Module1700::updateScene1702() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1703(0);
_childObject->handleUpdate();
@@ -133,11 +125,7 @@ void Module1700::updateScene1702() {
}
void Module1700::updateScene1703() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1704(-1);
_childObject->handleUpdate();
@@ -156,11 +144,7 @@ void Module1700::updateScene1703() {
}
void Module1700::updateScene1705() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
sendMessage(_parentModule, 0x1009, 1);
}
}
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index f503848..d3dc4b6 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -146,17 +146,7 @@ void Module1800::createScene1809(int which) {
}
void Module1800::updateScene1801() {
- _childObject->handleUpdate();
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (navigationScene->soundFlag1 && navigationScene->index == 2) {
- // TODO Sound1ChList_sub_4080B0(false);
- }
-#endif
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1805(0);
_childObject->handleUpdate();
@@ -167,6 +157,13 @@ void Module1800::updateScene1801() {
createScene1804(0);
_childObject->handleUpdate();
}
+ } else {
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (navigationScene->soundFlag1 && navigationScene->index == 2) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
+#endif
}
}
@@ -187,11 +184,7 @@ void Module1800::updateScene1802() {
}
void Module1800::updateScene1803() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 2) {
createScene1801(2);
_childObject->handleUpdate();
@@ -207,49 +200,33 @@ void Module1800::updateScene1803() {
}
void Module1800::updateScene1804() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1804b(-1);
- _childObject->handleUpdate();
} else if (_field20 == 1) {
createScene1801(1);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
void Module1800::updateScene1805() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1807(-1);
- _childObject->handleUpdate();
} else if (_field20 == 1) {
createScene1806(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createScene1801(3);
- _childObject->handleUpdate();
} else if (_field20 == 3) {
createScene1805(3);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
void Module1800::updateScene1806() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
sendMessage(_parentModule, 0x1009, 2);
} else if (_field20 == 1) {
@@ -257,20 +234,10 @@ void Module1800::updateScene1806() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 1) {
- // TODO _resourceTable.setResourceList(ex_sub_42EDA0(0), true);
- }
- _field24 = -1;
- }
}
void Module1800::updateScene1809() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
sendMessage(_parentModule, 0x1009, 1);
// TODO GameState stuff
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 2b6a647..1302355 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -83,11 +83,7 @@ void Module2000::createScene2003(int which) {
}
void Module2000::updateScene2001() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
} else {
@@ -97,11 +93,7 @@ void Module2000::updateScene2001() {
}
void Module2000::updateScene2002() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
if (getGlobalVar(0x98109F12)) {
createScene2002(0);
@@ -117,11 +109,7 @@ void Module2000::updateScene2002() {
}
void Module2000::updateScene2003() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2002(0);
}
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 62aec28..321fab1 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -498,11 +498,7 @@ void Module2200::createScene2248(int which) {
}
void Module2200::updateScene2201() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2203(0);
} else if (_field20 == 2) {
@@ -514,21 +510,13 @@ void Module2200::updateScene2201() {
}
void Module2200::updateScene2202() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2201(2);
}
}
void Module2200::updateScene2203() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2205(0);
} else if (_field20 == 2) {
@@ -541,21 +529,13 @@ void Module2200::updateScene2203() {
}
void Module2200::updateScene2204() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2203(2);
}
}
void Module2200::updateScene2205() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2206(0);
} else if (_field20 == 2) {
@@ -568,11 +548,7 @@ void Module2200::updateScene2205() {
}
void Module2200::updateScene2206() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2247(0);
} else if (_field20 == 2) {
@@ -587,22 +563,14 @@ void Module2200::updateScene2206() {
}
void Module2200::updateScene2207() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2206(2);
_childObject->handleUpdate();
}
}
void Module2200::updateScene2208() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// This is madness!
switch (_vm->gameState().which) {
case 4:
@@ -725,22 +693,14 @@ void Module2200::updateScene2208() {
}
void Module2200::updateScene2209() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2206(3);
_childObject->handleUpdate();
}
}
void Module2200::updateScene2210() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2211(0);
} else if (_field20 == 2) {
@@ -753,11 +713,7 @@ void Module2200::updateScene2210() {
}
void Module2200::updateScene2211() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2212(0);
} else if (_field20 == 2) {
@@ -770,11 +726,7 @@ void Module2200::updateScene2211() {
}
void Module2200::updateScene2212() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2213(0);
} else if (_field20 == 2) {
@@ -787,11 +739,7 @@ void Module2200::updateScene2212() {
}
void Module2200::updateScene2213() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2214(0);
} else if (_field20 == 2) {
@@ -804,11 +752,7 @@ void Module2200::updateScene2213() {
}
void Module2200::updateScene2214() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2215(0);
} else if (_field20 == 2) {
@@ -821,11 +765,7 @@ void Module2200::updateScene2214() {
}
void Module2200::updateScene2215() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2216(0);
} else if (_field20 == 2) {
@@ -838,11 +778,7 @@ void Module2200::updateScene2215() {
}
void Module2200::updateScene2216() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2217(0);
} else if (_field20 == 2) {
@@ -855,11 +791,7 @@ void Module2200::updateScene2216() {
}
void Module2200::updateScene2217() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2218(0);
} else if (_field20 == 2) {
@@ -872,11 +804,7 @@ void Module2200::updateScene2217() {
}
void Module2200::updateScene2218() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2219(0);
} else if (_field20 == 2) {
@@ -889,11 +817,7 @@ void Module2200::updateScene2218() {
}
void Module2200::updateScene2219() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2220(0);
} else if (_field20 == 2) {
@@ -906,11 +830,7 @@ void Module2200::updateScene2219() {
}
void Module2200::updateScene2220() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2221(0);
} else if (_field20 == 2) {
@@ -923,11 +843,7 @@ void Module2200::updateScene2220() {
}
void Module2200::updateScene2221() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2222(0);
} else if (_field20 == 2) {
@@ -940,11 +856,7 @@ void Module2200::updateScene2221() {
}
void Module2200::updateScene2222() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2223(0);
} else if (_field20 == 2) {
@@ -957,11 +869,7 @@ void Module2200::updateScene2222() {
}
void Module2200::updateScene2223() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2224(0);
} else if (_field20 == 2) {
@@ -974,11 +882,7 @@ void Module2200::updateScene2223() {
}
void Module2200::updateScene2224() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2225(0);
} else if (_field20 == 2) {
@@ -991,11 +895,7 @@ void Module2200::updateScene2224() {
}
void Module2200::updateScene2225() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2226(0);
} else if (_field20 == 2) {
@@ -1008,11 +908,7 @@ void Module2200::updateScene2225() {
}
void Module2200::updateScene2226() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2227(0);
} else if (_field20 == 2) {
@@ -1025,11 +921,7 @@ void Module2200::updateScene2226() {
}
void Module2200::updateScene2227() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2228(0);
} else if (_field20 == 2) {
@@ -1042,11 +934,7 @@ void Module2200::updateScene2227() {
}
void Module2200::updateScene2228() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2229(0);
} else if (_field20 == 2) {
@@ -1059,11 +947,7 @@ void Module2200::updateScene2228() {
}
void Module2200::updateScene2229() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2230(0);
} else if (_field20 == 2) {
@@ -1076,11 +960,7 @@ void Module2200::updateScene2229() {
}
void Module2200::updateScene2230() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2231(0);
} else if (_field20 == 2) {
@@ -1093,11 +973,7 @@ void Module2200::updateScene2230() {
}
void Module2200::updateScene2231() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2232(0);
} else if (_field20 == 2) {
@@ -1110,11 +986,7 @@ void Module2200::updateScene2231() {
}
void Module2200::updateScene2232() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2233(0);
} else if (_field20 == 2) {
@@ -1127,11 +999,7 @@ void Module2200::updateScene2232() {
}
void Module2200::updateScene2233() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2234(0);
} else if (_field20 == 2) {
@@ -1144,11 +1012,7 @@ void Module2200::updateScene2233() {
}
void Module2200::updateScene2234() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2235(0);
} else if (_field20 == 2) {
@@ -1161,11 +1025,7 @@ void Module2200::updateScene2234() {
}
void Module2200::updateScene2235() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2243(0);
} else if (_field20 == 2) {
@@ -1178,11 +1038,7 @@ void Module2200::updateScene2235() {
}
void Module2200::updateScene2236() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2237(0);
} else if (_field20 == 2) {
@@ -1195,11 +1051,7 @@ void Module2200::updateScene2236() {
}
void Module2200::updateScene2237() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2238(0);
} else if (_field20 == 2) {
@@ -1212,11 +1064,7 @@ void Module2200::updateScene2237() {
}
void Module2200::updateScene2238() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2239(0);
} else if (_field20 == 2) {
@@ -1229,11 +1077,7 @@ void Module2200::updateScene2238() {
}
void Module2200::updateScene2239() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2240(0);
} else if (_field20 == 2) {
@@ -1246,11 +1090,7 @@ void Module2200::updateScene2239() {
}
void Module2200::updateScene2240() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2241(0);
} else if (_field20 == 2) {
@@ -1263,11 +1103,7 @@ void Module2200::updateScene2240() {
}
void Module2200::updateScene2241() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2242(0);
} else if (_field20 == 2) {
@@ -1280,11 +1116,7 @@ void Module2200::updateScene2241() {
}
void Module2200::updateScene2242() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2248(0);
_childObject->handleUpdate();
@@ -1299,11 +1131,7 @@ void Module2200::updateScene2242() {
}
void Module2200::updateScene2243() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2244(0);
} else if (_field20 == 2) {
@@ -1316,11 +1144,7 @@ void Module2200::updateScene2243() {
}
void Module2200::updateScene2244() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2245(0);
} else if (_field20 == 2) {
@@ -1333,11 +1157,7 @@ void Module2200::updateScene2244() {
}
void Module2200::updateScene2245() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2246(0);
} else if (_field20 == 2) {
@@ -1350,11 +1170,7 @@ void Module2200::updateScene2245() {
}
void Module2200::updateScene2246() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2236(0);
} else if (_field20 == 2) {
@@ -1367,11 +1183,7 @@ void Module2200::updateScene2246() {
}
void Module2200::updateScene2247() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2210(0);
} else if (_field20 == 2) {
@@ -1384,11 +1196,7 @@ void Module2200::updateScene2247() {
}
void Module2200::updateScene2248() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2242(1);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 19861ac..60f8134 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -125,11 +125,7 @@ void Module2300::createScene2305(int which) {
}
void Module2300::updateScene2301() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2302(4);
_childObject->handleUpdate();
@@ -140,28 +136,7 @@ void Module2300::updateScene2301() {
}
void Module2300::updateScene2302() {
- _childObject->handleUpdate();
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume++;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
- }
-#endif
-#if 0 // TODO
- if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
- Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
- Sound1ChList_setVolume(0x48498E46, 70);
- Sound1ChList_setVolume(0x50399F64, 70);
- }
-#endif
- if (_done) {
- debug("SCENE 2302 DONE; _field20 = %d", _field20);
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2301(0);
_childObject->handleUpdate();
@@ -179,15 +154,28 @@ void Module2300::updateScene2302() {
} else {
sendMessage(_parentModule, 0x1009, 4);
}
+ } else {
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume++;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
+#endif
+#if 0 // TODO
+ if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
+ Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
+ Sound1ChList_setVolume(0x48498E46, 70);
+ Sound1ChList_setVolume(0x50399F64, 70);
+ }
+#endif
}
}
void Module2300::updateScene2303() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 3);
} else {
@@ -195,44 +183,30 @@ void Module2300::updateScene2303() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 1) {
- // TODO _resourceTable1.setResourceList(ex_sub_479D00(0), true);
- // TODO _resourceTable2.loadResources();
- }
- _field24 = -1;
- }
}
void Module2300::updateScene2304() {
- _childObject->handleUpdate();
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
- navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume--;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
- }
-#endif
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 2);
} else {
createScene2302(1);
_childObject->handleUpdate();
}
+ } else {
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
+ navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume--;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
+#endif
}
}
void Module2300::updateScene2305() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// TODO Sound1ChList_sub_4080B0(false);
createScene2302(2);
_childObject->handleUpdate();
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index cc617a3..bccc723 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -27,7 +27,7 @@
namespace Neverhood {
Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _moduleDone(false), _soundVolume(0) {
+ : Module(vm, parentModule), _soundVolume(0) {
debug("Create Module3000(%d)", which);
@@ -95,25 +95,12 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
createScene3006(1);
}
- SetMessageHandler(&Module3000::handleMessage);
-
}
Module3000::~Module3000() {
// TODO Sound1ChList_sub_407A50(0x81293110);
}
-uint32 Module3000::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Module::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1009:
- _moduleDone = true;
- _moduleDoneStatus = param.asInteger();
- break;
- }
- return messageResult;
-}
-
void Module3000::createScene3002(int which) {
_vm->gameState().sceneNum = 1;
if (!getGlobalVar(0x01BA1A52)) {
@@ -276,20 +263,20 @@ void Module3000::updateScene3002() {
}
}
#endif
- if (_moduleDone) {
+ if (_done) {
int areaType = navigationScene()->getNavigationAreaType();
- _moduleDone = false;
+ _done = false;
delete _childObject;
_childObject = NULL;
if (!getGlobalVar(0x01BA1A52)) {
- if (_moduleDoneStatus == 0) {
+ if (_field20 == 0) {
createScene3010(-1);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
}
} else {
- if (_moduleDoneStatus == 0) {
+ if (_field20 == 0) {
if (areaType == 2) {
createScene3003(0);
_childObject->handleUpdate();
@@ -297,7 +284,7 @@ void Module3000::updateScene3002() {
//createScene3002b(-1);
_childObject->handleUpdate();
}
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
}
}
@@ -305,11 +292,7 @@ void Module3000::updateScene3002() {
}
void Module3000::updateScene3002b() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 1:
if (getGlobalVar(0x01BA1A52)) {
@@ -339,79 +322,51 @@ void Module3000::updateScene3002b() {
}
void Module3000::updateScene3003() {
- _childObject->handleUpdate();
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (_flag && _soundVolume > 1 && frameNumber % 2) {
- _soundVolume--;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
- }
- if (navigationIndex == 0) {
- if (frameNumber == 35) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
- }
- } else if (navigationIndex == 1) {
- if (frameNumber == 55) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
- }
- }
- }
-#endif
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
if (_flag) {
_soundVolume = 0;
// TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
}
- if (_moduleDoneStatus == 0) {
+ if (_field20 == 0) {
createScene3004(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
setGlobalVar(0x01BA1A52, 0);
createScene3002(1);
_childObject->handleUpdate();
}
- }
-}
-
-void Module3000::updateScene3004() {
- _childObject->handleUpdate();
+ } else {
#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (navigationIndex == 2) {
- if (frameNumber == 40) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
- }
- if (_flag && _soundVolume < 90 && frameNumber % 2) {
- if (frameNumber == 0)
- _soundVolume = 40;
- else
- _soundVolume++;
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (_flag && _soundVolume > 1 && frameNumber % 2) {
+ _soundVolume--;
// TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
}
+ if (navigationIndex == 0) {
+ if (frameNumber == 35) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ }
+ } else if (navigationIndex == 1) {
+ if (frameNumber == 55) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ }
+ }
}
- }
#endif
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
-
- debug("_moduleDoneStatus = %d", _moduleDoneStatus);
-
- if (_moduleDoneStatus == 1) {
+ }
+}
+
+void Module3000::updateScene3004() {
+ if (!updateChild()) {
+ if (_field20 == 1) {
createScene3005(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 3) {
+ } else if (_field20 == 3) {
createScene3011(-1);
_childObject->handleUpdate();
} else if (getGlobalVar(0x09221A62)) {
@@ -421,54 +376,64 @@ void Module3000::updateScene3004() {
createScene3003(1);
_childObject->handleUpdate();
}
+ } else {
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (navigationIndex == 2) {
+ if (frameNumber == 40) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ }
+ if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (frameNumber == 0)
+ _soundVolume = 40;
+ else
+ _soundVolume++;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
+ }
+ }
+#endif
}
}
void Module3000::updateScene3005() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 0) {
+ if (!updateChild()) {
+ if (_field20 == 0) {
sendMessage(_parentModule, 0x1009, 1);
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
createScene3008(-1);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 2) {
+ } else if (_field20 == 2) {
createScene3004(3);
_childObject->handleUpdate();
}
}
- // NOTE: Skipped resource preloading stuff
}
void Module3000::updateScene3006() {
- _childObject->handleUpdate();
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
- // TODO Sound1ChList_sub_4080B0(false);
- }
-#endif
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 0) {
+ if (!updateChild()) {
+ if (_field20 == 0) {
createScene3007(0);
- _childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
createScene3004(0);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
+ } else {
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
+#endif
}
}
void Module3000::updateScene3007() {
_childObject->handleUpdate();
- if (_moduleDone) {
+ if (_done) {
int areaType = navigationScene()->getNavigationAreaType();
- _moduleDone = false;
+ _done = false;
delete _childObject;
_childObject = NULL;
if (areaType == 4) {
@@ -482,14 +447,9 @@ void Module3000::updateScene3007() {
}
void Module3000::updateScene3009() {
- _childObject->handleUpdate();
- // TODO...
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
_flag = getGlobalVar(0x10938830); // CHECKME
- if (_moduleDoneStatus != 1) {
+ if (_field20 != 1) {
// TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
createScene3005(1);
_childObject->handleUpdate();
@@ -505,15 +465,11 @@ void Module3000::updateScene3009() {
}
void Module3000::updateScene3010() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 0 || _moduleDoneStatus == 2) {
+ if (!updateChild()) {
+ if (_field20 == 0 || _field20 == 2) {
createScene3002(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
createScene3002b(-1);
_childObject->handleUpdate();
}
@@ -521,11 +477,7 @@ void Module3000::updateScene3010() {
}
void Module3000::updateScene3011() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene3004(3);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 64a4b76..63e5261 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -35,8 +35,6 @@ public:
Module3000(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module3000();
protected:
- bool _moduleDone;
- int _moduleDoneStatus;
int _soundVolume;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 828c0dd..9dc1d8b 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -117,12 +117,8 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfac
StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
-
- debug("StaticSprite::StaticSprite(%08X)", fileHash);
-
_name = "StaticSprite";
init(fileHash, surfacePriority, x, y, width, height);
-
}
void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 16d7931..ff18304 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -31,8 +31,8 @@
namespace Neverhood {
#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug(2, "SetSpriteCallback(" #callback ")"); _spriteUpdateCbName = #callback
-#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterX(" #callback ")")
-#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterY(" #callback ")")
+#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug(2, "SetFilterX(" #callback ")")
+#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug(2, "SetFilterY(" #callback ")")
const int16 kDefPosition = -32768;
@@ -99,9 +99,9 @@ protected:
void init(uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
};
-#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
-#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback2(" #callback ")"); _callback2CbName = #callback
-#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback3(" #callback ")"); _callback3CbName = #callback
+#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
+#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback2(" #callback ")"); _callback2CbName = #callback
+#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback3(" #callback ")"); _callback3CbName = #callback
#define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback)
class AnimatedSprite : public Sprite {
Commit: fad64afa441b686b721fcba6084b083fa4436529
https://github.com/scummvm/scummvm/commit/fad64afa441b686b721fcba6084b083fa4436529
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Remove unused resource preloading stuff (probably resource preloading is not needed since the original game ran off slow double/quad-speed cd drives and preloading reduced stuttering while playing back then)
- Add Klayman animation speedup
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6ef58e4..efd191e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -238,20 +238,17 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
_someFlag1 = true;
return messageResult;
case 0x1009:
- _field24 = -1;
- _field26 = -1;
- _field28 = -1;
- _field20 = param.asInteger();
+ _moduleResult = param.asInteger();
_done = true;
return messageResult;
case 0x100A:
- _field24 = (int16)param.asInteger();
+ // Unused resource preloading message
return messageResult;
case 0x101F:
_field2C = true;
return messageResult;
case 0x1023:
- _field26 = (int16)param.asInteger();
+ // Unused resource preloading message
return messageResult;
}
return messageResult;
@@ -310,7 +307,7 @@ void GameModule::createModule1200(int which) {
void GameModule::updateModule1200() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
error("// TODO createModule2600(0);");
// TODO createModule2600(0);
// TODO _childObject->handleUpdate();
@@ -329,7 +326,7 @@ void GameModule::createModule1300(int which) {
void GameModule::updateModule1300() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
// TODO _gameState.clear();
// TODO GameModule_handleKeyEscape
} else {
@@ -347,7 +344,7 @@ void GameModule::createModule1400(int which) {
void GameModule::updateModule1400() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
error("WEIRD!");
} else {
// TODO createModule1600(1);
@@ -378,8 +375,8 @@ void GameModule::createModule1700(int which) {
void GameModule::updateModule1700() {
if (!updateChild()) {
- debug("Module1700 done; _field20 = %d", _field20);
- if (_field20 == 1) {
+ debug("Module1700 done; _moduleResult = %d", _moduleResult);
+ if (_moduleResult == 1) {
// TODO createModule2900(3);
// TODO _childObject->handleUpdate();
} else {
@@ -397,13 +394,13 @@ void GameModule::createModule1800(int which) {
void GameModule::updateModule1800() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
// TODO GameState_clear();
// TODO GameModule_handleKeyEscape();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
// TODO createModule2700(0);
// TODO _childObject->handleUpdate();
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
// TODO createModule3000(3);
// TODO _childObject->handleUpdate();
} else {
@@ -447,13 +444,13 @@ void GameModule::createModule2300(int which) {
void GameModule::updateModule2300() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createModule2200(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createModule1200(0);
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
// TODO createModule2400(0);
- } else if (_field20 == 4) {
+ } else if (_moduleResult == 4) {
// TODO createModule3000(0);
} else {
createModule1000(1);
@@ -474,15 +471,15 @@ void GameModule::createModule3000(int which) {
void GameModule::updateModule3000() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
// TODO createModule1900(0);
// TODO _childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
// WEIRD: Sets the errorFlag
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createModule1800(3);
_childObject->handleUpdate();
- } else if (_field20 == 4) {
+ } else if (_moduleResult == 4) {
// TODO createModule3000(0);
// TODO _childObject->handleUpdate();
} else {
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 7102870..b5d266e 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -1340,15 +1340,13 @@ void Klayman::sub41FC40() {
}
uint32 Klayman::handleMessage41E3C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ int16 speedUpFrameIndex;
switch (messageNum) {
case 0x1008:
- debug("case 0x1008");
-#if 0 // TODO
- if (_frameIndex < getHashListIndexByString("SpeedUp")) {
- setFileHash(0xAC20C012, getHashListIndexByString("SpeedUp"), -1)
- _y = 435;
+ speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
+ if (_frameIndex < speedUpFrameIndex) {
+ setFileHash(0xAC20C012, speedUpFrameIndex, -1);
}
-#endif
return 0;
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -2371,16 +2369,15 @@ uint32 KmScene1002::handleMessage449BA0(int messageNum, const MessageParam ¶
}
uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender) {
+ int16 speedUpFrameIndex;
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
- debug("case 0x1008");
-#if 0 // TODO
- if (_frameIndex < getHashListIndexByString("SpeedUp")) {
- setFileHash(0x35AA8059, getHashListIndexByString("SpeedUp"), -1)
+ speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
+ if (_frameIndex < speedUpFrameIndex) {
+ setFileHash(0x35AA8059, speedUpFrameIndex, -1);
_y = 435;
}
-#endif
messageResult = 0;
break;
case 0x100D:
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a25176e..3f15b8f 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -34,6 +34,8 @@ namespace Neverhood {
class Klayman;
+const uint32 kKlaymanSpeedUpHash = 0x004A2148;
+
struct KlaymanTableItem {
int value;
void (Klayman::*callback)();
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 6d49838..78775ce 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -28,7 +28,7 @@ namespace Neverhood {
Module::Module(NeverhoodEngine *vm, Module *parentModule)
: Entity(vm, 0), _parentModule(parentModule), _childObject(NULL),
- _done(false), _field24(-1), _field26(-1), _field28(-1) {
+ _done(false) {
SetMessageHandler(&Module::handleMessage);
@@ -50,20 +50,13 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
sendMessage(_parentModule, 8, 0);
return 0;
case 0x1009:
- _field24 = -1;
- _field26 = -1;
- _field28 = -1;
- _field20 = param.asInteger();
+ _moduleResult = param.asInteger();
_done = true;
return 0;
case 0x100A:
- _field24 = (int16)param.asInteger();
- return 0;
case 0x1023:
- _field26 = (int16)param.asInteger();
- return 0;
case 0x1024:
- _field28 = (int16)param.asInteger();
+ // Unused resource preloading messages
return 0;
default:
if (_childObject && sender == _parentModule)
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index a37fd52..2f272d7 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -47,8 +47,7 @@ protected:
Module *_parentModule;
Entity *_childObject;
bool _done;
- int16 _field24, _field26, _field28;
- uint32 _field20;
+ uint32 _moduleResult;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 51e1d19..8185430 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -102,7 +102,7 @@ void Module1000::createScene1005(int which) {
void Module1000::updateScene1001() {
if (!updateChild()) {
- if (_field20 == 2) {
+ if (_moduleResult == 2) {
createScene1003(0);
_childObject->handleUpdate();
} else {
@@ -114,9 +114,9 @@ void Module1000::updateScene1001() {
void Module1000::updateScene1002() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
sendMessage(_parentModule, 0x1009, 0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1004(0);
_childObject->handleUpdate();
} else {
@@ -135,7 +135,7 @@ void Module1000::updateScene1003() {
void Module1000::updateScene1004() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1005(0);
_childObject->handleUpdate();
} else {
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index fa0bea0..9e198cc 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -80,10 +80,10 @@ void Module1200::createScene1203(int which) {
void Module1200::updateScene1201() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1202(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
createScene1203(-1);
} else {
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 149af4a..189ee2c 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -284,7 +284,7 @@ void Module1300::createScene1318(int which) {
void Module1300::updateScene1302() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1305(0);
} else {
createScene1308(1);
@@ -316,15 +316,15 @@ void Module1300::updateScene1305() {
void Module1300::updateScene1306() {
if (!updateChild()) {
- if (_field20 == 2) {
+ if (_moduleResult == 2) {
createScene1309(0);
_childObject->handleUpdate();
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createScene1303(0);
_childObject->handleUpdate();
- } else if (_field20 == 0) {
+ } else if (_moduleResult == 0) {
sendMessage(_parentModule, 0x1009, 0);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1311(-1);
_childObject->handleUpdate();
}
@@ -340,11 +340,11 @@ void Module1300::updateScene1307() {
void Module1300::updateScene1308() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1314(0);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1302(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1307(0);
}
_childObject->handleUpdate();
@@ -373,9 +373,9 @@ void Module1300::updateScene1311() {
void Module1300::updateScene1312() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1313(0);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1312(1);
}
_childObject->handleUpdate();
@@ -384,7 +384,7 @@ void Module1300::updateScene1312() {
void Module1300::updateScene1313() {
if (!updateChild()) {
- switch (_field20) {
+ switch (_moduleResult) {
case 0:
createScene1315(1);
break;
@@ -404,9 +404,9 @@ void Module1300::updateScene1313() {
void Module1300::updateScene1314() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1313(2);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1308(0);
}
_childObject->handleUpdate();
@@ -415,9 +415,9 @@ void Module1300::updateScene1314() {
void Module1300::updateScene1315() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1313(3);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1310(-1);
}
_childObject->handleUpdate();
@@ -426,9 +426,9 @@ void Module1300::updateScene1315() {
void Module1300::updateScene1316() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1313(4);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1304(0);
}
_childObject->handleUpdate();
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index edc47f5..7f55272 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -122,10 +122,10 @@ void Module1400::createScene1407(int which) {
void Module1400::updateScene1401() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1402(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1404(0);
_childObject->handleUpdate();
} else {
@@ -136,10 +136,10 @@ void Module1400::updateScene1401() {
void Module1400::updateScene1402() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1403(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1407(-1);
_childObject->handleUpdate();
} else {
@@ -158,10 +158,10 @@ void Module1400::updateScene1403() {
void Module1400::updateScene1404() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1405(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1406(-1);
_childObject->handleUpdate();
} else {
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 528161e..0aea8d1 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -114,10 +114,10 @@ void Module1700::updateScene1701() {
void Module1700::updateScene1702() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1703(0);
_childObject->handleUpdate();
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1702(1);
_childObject->handleUpdate();
}
@@ -126,13 +126,13 @@ void Module1700::updateScene1702() {
void Module1700::updateScene1703() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1704(-1);
_childObject->handleUpdate();
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1702(1);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
if (!_soundResource.isPlaying()) {
// TODO _soundResource.setVolume(60);
_soundResource.play(0x58B45E58);
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index d3dc4b6..31a1564 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -147,13 +147,13 @@ void Module1800::createScene1809(int which) {
void Module1800::updateScene1801() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene1805(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1802(-1);
_childObject->handleUpdate();
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createScene1804(0);
_childObject->handleUpdate();
}
@@ -185,15 +185,15 @@ void Module1800::updateScene1802() {
void Module1800::updateScene1803() {
if (!updateChild()) {
- if (_field20 == 2) {
+ if (_moduleResult == 2) {
createScene1801(2);
_childObject->handleUpdate();
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
sendMessage(_parentModule, 0x1009, 0);
- } else if (_field20 == 6) {
+ } else if (_moduleResult == 6) {
createScene1809(-1);
_childObject->handleUpdate();
- } else if (_field20 == 7) {
+ } else if (_moduleResult == 7) {
sendMessage(_parentModule, 0x1009, 3);
}
}
@@ -201,9 +201,9 @@ void Module1800::updateScene1803() {
void Module1800::updateScene1804() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1804b(-1);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1801(1);
}
_childObject->handleUpdate();
@@ -212,13 +212,13 @@ void Module1800::updateScene1804() {
void Module1800::updateScene1805() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene1807(-1);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1806(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene1801(3);
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createScene1805(3);
}
_childObject->handleUpdate();
@@ -227,9 +227,9 @@ void Module1800::updateScene1805() {
void Module1800::updateScene1806() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
sendMessage(_parentModule, 0x1009, 2);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene1805(3);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 1302355..bedc9d4 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -84,7 +84,7 @@ void Module2000::createScene2003(int which) {
void Module2000::updateScene2001() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
sendMessage(_parentModule, 0x1009, 0);
} else {
createScene2002(0);
@@ -94,15 +94,15 @@ void Module2000::updateScene2001() {
void Module2000::updateScene2002() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
if (getGlobalVar(0x98109F12)) {
createScene2002(0);
} else {
createScene2003(-1);
}
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene2002(1);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2001(0);
}
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 321fab1..2db0eb4 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -499,9 +499,9 @@ void Module2200::createScene2248(int which) {
void Module2200::updateScene2201() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2203(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2202(0);
} else {
sendMessage(_parentModule, 0x1009, 0);
@@ -517,9 +517,9 @@ void Module2200::updateScene2202() {
void Module2200::updateScene2203() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2205(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2204(0);
} else {
createScene2201(1);
@@ -536,9 +536,9 @@ void Module2200::updateScene2204() {
void Module2200::updateScene2205() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2206(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2205(2);
} else {
createScene2203(1);
@@ -549,11 +549,11 @@ void Module2200::updateScene2205() {
void Module2200::updateScene2206() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2247(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2207(0);
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createScene2209(0);
} else {
createScene2205(1);
@@ -701,9 +701,9 @@ void Module2200::updateScene2209() {
void Module2200::updateScene2210() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2211(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2247(1);
@@ -714,9 +714,9 @@ void Module2200::updateScene2210() {
void Module2200::updateScene2211() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2212(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2210(1);
@@ -727,9 +727,9 @@ void Module2200::updateScene2211() {
void Module2200::updateScene2212() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2213(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2211(1);
@@ -740,9 +740,9 @@ void Module2200::updateScene2212() {
void Module2200::updateScene2213() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2214(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2212(1);
@@ -753,9 +753,9 @@ void Module2200::updateScene2213() {
void Module2200::updateScene2214() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2215(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2213(1);
@@ -766,9 +766,9 @@ void Module2200::updateScene2214() {
void Module2200::updateScene2215() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2216(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2214(1);
@@ -779,9 +779,9 @@ void Module2200::updateScene2215() {
void Module2200::updateScene2216() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2217(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2215(1);
@@ -792,9 +792,9 @@ void Module2200::updateScene2216() {
void Module2200::updateScene2217() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2218(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2216(1);
@@ -805,9 +805,9 @@ void Module2200::updateScene2217() {
void Module2200::updateScene2218() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2219(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2217(1);
@@ -818,9 +818,9 @@ void Module2200::updateScene2218() {
void Module2200::updateScene2219() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2220(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2218(1);
@@ -831,9 +831,9 @@ void Module2200::updateScene2219() {
void Module2200::updateScene2220() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2221(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2219(1);
@@ -844,9 +844,9 @@ void Module2200::updateScene2220() {
void Module2200::updateScene2221() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2222(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2220(1);
@@ -857,9 +857,9 @@ void Module2200::updateScene2221() {
void Module2200::updateScene2222() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2223(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2221(1);
@@ -870,9 +870,9 @@ void Module2200::updateScene2222() {
void Module2200::updateScene2223() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2224(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2222(1);
@@ -883,9 +883,9 @@ void Module2200::updateScene2223() {
void Module2200::updateScene2224() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2225(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2223(1);
@@ -896,9 +896,9 @@ void Module2200::updateScene2224() {
void Module2200::updateScene2225() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2226(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2224(1);
@@ -909,9 +909,9 @@ void Module2200::updateScene2225() {
void Module2200::updateScene2226() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2227(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2225(1);
@@ -922,9 +922,9 @@ void Module2200::updateScene2226() {
void Module2200::updateScene2227() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2228(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2226(1);
@@ -935,9 +935,9 @@ void Module2200::updateScene2227() {
void Module2200::updateScene2228() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2229(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2227(1);
@@ -948,9 +948,9 @@ void Module2200::updateScene2228() {
void Module2200::updateScene2229() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2230(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2228(1);
@@ -961,9 +961,9 @@ void Module2200::updateScene2229() {
void Module2200::updateScene2230() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2231(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2229(1);
@@ -974,9 +974,9 @@ void Module2200::updateScene2230() {
void Module2200::updateScene2231() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2232(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2230(1);
@@ -987,9 +987,9 @@ void Module2200::updateScene2231() {
void Module2200::updateScene2232() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2233(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2231(1);
@@ -1000,9 +1000,9 @@ void Module2200::updateScene2232() {
void Module2200::updateScene2233() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2234(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2232(1);
@@ -1013,9 +1013,9 @@ void Module2200::updateScene2233() {
void Module2200::updateScene2234() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2235(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2233(1);
@@ -1026,9 +1026,9 @@ void Module2200::updateScene2234() {
void Module2200::updateScene2235() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2243(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2234(1);
@@ -1039,9 +1039,9 @@ void Module2200::updateScene2235() {
void Module2200::updateScene2236() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2237(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2246(1);
@@ -1052,9 +1052,9 @@ void Module2200::updateScene2236() {
void Module2200::updateScene2237() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2238(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2236(1);
@@ -1065,9 +1065,9 @@ void Module2200::updateScene2237() {
void Module2200::updateScene2238() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2239(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2237(1);
@@ -1078,9 +1078,9 @@ void Module2200::updateScene2238() {
void Module2200::updateScene2239() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2240(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2238(1);
@@ -1091,9 +1091,9 @@ void Module2200::updateScene2239() {
void Module2200::updateScene2240() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2241(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2239(1);
@@ -1104,9 +1104,9 @@ void Module2200::updateScene2240() {
void Module2200::updateScene2241() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2242(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2240(1);
@@ -1117,10 +1117,10 @@ void Module2200::updateScene2241() {
void Module2200::updateScene2242() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2248(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
_childObject->handleUpdate();
} else {
@@ -1132,9 +1132,9 @@ void Module2200::updateScene2242() {
void Module2200::updateScene2243() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2244(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2235(1);
@@ -1145,9 +1145,9 @@ void Module2200::updateScene2243() {
void Module2200::updateScene2244() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2245(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2243(1);
@@ -1158,9 +1158,9 @@ void Module2200::updateScene2244() {
void Module2200::updateScene2245() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2246(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2244(1);
@@ -1171,9 +1171,9 @@ void Module2200::updateScene2245() {
void Module2200::updateScene2246() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2236(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2245(1);
@@ -1184,9 +1184,9 @@ void Module2200::updateScene2246() {
void Module2200::updateScene2247() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2210(0);
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2208(0);
} else {
createScene2206(1);
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 60f8134..ce9250a 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -126,7 +126,7 @@ void Module2300::createScene2305(int which) {
void Module2300::updateScene2301() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2302(4);
_childObject->handleUpdate();
} else {
@@ -137,19 +137,19 @@ void Module2300::updateScene2301() {
void Module2300::updateScene2302() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene2301(0);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene2303(1);
_childObject->handleUpdate();
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createScene2302(3);
_childObject->handleUpdate();
- } else if (_field20 == 4) {
+ } else if (_moduleResult == 4) {
createScene2304(1);
_childObject->handleUpdate();
- } else if (_field20 == 5) {
+ } else if (_moduleResult == 5) {
sendMessage(_parentModule, 0x1009, 3);
} else {
sendMessage(_parentModule, 0x1009, 4);
@@ -176,7 +176,7 @@ void Module2300::updateScene2302() {
void Module2300::updateScene2303() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
sendMessage(_parentModule, 0x1009, 3);
} else {
createScene2302(5);
@@ -187,7 +187,7 @@ void Module2300::updateScene2303() {
void Module2300::updateScene2304() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
sendMessage(_parentModule, 0x1009, 2);
} else {
createScene2302(1);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index bccc723..cfcacaf 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -269,14 +269,14 @@ void Module3000::updateScene3002() {
delete _childObject;
_childObject = NULL;
if (!getGlobalVar(0x01BA1A52)) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene3010(-1);
_childObject->handleUpdate();
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
sendMessage(_parentModule, 0x1009, 0);
}
} else {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
if (areaType == 2) {
createScene3003(0);
_childObject->handleUpdate();
@@ -284,7 +284,7 @@ void Module3000::updateScene3002() {
//createScene3002b(-1);
_childObject->handleUpdate();
}
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
sendMessage(_parentModule, 0x1009, 0);
}
}
@@ -328,10 +328,10 @@ void Module3000::updateScene3003() {
_soundVolume = 0;
// TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
}
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene3004(0);
_childObject->handleUpdate();
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
setGlobalVar(0x01BA1A52, 0);
createScene3002(1);
_childObject->handleUpdate();
@@ -363,10 +363,10 @@ void Module3000::updateScene3003() {
void Module3000::updateScene3004() {
if (!updateChild()) {
- if (_field20 == 1) {
+ if (_moduleResult == 1) {
createScene3005(0);
_childObject->handleUpdate();
- } else if (_field20 == 3) {
+ } else if (_moduleResult == 3) {
createScene3011(-1);
_childObject->handleUpdate();
} else if (getGlobalVar(0x09221A62)) {
@@ -400,12 +400,12 @@ void Module3000::updateScene3004() {
void Module3000::updateScene3005() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
sendMessage(_parentModule, 0x1009, 1);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene3008(-1);
_childObject->handleUpdate();
- } else if (_field20 == 2) {
+ } else if (_moduleResult == 2) {
createScene3004(3);
_childObject->handleUpdate();
}
@@ -414,9 +414,9 @@ void Module3000::updateScene3005() {
void Module3000::updateScene3006() {
if (!updateChild()) {
- if (_field20 == 0) {
+ if (_moduleResult == 0) {
createScene3007(0);
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene3004(0);
}
_childObject->handleUpdate();
@@ -449,7 +449,7 @@ void Module3000::updateScene3007() {
void Module3000::updateScene3009() {
if (!updateChild()) {
_flag = getGlobalVar(0x10938830); // CHECKME
- if (_field20 != 1) {
+ if (_moduleResult != 1) {
// TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
createScene3005(1);
_childObject->handleUpdate();
@@ -466,13 +466,12 @@ void Module3000::updateScene3009() {
void Module3000::updateScene3010() {
if (!updateChild()) {
- if (_field20 == 0 || _field20 == 2) {
+ if (_moduleResult == 0 || _moduleResult == 2) {
createScene3002(0);
- _childObject->handleUpdate();
- } else if (_field20 == 1) {
+ } else if (_moduleResult == 1) {
createScene3002b(-1);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index ff18304..f17b2d4 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -114,6 +114,7 @@ public:
void clearRepl();
uint32 getCurrAnimFileHash() const { return _currAnimFileHash; }
int16 getFrameIndex() const { return _frameIndex; }
+ int16 getFrameIndex(uint32 frameHash) { return _animResource.getFrameIndex(frameHash); }
void setNewHashListIndex(int value) { _newHashListIndex = value; }
void setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4);
protected:
Commit: 02fe0bc65de94217afdc856c181be8dd761870cf
https://github.com/scummvm/scummvm/commit/02fe0bc65de94217afdc856c181be8dd761870cf
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Merge scene-specific createSceneXXX/updateSceneXXX methods into createScene and updateScene (for Module2200 only so far)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index efd191e..abe61d2 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -264,7 +264,7 @@ void GameModule::startup() {
//createModule1700(-1);
//createModule1700(1);
//createModule1400(-1);
-#if 1
+#if 0
_vm->gameState().sceneNum = 0;
createModule1200(-1);
#endif
@@ -276,8 +276,8 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule2000(-1);
#endif
-#if 0
- _vm->gameState().sceneNum = 0;
+#if 1
+ _vm->gameState().sceneNum = 2;
createModule2200(-1);
#endif
#if 0
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 2db0eb4..c8eca78 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -36,1172 +36,592 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO: Music18hList_add(0x11391412, 0x601C908C);
if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else {
+ createScene(0, 0);
+ }
+
+}
+
+Module2200::~Module2200() {
+ // TODO Sound1ChList_sub_407A50(0x11391412);
+}
+
+void Module2200::createScene(int sceneNum, int which) {
+ // CHECKME if this can be used regardless of the new sceneNum
+ if (sceneNum == 7 && which >= 0)
+ _vm->gameState().which = _vm->gameState().sceneNum;
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _childObject = new Scene2201(_vm, this, which);
+ break;
+ case 1:
+ // TODO Music18hList_play(0x601C908C, 0, 2, 1);
+ _childObject = new Scene2202(_vm, this, which);
+ break;
+ case 2:
+ // TODO Music18hList_play(0x601C908C, 0, 2, 1);
+ _childObject = new Scene2203(_vm, this, which);
+ break;
+ case 3:
+ // TODO Music18hList_stop(0x601C908C, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 3);
+ break;
+ case 4:
+ // TODO Music18hList_stop(0x601C908C, 0, 2);
+ _childObject = new Scene2205(_vm, this, which);
+ break;
+ case 5:
+ // TODO Music18hList_stop(0x601C908C, 0, 2);
+ _childObject = new Scene2206(_vm, this, which);
+ break;
+ case 6:
+ _childObject = new Scene2207(_vm, this, which);
+ break;
+ case 7:
+ _childObject = new Scene2208(_vm, this, which);
+ break;
+ case 8:
+ _childObject = new Scene2208(_vm, this, which);
+ break;
+ case 9:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7180);
+ break;
+ case 10:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7198);
+ break;
+ case 11:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71B0);
+ break;
+ case 12:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71C8);
+ break;
+ case 13:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71E0);
+ break;
+ case 14:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71F8);
+ break;
+ case 15:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7210);
+ break;
+ case 16:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7228);
+ break;
+ case 17:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7240);
+ break;
+ case 18:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7258);
+ break;
+ case 19:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7270);
+ break;
+ case 20:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7288);
+ break;
+ case 21:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72A0);
+ break;
+ case 22:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72B8);
+ break;
+ case 23:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72D0);
+ break;
+ case 24:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72E8);
+ break;
+ case 25:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7300);
+ break;
+ case 26:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7318);
+ break;
+ case 27:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7330);
+ break;
+ case 28:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7348);
+ break;
+ case 29:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7360);
+ break;
+ case 30:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7378);
+ break;
+ case 31:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7390);
+ break;
+ case 32:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73A8);
+ break;
+ case 33:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73C0);
+ break;
+ case 34:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73D8);
+ break;
+ case 35:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73F0);
+ break;
+ case 36:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7408);
+ break;
+ case 37:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7420);
+ break;
+ case 38:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7438);
+ break;
+ case 39:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7450);
+ break;
+ case 40:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7468);
+ break;
+ case 41:
+ _childObject = new Scene2242(_vm, this, which);
+ break;
+ case 42:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7480);
+ break;
+ case 43:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7498);
+ break;
+ case 44:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74B0);
+ break;
+ case 45:
+ _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74C8);
+ break;
+ case 46:
+ _childObject = new Scene2247(_vm, this, which);
+ break;
+ case 47:
+ if (!getGlobalVar(0x98109F12)) {
+ if (getGlobalVar(0x4D080E54))
+ _childObject = new Class152(_vm, this, 0x83110287, 0x10283839);
+ else
+ _childObject = new Class152(_vm, this, 0x83412B9D, 0x12B9983C);
+ } else {
+ if (getGlobalVar(0x4D080E54))
+ _childObject = new Class152(_vm, this, 0x48632087, 0x3208348E);
+ else
+ _childObject = new Class152(_vm, this, 0x08C74886, 0x74882084);
+ }
+ break;
+ }
+ SetUpdateHandler(&Module2200::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2200::updateScene() {
+ if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
- default:
- createScene2201(-1);
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(2, 0);
+ } else if (_moduleResult == 2) {
+ createScene(1, 0);
+ } else {
+ sendMessage(_parentModule, 0x1009, 0);
+ }
break;
case 1:
- createScene2202(-1);
+ createScene(0, 2);
break;
case 2:
- createScene2203(-1);
+ if (_moduleResult == 1) {
+ createScene(4, 0);
+ } else if (_moduleResult == 2) {
+ createScene(3, 0);
+ } else {
+ createScene(0, 1);
+ }
break;
case 3:
- createScene2204(-1);
+ createScene(2, 2);
break;
case 4:
- createScene2205(-1);
+ if (_moduleResult == 1) {
+ createScene(5, 0);
+ } else if (_moduleResult == 2) {
+ createScene(4, 2);
+ } else {
+ createScene(2, 1);
+ }
break;
case 5:
- createScene2206(-1);
+ if (_moduleResult == 1) {
+ createScene(46, 0);
+ } else if (_moduleResult == 2) {
+ createScene(6, 0);
+ } else if (_moduleResult == 3) {
+ createScene(8, 0);
+ } else {
+ createScene(4, 1);
+ }
break;
case 6:
- createScene2207(-1);
+ createScene(5, 2);
break;
case 7:
- createScene2208(-1);
+ createScene(_vm->gameState().which, 2);
break;
case 8:
- createScene2209(-1);
+ createScene(5, 3);
break;
case 9:
- createScene2210(-1);
+ if (_moduleResult == 1) {
+ createScene(10, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(46, 1);
+ }
break;
case 10:
- createScene2211(-1);
+ if (_moduleResult == 1) {
+ createScene(11, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(9, 1);
+ }
break;
case 11:
- createScene2212(-1);
+ if (_moduleResult == 1) {
+ createScene(12, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(10, 1);
+ }
break;
case 12:
- createScene2213(-1);
+ if (_moduleResult == 1) {
+ createScene(13, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(11, 1);
+ }
break;
case 13:
- createScene2214(-1);
+ if (_moduleResult == 1) {
+ createScene(14, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(12, 1);
+ }
break;
case 14:
- createScene2215(-1);
+ if (_moduleResult == 1) {
+ createScene(15, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(13, 1);
+ }
break;
case 15:
- createScene2216(-1);
+ if (_moduleResult == 1) {
+ createScene(16, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(14, 1);
+ }
break;
case 16:
- createScene2217(-1);
+ if (_moduleResult == 1) {
+ createScene(17, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(15, 1);
+ }
break;
case 17:
- createScene2218(-1);
+ if (_moduleResult == 1) {
+ createScene(18, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(16, 1);
+ }
break;
case 18:
- createScene2219(-1);
+ if (_moduleResult == 1) {
+ createScene(19, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(17, 1);
+ }
break;
case 19:
- createScene2220(-1);
+ if (_moduleResult == 1) {
+ createScene(20, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(18, 1);
+ }
break;
case 20:
- createScene2221(-1);
+ if (_moduleResult == 1) {
+ createScene(21, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(19, 1);
+ }
break;
case 21:
- createScene2222(-1);
+ if (_moduleResult == 1) {
+ createScene(22, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(20, 1);
+ }
break;
case 22:
- createScene2223(-1);
+ if (_moduleResult == 1) {
+ createScene(23, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(21, 1);
+ }
break;
case 23:
- createScene2224(-1);
+ if (_moduleResult == 1) {
+ createScene(24, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(22, 1);
+ }
break;
case 24:
- createScene2225(-1);
+ if (_moduleResult == 1) {
+ createScene(25, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(23, 1);
+ }
break;
case 25:
- createScene2226(-1);
+ if (_moduleResult == 1) {
+ createScene(26, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(24, 1);
+ }
break;
case 26:
- createScene2227(-1);
+ if (_moduleResult == 1) {
+ createScene(27, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(25, 1);
+ }
break;
case 27:
- createScene2228(-1);
+ if (_moduleResult == 1) {
+ createScene(28, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(26, 1);
+ }
break;
case 28:
- createScene2229(-1);
+ if (_moduleResult == 1) {
+ createScene(29, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(27, 1);
+ }
break;
case 29:
- createScene2230(-1);
+ if (_moduleResult == 1) {
+ createScene(30, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(28, 1);
+ }
break;
case 30:
- createScene2231(-1);
+ if (_moduleResult == 1) {
+ createScene(31, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(29, 1);
+ }
break;
case 31:
- createScene2232(-1);
+ if (_moduleResult == 1) {
+ createScene(32, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(30, 1);
+ }
break;
case 32:
- createScene2233(-1);
+ if (_moduleResult == 1) {
+ createScene(33, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(31, 1);
+ }
break;
case 33:
- createScene2234(-1);
+ if (_moduleResult == 1) {
+ createScene(34, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(32, 1);
+ }
break;
case 34:
- createScene2235(-1);
+ if (_moduleResult == 1) {
+ createScene(42, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(33, 1);
+ }
break;
case 35:
- createScene2236(-1);
+ if (_moduleResult == 1) {
+ createScene(36, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(45, 1);
+ }
break;
case 36:
- createScene2237(-1);
+ if (_moduleResult == 1) {
+ createScene(37, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(35, 1);
+ }
break;
case 37:
- createScene2238(-1);
+ if (_moduleResult == 1) {
+ createScene(38, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(36, 1);
+ }
break;
case 38:
- createScene2239(-1);
+ if (_moduleResult == 1) {
+ createScene(39, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(37, 1);
+ }
break;
case 39:
- createScene2240(-1);
+ if (_moduleResult == 1) {
+ createScene(40, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(38, 1);
+ }
break;
case 40:
- createScene2241(-1);
+ if (_moduleResult == 1) {
+ createScene(41, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(39, 1);
+ }
break;
case 41:
- createScene2242(-1);
+ if (_moduleResult == 1) {
+ createScene(47, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(40, 1);
+ }
break;
case 42:
- createScene2243(-1);
+ if (_moduleResult == 1) {
+ createScene(43, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(34, 1);
+ }
break;
case 43:
- createScene2244(-1);
+ if (_moduleResult == 1) {
+ createScene(44, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(42, 1);
+ }
break;
case 44:
- createScene2245(-1);
+ if (_moduleResult == 1) {
+ createScene(45, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(43, 1);
+ }
break;
case 45:
- createScene2246(-1);
+ if (_moduleResult == 1) {
+ createScene(35, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(44, 1);
+ }
break;
case 46:
- createScene2247(-1);
+ if (_moduleResult == 1) {
+ createScene(9, 0);
+ } else if (_moduleResult == 2) {
+ createScene(7, 0);
+ } else {
+ createScene(5, 1);
+ }
break;
case 47:
- createScene2248(-1);
+ createScene(41, 1);
break;
}
- } else {
- createScene2201(0);
}
-
-}
-
-Module2200::~Module2200() {
- // TODO Sound1ChList_sub_407A50(0x11391412);
-}
-
-void Module2200::createScene2201(int which) {
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene2201(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2201);
-}
-
-void Module2200::createScene2202(int which) {
- // TODO Music18hList_play(0x601C908C, 0, 2, 1);
- _vm->gameState().sceneNum = 1;
- _childObject = new Scene2202(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2202);
-}
-
-void Module2200::createScene2203(int which) {
- // TODO Music18hList_play(0x601C908C, 0, 2, 1);
- _vm->gameState().sceneNum = 2;
- _childObject = new Scene2203(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2203);
-}
-
-void Module2200::createScene2204(int which) {
- _vm->gameState().sceneNum = 3;
- // TODO Music18hList_stop(0x601C908C, 0, 2);
- _childObject = new DiskplayerScene(_vm, this, 3);
- SetUpdateHandler(&Module2200::updateScene2204);
-}
-
-void Module2200::createScene2205(int which) {
- _vm->gameState().sceneNum = 4;
- // TODO Music18hList_stop(0x601C908C, 0, 2);
- _childObject = new Scene2205(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2205);
-}
-
-void Module2200::createScene2206(int which) {
- _vm->gameState().sceneNum = 5;
- // TODO Music18hList_stop(0x601C908C, 0, 2);
- _childObject = new Scene2206(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2206);
-}
-
-void Module2200::createScene2207(int which) {
- _vm->gameState().sceneNum = 6;
- _childObject = new Scene2207(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2207);
-}
-
-void Module2200::createScene2208(int which) {
- if (which >= 0)
- _vm->gameState().which = _vm->gameState().sceneNum;
- _vm->gameState().sceneNum = 7;
- _childObject = new Scene2208(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2208);
-}
-
-void Module2200::createScene2209(int which) {
- _vm->gameState().sceneNum = 8;
- _childObject = new Scene2208(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2209);
-}
-
-void Module2200::createScene2210(int which) {
- _vm->gameState().sceneNum = 9;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7180);
- SetUpdateHandler(&Module2200::updateScene2210);
-}
-
-void Module2200::createScene2211(int which) {
- _vm->gameState().sceneNum = 10;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7198);
- SetUpdateHandler(&Module2200::updateScene2211);
-}
-
-void Module2200::createScene2212(int which) {
- _vm->gameState().sceneNum = 11;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71B0);
- SetUpdateHandler(&Module2200::updateScene2212);
-}
-
-void Module2200::createScene2213(int which) {
- _vm->gameState().sceneNum = 12;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71C8);
- SetUpdateHandler(&Module2200::updateScene2213);
-}
-
-void Module2200::createScene2214(int which) {
- _vm->gameState().sceneNum = 13;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71E0);
- SetUpdateHandler(&Module2200::updateScene2214);
-}
-
-void Module2200::createScene2215(int which) {
- _vm->gameState().sceneNum = 14;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71F8);
- SetUpdateHandler(&Module2200::updateScene2215);
-}
-
-void Module2200::createScene2216(int which) {
- _vm->gameState().sceneNum = 15;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7210);
- SetUpdateHandler(&Module2200::updateScene2216);
-}
-
-void Module2200::createScene2217(int which) {
- _vm->gameState().sceneNum = 16;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7228);
- SetUpdateHandler(&Module2200::updateScene2217);
-}
-
-void Module2200::createScene2218(int which) {
- _vm->gameState().sceneNum = 17;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7240);
- SetUpdateHandler(&Module2200::updateScene2218);
-}
-
-void Module2200::createScene2219(int which) {
- _vm->gameState().sceneNum = 18;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7258);
- SetUpdateHandler(&Module2200::updateScene2219);
-}
-
-void Module2200::createScene2220(int which) {
- _vm->gameState().sceneNum = 19;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7270);
- SetUpdateHandler(&Module2200::updateScene2220);
-}
-
-void Module2200::createScene2221(int which) {
- _vm->gameState().sceneNum = 20;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7288);
- SetUpdateHandler(&Module2200::updateScene2221);
-}
-
-void Module2200::createScene2222(int which) {
- _vm->gameState().sceneNum = 21;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72A0);
- SetUpdateHandler(&Module2200::updateScene2222);
-}
-
-void Module2200::createScene2223(int which) {
- _vm->gameState().sceneNum = 22;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72B8);
- SetUpdateHandler(&Module2200::updateScene2223);
-}
-
-void Module2200::createScene2224(int which) {
- _vm->gameState().sceneNum = 23;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72D0);
- SetUpdateHandler(&Module2200::updateScene2224);
-}
-
-void Module2200::createScene2225(int which) {
- _vm->gameState().sceneNum = 24;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72E8);
- SetUpdateHandler(&Module2200::updateScene2225);
-}
-
-void Module2200::createScene2226(int which) {
- _vm->gameState().sceneNum = 25;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7300);
- SetUpdateHandler(&Module2200::updateScene2226);
-}
-
-void Module2200::createScene2227(int which) {
- _vm->gameState().sceneNum = 26;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7318);
- SetUpdateHandler(&Module2200::updateScene2227);
-}
-
-void Module2200::createScene2228(int which) {
- _vm->gameState().sceneNum = 27;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7330);
- SetUpdateHandler(&Module2200::updateScene2228);
-}
-
-void Module2200::createScene2229(int which) {
- _vm->gameState().sceneNum = 28;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7348);
- SetUpdateHandler(&Module2200::updateScene2229);
-}
-
-void Module2200::createScene2230(int which) {
- _vm->gameState().sceneNum = 29;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7360);
- SetUpdateHandler(&Module2200::updateScene2230);
-}
-
-void Module2200::createScene2231(int which) {
- _vm->gameState().sceneNum = 30;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7378);
- SetUpdateHandler(&Module2200::updateScene2231);
-}
-
-void Module2200::createScene2232(int which) {
- _vm->gameState().sceneNum = 31;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7390);
- SetUpdateHandler(&Module2200::updateScene2232);
-}
-
-void Module2200::createScene2233(int which) {
- _vm->gameState().sceneNum = 32;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73A8);
- SetUpdateHandler(&Module2200::updateScene2233);
-}
-
-void Module2200::createScene2234(int which) {
- _vm->gameState().sceneNum = 33;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73C0);
- SetUpdateHandler(&Module2200::updateScene2234);
-}
-
-void Module2200::createScene2235(int which) {
- _vm->gameState().sceneNum = 34;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73D8);
- SetUpdateHandler(&Module2200::updateScene2235);
-}
-
-void Module2200::createScene2236(int which) {
- _vm->gameState().sceneNum = 35;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73F0);
- SetUpdateHandler(&Module2200::updateScene2236);
-}
-
-void Module2200::createScene2237(int which) {
- _vm->gameState().sceneNum = 36;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7408);
- SetUpdateHandler(&Module2200::updateScene2237);
-}
-
-void Module2200::createScene2238(int which) {
- _vm->gameState().sceneNum = 37;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7420);
- SetUpdateHandler(&Module2200::updateScene2238);
-}
-
-void Module2200::createScene2239(int which) {
- _vm->gameState().sceneNum = 38;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7438);
- SetUpdateHandler(&Module2200::updateScene2239);
-}
-
-void Module2200::createScene2240(int which) {
- _vm->gameState().sceneNum = 39;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7450);
- SetUpdateHandler(&Module2200::updateScene2240);
-}
-
-void Module2200::createScene2241(int which) {
- _vm->gameState().sceneNum = 40;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7468);
- SetUpdateHandler(&Module2200::updateScene2241);
-}
-
-void Module2200::createScene2242(int which) {
- _vm->gameState().sceneNum = 41;
- _childObject = new Scene2242(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2242);
-}
-
-void Module2200::createScene2243(int which) {
- _vm->gameState().sceneNum = 42;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7480);
- SetUpdateHandler(&Module2200::updateScene2243);
-}
-
-void Module2200::createScene2244(int which) {
- _vm->gameState().sceneNum = 43;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7498);
- SetUpdateHandler(&Module2200::updateScene2244);
-}
-
-void Module2200::createScene2245(int which) {
- _vm->gameState().sceneNum = 44;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74B0);
- SetUpdateHandler(&Module2200::updateScene2245);
-}
-
-void Module2200::createScene2246(int which) {
- _vm->gameState().sceneNum = 45;
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74C8);
- SetUpdateHandler(&Module2200::updateScene2246);
-}
-
-void Module2200::createScene2247(int which) {
- _vm->gameState().sceneNum = 46;
- _childObject = new Scene2247(_vm, this, which);
- SetUpdateHandler(&Module2200::updateScene2247);
}
-void Module2200::createScene2248(int which) {
- _vm->gameState().sceneNum = 47;
- if (!getGlobalVar(0x98109F12)) {
- if (getGlobalVar(0x4D080E54))
- _childObject = new Class152(_vm, this, 0x83110287, 0x10283839);
- else
- _childObject = new Class152(_vm, this, 0x83412B9D, 0x12B9983C);
- } else {
- if (getGlobalVar(0x4D080E54))
- _childObject = new Class152(_vm, this, 0x48632087, 0x3208348E);
- else
- _childObject = new Class152(_vm, this, 0x08C74886, 0x74882084);
- }
- SetUpdateHandler(&Module2200::updateScene2248);
-}
-
-void Module2200::updateScene2201() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2203(0);
- } else if (_moduleResult == 2) {
- createScene2202(0);
- } else {
- sendMessage(_parentModule, 0x1009, 0);
- }
- }
-}
-
-void Module2200::updateScene2202() {
- if (!updateChild()) {
- createScene2201(2);
- }
-}
-
-void Module2200::updateScene2203() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2205(0);
- } else if (_moduleResult == 2) {
- createScene2204(0);
- } else {
- createScene2201(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2204() {
- if (!updateChild()) {
- createScene2203(2);
- }
-}
-
-void Module2200::updateScene2205() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2206(0);
- } else if (_moduleResult == 2) {
- createScene2205(2);
- } else {
- createScene2203(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2206() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2247(0);
- } else if (_moduleResult == 2) {
- createScene2207(0);
- } else if (_moduleResult == 3) {
- createScene2209(0);
- } else {
- createScene2205(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2207() {
- if (!updateChild()) {
- createScene2206(2);
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2208() {
- if (!updateChild()) {
- // This is madness!
- switch (_vm->gameState().which) {
- case 4:
- createScene2205(2);
- break;
- case 9:
- createScene2210(2);
- break;
- case 10:
- createScene2211(2);
- break;
- case 11:
- createScene2212(2);
- break;
- case 12:
- createScene2213(2);
- break;
- case 13:
- createScene2214(2);
- break;
- case 14:
- createScene2215(2);
- break;
- case 15:
- createScene2216(2);
- break;
- case 16:
- createScene2217(2);
- break;
- case 17:
- createScene2218(2);
- break;
- case 18:
- createScene2219(2);
- break;
- case 19:
- createScene2220(2);
- break;
- case 20:
- createScene2221(2);
- break;
- case 21:
- createScene2222(2);
- break;
- case 22:
- createScene2223(2);
- break;
- case 23:
- createScene2224(2);
- break;
- case 24:
- createScene2225(2);
- break;
- case 25:
- createScene2226(2);
- break;
- case 26:
- createScene2227(2);
- break;
- case 27:
- createScene2228(2);
- break;
- case 28:
- createScene2229(2);
- break;
- case 29:
- createScene2230(2);
- break;
- case 30:
- createScene2231(2);
- break;
- case 31:
- createScene2232(2);
- break;
- case 32:
- createScene2233(2);
- break;
- case 33:
- createScene2234(2);
- break;
- case 34:
- createScene2235(2);
- break;
- case 35:
- createScene2236(2);
- break;
- case 36:
- createScene2237(2);
- break;
- case 37:
- createScene2238(2);
- break;
- case 38:
- createScene2239(2);
- break;
- case 39:
- createScene2240(2);
- break;
- case 40:
- createScene2241(2);
- break;
- case 41:
- createScene2242(2);
- break;
- case 42:
- createScene2243(2);
- break;
- case 43:
- createScene2244(2);
- break;
- case 44:
- createScene2245(2);
- break;
- case 46:
- createScene2247(2);
- break;
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2209() {
- if (!updateChild()) {
- createScene2206(3);
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2210() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2211(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2247(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2211() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2212(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2210(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2212() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2213(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2211(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2213() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2214(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2212(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2214() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2215(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2213(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2215() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2216(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2214(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2216() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2217(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2215(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2217() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2218(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2216(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2218() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2219(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2217(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2219() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2220(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2218(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2220() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2221(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2219(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2221() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2222(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2220(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2222() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2223(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2221(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2223() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2224(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2222(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2224() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2225(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2223(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2225() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2226(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2224(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2226() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2227(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2225(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2227() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2228(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2226(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2228() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2229(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2227(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2229() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2230(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2228(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2230() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2231(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2229(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2231() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2232(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2230(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2232() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2233(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2231(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2233() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2234(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2232(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2234() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2235(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2233(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2235() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2243(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2234(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2236() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2237(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2246(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2237() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2238(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2236(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2238() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2239(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2237(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2239() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2240(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2238(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2240() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2241(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2239(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2241() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2242(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2240(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2242() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2248(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene2208(0);
- _childObject->handleUpdate();
- } else {
- createScene2241(1);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module2200::updateScene2243() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2244(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2235(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2244() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2245(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2243(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2245() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2246(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2244(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2246() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2236(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2245(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2247() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2210(0);
- } else if (_moduleResult == 2) {
- createScene2208(0);
- } else {
- createScene2206(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module2200::updateScene2248() {
- if (!updateChild()) {
- createScene2242(1);
- _childObject->handleUpdate();
- }
-}
-
// Scene2201
AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 4dfd827..76a5950 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -38,102 +38,8 @@ public:
Module2200(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2200();
protected:
- void createScene2201(int which);
- void createScene2202(int which);
- void createScene2203(int which);
- void createScene2204(int which);
- void createScene2205(int which);
- void createScene2206(int which);
- void createScene2207(int which);
- void createScene2208(int which);
- void createScene2209(int which);
- void createScene2210(int which);
- void createScene2211(int which);
- void createScene2212(int which);
- void createScene2213(int which);
- void createScene2214(int which);
- void createScene2215(int which);
- void createScene2216(int which);
- void createScene2217(int which);
- void createScene2218(int which);
- void createScene2219(int which);
- void createScene2220(int which);
- void createScene2221(int which);
- void createScene2222(int which);
- void createScene2223(int which);
- void createScene2224(int which);
- void createScene2225(int which);
- void createScene2226(int which);
- void createScene2227(int which);
- void createScene2228(int which);
- void createScene2229(int which);
- void createScene2230(int which);
- void createScene2231(int which);
- void createScene2232(int which);
- void createScene2233(int which);
- void createScene2234(int which);
- void createScene2235(int which);
- void createScene2236(int which);
- void createScene2237(int which);
- void createScene2238(int which);
- void createScene2239(int which);
- void createScene2240(int which);
- void createScene2241(int which);
- void createScene2242(int which);
- void createScene2243(int which);
- void createScene2244(int which);
- void createScene2245(int which);
- void createScene2246(int which);
- void createScene2247(int which);
- void createScene2248(int which);
- void updateScene2201();
- void updateScene2202();
- void updateScene2203();
- void updateScene2204();
- void updateScene2205();
- void updateScene2206();
- void updateScene2207();
- void updateScene2208();
- void updateScene2209();
- void updateScene2210();
- void updateScene2211();
- void updateScene2212();
- void updateScene2213();
- void updateScene2214();
- void updateScene2215();
- void updateScene2216();
- void updateScene2217();
- void updateScene2218();
- void updateScene2219();
- void updateScene2220();
- void updateScene2221();
- void updateScene2222();
- void updateScene2223();
- void updateScene2224();
- void updateScene2225();
- void updateScene2226();
- void updateScene2227();
- void updateScene2228();
- void updateScene2229();
- void updateScene2230();
- void updateScene2231();
- void updateScene2232();
- void updateScene2233();
- void updateScene2234();
- void updateScene2235();
- void updateScene2236();
- void updateScene2237();
- void updateScene2238();
- void updateScene2239();
- void updateScene2240();
- void updateScene2241();
- void updateScene2242();
- void updateScene2243();
- void updateScene2244();
- void updateScene2245();
- void updateScene2246();
- void updateScene2247();
- void updateScene2248();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene2201
Commit: 67fe73352b5de401b184a54195beba2438da5b8d
https://github.com/scummvm/scummvm/commit/67fe73352b5de401b184a54195beba2438da5b8d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Merge createSceneXXX/updateSceneXXX methods into createScene and updateScene for Module1000
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index abe61d2..1c76027 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,13 +276,13 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule2000(-1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 2;
createModule2200(-1);
#endif
-#if 0
- _vm->gameState().sceneNum = 5;
- createModule1300(-1);
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule1000(-1);
#endif
}
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 8185430..22bc5cc 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -35,27 +35,11 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Music18hList_add(0x03294419, _musicFileHash);
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 0:
- createScene1001(-1);
- break;
- case 1:
- createScene1002(-1);
- break;
- case 2:
- createScene1003(-1);
- break;
- case 3:
- createScene1004(-1);
- break;
- case 4:
- createScene1005(-1);
- break;
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else if (which == 0) {
- createScene1001(0);
+ createScene(0, 0);
} else if (which == 1) {
- createScene1002(1);
+ createScene(1, 1);
}
}
@@ -64,95 +48,73 @@ Module1000::~Module1000() {
// TODO Music18hList_deleteGroup(0x03294419);
}
-void Module1000::createScene1001(int which) {
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene1001(_vm, this, which);
- // TODO Music18hList_play(0x061880C6, 0, 0, 1);
- SetUpdateHandler(&Module1000::updateScene1001);
-}
-
-void Module1000::createScene1002(int which) {
- _vm->gameState().sceneNum = 1;
- _childObject = new Scene1002(_vm, this, which);
- // TODO Music18hList_play(0x061880C6, 0, 0, 1);
- SetUpdateHandler(&Module1000::updateScene1002);
-}
-
-void Module1000::createScene1003(int which) {
- _vm->gameState().sceneNum = 2;
- _childObject = new Class152(_vm, this, 0xC084110C, 0x41108C00);
- SetUpdateHandler(&Module1000::updateScene1003);
- // TODO Music18hList_play(0x061880C6, 0, 0);
-}
-
-void Module1000::createScene1004(int which) {
- _vm->gameState().sceneNum = 3;
- _childObject = new Scene1004(_vm, this, which);
- SetUpdateHandler(&Module1000::updateScene1004);
- // TODO Music18hList_stop(0x061880C6, 0, 2);
-}
-
-void Module1000::createScene1005(int which) {
- _vm->gameState().sceneNum = 4;
- _childObject = new Scene1005(_vm, this, which);
- // TODO Music18hList_stop(0x061880C6, 0, 0);
- // TODO Music18hList_play(_musicFileHash, 0, 0, 1);
- SetUpdateHandler(&Module1000::updateScene1005);
-}
-
-void Module1000::updateScene1001() {
- if (!updateChild()) {
- if (_moduleResult == 2) {
- createScene1003(0);
- _childObject->handleUpdate();
- } else {
- createScene1002(0);
- _childObject->handleUpdate();
- }
+void Module1000::createScene(int sceneNum, int which) {
+ debug("Module1000::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Music18hList_play(0x061880C6, 0, 0, 1);
+ _childObject = new Scene1001(_vm, this, which);
+ break;
+ case 1:
+ // TODO Music18hList_play(0x061880C6, 0, 0, 1);
+ _childObject = new Scene1002(_vm, this, which);
+ break;
+ case 2:
+ // TODO Music18hList_play(0x061880C6, 0, 0);
+ _childObject = new Class152(_vm, this, 0xC084110C, 0x41108C00);
+ break;
+ case 3:
+ // TODO Music18hList_stop(0x061880C6, 0, 2);
+ _childObject = new Scene1004(_vm, this, which);
+ break;
+ case 4:
+ // TODO Music18hList_stop(0x061880C6, 0, 0);
+ // TODO Music18hList_play(_musicFileHash, 0, 0, 1);
+ _childObject = new Scene1005(_vm, this, which);
+ break;
}
+ SetUpdateHandler(&Module1000::updateScene);
+ _childObject->handleUpdate();
}
-void Module1000::updateScene1002() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 0);
- } else if (_moduleResult == 2) {
- createScene1004(0);
- _childObject->handleUpdate();
- } else {
- createScene1001(1);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module1000::updateScene1003() {
- if (!updateChild()) {
- createScene1001(2);
- _childObject->handleUpdate();
- }
-}
-
-void Module1000::updateScene1004() {
+void Module1000::updateScene() {
if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1005(0);
- _childObject->handleUpdate();
- } else {
- createScene1002(2);
- _childObject->handleUpdate();
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 2) {
+ createScene(2, 0);
+ } else {
+ createScene(1, 0);
+ }
+ break;
+ case 1:
+ if (_moduleResult == 1) {
+ sendMessage(_parentModule, 0x1009, 0);
+ } else if (_moduleResult == 2) {
+ createScene(3, 0);
+ } else {
+ createScene(0, 1);
+ }
+ break;
+ case 2:
+ createScene(0, 2);
+ break;
+ case 3:
+ if (_moduleResult == 1) {
+ createScene(4, 0);
+ } else {
+ createScene(1, 2);
+ }
+ break;
+ case 4:
+ // TODO Music18hList_stop(_musicFileHash, 0, 1);
+ createScene(3, 1);
+ break;
}
}
}
-
-void Module1000::updateScene1005() {
- if (!updateChild()) {
- // TODO Music18hList_stop(_musicFileHash, 0, 1);
- createScene1004(1);
- _childObject->handleUpdate();
- }
-}
-
+
// Scene1001
AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 385ac10..a7046ce 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -37,20 +37,8 @@ public:
virtual ~Module1000();
protected:
uint32 _musicFileHash;
- // TODO ResourceTable _resourceTable1;
- // TODO ResourceTable _resourceTable2;
- // TODO ResourceTable _resourceTable3;
- // TODO ResourceTable _resourceTable4;
- void createScene1001(int which);
- void createScene1002(int which);
- void createScene1003(int which);
- void createScene1004(int which);
- void createScene1005(int which);
- void updateScene1001();
- void updateScene1002();
- void updateScene1003();
- void updateScene1004();
- void updateScene1005();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene1001
Commit: d24907d1bb1650093e4ff7f0d008ce87350226b6
https://github.com/scummvm/scummvm/commit/d24907d1bb1650093e4ff7f0d008ce87350226b6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Rename Palette2::addPalette to addBasePalette to prepare the merge of the Palette/Palette2 classes
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/palette.cpp
engines/neverhood/palette.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1c76027..103d53d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,11 +276,11 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule2000(-1);
#endif
-#if 0
- _vm->gameState().sceneNum = 2;
+#if 1
+ _vm->gameState().sceneNum = 4;
createModule2200(-1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 0;
createModule1000(-1);
#endif
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 22bc5cc..77620b8 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1694,10 +1694,10 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x0D0A14D10)) {
palette2 = new Palette2(_vm, 0xA30BA329);
- palette2->addPalette(0xA30BA329, 0, 256, 0);
+ palette2->addBasePalette(0xA30BA329, 0, 256, 0);
} else {
palette2 = new Palette2(_vm, 0x50C03005);
- palette2->addPalette(0x50C03005, 0, 256, 0);
+ palette2->addBasePalette(0x50C03005, 0, 256, 0);
}
_palette = palette2;
_palette->usePalette();
@@ -1770,13 +1770,13 @@ void Scene1004::updatePaletteArea() {
if (_klayman->getY() < 150) {
if (_paletteAreaStatus != 0) {
_paletteAreaStatus = 0;
- ((Palette2*)_palette)->addPalette(0x406B0D10, 0, 64, 0);
+ ((Palette2*)_palette)->addBasePalette(0x406B0D10, 0, 64, 0);
((Palette2*)_palette)->startFadeToPalette(12);
}
} else {
if (_paletteAreaStatus != 1) {
_paletteAreaStatus = 1;
- ((Palette2*)_palette)->addPalette(0x24332243, 0, 64, 0);
+ ((Palette2*)_palette)->addBasePalette(0x24332243, 0, 64, 0);
((Palette2*)_palette)->startFadeToPalette(12);
}
}
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index b942d8b..5735f24 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -119,7 +119,7 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
palette2->usePalette();
_palette = palette2;
addEntity(_palette);
- palette2->addPalette(backgroundFileHash, 0, 256, 0);
+ palette2->addBasePalette(backgroundFileHash, 0, 256, 0);
palette2->startFadeToPalette(12);
/*
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 0aea8d1..baa37d0 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -226,7 +226,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x03118226);
palette2 = new Palette2(_vm, 0x03118226);
- palette2->addPalette(0x91D3A391, 0, 64, 0);
+ palette2->addBasePalette(0x91D3A391, 0, 64, 0);
palette2->copyBasePalette(0, 256, 0);
palette2->usePalette();
_palette = palette2;
@@ -297,11 +297,11 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1705::update() {
Scene::update();
if (_klayman->getX() < 224 && _paletteArea != 0) {
- ((Palette2*)_palette)->addPalette(0xF2210C15, 0, 64, 0);
+ ((Palette2*)_palette)->addBasePalette(0xF2210C15, 0, 64, 0);
((Palette2*)_palette)->startFadeToPalette(12);
_paletteArea = 0;
} else if (_klayman->getX() >= 224 && _paletteArea == 0) {
- ((Palette2*)_palette)->addPalette(0x91D3A391, 0, 64, 0);
+ ((Palette2*)_palette)->addBasePalette(0x91D3A391, 0, 64, 0);
((Palette2*)_palette)->startFadeToPalette(12);
_paletteArea = 1;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index c8eca78..b637a39 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -1536,7 +1536,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
addSprite(_ssLightSwitch);
}
- palette2->addPalette(0xD00A028D, 0, 256, 0);
+ palette2->addBasePalette(0xD00A028D, 0, 256, 0);
_ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
@@ -1598,11 +1598,11 @@ void Scene2205::update() {
if (!getGlobalVar(0x4D080E54)) {
if (_isKlaymanInLight && _klayman->getX() > 85) {
- ((Palette2*)_palette)->addPalette(0x68033B1C, 0, 65, 0);
+ ((Palette2*)_palette)->addBasePalette(0x68033B1C, 0, 65, 0);
((Palette2*)_palette)->startFadeToPalette(12);
_isKlaymanInLight = false;
} else if (!_isKlaymanInLight && _klayman->getX() <= 85) {
- ((Palette2*)_palette)->addPalette(0xD00A028D, 0, 65, 0);
+ ((Palette2*)_palette)->addBasePalette(0xD00A028D, 0, 65, 0);
((Palette2*)_palette)->startFadeToPalette(12);
_isKlaymanInLight = true;
}
@@ -1822,7 +1822,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
addEntity(palette2);
- palette2->addPalette(fileHash, 0, 256, 0);
+ palette2->addBasePalette(fileHash, 0, 256, 0);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x0263D144, 0, 65, 0);
@@ -1904,7 +1904,7 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2206::sub481950() {
if (getGlobalVar(0x4D080E54)) {
- ((Palette2*)_palette)->addPalette(0x41983216, 0, 65, 0);
+ ((Palette2*)_palette)->addBasePalette(0x41983216, 0, 65, 0);
((Palette2*)_palette)->startFadeToPalette(12);
}
setSurfacePriority(_sprite1->getSurface(), 100);
@@ -1919,7 +1919,7 @@ void Scene2206::sub481950() {
void Scene2206::sub4819D0() {
if (!getGlobalVar(0x4D080E54)) {
- ((Palette2*)_palette)->addPalette(0xB103B604, 0, 65, 0);
+ ((Palette2*)_palette)->addBasePalette(0xB103B604, 0, 65, 0);
((Palette2*)_palette)->startFadeToPalette(12);
}
setSurfacePriority(_sprite1->getSurface(), 1100);
@@ -2767,11 +2767,11 @@ Scene2242::~Scene2242() {
void Scene2242::update() {
if (!getGlobalVar(0x4D080E54)) {
if (_isKlaymanInLight && _klayman->getX() < 440) {
- ((Palette2*)_palette)->addPalette(0x68033B1C, 0, 65, 0);
+ ((Palette2*)_palette)->addBasePalette(0x68033B1C, 0, 65, 0);
((Palette2*)_palette)->startFadeToPalette(12);
_isKlaymanInLight = false;
} else if (!_isKlaymanInLight && _klayman->getX() >= 440) {
- ((Palette2*)_palette)->addPalette(0x25848E24, 0, 65, 0);
+ ((Palette2*)_palette)->addBasePalette(0x25848E24, 0, 65, 0);
((Palette2*)_palette)->startFadeToPalette(12);
_isKlaymanInLight = true;
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index cfcacaf..7c4ed1a 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1762,13 +1762,13 @@ uint32 Scene3011::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene3011::fadeIn() {
Palette2 *palette2 = (Palette2*)_palette;
- palette2->addPalette(0x92124A04, 0, 256, 0);
+ palette2->addBasePalette(0x92124A04, 0, 256, 0);
palette2->startFadeToPalette(24);
}
void Scene3011::fadeOut() {
Palette2 *palette2 = (Palette2*)_palette;
- palette2->addPalette(0xA4070114, 0, 256, 0);
+ palette2->addBasePalette(0xA4070114, 0, 256, 0);
palette2->startFadeToPalette(24);
}
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index bd1d6b2..a060a41 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -70,7 +70,7 @@ void Palette::usePalette() {
}
void Palette::addPalette(const char *filename, int toIndex, int count, int fromIndex) {
- // TODO: addPalette(calcHash(filename), toIndex, count, fromIndex);
+ addPalette(calcHash(filename), toIndex, count, fromIndex);
}
void Palette::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
@@ -179,7 +179,7 @@ void Palette2::copyBasePalette(int toIndex, int count, int fromIndex) {
memcpy(_basePalette + toIndex * 4, _palette + fromIndex * 4, count * 4);
}
-void Palette2::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
+void Palette2::addBasePalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
PaletteResource paletteResource(_vm);
if (toIndex + count > 256)
count = 256 - toIndex;
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 01f63e8..9d2a7bc 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -62,7 +62,7 @@ public:
Palette2(NeverhoodEngine *vm, uint32 fileHash);
virtual ~Palette2();
void copyBasePalette(int toIndex, int count, int fromIndex);
- void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
+ void addBasePalette(uint32 fileHash, int toIndex, int count, int fromIndex);
void startFadeToPalette(int counter);
public:
byte *_basePalette;
Commit: 71ea4d5877a58809b994fb906d81516541c6e8e6
https://github.com/scummvm/scummvm/commit/71ea4d5877a58809b994fb906d81516541c6e8e6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Merge Palette2 class into Palette
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/palette.cpp
engines/neverhood/palette.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 77620b8..cf21536 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1682,7 +1682,6 @@ uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam &pa
Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _paletteAreaStatus(-1) {
- Palette2 *palette2;
Sprite *tempSprite;
_surfaceFlag = true;
@@ -1693,13 +1692,12 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x50C03005);
if (getGlobalVar(0x0D0A14D10)) {
- palette2 = new Palette2(_vm, 0xA30BA329);
- palette2->addBasePalette(0xA30BA329, 0, 256, 0);
+ _palette = new Palette(_vm, 0xA30BA329);
+ _palette->addBasePalette(0xA30BA329, 0, 256, 0);
} else {
- palette2 = new Palette2(_vm, 0x50C03005);
- palette2->addBasePalette(0x50C03005, 0, 256, 0);
+ _palette = new Palette(_vm, 0x50C03005);
+ _palette->addBasePalette(0x50C03005, 0, 256, 0);
}
- _palette = palette2;
_palette->usePalette();
addEntity(_palette);
@@ -1770,14 +1768,14 @@ void Scene1004::updatePaletteArea() {
if (_klayman->getY() < 150) {
if (_paletteAreaStatus != 0) {
_paletteAreaStatus = 0;
- ((Palette2*)_palette)->addBasePalette(0x406B0D10, 0, 64, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x406B0D10, 0, 64, 0);
+ _palette->startFadeToPalette(12);
}
} else {
if (_paletteAreaStatus != 1) {
_paletteAreaStatus = 1;
- ((Palette2*)_palette)->addBasePalette(0x24332243, 0, 64, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x24332243, 0, 64, 0);
+ _palette->startFadeToPalette(12);
}
}
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 9e198cc..3901f83 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -1154,8 +1154,6 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
_soundResource2(vm), _soundResource3(vm), _soundResource4(vm),
_flag(true), _soundFlag(false), _counter(0), _index(-1) {
- Palette2 *palette2;
-
SetMessageHandler(&Scene1202::handleMessage453C10);
SetUpdateHandler(&Scene1202::update);
@@ -1163,9 +1161,8 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x60210ED5);
- palette2 = new Palette2(_vm, 0x60210ED5);
- palette2->usePalette();
- _palette = palette2;
+ _palette = new Palette(_vm, 0x60210ED5);
+ _palette->usePalette();
addEntity(_palette);
_paletteResource.load(0x60250EB5);
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 5735f24..7c03e9b 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -106,8 +106,6 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
debug("Create Scene1501(%08X, %08X, %d, %d)", backgroundFileHash, soundFileHash, countdown2, countdown3);
- Palette2 *palette2;
-
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
@@ -115,12 +113,11 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
setBackground(backgroundFileHash);
- palette2 = new Palette2(_vm);
- palette2->usePalette();
- _palette = palette2;
+ _palette = new Palette(_vm);
+ _palette->usePalette();
addEntity(_palette);
- palette2->addBasePalette(backgroundFileHash, 0, 256, 0);
- palette2->startFadeToPalette(12);
+ _palette->addBasePalette(backgroundFileHash, 0, 256, 0);
+ _palette->startFadeToPalette(12);
/*
if (soundFileHash != 0) {
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index baa37d0..33e6908 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -210,7 +210,6 @@ uint32 Class606::handleMessage(int messageNum, const MessageParam ¶m, Entity
Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _paletteArea(1) {
- Palette2 *palette2;
Sprite *tempSprite;
setGlobalVar(0xE7498218, 1);
@@ -225,11 +224,10 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x03118226);
- palette2 = new Palette2(_vm, 0x03118226);
- palette2->addBasePalette(0x91D3A391, 0, 64, 0);
- palette2->copyBasePalette(0, 256, 0);
- palette2->usePalette();
- _palette = palette2;
+ _palette = new Palette(_vm, 0x03118226);
+ _palette->addBasePalette(0x91D3A391, 0, 64, 0);
+ _palette->copyBasePalette(0, 256, 0);
+ _palette->usePalette();
addEntity(_palette);
_mouseCursor = addSprite(new Mouse433(_vm, 0x18222039, NULL));
@@ -297,12 +295,12 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1705::update() {
Scene::update();
if (_klayman->getX() < 224 && _paletteArea != 0) {
- ((Palette2*)_palette)->addBasePalette(0xF2210C15, 0, 64, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0xF2210C15, 0, 64, 0);
+ _palette->startFadeToPalette(12);
_paletteArea = 0;
} else if (_klayman->getX() >= 224 && _paletteArea == 0) {
- ((Palette2*)_palette)->addBasePalette(0x91D3A391, 0, 64, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x91D3A391, 0, 64, 0);
+ _palette->startFadeToPalette(12);
_paletteArea = 1;
}
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index b637a39..2219679 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -1112,8 +1112,6 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
_isSolved(false), _leaveScene(false), _isTileMoving(false), _movingTileSprite(NULL), _doneMovingTileSprite(NULL) {
- Palette2 *palette2;
-
// TODO initScene2201Vars();
SetMessageHandler(&Scene2202::handleMessage);
SetUpdateHandler(&Scene2202::update);
@@ -1121,10 +1119,9 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x08100A0C);
- palette2 = new Palette2(_vm, 0x08100A0C);
- _palette = palette2;
+ _palette = new Palette(_vm, 0x08100A0C);
_palette->usePalette();
- addEntity(palette2);
+ addEntity(_palette);
_mouseCursor = addSprite(new Mouse435(_vm, 0x00A08089, 20, 620));
//DEBUG!
@@ -1506,8 +1503,6 @@ uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam &p
Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- Palette2 *palette2;
-
SetMessageHandler(&Scene2205::handleMessage);
SetUpdateHandler(&Scene2205::update);
@@ -1517,26 +1512,24 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
_isLightOn = true;
setBackground(0x0008028D);
- palette2 = new Palette2(_vm, 0x0008028D);
- _palette = palette2;
+ _palette = new Palette(_vm, 0x0008028D);
_palette->usePalette();
- addEntity(palette2);
+ addEntity(_palette);
_mouseCursor = addSprite(new Mouse433(_vm, 0x80289008, NULL));
_ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0);
addSprite(_ssLightSwitch);
} else {
_isLightOn = false;
setBackground(0xD00A028D);
- palette2 = new Palette2(_vm, 0xD00A028D);
- _palette = palette2;
+ _palette = new Palette(_vm, 0xD00A028D);
_palette->usePalette();
- addEntity(palette2);
+ addEntity(_palette);
_mouseCursor = addSprite(new Mouse433(_vm, 0xA0289D08, NULL));
_ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0);
addSprite(_ssLightSwitch);
}
- palette2->addBasePalette(0xD00A028D, 0, 256, 0);
+ _palette->addBasePalette(0xD00A028D, 0, 256, 0);
_ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
@@ -1598,12 +1591,12 @@ void Scene2205::update() {
if (!getGlobalVar(0x4D080E54)) {
if (_isKlaymanInLight && _klayman->getX() > 85) {
- ((Palette2*)_palette)->addBasePalette(0x68033B1C, 0, 65, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x68033B1C, 0, 65, 0);
+ _palette->startFadeToPalette(12);
_isKlaymanInLight = false;
} else if (!_isKlaymanInLight && _klayman->getX() <= 85) {
- ((Palette2*)_palette)->addBasePalette(0xD00A028D, 0, 65, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0xD00A028D, 0, 65, 0);
+ _palette->startFadeToPalette(12);
_isKlaymanInLight = true;
}
}
@@ -1772,7 +1765,6 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource(vm) {
uint32 fileHash;
- Palette2 *palette2;
SetUpdateHandler(&Scene::update);
SetMessageHandler(&Scene2206::handleMessage);
@@ -1817,12 +1809,11 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(fileHash);
- palette2 = new Palette2(_vm, fileHash);
- _palette = palette2;
+ _palette = new Palette(_vm, fileHash);
_palette->usePalette();
- addEntity(palette2);
+ addEntity(_palette);
- palette2->addBasePalette(fileHash, 0, 256, 0);
+ _palette->addBasePalette(fileHash, 0, 256, 0);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x0263D144, 0, 65, 0);
@@ -1904,8 +1895,8 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2206::sub481950() {
if (getGlobalVar(0x4D080E54)) {
- ((Palette2*)_palette)->addBasePalette(0x41983216, 0, 65, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x41983216, 0, 65, 0);
+ _palette->startFadeToPalette(12);
}
setSurfacePriority(_sprite1->getSurface(), 100);
setSurfacePriority(_sprite2->getSurface(), 300);
@@ -1919,8 +1910,8 @@ void Scene2206::sub481950() {
void Scene2206::sub4819D0() {
if (!getGlobalVar(0x4D080E54)) {
- ((Palette2*)_palette)->addBasePalette(0xB103B604, 0, 65, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0xB103B604, 0, 65, 0);
+ _palette->startFadeToPalette(12);
}
setSurfacePriority(_sprite1->getSurface(), 1100);
setSurfacePriority(_sprite2->getSurface(), 1300);
@@ -2713,8 +2704,6 @@ static const uint32 kScene2242MessageListIds1[] = {
Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _isKlaymanInLight(false) {
- Palette2 *palette2;
-
_surfaceFlag = true;
SetMessageHandler(&Scene2242::handleMessage);
SetUpdateHandler(&Scene2242::update);
@@ -2727,11 +2716,10 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B3DC8);
} else {
setBackground(0x25848E24);
- palette2 = new Palette2(_vm, 0x25848E24);
- _palette = palette2;
+ _palette = new Palette(_vm, 0x25848E24);
_palette->usePalette();
- addEntity(palette2);
- ((Palette2*)_palette)->copyBasePalette(0, 256, 0);
+ addEntity(_palette);
+ _palette->copyBasePalette(0, 256, 0);
_palette->addPalette(0x68033B1C, 0, 65, 0);
_mouseCursor = addSprite(new Mouse433(_vm, 0x48E20250, NULL));
setRectList(0x004B3E18);
@@ -2767,12 +2755,12 @@ Scene2242::~Scene2242() {
void Scene2242::update() {
if (!getGlobalVar(0x4D080E54)) {
if (_isKlaymanInLight && _klayman->getX() < 440) {
- ((Palette2*)_palette)->addBasePalette(0x68033B1C, 0, 65, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x68033B1C, 0, 65, 0);
+ _palette->startFadeToPalette(12);
_isKlaymanInLight = false;
} else if (!_isKlaymanInLight && _klayman->getX() >= 440) {
- ((Palette2*)_palette)->addBasePalette(0x25848E24, 0, 65, 0);
- ((Palette2*)_palette)->startFadeToPalette(12);
+ _palette->addBasePalette(0x25848E24, 0, 65, 0);
+ _palette->startFadeToPalette(12);
_isKlaymanInLight = true;
}
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 7c4ed1a..9bcd79a 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1668,8 +1668,6 @@ void AsScene3011Symbol::change(int index, bool flag) {
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _index2(0) {
- Palette2 *palette2;
-
_surfaceFlag = true;
// TODO _vm->gameModule()->initScene3011Vars();
@@ -1677,10 +1675,9 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x92124A04);
- palette2 = new Palette2(_vm, 0xA4070114);
- addEntity(palette2);
- palette2->usePalette();
- _palette = palette2;
+ _palette = new Palette(_vm, 0xA4070114);
+ _palette->usePalette();
+ addEntity(_palette);
_mouseCursor = addSprite(new Mouse435(_vm, 0x24A00929, 20, 620));
@@ -1761,15 +1758,13 @@ uint32 Scene3011::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
void Scene3011::fadeIn() {
- Palette2 *palette2 = (Palette2*)_palette;
- palette2->addBasePalette(0x92124A04, 0, 256, 0);
- palette2->startFadeToPalette(24);
+ _palette->addBasePalette(0x92124A04, 0, 256, 0);
+ _palette->startFadeToPalette(24);
}
void Scene3011::fadeOut() {
- Palette2 *palette2 = (Palette2*)_palette;
- palette2->addBasePalette(0xA4070114, 0, 256, 0);
- palette2->startFadeToPalette(24);
+ _palette->addBasePalette(0xA4070114, 0, 256, 0);
+ _palette->startFadeToPalette(24);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index a060a41..481e0e5 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -29,32 +29,28 @@ namespace Neverhood {
// Palette
Palette::Palette(NeverhoodEngine *vm) : Entity(vm, 0) {
- _status = 0;
- _palette = new byte[1024];
+ init();
memset(_palette, 0, 1024);
SetUpdateHandler(&Palette::update);
}
Palette::Palette(NeverhoodEngine *vm, byte *palette) : Entity(vm, 0) {
- _status = 0;
- _palette = new byte[1024];
+ init();
memcpy(_palette, palette, 1024);
SetUpdateHandler(&Palette::update);
}
Palette::Palette(NeverhoodEngine *vm, const char *filename) : Entity(vm, 0) {
PaletteResource paletteResource(_vm);
- _status = 0;
- _palette = new byte[1024];
- // TODO: paletteResource.load(calcHash(filename));
- // paletteResource.copyPalette(_palette);
+ init();
+ paletteResource.load(calcHash(filename));
+ paletteResource.copyPalette(_palette);
SetUpdateHandler(&Palette::update);
}
Palette::Palette(NeverhoodEngine *vm, uint32 fileHash) : Entity(vm, 0) {
PaletteResource paletteResource(_vm);
- _status = 0;
- _palette = new byte[1024];
+ init();
paletteResource.load(fileHash);
paletteResource.copyPalette(_palette);
SetUpdateHandler(&Palette::update);
@@ -63,6 +59,13 @@ Palette::Palette(NeverhoodEngine *vm, uint32 fileHash) : Entity(vm, 0) {
Palette::~Palette() {
_vm->_screen->unsetPaletteData(_palette);
delete[] _palette;
+ delete[] _basePalette;
+}
+
+void Palette::init() {
+ _status = 0;
+ _palette = new byte[1024];
+ _basePalette = new byte[1024];
}
void Palette::usePalette() {
@@ -82,6 +85,14 @@ void Palette::addPalette(uint32 fileHash, int toIndex, int count, int fromIndex)
_vm->_screen->testPalette(_palette);
}
+void Palette::addBasePalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
+ PaletteResource paletteResource(_vm);
+ if (toIndex + count > 256)
+ count = 256 - toIndex;
+ paletteResource.load(fileHash);
+ memcpy(_basePalette + toIndex * 4, paletteResource.palette() + fromIndex * 4, count * 4);
+}
+
void Palette::copyPalette(const byte *palette, int toIndex, int count, int fromIndex) {
if (toIndex + count > 256)
count = 256 - toIndex;
@@ -89,8 +100,14 @@ void Palette::copyPalette(const byte *palette, int toIndex, int count, int fromI
_vm->_screen->testPalette(_palette);
}
+void Palette::copyBasePalette(int toIndex, int count, int fromIndex) {
+ if (toIndex + count > 256)
+ count = 256 - toIndex;
+ memcpy(_basePalette + toIndex * 4, _palette + fromIndex * 4, count * 4);
+}
+
void Palette::startFadeToBlack(int counter) {
- debug("Palette::startFadeToBlack(%d)", counter);
+ debug(2, "Palette::startFadeToBlack(%d)", counter);
if (counter == 0)
counter = 1;
_fadeToR = 0;
@@ -102,7 +119,7 @@ void Palette::startFadeToBlack(int counter) {
}
void Palette::startFadeToWhite(int counter) {
- debug("Palette::startFadeToWhite(%d)", counter);
+ debug(2, "Palette::startFadeToWhite(%d)", counter);
if (counter == 0)
counter = 1;
_fadeToR = 255;
@@ -113,6 +130,15 @@ void Palette::startFadeToWhite(int counter) {
_status = 1;
}
+void Palette::startFadeToPalette(int counter) {
+ debug(2, "Palette::startFadeToPalette(%d)", counter);
+ if (counter == 0)
+ counter = 1;
+ _palCounter = counter;
+ _fadeStep = 255 / counter;
+ _status = 2;
+}
+
void Palette::update() {
debug(2, "Palette::update() _status = %d", _status);
if (_status == 1) {
@@ -126,39 +152,6 @@ void Palette::update() {
memset(_palette, 0, 1024);
_status = 0;
}
- }
-}
-
-void Palette::fadeColor(byte *rgb, byte toR, byte toG, byte toB) {
- #define FADE(color, toColor) color += _fadeStep < toColor - color ? _fadeStep : (-_fadeStep <= toColor - color ? toColor - color : -_fadeStep)
- FADE(rgb[0], toR);
- FADE(rgb[1], toG);
- FADE(rgb[2], toB);
- #undef FADE
-}
-
-// Palette2
-
-Palette2::Palette2(NeverhoodEngine *vm)
- : Palette(vm) {
- _basePalette = new byte[1024];
- SetUpdateHandler(&Palette2::update);
-}
-
-Palette2::Palette2(NeverhoodEngine *vm, uint32 fileHash)
- : Palette(vm, fileHash) {
- _basePalette = new byte[1024];
- SetUpdateHandler(&Palette2::update);
-}
-
-Palette2::~Palette2() {
- delete _basePalette;
-}
-
-void Palette2::update() {
- debug("Palette2::update() _status = %d", _status);
- if (_status == 1) {
- Palette::update();
} else if (_status == 2) {
if (_palCounter > 1) {
for (int i = 0; i < 256; i++) {
@@ -173,27 +166,12 @@ void Palette2::update() {
}
}
-void Palette2::copyBasePalette(int toIndex, int count, int fromIndex) {
- if (toIndex + count > 256)
- count = 256 - toIndex;
- memcpy(_basePalette + toIndex * 4, _palette + fromIndex * 4, count * 4);
-}
-
-void Palette2::addBasePalette(uint32 fileHash, int toIndex, int count, int fromIndex) {
- PaletteResource paletteResource(_vm);
- if (toIndex + count > 256)
- count = 256 - toIndex;
- paletteResource.load(fileHash);
- memcpy(_basePalette + toIndex * 4, paletteResource.palette() + fromIndex * 4, count * 4);
-}
-
-void Palette2::startFadeToPalette(int counter) {
- debug("Palette2::startFadeToPalette(%d)", counter);
- if (counter == 0)
- counter = 1;
- _palCounter = counter;
- _fadeStep = 255 / counter;
- _status = 2;
+void Palette::fadeColor(byte *rgb, byte toR, byte toG, byte toB) {
+ #define FADE(color, toColor) color += _fadeStep < toColor - color ? _fadeStep : (-_fadeStep <= toColor - color ? toColor - color : -_fadeStep)
+ FADE(rgb[0], toR);
+ FADE(rgb[1], toG);
+ FADE(rgb[2], toB);
+ #undef FADE
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 9d2a7bc..7966013 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -39,15 +39,20 @@ public:
// Create from resource with fileHash
Palette(NeverhoodEngine *vm, uint32 fileHash);
virtual ~Palette();
+ void init();
void usePalette();
void addPalette(const char *filename, int toIndex, int count, int fromIndex);
void addPalette(uint32 fileHash, int toIndex, int count, int fromIndex);
+ void addBasePalette(uint32 fileHash, int toIndex, int count, int fromIndex);
void copyPalette(const byte *palette, int toIndex, int count, int fromIndex);
+ void copyBasePalette(int toIndex, int count, int fromIndex);
void startFadeToBlack(int counter);
void startFadeToWhite(int counter);
+ void startFadeToPalette(int counter);
protected:
int _status;
byte *_palette;
+ byte *_basePalette;
int _palCounter;
byte _fadeToR, _fadeToG, _fadeToB;
int _fadeStep;
@@ -55,20 +60,6 @@ protected:
void fadeColor(byte *rgb, byte toR, byte toG, byte toB);
};
-class Palette2 : public Palette {
-public:
- Palette2(NeverhoodEngine *vm);
- // TODO: Other ctors
- Palette2(NeverhoodEngine *vm, uint32 fileHash);
- virtual ~Palette2();
- void copyBasePalette(int toIndex, int count, int fromIndex);
- void addBasePalette(uint32 fileHash, int toIndex, int count, int fromIndex);
- void startFadeToPalette(int counter);
-public:
- byte *_basePalette;
- void update();
-};
-
} // End of namespace Neverhood
#endif /* NEVERHOOD_PALETTE_H */
Commit: 0ec039c5b05d03d470ae120e008c1577279ff6ed
https://github.com/scummvm/scummvm/commit/0ec039c5b05d03d470ae120e008c1577279ff6ed
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Merge the three mouse classes into Mouse, introduce insertMouse433 etc. methods and use them
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/mouse.cpp
engines/neverhood/mouse.h
engines/neverhood/navigationscene.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 3eeef92..d0d7ec2 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -391,8 +391,8 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_class650 = new DiskplayerSlot(_vm, this, 20, 0);
addEntity(_class650);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x000408A8, 20, 620));
- _mouseCursor->getSurface()->setVisible(false);
+ insertMouse435(0x000408A8, 20, 620);
+ showMouse(false);
_smackerPlayer = new SmackerPlayer(_vm, this, 0x08288103, false, true);
addEntity(_smackerPlayer);
@@ -457,7 +457,7 @@ void DiskplayerScene::update() {
}
_diskIndex = 0;
stop();
- _mouseCursor->getSurface()->setVisible(true);
+ showMouse(true);
_flag3 = false;
}
}
@@ -480,7 +480,7 @@ void DiskplayerScene::update() {
_playButton->press();
_tuneInCountdown = 2;
} else {
- _mouseCursor->getSurface()->setVisible(true);
+ showMouse(true);
_diskSlots[_diskIndex]->activate();
}
}
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index cf21536..4539b37 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -348,7 +348,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x4086520E);
_palette = new Palette(_vm, 0x4086520E);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x6520A400, NULL));
+ insertMouse433(0x6520A400);
if (which < 0) {
setRectList(0x004B49F0);
@@ -1421,7 +1421,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.field2 = 0;
}
- _mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL));
+ insertMouse433(0x23303124);
tempSprite = insertStaticSprite(0xB3242310, 825);
tempClipRect.x1 = tempSprite->getSurface()->getDrawRect().x;
@@ -1631,7 +1631,7 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF
setBackground(backgroundFileHash);
_palette = new Palette(_vm, backgroundFileHash);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse435(_vm, cursorFileHash, 20, 620));
+ insertMouse435(cursorFileHash, 20, 620);
}
uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1701,7 +1701,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse433(_vm, 0x03001504, NULL));
+ insertMouse433(0x03001504);
if (which < 0) {
setRectList(0x004B7C70);
@@ -1794,14 +1794,14 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0x2800E011);
_palette->usePalette();
insertStaticSprite(0x492D5AD7, 100);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x0E015288, 20, 620));
+ insertMouse435(0x0E015288, 20, 620);
} else {
setBackground(0x8870A546);
_palette = new Palette(_vm, 0x8870A546);
_palette->usePalette();
insertStaticSprite(0x40D1E0A9, 100);
insertStaticSprite(0x149C00A6, 100);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x0A54288F, 20, 620));
+ insertMouse435(0x0A54288F, 20, 620);
}
drawTextToBackground();
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 3901f83..c050abc 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -783,7 +783,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
}
}
- _mouseCursor = addSprite(new Mouse433(_vm, 0x9A2C0409, NULL));
+ insertMouse433(0x9A2C0409);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 3, 1100, 243, 340, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
@@ -1168,7 +1168,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
_paletteResource.load(0x60250EB5);
_paletteResource.copyPalette(_paletteData);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x10ED160A, 20, 620));
+ insertMouse435(0x10ED160A, 20, 620);
for (int i = 0; i < 18; i++) {
_asTntItems[i] = addSprite(new AsScene1202TntItem(_vm, this, i));
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 189ee2c..af2390c 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -581,7 +581,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x420643C4);
_palette = new Palette(_vm, 0x420643C4);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x643C0428, NULL));
+ insertMouse433(0x643C0428);
_class595 = addSprite(new Class595(_vm, this));
_sprite1 = insertStaticSprite(0x942FC224, 300);
@@ -806,7 +806,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x01581A9C);
_palette = new Palette(_vm, 0x01581A9C);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x81A9801D, NULL));
+ insertMouse433(0x81A9801D);
if (!getGlobalVar(0xAC00C0D0)) {
_asBalloon = addSprite(new AsScene1303Balloon(_vm, this));
@@ -878,7 +878,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x062C0214);
_palette = new Palette(_vm, 0x062C0214);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0xC021006A, NULL));
+ insertMouse433(0xC021006A);
if (getGlobalVar(0xAC00C0D0)) {
_class545 = addSprite(new Class545(_vm, this, 0, 1100, 278, 347));
@@ -949,7 +949,7 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x28801B64);
_palette = new Palette(_vm, 0x28801B64);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x01B60280, NULL));
+ insertMouse433(0x01B60280);
if (which < 0) {
InsertKlayman(KmScene1305, 212, 441);
@@ -1065,7 +1065,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x05303114);
_palette = new Palette(_vm, 0x05303114);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x0311005B, NULL));
+ insertMouse433(0x0311005B);
if (!getGlobalVar(0x13382860)) {
_class545 = addSprite(new Class545(_vm, this, 2, 1100, 435, 445));
@@ -1472,7 +1472,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0xA8006200);
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x06204A88, 20, 620));
+ insertMouse435(0x06204A88, 20, 620);
tempSprite = insertStaticSprite(0x00A3621C, 800);
_clipRects[0].x1 = tempSprite->getSurface()->getDrawRect().x;
@@ -1790,7 +1790,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x41024202);
_palette = new Palette(_vm, 0x41024202);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x24206418, NULL));
+ insertMouse433(0x24206418);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 17, 1100, 502, 445, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
@@ -1978,8 +1978,8 @@ Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1317::handleMessage);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false));
- _mouseCursor = addSprite(new Mouse433(_vm, 0x08284011, NULL));
- _mouseCursor->getSurface()->setVisible(false);
+ insertMouse433(0x08284011);
+ showMouse(false);
_smackerFileHash = 0;
_smackerFlag1 = false;
}
@@ -2086,7 +2086,7 @@ uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *
}
void Scene1317::stChooseKing() {
- _mouseCursor->getSurface()->setVisible(true);
+ showMouse(true);
SetMessageHandler(&Scene1317::hmChooseKing);
SetUpdateHandler(&Scene1317::upChooseKing);
_smackerFileHash = 0x10982841;
@@ -2097,7 +2097,7 @@ void Scene1317::stChooseKing() {
}
void Scene1317::stNoDecisionYet() {
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
SetMessageHandler(&Scene1317::hmNoDecisionYet);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x20982841;
@@ -2105,7 +2105,7 @@ void Scene1317::stNoDecisionYet() {
}
void Scene1317::stHoborgAsKing() {
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
SetMessageHandler(&Scene1317::hmHoborgAsKing);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x40982841;
@@ -2113,7 +2113,7 @@ void Scene1317::stHoborgAsKing() {
}
void Scene1317::stKlaymanAsKing() {
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
SetMessageHandler(&Scene1317::hmKlaymanAsKing);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x80982841;
@@ -2121,7 +2121,7 @@ void Scene1317::stKlaymanAsKing() {
}
void Scene1317::stEndMovie() {
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
SetMessageHandler(&Scene1317::hmEndMovie);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x40800711;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 7f55272..d59cbd8 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -727,7 +727,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x08221FA5);
_palette = new Palette(_vm, 0x08221FA5);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x21FA108A, NULL));
+ insertMouse433(0x21FA108A);
// TODO _class427 = addSprite(new Class427(_vm, this, 0x980F3124, 0x12192892, 100, 0));
_class525 = addSprite(new Class525(_vm));
@@ -949,7 +949,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0x231482F0);
_palette->addPalette(0x91D3A391, 0, 64, 0);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x482F4239, NULL));
+ insertMouse433(0x482F4239);
_class454_1 = addSprite(new Class454(_vm, 0x15402D64, 1100));
_class454_2 = addSprite(new Class454(_vm, 0x10A02120, 1100));
@@ -976,7 +976,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 1));
clearRectList();
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
sub428220();
} else {
_class482 = addSprite(new Class482(_vm, this, 0));
@@ -1056,7 +1056,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else {
clearRectList();
_klayman->getSurface()->setVisible(false);
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
sendMessage(_class482, 0x2002, 0);
sub428220();
}
@@ -1071,7 +1071,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2000:
sub428230();
- _mouseCursor->getSurface()->setVisible(true);
+ showMouse(true);
setRectList(0x004B0C48);
break;
case 0x2001:
@@ -1351,7 +1351,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x00442225);
_palette = new Palette(_vm, 0x00442225);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse435(_vm, 0x4222100C, 20, 620));
+ insertMouse435(0x4222100C, 20, 620);
_asMouse = addSprite(new AsScene1407Mouse(_vm, this));
_ssResetButton = insertStaticSprite(0x12006600, 100);
@@ -1397,7 +1397,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// The mouse got the cheese (nomnom)
setGlobalVar(0x70A1189C, 1);
_soundResource.play(0x68E25540);
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
_puzzleSolvedCountdown = 72;
break;
}
@@ -1417,7 +1417,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x2110A234);
_palette = new Palette(_vm, 0x2110A234);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x0A230219, NULL));
+ insertMouse433(0x0A230219);
_class401_1 = insertStaticSprite(0x01102A33, 100);
_class401_1->getSurface()->setVisible(false);
@@ -1541,7 +1541,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0xAC0B006F);
_palette->addPalette(0x00801510, 0, 65, 0);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0xB006BAC8, NULL));
+ insertMouse433(0xB006BAC8);
if (getGlobalVar(0x13382860) == 5) {
_class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
@@ -1755,7 +1755,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x0C0C007D);
_palette = new Palette(_vm, 0x0C0C007D);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse435(_vm, 0xC00790C8, 20, 620));
+ insertMouse435(0xC00790C8, 20, 620);
// TODO: Some debug code: Leave two matching tiles open
for (int i = 0; i < 48; i++)
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 33e6908..2b0f25d 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -230,7 +230,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse433(_vm, 0x18222039, NULL));
+ insertMouse433(0x18222039);
addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0));
addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1));
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index bedc9d4..cf7256b 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -125,7 +125,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xA6417244);
_palette = new Palette(_vm, 0xA6417244);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x17240A6C, NULL));
+ insertMouse433(0x17240A6C);
_class401 = insertStaticSprite(0x0D641724, 1100);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 2219679..3bc3797 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -738,7 +738,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x40008208);
_palette = new Palette(_vm, 0x40008208);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x0820C408, NULL));
+ insertMouse433(0x0820C408);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 7, 1100, 459, 432, 0x9148A011));
_vm->_collisionMan->addSprite(_asTape);
@@ -1122,7 +1122,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0x08100A0C);
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x00A08089, 20, 620));
+ insertMouse435(0x00A08089, 20, 620);
//DEBUG!
for (uint32 index = 0; index < 9; index++)
@@ -1351,7 +1351,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x82C80334);
_palette = new Palette(_vm, 0x82C80334);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x80330824, NULL));
+ insertMouse433(0x80330824);
_vm->_collisionMan->setHitRects(0x004B8320);
@@ -1515,7 +1515,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0x0008028D);
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse433(_vm, 0x80289008, NULL));
+ insertMouse433(0x80289008);
_ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0);
addSprite(_ssLightSwitch);
} else {
@@ -1524,7 +1524,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_palette = new Palette(_vm, 0xD00A028D);
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse433(_vm, 0xA0289D08, NULL));
+ insertMouse433(0xA0289D08);
_ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0);
addSprite(_ssLightSwitch);
}
@@ -1571,16 +1571,14 @@ void Scene2205::update() {
_background->load(0x0008028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0x2D309030);
sendMessage(_ssDoorFrame, 0x2000, 0);
- ((Mouse433*)_mouseCursor)->load(0x80289008);
- ((Mouse433*)_mouseCursor)->updateCursor();
+ changeMouseCursor(0x80289008);
_isLightOn = true;
} else if (_isLightOn && !getGlobalVar(0x4D080E54)) {
_palette->addPalette(0xD00A028D, 0, 256, 0);
_background->load(0xD00A028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84);
sendMessage(_ssDoorFrame, 0x2000, 0);
- ((Mouse433*)_mouseCursor)->load(0xA0289D08);
- ((Mouse433*)_mouseCursor)->updateCursor();
+ changeMouseCursor(0xA0289D08);
_isKlaymanInLight = true;
if (_klayman->getX() > 85) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
@@ -1782,7 +1780,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite4->getSurface()->getClipRect().y2 = 480;
setRectList(0x004B8AF8);
_sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x0E038022, 100, 0));
- _mouseCursor = addSprite(new Mouse433(_vm, 0x83212411, NULL));
+ insertMouse433(0x83212411);
_class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x5E00E262));
_class604 = addSprite(new Class604(_vm, 0x085E25E0));
} else {
@@ -1797,7 +1795,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite4->getSurface()->getClipRect().y2 = 480;
setRectList(0x004B8B58);
_sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x16882608, 100, 0));
- _mouseCursor = addSprite(new Mouse433(_vm, 0x02A41E09, NULL));
+ insertMouse433(0x02A41E09);
_class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x52032563));
_class604 = addSprite(new Class604(_vm, 0x317831A0));
}
@@ -2296,7 +2294,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x88C00241);
_palette = new Palette(_vm, 0x88C00241);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x00245884, NULL));
+ insertMouse433(0x00245884);
_ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
@@ -2338,7 +2336,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x05C02A55);
_palette = new Palette(_vm, 0x05C02A55);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x02A51054, NULL));
+ insertMouse433(0x02A51054);
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
@@ -2537,7 +2535,7 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
addEntity(_palette); // Why?
- _mouseCursor = addSprite(new Mouse435(_vm, 0x0028D089, 40, 600));
+ insertMouse435(0x0028D089, 40, 600);
createFontSurface();
@@ -2712,7 +2710,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x11840E24);
_palette = new Palette(_vm, 0x11840E24);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x40E20110, NULL));
+ insertMouse433(0x40E20110);
setRectList(0x004B3DC8);
} else {
setBackground(0x25848E24);
@@ -2721,7 +2719,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
_palette->copyBasePalette(0, 256, 0);
_palette->addPalette(0x68033B1C, 0, 65, 0);
- _mouseCursor = addSprite(new Mouse433(_vm, 0x48E20250, NULL));
+ insertMouse433(0x48E20250);
setRectList(0x004B3E18);
}
@@ -2850,13 +2848,13 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
setBackground(_sceneInfo140->bgFilename2);
_palette = new Palette(_vm, _sceneInfo140->bgFilename2);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL));
+ insertMouse433(0x14320138);
} else {
setRectList(0x004B2BB8);
setBackground(_sceneInfo140->bgFilename1);
_palette = new Palette(_vm, _sceneInfo140->bgFilename1);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x63A40028, NULL));
+ insertMouse433(0x63A40028);
}
if (which < 0) {
@@ -2947,13 +2945,13 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x40339414);
_palette = new Palette(_vm, 0x40339414);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x3941040B, NULL));
+ insertMouse433(0x3941040B);
} else {
setRectList(0x004B55C8);
setBackground(0x071963E5);
_palette = new Palette(_vm, 0x071963E5);
_palette->usePalette();
- _mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL));
+ insertMouse433(0x14320138);
}
if (which < 0) {
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 9bcd79a..c28d0eb 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -924,7 +924,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xD000420C);
_palette = new Palette(_vm, 0xD000420C);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x04208D08, 20, 620));
+ insertMouse435(0x04208D08, 20, 620);
_ssFireCannonButton = addSprite(new SsScene3009FireCannonButton(_vm, this));
_vm->_collisionMan->addSprite(_ssFireCannonButton);
@@ -1438,7 +1438,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which == 0) {
- _mouseCursor = addSprite(new Mouse435(_vm, 0x02622800, 20, 620));
+ insertMouse435(0x02622800, 20, 620);
}
_soundResource.load(0x68E25540);
@@ -1475,7 +1475,7 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO: Debug stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && _countdown == 0 && !_checkUnlocked) {
if (!_boltUnlocking[0] && !_boltUnlocking[1] && !_boltUnlocking[2]) {
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
if (!_boltUnlocked[0] && !_boltUnlocked[1] && !_boltUnlocked[2]) {
_countdown = 1;
} else {
@@ -1679,7 +1679,7 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->usePalette();
addEntity(_palette);
- _mouseCursor = addSprite(new Mouse435(_vm, 0x24A00929, 20, 620));
+ insertMouse435(0x24A00929, 20, 620);
for (int i = 0; i < 12; i++) {
_asSymbols[i] = new AsScene3011Symbol(_vm, i, true);
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 1eaf0cb..03b1478 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -26,146 +26,66 @@ namespace Neverhood {
// TODO: Use CursorMan
-Mouse433::Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect)
- : StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0) {
+Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect)
+ : StaticSprite(vm, 2000), _mouseType(kMouseType433),
+ _mouseCursorResource(vm), _frameNum(0) {
- debug(7, "Mouse433::Mouse433(%08X)", fileHash);
-
- if (mouseRect) {
- _mouseRect = *mouseRect;
- } else {
- _mouseRect.x1 = -1;
- _mouseRect.y1 = -1;
- _mouseRect.x2 = -1;
- _mouseRect.y2 = -1;
- }
- _mouseCursorResource.load(fileHash);
- _x = _vm->getMouseX();
- _y = _vm->getMouseY();
+ _mouseRect = mouseRect;
+ init(fileHash);
if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 &&
_y >= _mouseRect.y1 && _y <= _mouseRect.y2) {
_mouseCursorResource.setCursorNum(1);
} else {
_mouseCursorResource.setCursorNum(4);
}
- createSurface(2000, 32, 32);
- SetUpdateHandler(&Mouse433::update);
- SetMessageHandler(&Mouse433::handleMessage);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = 32;
- _drawRect.height = 32;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = 32;
- _deltaRect.height = 32;
- processDelta();
- _needRefresh = true;
updateCursor();
}
-void Mouse433::load(uint32 fileHash) {
- _mouseCursorResource.load(fileHash);
- _needRefresh = true;
-}
-
-void Mouse433::update() {
- debug(7, "Mouse433::update()");
- updateCursor();
- _frameNum++;
- if (_frameNum >= 6)
- _frameNum = 0;
- _needRefresh = _frameNum % 2 == 0;
-}
-
-uint32 Mouse433::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug(7, "Mouse433::handleMessage(%04X)", messageNum);
- uint32 messageResult = 0;
- if (messageNum != 5) {
- messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4002:
- _x = param.asPoint().x;
- _y = param.asPoint().y;
- if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 &&
- _y >= _mouseRect.y1 && _y <= _mouseRect.y2) {
- _mouseCursorResource.setCursorNum(1);
- } else {
- _mouseCursorResource.setCursorNum(4);
- }
- processDelta();
- break;
- }
- } else {
- // TODO: Debug stuff
- }
- return messageResult;
-}
-
-void Mouse433::updateCursor() {
- debug(7, "Mouse433::updateCursor()");
+Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
+ : StaticSprite(vm, 2000), _mouseType(kMouseType435),
+ _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {
- if (!_surface)
- return;
-
- if (_doDeltaX) {
- _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
- } else {
- _surface->getDrawRect().x = filterX(_x + _drawRect.x);
- }
-
- if (_doDeltaY) {
- _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
+ init(fileHash);
+ if (_x <= _x1) {
+ _mouseCursorResource.setCursorNum(6);
+ } else if (_x >= _x2) {
+ _mouseCursorResource.setCursorNum(5);
} else {
- _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ _mouseCursorResource.setCursorNum(4);
}
+ updateCursor();
+}
- if (_needRefresh) {
- _needRefresh = false;
- _drawRect = _mouseCursorResource.getRect();
- _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
- }
+Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int type)
+ : StaticSprite(vm, 2000), _mouseType(kMouseTypeNavigation),
+ _mouseCursorResource(vm), _type(type), _frameNum(0) {
+ init(fileHash);
+ _mouseCursorResource.setCursorNum(0);
}
-Mouse435::Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
- : StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {
-
- debug(7, "Mouse435::Mouse435(%08X)", fileHash);
-
+void Mouse::init(uint32 fileHash) {
_mouseCursorResource.load(fileHash);
_x = _vm->getMouseX();
- _y = _vm->getMouseY();
- if (_x <= _x1) {
- _mouseCursorResource.setCursorNum(6);
- } else if (_x >= _x2) {
- _mouseCursorResource.setCursorNum(5);
- } else {
- _mouseCursorResource.setCursorNum(4);
- }
+ _y = _vm->getMouseY();
createSurface(2000, 32, 32);
- SetUpdateHandler(&Mouse435::update);
- SetMessageHandler(&Mouse435::handleMessage);
+ SetUpdateHandler(&Mouse::update);
+ SetMessageHandler(&Mouse::handleMessage);
_drawRect.x = 0;
_drawRect.y = 0;
_drawRect.width = 32;
_drawRect.height = 32;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = 32;
- _deltaRect.height = 32;
+ _deltaRect = _drawRect;
processDelta();
_needRefresh = true;
- updateCursor();
}
-void Mouse435::load(uint32 fileHash) {
+void Mouse::load(uint32 fileHash) {
_mouseCursorResource.load(fileHash);
_needRefresh = true;
}
-void Mouse435::update() {
- debug(7, "Mouse435::update()");
+void Mouse::update() {
updateCursor();
_frameNum++;
if (_frameNum >= 6)
@@ -173,22 +93,61 @@ void Mouse435::update() {
_needRefresh = _frameNum % 2 == 0;
}
-uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug(7, "Mouse435::handleMessage(%04X)", messageNum);
+uint32 Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug(7, "Mouse::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
if (messageNum != 5) {
messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
- case 0x4002:
+ case 0x2064:
_x = param.asPoint().x;
_y = param.asPoint().y;
- if (_x <= _x1) {
- _mouseCursorResource.setCursorNum(6);
- } else if (_x >= _x2) {
- _mouseCursorResource.setCursorNum(5);
- } else {
- _mouseCursorResource.setCursorNum(4);
+ switch (_type) {
+ case 1:
+ if (_x >= 320)
+ messageResult = 1;
+ else
+ messageResult = 0;
+ break;
+ case 2:
+ default:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else
+ messageResult = 2;
+ break;
+ case 3:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else
+ messageResult = 4;
+ break;
+ case 4:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else if (_y >= 150)
+ messageResult = 2;
+ else
+ messageResult = 3;
+ break;
+ case 5:
+ if (_y >= 240)
+ messageResult = 4;
+ else
+ messageResult = 3;
+ break;
}
+ break;
+ case 0x4002:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ updateCursorNum();
processDelta();
break;
}
@@ -198,8 +157,7 @@ uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Mouse435::updateCursor() {
- debug(7, "Mouse435::updateCursor()");
+void Mouse::updateCursor() {
if (!_surface)
return;
@@ -224,91 +182,26 @@ void Mouse435::updateCursor() {
}
-// NavigationMouse
-
-NavigationMouse::NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type)
- : StaticSprite(vm, 2000), _mouseCursorResource(vm), _type(type), _frameNum(0) {
-
- _mouseCursorResource.load(fileHash);
- _mouseCursorResource.setCursorNum(0);
- _x = _vm->getMouseX();
- _y = _vm->getMouseY();
- createSurface(2000, 32, 32);
- SetUpdateHandler(&NavigationMouse::update);
- SetMessageHandler(&NavigationMouse::handleMessage);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = 32;
- _drawRect.height = 32;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = 32;
- _deltaRect.height = 32;
- processDelta();
- _needRefresh = true;
- updateCursor();
-}
-
-void NavigationMouse::update() {
- updateCursor();
- _frameNum++;
- if (_frameNum >= 6)
- _frameNum = 0;
- _needRefresh = _frameNum % 2 == 0;
-}
-
-uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("NavigationMouse: _type = %d", _type);
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2064:
- _x = param.asPoint().x;
- _y = param.asPoint().y;
- switch (_type) {
- case 1:
- if (_x >= 320)
- messageResult = 1;
- else
- messageResult = 0;
- break;
- case 2:
- default:
- if (_x < 100)
- messageResult = 0;
- else if (_x > 540)
- messageResult = 1;
- else
- messageResult = 2;
- break;
- case 3:
- if (_x < 100)
- messageResult = 0;
- else if (_x > 540)
- messageResult = 1;
- else
- messageResult = 4;
- break;
- case 4:
- if (_x < 100)
- messageResult = 0;
- else if (_x > 540)
- messageResult = 1;
- else if (_y >= 150)
- messageResult = 2;
- else
- messageResult = 3;
- break;
- case 5:
- if (_y >= 240)
- messageResult = 4;
- else
- messageResult = 3;
- break;
+void Mouse::updateCursorNum() {
+ switch (_mouseType) {
+ case kMouseType433:
+ if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 &&
+ _y >= _mouseRect.y1 && _y <= _mouseRect.y2) {
+ _mouseCursorResource.setCursorNum(1);
+ } else {
+ _mouseCursorResource.setCursorNum(4);
}
break;
- case 0x4002:
- _x = param.asPoint().x;
- _y = param.asPoint().y;
+ case kMouseType435:
+ if (_x <= _x1) {
+ _mouseCursorResource.setCursorNum(6);
+ } else if (_x >= _x2) {
+ _mouseCursorResource.setCursorNum(5);
+ } else {
+ _mouseCursorResource.setCursorNum(4);
+ }
+ break;
+ case kMouseTypeNavigation:
switch (_type) {
case 1:
if (_x >= 320)
@@ -348,36 +241,9 @@ uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m,
_mouseCursorResource.setCursorNum(3);
break;
}
- _needRefresh = true;
- processDelta();
break;
}
- return messageResult;
-}
-
-void NavigationMouse::updateCursor() {
-
- if (!_surface)
- return;
-
- if (_doDeltaX) {
- _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
- } else {
- _surface->getDrawRect().x = filterX(_x + _drawRect.x);
- }
-
- if (_doDeltaY) {
- _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
- } else {
- _surface->getDrawRect().y = filterY(_y + _drawRect.y);
- }
-
- if (_needRefresh) {
- _needRefresh = false;
- _drawRect = _mouseCursorResource.getRect();
- _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
- }
-
+
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index 65dcb27..0b4f6b8 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -30,43 +30,30 @@
namespace Neverhood {
-class Mouse433 : public StaticSprite {
-public:
- Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect);
- void load(uint32 fileHash);
- void updateCursor();
-protected:
- MouseCursorResource _mouseCursorResource;
- int _frameNum;
- NRect _mouseRect;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+enum MouseType {
+ kMouseType433,
+ kMouseType435,
+ kMouseTypeNavigation
};
-class Mouse435 : public StaticSprite {
+class Mouse : public StaticSprite {
public:
- Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2);
+ Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect);
+ Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2);
+ Mouse(NeverhoodEngine *vm, uint32 fileHash, int _type);
void load(uint32 fileHash);
void updateCursor();
protected:
+ MouseType _mouseType;
MouseCursorResource _mouseCursorResource;
int _frameNum;
+ NRect _mouseRect;
int16 _x1;
int16 _x2;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class NavigationMouse : public StaticSprite {
-public:
- NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type);
- void load(uint32 fileHash);
- void updateCursor();
-protected:
- MouseCursorResource _mouseCursorResource;
- int _frameNum;
int _type;
+ void init(uint32 fileHash);
void update();
+ void updateCursorNum();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 6b36571..7a3161c 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -73,7 +73,7 @@ int NavigationScene::getNavigationAreaType() {
void NavigationScene::update() {
if (_smackerFileHash != 0) {
- _mouseCursor->getSurface()->setVisible(false);
+ showMouse(false);
_smackerPlayer->open(_smackerFileHash, false);
_vm->_screen->clear();
_smackerDone = false;
@@ -84,7 +84,7 @@ void NavigationScene::update() {
} else {
const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
createMouseCursor();
- _mouseCursor->getSurface()->setVisible(true);
+ showMouse(true);
_soundFlag2 = false;
_soundFlag1 = false;
_interactive = true;
@@ -127,7 +127,7 @@ void NavigationScene::createMouseCursor() {
int areaType;
if (_mouseCursor) {
- deleteSprite(&_mouseCursor);
+ deleteSprite((Sprite**)&_mouseCursor);
}
mouseCursorFileHash = navigationItem.mouseCursorFileHash;
@@ -143,7 +143,7 @@ void NavigationScene::createMouseCursor() {
areaType = 1;
}
- _mouseCursor = addSprite(new NavigationMouse(_vm, mouseCursorFileHash, areaType));
+ insertNavigationMouse(mouseCursorFileHash, areaType);
sendPointMessage(_mouseCursor, 0x4002, _vm->getMousePos());
}
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index c6f9f12..5072d53 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -190,6 +190,33 @@ Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
}
+void Scene::insertMouse433(uint32 fileHash, NRect *mouseRect) {
+ NRect rect(-1, -1, -1, -1);
+ if (mouseRect)
+ rect = *mouseRect;
+ _mouseCursor = new Mouse(_vm, 0x0820C408, rect);
+ addSprite(_mouseCursor);
+}
+
+void Scene::insertMouse435(uint32 fileHash, int16 x1, int16 x2) {
+ _mouseCursor = new Mouse(_vm, fileHash, x1, x2);
+ addSprite(_mouseCursor);
+}
+
+void Scene::insertNavigationMouse(uint32 fileHash, int type) {
+ _mouseCursor = new Mouse(_vm, fileHash, type);
+ addSprite(_mouseCursor);
+}
+
+void Scene::showMouse(bool visible) {
+ _mouseCursor->getSurface()->setVisible(visible);
+}
+
+void Scene::changeMouseCursor(uint32 fileHash) {
+ _mouseCursor->load(fileHash);
+ _mouseCursor->updateCursor();
+}
+
SmackerPlayer *Scene::addSmackerPlayer(SmackerPlayer *smackerPlayer) {
addEntity(smackerPlayer);
addSurface(smackerPlayer->getSurface());
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 9b928bb..31dd61d 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -56,6 +56,11 @@ public:
void setBackground(uint32 fileHash, bool dirtyBackground = true);
void changeBackground(uint32 fileHash);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
+ void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL);
+ void insertMouse435(uint32 fileHash, int16 x1, int16 x2);
+ void insertNavigationMouse(uint32 fileHash, int type);
+ void showMouse(bool visible);
+ void changeMouseCursor(uint32 fileHash);
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
protected:
@@ -74,7 +79,7 @@ protected:
HitRectList _hitRectList;
int _rectType;
// TODO 0000008E field_8E dw ?
- Sprite *_mouseCursor;
+ Mouse *_mouseCursor;
Klayman *_klayman;
Palette *_palette;
Background *_background;
Commit: a4c34cedd5b7e97104cfb53b90f9808c4204dcf1
https://github.com/scummvm/scummvm/commit/a4c34cedd5b7e97104cfb53b90f9808c4204dcf1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Merge createSceneXXX/updateSceneXXX methods into createScene and updateScene for Module1200
Changed paths:
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index c050abc..ff04937 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -33,21 +33,11 @@ Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Module1200: which = %d", which);
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 0:
- createScene1201(-1);
- break;
- case 1:
- createScene1202(-1);
- break;
- case 2:
- createScene1203(-1);
- break;
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else if (which == 1) {
- createScene1201(2);
+ createScene(0, 2);
} else {
- createScene1201(0);
+ createScene(0, 0);
}
// TODO Music18hList_add(0x00478311, 0x62222CAE);
@@ -58,58 +48,53 @@ Module1200::~Module1200() {
// TODO Music18hList_deleteGroup(0x00478311);
}
-void Module1200::createScene1201(int which) {
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene1201(_vm, this, which);
- SetUpdateHandler(&Module1200::updateScene1201);
-}
-
-void Module1200::createScene1202(int which) {
- _vm->gameState().sceneNum = 1;
- _childObject = new Scene1202(_vm, this, which);
- SetUpdateHandler(&Module1200::updateScene1202);
-}
-
-void Module1200::createScene1203(int which) {
- _vm->gameState().sceneNum = 2;
- // TODO Music18hList_stop(0x62222CAE, 0, 0);
- createSmackerScene(0x31890001, true, true, false);
- setGlobalVar(0x2A02C07B, 1);
- SetUpdateHandler(&Module1200::updateScene1203);
+void Module1200::createScene(int sceneNum, int which) {
+ debug("Module1200::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _childObject = new Scene1201(_vm, this, which);
+ break;
+ case 1:
+ _childObject = new Scene1202(_vm, this, which);
+ break;
+ case 2:
+ // TODO Music18hList_stop(0x62222CAE, 0, 0);
+ createSmackerScene(0x31890001, true, true, false);
+ setGlobalVar(0x2A02C07B, 1);
+ break;
+ }
+ SetUpdateHandler(&Module1200::updateScene);
+ _childObject->handleUpdate();
}
-void Module1200::updateScene1201() {
+void Module1200::updateScene() {
if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1202(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
- createScene1203(-1);
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(1, 0);
+ } else if (_moduleResult == 2) {
+ if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
+ createScene(2, -1);
+ } else {
+ sendMessage(_parentModule, 0x1009, 1);
+ }
} else {
- sendMessage(_parentModule, 0x1009, 1);
+ sendMessage(_parentModule, 0x1009, 0);
}
- } else {
- sendMessage(_parentModule, 0x1009, 0);
+ break;
+ case 1:
+ createScene(0, 1);
+ break;
+ case 2:
+ // TODO Music18hList_play(0x62222CAE, 0, 0, 1);
+ createScene(0, 3);
+ break;
}
}
}
-void Module1200::updateScene1202() {
- if (!updateChild()) {
- createScene1201(1);
- _childObject->handleUpdate();
- }
-}
-
-void Module1200::updateScene1203() {
- if (!updateChild()) {
- createScene1201(3);
- _childObject->handleUpdate();
- // TODO Music18hList_play(0x62222CAE, 0, 0, 1);
- }
-}
-
// Scene1201
static const uint32 kScene1201InitArray[] = {
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index df1ed41..a34bd95 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -36,13 +36,8 @@ public:
Module1200(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1200();
protected:
- // TODO ResourceTable _resourceTable;
- void createScene1201(int which);
- void createScene1202(int which);
- void createScene1203(int which);
- void updateScene1201();
- void updateScene1202();
- void updateScene1203();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene1201
Commit: 17ad070a9c6c0fd86d1f60d90b331eb59b19cf7b
https://github.com/scummvm/scummvm/commit/17ad070a9c6c0fd86d1f60d90b331eb59b19cf7b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:39-07:00
Commit Message:
NEVERHOOD: Move createSceneXXX/updateSceneXXX methods
They are merged into createScene and updateScene for the other already
implemented modules (I hope I didn't break too much :)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
engines/neverhood/module1500.cpp
engines/neverhood/module1500.h
engines/neverhood/module1700.cpp
engines/neverhood/module1700.h
engines/neverhood/module1800.cpp
engines/neverhood/module1800.h
engines/neverhood/module2000.cpp
engines/neverhood/module2000.h
engines/neverhood/module2300.cpp
engines/neverhood/module2300.h
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 103d53d..e6bd99e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,7 +276,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule2000(-1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 4;
createModule2200(-1);
#endif
@@ -284,6 +284,10 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule1000(-1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 12;
+ createModule3000(-1);
+#endif
}
void GameModule::createModule1000(int which) {
@@ -375,7 +379,6 @@ void GameModule::createModule1700(int which) {
void GameModule::updateModule1700() {
if (!updateChild()) {
- debug("Module1700 done; _moduleResult = %d", _moduleResult);
if (_moduleResult == 1) {
// TODO createModule2900(3);
// TODO _childObject->handleUpdate();
@@ -401,8 +404,8 @@ void GameModule::updateModule1800() {
// TODO createModule2700(0);
// TODO _childObject->handleUpdate();
} else if (_moduleResult == 3) {
- // TODO createModule3000(3);
- // TODO _childObject->handleUpdate();
+ createModule3000(3);
+ _childObject->handleUpdate();
} else {
// TODO createModule2800(0);
// TODO _childObject->handleUpdate();
@@ -451,7 +454,7 @@ void GameModule::updateModule2300() {
} else if (_moduleResult == 3) {
// TODO createModule2400(0);
} else if (_moduleResult == 4) {
- // TODO createModule3000(0);
+ createModule3000(0);
} else {
createModule1000(1);
}
@@ -480,8 +483,8 @@ void GameModule::updateModule3000() {
createModule1800(3);
_childObject->handleUpdate();
} else if (_moduleResult == 4) {
- // TODO createModule3000(0);
- // TODO _childObject->handleUpdate();
+ createModule3000(0);
+ _childObject->handleUpdate();
} else {
createModule2300(4);
_childObject->handleUpdate();
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 78775ce..c58c924 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -28,7 +28,7 @@ namespace Neverhood {
Module::Module(NeverhoodEngine *vm, Module *parentModule)
: Entity(vm, 0), _parentModule(parentModule), _childObject(NULL),
- _done(false) {
+ _done(false), _sceneType(kSceneTypeNormal) {
SetMessageHandler(&Module::handleMessage);
@@ -71,11 +71,13 @@ NavigationScene *Module::navigationScene() {
}
void Module::createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes) {
+ _sceneType = kSceneTypeNavigation;
_childObject = new NavigationScene(_vm, this, navigationListId, navigationIndex, itemsTypes);
}
void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort) {
SmackerScene *smackerScene;
+ _sceneType = kSceneTypeSmacker;
smackerScene = new SmackerScene(_vm, this, doubleSurface, flag1, canAbort);
smackerScene->setFileHash(fileHash);
smackerScene->nextVideo();
@@ -87,8 +89,12 @@ bool Module::updateChild() {
_childObject->handleUpdate();
if (_done) {
_done = false;
+ // Save the last area type if it's a NavigationScene for further processing
+ if (_sceneType == kSceneTypeNavigation)
+ _navigationAreaType = navigationScene()->getNavigationAreaType();
delete _childObject;
_childObject = NULL;
+ _sceneType = kSceneTypeNormal;
return false;
}
}
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 2f272d7..c0fdaa7 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -38,6 +38,12 @@ namespace Neverhood {
class NavigationScene;
+enum SceneType {
+ kSceneTypeNormal,
+ kSceneTypeSmacker,
+ kSceneTypeNavigation
+};
+
class Module : public Entity {
public:
Module(NeverhoodEngine *vm, Module *parentModule);
@@ -48,6 +54,8 @@ protected:
Entity *_childObject;
bool _done;
uint32 _moduleResult;
+ SceneType _sceneType;
+ int _navigationAreaType;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index af2390c..518568c 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -35,8 +35,6 @@ namespace Neverhood {
Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- debug("Create Module1300(%d)", which);
-
// TODO Music18hList_add(0x61C090, 0x203197);
// TODO Sound1ChList_addSoundResources(0x61C090, dword_4B2868, true);
// TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, 0, 50, 600, 20, 150);
@@ -45,406 +43,250 @@ Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Sound1ChList_setVolume(0x50399F64, 70);
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
+ if (_vm->gameState().sceneNum >= 1 && _vm->gameState().sceneNum <= 17)
+ createScene(_vm->gameState().sceneNum, -1);
+ else
+ createScene(11, 0);
+ } else {
+ switch (which) {
+ case 0:
+ createScene(11, 0);
+ break;
case 1:
- createScene1302(-1);
+ createScene(13, 0);
break;
case 2:
- createScene1303(-1);
+ createScene(14, 0);
break;
case 3:
- createScene1304(-1);
+ createScene(15, 0);
break;
case 4:
- createScene1305(-1);
+ createScene(7, 0);
break;
case 5:
- createScene1306(-1);
+ createScene(5, 1);
break;
case 6:
- createScene1307(-1);
+ createScene(5, 5);
break;
case 7:
- createScene1308(-1);
+ createScene(3, 0);
break;
case 8:
- createScene1309(-1);
+ createScene(1, 0);
break;
case 9:
- createScene1310(-1);
+ createScene(2, 0);
break;
case 10:
- createScene1311(-1);
+ createScene(6, 0);
break;
case 11:
- createScene1312(-1);
- break;
- case 12:
- createScene1313(-1);
- break;
- case 13:
- createScene1314(-1);
- break;
- case 14:
- createScene1315(-1);
- break;
- case 15:
- createScene1316(-1);
- break;
- case 16:
- createScene1317(-1);
- break;
- case 17:
- createScene1318(-1);
+ createScene(4, 0);
break;
default:
- createScene1312(0);
- }
- } else {
- switch (which) {
- case 0:
- createScene1312(0);
+ createScene(12, 0);
break;
+ }
+ }
+
+}
+
+Module1300::~Module1300() {
+ // TODO Sound1ChList_sub_407A50(0x61C090);
+}
+
+void Module1300::createScene(int sceneNum, int which) {
+ debug("Module1300::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 1:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1302(_vm, this, which);
+ break;
+ case 2:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new Scene1303(_vm, this, which);
+ break;
+ case 3:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new Scene1304(_vm, this, which);
+ break;
+ case 4:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1305(_vm, this, which);
+ break;
+ case 5:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1306(_vm, this, which);
+ break;
+ case 6:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1307(_vm, this, which);
+ break;
+ case 7:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x203197, 0, 2, 1);
+ _childObject = new Scene1308(_vm, this, which);
+ break;
+ case 8:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 1);
+ break;
+ case 9:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createSmackerScene(0x20082818, true, true, false);
+ break;
+ case 10:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createSmackerScene(0x20082828, true, true, false);
+ break;
+ case 11:
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createNavigationScene(0x004B27A8, which);
+ break;
+ case 12:
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createNavigationScene(0x004B2718, which);
+ break;
+ case 13:
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createNavigationScene(0x004B27D8, which);
+ break;
+ case 14:
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createNavigationScene(0x004B2808, which);
+ break;
+ case 15:
+ // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ createNavigationScene(0x004B2838, which);
+ break;
+ case 16:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO Music18hList_stop(0x203197, 0, 2);
+ _childObject = new Scene1317(_vm, this, which);
+ break;
+ case 17:
+ // TODO: Credits scene
+ break;
+ }
+ SetUpdateHandler(&Module1300::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module1300::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
case 1:
- createScene1314(0);
+ if (_moduleResult == 1) {
+ createScene(4, 0);
+ } else {
+ createScene(7, 1);
+ }
break;
case 2:
- createScene1315(0);
+ createScene(5, 3);
break;
case 3:
- createScene1316(0);
+ createScene(15, 0);
break;
case 4:
- createScene1308(0);
+ createScene(16, -1);
break;
case 5:
- createScene1306(1);
+ if (_moduleResult == 2) {
+ createScene(8, 0);
+ } else if (_moduleResult == 3) {
+ createScene(2, 0);
+ } else if (_moduleResult == 0) {
+ sendMessage(_parentModule, 0x1009, 0);
+ } else if (_moduleResult == 1) {
+ createScene(10, -1);
+ }
break;
case 6:
- createScene1306(5);
+ createScene(7, 2);
break;
case 7:
- createScene1304(0);
+ if (_moduleResult == 0) {
+ createScene(13, 0);
+ } else if (_moduleResult == 1) {
+ createScene(1, 0);
+ } else if (_moduleResult == 2) {
+ createScene(6, 0);
+ }
break;
case 8:
- createScene1302(0);
+ createScene(5, 2);
break;
case 9:
- createScene1303(0);
+ createScene(5, 0);
break;
case 10:
- createScene1307(0);
+ createScene(14, 0);
break;
case 11:
- createScene1305(0);
+ if (_moduleResult == 0)
+ createScene(12, 0);
+ else if (_moduleResult == 1)
+ createScene(11, 1);
break;
- default:
- createScene1313(0);
+ case 12:
+ if (_moduleResult == 0)
+ createScene(14, 1);
+ else if (_moduleResult == 1)
+ createScene(15, 1);
+ else if (_moduleResult == 3)
+ createScene(11, 1);
+ else if (_moduleResult == 5)
+ createScene(13, 1);
break;
- }
- }
-
-}
-
-Module1300::~Module1300() {
- // TODO Sound1ChList_sub_407A50(0x61C090);
-}
-
-void Module1300::createScene1302(int which) {
- _vm->gameState().sceneNum = 1;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
- _childObject = new Scene1302(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1302);
-}
-
-void Module1300::createScene1303(int which) {
- _vm->gameState().sceneNum = 2;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
- _childObject = new Scene1303(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1303);
-}
-
-void Module1300::createScene1304(int which) {
- _vm->gameState().sceneNum = 3;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
- _childObject = new Scene1304(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1304);
-}
-
-void Module1300::createScene1305(int which) {
- _vm->gameState().sceneNum = 4;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
- _childObject = new Scene1305(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1305);
-}
-
-void Module1300::createScene1306(int which) {
- _vm->gameState().sceneNum = 5;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
- _childObject = new Scene1306(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1306);
-}
-
-void Module1300::createScene1307(int which) {
- _vm->gameState().sceneNum = 6;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
- _childObject = new Scene1307(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1307);
-}
-
-void Module1300::createScene1308(int which) {
- _vm->gameState().sceneNum = 7;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
- _childObject = new Scene1308(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1308);
-}
-
-void Module1300::createScene1309(int which) {
- _vm->gameState().sceneNum = 8;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
- _childObject = new DiskplayerScene(_vm, this, 1);
- SetUpdateHandler(&Module1300::updateScene1309);
-}
-
-void Module1300::createScene1310(int which) {
- _vm->gameState().sceneNum = 9;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
- createSmackerScene(0x20082818, true, true, false);
- SetUpdateHandler(&Module1300::updateScene1310);
-}
-
-void Module1300::createScene1311(int which) {
- _vm->gameState().sceneNum = 10;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
- createSmackerScene(0x20082828, true, true, false);
- SetUpdateHandler(&Module1300::updateScene1310);
-}
-
-void Module1300::createScene1312(int which) {
- _vm->gameState().sceneNum = 11;
- createNavigationScene(0x004B27A8, which);
- SetUpdateHandler(&Module1300::updateScene1312);
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
-}
-
-void Module1300::createScene1313(int which) {
- _vm->gameState().sceneNum = 12;
- createNavigationScene(0x004B2718, which);
- SetUpdateHandler(&Module1300::updateScene1313);
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
-}
-
-void Module1300::createScene1314(int which) {
- _vm->gameState().sceneNum = 13;
- createNavigationScene(0x004B27D8, which);
- SetUpdateHandler(&Module1300::updateScene1314);
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
-}
-
-void Module1300::createScene1315(int which) {
- _vm->gameState().sceneNum = 14;
- createNavigationScene(0x004B2808, which);
- SetUpdateHandler(&Module1300::updateScene1315);
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
-}
-
-void Module1300::createScene1316(int which) {
- _vm->gameState().sceneNum = 15;
- createNavigationScene(0x004B2838, which);
- SetUpdateHandler(&Module1300::updateScene1316);
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
-}
-
-void Module1300::createScene1317(int which) {
- _vm->gameState().sceneNum = 16;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
- _childObject = new Scene1317(_vm, this, which);
- SetUpdateHandler(&Module1300::updateScene1317);
-}
-
-void Module1300::createScene1318(int which) {
- // TODO: Credits scene
-}
-
-void Module1300::updateScene1302() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1305(0);
- } else {
- createScene1308(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1303() {
- if (!updateChild()) {
- createScene1306(3);
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1304() {
- if (!updateChild()) {
- createScene1316(0);
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1305() {
- if (!updateChild()) {
- createScene1317(-1);
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1306() {
- if (!updateChild()) {
- if (_moduleResult == 2) {
- createScene1309(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 3) {
- createScene1303(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 0) {
- sendMessage(_parentModule, 0x1009, 0);
- } else if (_moduleResult == 1) {
- createScene1311(-1);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module1300::updateScene1307() {
- if (!updateChild()) {
- createScene1308(2);
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1308() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1314(0);
- } else if (_moduleResult == 1) {
- createScene1302(0);
- } else if (_moduleResult == 2) {
- createScene1307(0);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1309() {
- if (!updateChild()) {
- createScene1306(2);
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1310() {
- if (!updateChild()) {
- if (_vm->gameState().sceneNum == 9)
- createScene1306(0);
- else
- createScene1315(0);
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1311() {
-}
-
-void Module1300::updateScene1312() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1313(0);
- } else if (_moduleResult == 1) {
- createScene1312(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1313() {
- if (!updateChild()) {
- switch (_moduleResult) {
- case 0:
- createScene1315(1);
+ case 13:
+ if (_moduleResult == 0) {
+ createScene(12, 2);
+ } else if (_moduleResult == 1) {
+ createScene(7, 0);
+ }
break;
- case 1:
- createScene1316(1);
+ case 14:
+ if (_moduleResult == 0) {
+ createScene(12, 3);
+ } else if (_moduleResult == 1) {
+ createScene(9, -1);
+ }
break;
- case 3:
- createScene1312(1);
+ case 15:
+ if (_moduleResult == 0) {
+ createScene(12, 4);
+ } else if (_moduleResult == 1) {
+ createScene(3, 0);
+ }
break;
- case 5:
- createScene1314(1);
+ case 16:
+ createScene(17, -1);
+ break;
+ case 17:
+ // TODO
break;
}
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1314() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1313(2);
- } else if (_moduleResult == 1) {
- createScene1308(0);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1315() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1313(3);
- } else if (_moduleResult == 1) {
- createScene1310(-1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1316() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1313(4);
- } else if (_moduleResult == 1) {
- createScene1304(0);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1300::updateScene1317() {
- if (!updateChild()) {
- createScene1318(-1);
- _childObject->handleUpdate();
}
}
-void Module1300::updateScene1318() {
-}
-
AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _parentScene(parentScene) {
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 0e9837c..27e2540 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -38,40 +38,8 @@ public:
virtual ~Module1300();
protected:
uint32 _musicFileHash;
- void createScene1302(int which);
- void createScene1303(int which);
- void createScene1304(int which);
- void createScene1305(int which);
- void createScene1306(int which);
- void createScene1307(int which);
- void createScene1308(int which);
- void createScene1309(int which);
- void createScene1310(int which);
- void createScene1311(int which);
- void createScene1312(int which);
- void createScene1313(int which);
- void createScene1314(int which);
- void createScene1315(int which);
- void createScene1316(int which);
- void createScene1317(int which);
- void createScene1318(int which);
- void updateScene1302();
- void updateScene1303();
- void updateScene1304();
- void updateScene1305();
- void updateScene1306();
- void updateScene1307();
- void updateScene1308();
- void updateScene1309();
- void updateScene1310();
- void updateScene1311();
- void updateScene1312();
- void updateScene1313();
- void updateScene1314();
- void updateScene1315();
- void updateScene1316();
- void updateScene1317();
- void updateScene1318();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
class AsScene1302Bridge : public AnimatedSprite {
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index d59cbd8..32918b1 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -31,36 +31,13 @@ namespace Neverhood {
Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- debug("Create Module1400(%d)", which);
-
// TODO Music18hList_add(0x00AD0012, 0x06333232);
// TODO Music18hList_add(0x00AD0012, 0x624A220E);
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 1:
- createScene1402(-1);
- break;
- case 2:
- createScene1403(-1);
- break;
- case 3:
- createScene1404(-1);
- break;
- case 4:
- createScene1405(-1);
- break;
- case 5:
- createScene1406(-1);
- break;
- case 6:
- createScene1407(-1);
- break;
- default:
- createScene1401(-1);
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else {
- createScene1401(0);
+ createScene(0, 0);
}
}
@@ -69,129 +46,91 @@ Module1400::~Module1400() {
// TODO Music18hList_deleteGroup(0x00AD0012);
}
-void Module1400::createScene1401(int which) {
- _vm->gameState().sceneNum = 0;
- // TODO Music18hList_play(0x06333232, 0, 2, 1);
- _childObject = new Scene1401(_vm, this, which);
- SetUpdateHandler(&Module1400::updateScene1401);
-}
-
-void Module1400::createScene1402(int which) {
- _vm->gameState().sceneNum = 1;
- // TODO Music18hList_stop(0x06333232, 0, 2);
- // TODO Music18hList_stop(0x624A220E, 0, 2);
- _childObject = new Scene1402(_vm, this, which);
- SetUpdateHandler(&Module1400::updateScene1402);
-}
-
-void Module1400::createScene1403(int which) {
- _vm->gameState().sceneNum = 2;
- // TODO Music18hList_stop(0x06333232, 0, 2);
- // TODO Music18hList_play(0x624A220E, 0, 2, 1);
- _childObject = new Scene1403(_vm, this, which);
- SetUpdateHandler(&Module1400::updateScene1403);
-}
-
-void Module1400::createScene1404(int which) {
- _vm->gameState().sceneNum = 3;
- // TODO Music18hList_play(0x06333232, 0, 2, 1);
- _childObject = new Scene1404(_vm, this, which);
- SetUpdateHandler(&Module1400::updateScene1404);
-}
-
-void Module1400::createScene1405(int which) {
- _vm->gameState().sceneNum = 4;
- // TODO Music18hList_play(0x06333232, 0, 2, 1);
- _childObject = new Scene1405(_vm, this, which);
- SetUpdateHandler(&Module1400::updateScene1405);
-}
-
-void Module1400::createScene1406(int which) {
- _vm->gameState().sceneNum = 5;
- // TODO Music18hList_stop(0x06333232, 0, 2);
- _childObject = new DiskplayerScene(_vm, this, 2);
- SetUpdateHandler(&Module1400::updateScene1406);
-}
-
-void Module1400::createScene1407(int which) {
- _vm->gameState().sceneNum = 6;
- // TODO Music18hList_stop(0x06333232, 0, 2);
- _childObject = new Scene1407(_vm, this, which);
- SetUpdateHandler(&Module1400::updateScene1407);
-}
-
-void Module1400::updateScene1401() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1402(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene1404(0);
- _childObject->handleUpdate();
- } else {
- sendMessage(_parentModule, 0x1009, 0);
- }
- }
-}
-
-void Module1400::updateScene1402() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1403(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene1407(-1);
- _childObject->handleUpdate();
- } else {
- createScene1401(1);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module1400::updateScene1403() {
- if (!updateChild()) {
- createScene1402(1);
- _childObject->handleUpdate();
+void Module1400::createScene(int sceneNum, int which) {
+ debug("Module1400::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ _childObject = new Scene1401(_vm, this, which);
+ break;
+ case 1:
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ // TODO Music18hList_stop(0x624A220E, 0, 2);
+ _childObject = new Scene1402(_vm, this, which);
+ break;
+ case 2:
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ // TODO Music18hList_play(0x624A220E, 0, 2, 1);
+ _childObject = new Scene1403(_vm, this, which);
+ break;
+ case 3:
+ // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ _childObject = new Scene1404(_vm, this, which);
+ break;
+ case 4:
+ // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ _childObject = new Scene1405(_vm, this, which);
+ break;
+ case 5:
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 2);
+ break;
+ case 6:
+ // TODO Music18hList_stop(0x06333232, 0, 2);
+ _childObject = new Scene1407(_vm, this, which);
+ break;
}
+ SetUpdateHandler(&Module1400::updateScene);
+ _childObject->handleUpdate();
}
-void Module1400::updateScene1404() {
+void Module1400::updateScene() {
if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1405(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene1406(-1);
- _childObject->handleUpdate();
- } else {
- createScene1401(2);
- _childObject->handleUpdate();
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(1, 0);
+ } else if (_moduleResult == 2) {
+ createScene(3, 0);
+ } else {
+ sendMessage(_parentModule, 0x1009, 0);
+ }
+ break;
+ case 1:
+ if (_moduleResult == 1) {
+ createScene(2, 0);
+ } else if (_moduleResult == 2) {
+ createScene(6, -1);
+ } else {
+ createScene(0, 1);
+ }
+ break;
+ case 2:
+ createScene(1, 1);
+ break;
+ case 3:
+ if (_moduleResult == 1) {
+ createScene(4, 0);
+ } else if (_moduleResult == 2) {
+ createScene(5, -1);
+ } else {
+ createScene(0, 2);
+ }
+ break;
+ case 4:
+ createScene(3, 1);
+ break;
+ case 5:
+ createScene(3, 2);
+ break;
+ case 6:
+ createScene(1, 2);
+ break;
}
}
}
-void Module1400::updateScene1405() {
- if (!updateChild()) {
- createScene1404(1);
- _childObject->handleUpdate();
- }
-}
-
-void Module1400::updateScene1406() {
- if (!updateChild()) {
- createScene1404(2);
- _childObject->handleUpdate();
- }
-}
-
-void Module1400::updateScene1407() {
- if (!updateChild()) {
- createScene1402(2);
- _childObject->handleUpdate();
- }
-}
-
// Scene1401
Class525::Class525(NeverhoodEngine *vm)
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 72afb4f..7b4d957 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -35,20 +35,8 @@ public:
Module1400(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1400();
protected:
- void createScene1401(int which);
- void createScene1402(int which);
- void createScene1403(int which);
- void createScene1404(int which);
- void createScene1405(int which);
- void createScene1406(int which);
- void createScene1407(int which);
- void updateScene1401();
- void updateScene1402();
- void updateScene1403();
- void updateScene1404();
- void updateScene1405();
- void updateScene1406();
- void updateScene1407();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene1401
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 7c03e9b..09567f5 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -27,43 +27,51 @@ namespace Neverhood {
Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag)
: Module(vm, parentModule), _flag(flag) {
- debug("Create Module1500(%d)", which);
-
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 1:
- createScene1502();
- break;
- case 2:
- createScene1503();
- break;
- case 3:
- createScene1504();
- break;
- default:
- createScene1501();
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else {
- createScene1504();
+ createScene(3, -1);
}
}
-void Module1500::update() {
+void Module1500::createScene(int sceneNum, int which) {
+ debug("Module1500::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
+ break;
+ case 1:
+ _childObject = new Scene1501(_vm, this, 0x30050A0A, 0x58B45E58, 110, 48);
+ break;
+ case 2:
+ sendMessage(_parentModule, 0x0800, 0);
+ createSmackerScene(0x001A0005, true, true, true);
+ break;
+ case 3:
+ _childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
+ break;
+ }
+ SetUpdateHandler(&Module1500::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module1500::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
- createScene1502();
+ createScene(1, -1);
break;
case 1:
if (_flag) {
- createScene1503();
+ createScene(2, -1);
} else {
sendMessage(_parentModule, 0x1009, 0);
}
break;
case 3:
- createScene1501();
+ createScene(0, -1);
break;
default:
sendMessage(_parentModule, 0x1009, 0);
@@ -72,40 +80,12 @@ void Module1500::update() {
}
}
-void Module1500::createScene1501() {
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
- SetUpdateHandler(&Module1500::update);
-}
-
-void Module1500::createScene1502() {
- debug("createScene1502");
- _vm->gameState().sceneNum = 1;
- _childObject = new Scene1501(_vm, this, 0x30050A0A, 0x58B45E58, 110, 48);
- SetUpdateHandler(&Module1500::update);
-}
-
-void Module1500::createScene1503() {
- sendMessage(_parentModule, 0x0800, 0);
- _vm->gameState().sceneNum = 2;
- createSmackerScene(0x001A0005, true, true, true);
- SetUpdateHandler(&Module1500::update);
-}
-
-void Module1500::createScene1504() {
- _vm->gameState().sceneNum = 3;
- _childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
- SetUpdateHandler(&Module1500::update);
-}
-
// Scene1501
Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
: Scene(vm, parentModule, true), _soundResource(vm),
_countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
- debug("Create Scene1501(%08X, %08X, %d, %d)", backgroundFileHash, soundFileHash, countdown2, countdown3);
-
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index 87b2a0b..eeabec0 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -37,11 +37,8 @@ public:
Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag);
protected:
bool _flag;
- void update();
- void createScene1501();
- void createScene1502();
- void createScene1503();
- void createScene1504();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
class Scene1501 : public Scene {
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 2b0f25d..9188dab 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -27,36 +27,19 @@ namespace Neverhood {
Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource(vm) {
- debug("Create Module1700(%d)", which);
-
// TODO Music18hList_add(0x04212331);
// TODO Sound1ChList_addSoundResources(0x04212331, dword_4AE930, true);
// TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 50, 600, 5, 150);
// TODO Sound1ChList_sub_407C70(0x04212331, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 0:
- createScene1701(-1);
- break;
- case 1:
- createScene1702(-1);
- break;
- case 2:
- createScene1703(-1);
- break;
- case 3:
- createScene1704(-1);
- break;
- default:
- createScene1705(-1);
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else if (which == 0) {
- createScene1701(-1);
+ createScene(0, -1);
} else if (which == 1) {
- createScene1705(1);
+ createScene(4, 1);
} else {
- createScene1705(3);
+ createScene(4, 3);
}
}
@@ -65,90 +48,71 @@ Module1700::~Module1700() {
// TODO Sound1ChList_sub_407A50(0x04212331);
}
-void Module1700::createScene1701(int which) {
- _vm->gameState().sceneNum = 0;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
- createSmackerScene(0x3028A005, true, true, false);
- SetUpdateHandler(&Module1700::updateScene1701);
-}
-
-void Module1700::createScene1702(int which) {
- _vm->gameState().sceneNum = 1;
- createNavigationScene(0x004AE8B8, which);
- SetUpdateHandler(&Module1700::updateScene1702);
-}
-
-void Module1700::createScene1703(int which) {
- _vm->gameState().sceneNum = 2;
- createNavigationScene(0x004AE8E8, which);
- SetUpdateHandler(&Module1700::updateScene1703);
-}
-
-void Module1700::createScene1704(int which) {
- _vm->gameState().sceneNum = 3;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
- createSmackerScene(0x01190041, true, true, false);
- SetUpdateHandler(&Module1700::updateScene1701);
-}
-
-void Module1700::createScene1705(int which) {
- _vm->gameState().sceneNum = 4;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
- // TODO Music18hList_play(0x31114225, 0, 2, 1);
- _childObject = new Scene1705(_vm, this, which);
- SetUpdateHandler(&Module1700::updateScene1705);
-}
-
-void Module1700::updateScene1701() {
- if (!updateChild()) {
- if (_vm->gameState().sceneNum == 3) {
- createScene1705(0);
- _childObject->handleUpdate();
- } else {
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 0, 0, 0);
- createScene1702(0);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module1700::updateScene1702() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1703(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 1) {
- createScene1702(1);
- _childObject->handleUpdate();
- }
+void Module1700::createScene(int sceneNum, int which) {
+ debug("Module1700::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ createSmackerScene(0x3028A005, true, true, false);
+ break;
+ case 1:
+ createNavigationScene(0x004AE8B8, which);
+ break;
+ case 2:
+ createNavigationScene(0x004AE8E8, which);
+ break;
+ case 3:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ createSmackerScene(0x01190041, true, true, false);
+ break;
+ case 4:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ // TODO Music18hList_play(0x31114225, 0, 2, 1);
+ _childObject = new Scene1705(_vm, this, which);
+ break;
}
+ SetUpdateHandler(&Module1700::updateScene);
+ _childObject->handleUpdate();
}
-void Module1700::updateScene1703() {
+void Module1700::updateScene() {
if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1704(-1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 1) {
- createScene1702(1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- if (!_soundResource.isPlaying()) {
- // TODO _soundResource.setVolume(60);
- _soundResource.play(0x58B45E58);
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 0, 0, 0);
+ createScene(1, 0);
+ break;
+ case 1:
+ if (_moduleResult == 0) {
+ createScene(2, 0);
+ } else if (_moduleResult == 1) {
+ createScene(1, 1);
+ }
+ break;
+ case 2:
+ if (_moduleResult == 0) {
+ createScene(3, -1);
+ } else if (_moduleResult == 1) {
+ createScene(1, 1);
+ } else if (_moduleResult == 2) {
+ if (!_soundResource.isPlaying()) {
+ // TODO _soundResource.setVolume(60);
+ _soundResource.play(0x58B45E58);
+ }
+ createScene(2, 2);
}
- createScene1703(2);
- _childObject->handleUpdate();
+ break;
+ case 3:
+ createScene(4, 0);
+ break;
+ case 4:
+ sendMessage(_parentModule, 0x1009, 1);
+ break;
}
}
}
-
-void Module1700::updateScene1705() {
- if (!updateChild()) {
- sendMessage(_parentModule, 0x1009, 1);
- }
-}
-
+
// Scene1705
static const uint32 kScene1705FileHashes[] = {
diff --git a/engines/neverhood/module1700.h b/engines/neverhood/module1700.h
index 0fefa72..f738848 100644
--- a/engines/neverhood/module1700.h
+++ b/engines/neverhood/module1700.h
@@ -36,16 +36,8 @@ public:
virtual ~Module1700();
protected:
SoundResource _soundResource;
- void update();
- void createScene1701(int which);
- void createScene1702(int which);
- void createScene1703(int which);
- void createScene1704(int which);
- void createScene1705(int which);
- void updateScene1701();
- void updateScene1702();
- void updateScene1703();
- void updateScene1705();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene1705
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 31a1564..d5aa789 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -28,218 +28,143 @@ namespace Neverhood {
Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- debug("Create Module1800(%d)", which);
-
// TODO Sound1ChList_addSoundResources(0x04A14718, dword_4AFE70);
// TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 1, 50, 600, 10, 150);
// TODO Sound1ChList_sub_407C70(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else if (which == 2) {
+ createScene(5, 0);
+ } else if (which == 3) {
+ createScene(0, 0);
+ } else {
+ createScene(3, 1);
+ }
+
+}
+
+Module1800::~Module1800() {
+ // TODO Sound1ChList_sub_407A50(0x04A14718);
+}
+
+void Module1800::createScene(int sceneNum, int which) {
+ static const byte kNavigationTypes00[] = {1, 0, 2, 0};
+ static const byte kNavigationTypes01[] = {5};
+ debug("Module1800::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createNavigationScene(0x004AFD38, which, kNavigationTypes00);
+ break;
+ case 1:
+ createNavigationScene(0x004AFD98, which, kNavigationTypes01);
+ break;
+ case 2:
+ createSmackerScene(0x006C0085, true, true, false);
+ break;
+ case 3:
+ createNavigationScene(0x004AFDB0, which);
+ break;
+ case 4:
+ createNavigationScene(0x004AFDE0, which);
+ break;
+ case 5:
+ createNavigationScene(0x004AFE40, which);
+ break;
+ case 6:
+ // TODO Sound1ChList_sub_407A50(0x04A14718);
+ createSmackerScene(0x08D84010, true, true, false);
+ break;
+ case 7:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 0, 0, 0, 0, 0);
+ createSmackerScene(0x0168B121, true, true, false);
+ break;
+ case 8:
+ // TODO _childObject = new CreditsScene(_vm, this, 0);
+ break;
+ case 9:
+ // NOTE: Newly introduced sceneNum 9 (was duplicate 3 with own update handler)
+ createSmackerScene(0x0A840C01, true, true, false);
+ break;
+ }
+ SetUpdateHandler(&Module1800::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module1800::updateScene() {
+ if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
- createScene1801(-1);
+ if (_moduleResult == 1) {
+ createScene(4, 0);
+ } else if (_moduleResult == 2) {
+ createScene(1, -1);
+ } else if (_moduleResult == 3) {
+ createScene(3, 0);
+ }
break;
case 1:
- createScene1802(-1);
+ if (_navigationAreaType == 3) {
+ createScene(7, -1);
+ } else {
+ createScene(2, -1);
+ }
break;
case 2:
- createScene1803(-1);
+ createScene(0, 2);
break;
- default:
case 3:
- createScene1804(-1);
+ if (_moduleResult == 0) {
+ createScene(9, -1);
+ } else if (_moduleResult == 1) {
+ createScene(0, 1);
+ }
break;
case 4:
- createScene1805(-1);
+ if (_moduleResult == 0) {
+ createScene(6, -1);
+ } else if (_moduleResult == 1) {
+ createScene(5, 0);
+ } else if (_moduleResult == 2) {
+ createScene(0, 3);
+ } else if (_moduleResult == 3) {
+ createScene(4, 3);
+ }
break;
case 5:
- createScene1806(-1);
+ if (_moduleResult == 0) {
+ sendMessage(_parentModule, 0x1009, 2);
+ } else if (_moduleResult == 1) {
+ createScene(4, 3);
+ }
break;
case 6:
- createScene1807(-1);
+ createScene(8, -1);
break;
case 7:
- createScene1808(-1);
+ sendMessage(_parentModule, 0x1009, 3);
break;
case 8:
- createScene1809(-1);
+ sendMessage(_parentModule, 0x1009, 1);
+ // TODO GameState stuff
+ break;
+ case 9:
+ sendMessage(_parentModule, 0x1009, 0);
break;
- }
- } else if (which == 2) {
- createScene1806(0);
- } else if (which == 3) {
- createScene1801(0);
- } else {
- createScene1804(1);
- }
-
-}
-
-Module1800::~Module1800() {
- // TODO Sound1ChList_sub_407A50(0x04A14718);
-}
-
-void Module1800::createScene1801(int which) {
- static const byte kNavigationTypes[] = {1, 0, 2, 0};
- _vm->gameState().sceneNum = 0;
- createNavigationScene(0x004AFD38, which, kNavigationTypes);
- SetUpdateHandler(&Module1800::updateScene1801);
-}
-
-void Module1800::createScene1802(int which) {
- static const byte kNavigationTypes[] = {5};
- _vm->gameState().sceneNum = 1;
- createNavigationScene(0x004AFD98, which, kNavigationTypes);
- SetUpdateHandler(&Module1800::updateScene1802);
-}
-
-void Module1800::createScene1803(int which) {
- _vm->gameState().sceneNum = 2;
- createSmackerScene(0x006C0085, true, true, false);
- SetUpdateHandler(&Module1800::updateScene1803);
-}
-
-void Module1800::createScene1804(int which) {
- _vm->gameState().sceneNum = 3;
- createNavigationScene(0x004AFDB0, which);
- SetUpdateHandler(&Module1800::updateScene1804);
-}
-
-void Module1800::createScene1804b(int which) {
- _vm->gameState().sceneNum = 3;
- createSmackerScene(0x0A840C01, true, true, false);
- SetUpdateHandler(&Module1800::updateScene1803);
-}
-
-void Module1800::createScene1805(int which) {
- _vm->gameState().sceneNum = 4;
- createNavigationScene(0x004AFDE0, which);
- SetUpdateHandler(&Module1800::updateScene1805);
-}
-
-void Module1800::createScene1806(int which) {
- _vm->gameState().sceneNum = 5;
- createNavigationScene(0x004AFE40, which);
- SetUpdateHandler(&Module1800::updateScene1806);
-}
-
-void Module1800::createScene1807(int which) {
- _vm->gameState().sceneNum = 6;
- createSmackerScene(0x08D84010, true, true, false);
- SetUpdateHandler(&Module1800::updateScene1803);
- // TODO Sound1ChList_sub_407A50(0x04A14718);
-}
-
-void Module1800::createScene1808(int which) {
- _vm->gameState().sceneNum = 7;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 0, 0, 0, 0, 0);
- createSmackerScene(0x0168B121, true, true, false);
- SetUpdateHandler(&Module1800::updateScene1803);
-}
-
-void Module1800::createScene1809(int which) {
-#if 0 // TODO
- _vm->gameState().sceneNum = 8;
- _childObject = new CreditsScene(_vm, this, 0);
- SetUpdateHandler(&Module1800::updateScene1809);
-#endif
-}
-
-void Module1800::updateScene1801() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene1805(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene1802(-1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 3) {
- createScene1804(0);
- _childObject->handleUpdate();
}
} else {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (navigationScene->soundFlag1 && navigationScene->index == 2) {
- // TODO Sound1ChList_sub_4080B0(false);
- }
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (navigationScene->soundFlag1 && navigationScene->index == 2) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
#endif
- }
-}
-
-void Module1800::updateScene1802() {
- _childObject->handleUpdate();
- if (_done) {
- int areaType = navigationScene()->getNavigationAreaType();
- _done = false;
- delete _childObject;
- _childObject = NULL;
- if (areaType == 3) {
- createScene1808(-1);
- } else {
- createScene1803(-1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1800::updateScene1803() {
- if (!updateChild()) {
- if (_moduleResult == 2) {
- createScene1801(2);
- _childObject->handleUpdate();
- } else if (_moduleResult == 3) {
- sendMessage(_parentModule, 0x1009, 0);
- } else if (_moduleResult == 6) {
- createScene1809(-1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 7) {
- sendMessage(_parentModule, 0x1009, 3);
- }
- }
-}
-
-void Module1800::updateScene1804() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1804b(-1);
- } else if (_moduleResult == 1) {
- createScene1801(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1800::updateScene1805() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene1807(-1);
- } else if (_moduleResult == 1) {
- createScene1806(0);
- } else if (_moduleResult == 2) {
- createScene1801(3);
- } else if (_moduleResult == 3) {
- createScene1805(3);
- }
- _childObject->handleUpdate();
- }
-}
-
-void Module1800::updateScene1806() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- sendMessage(_parentModule, 0x1009, 2);
- } else if (_moduleResult == 1) {
- createScene1805(3);
- _childObject->handleUpdate();
+ break;
}
}
}
-
-void Module1800::updateScene1809() {
- if (!updateChild()) {
- sendMessage(_parentModule, 0x1009, 1);
- // TODO GameState stuff
- }
-}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1800.h b/engines/neverhood/module1800.h
index 13d4790..8ec8dfe 100644
--- a/engines/neverhood/module1800.h
+++ b/engines/neverhood/module1800.h
@@ -36,26 +36,8 @@ public:
Module1800(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1800();
protected:
- // TODO ResourceTable _resourceTable;
- void createScene1801(int which);
- void createScene1802(int which);
- void createScene1803(int which);
- void createScene1804(int which);
- void createScene1804b(int which);
- void createScene1805(int which);
- void createScene1806(int which);
- void createScene1807(int which);
- void createScene1808(int which);
- void createScene1809(int which);
- void updateScene1801();
- void updateScene1802();
- void updateScene1803();
- void updateScene1804();
- void updateScene1805();
- void updateScene1806();
- void updateScene1807();
- void updateScene1808();
- void updateScene1809();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index cf7256b..a30bb93 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -29,24 +29,12 @@ namespace Neverhood {
Module2000::Module2000(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- debug("Create Module2000(%d)", which);
-
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 0:
- createScene2001(-1);
- break;
- case 2:
- createScene2003(-1);
- break;
- default:
- createScene2002(-1);
- break;
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else if (which == 0) {
- createScene2001(3);
+ createScene(0, 3);
} else if (which == 1) {
- createScene2001(1);
+ createScene(0, 1);
}
}
@@ -55,65 +43,56 @@ Module2000::~Module2000() {
// TODO Sound1ChList_sub_407A50(0x81293110);
}
-void Module2000::createScene2001(int which) {
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene2001(_vm, this, which);
- SetUpdateHandler(&Module2000::updateScene2001);
- _childObject->handleUpdate();
-}
-
-void Module2000::createScene2002(int which) {
- _vm->gameState().sceneNum = 1;
- if (getGlobalVar(0x98109F12)) {
- createNavigationScene(0x004B7B48, which);
- } else {
- createNavigationScene(0x004B7B00, which);
+void Module2000::createScene(int sceneNum, int which) {
+ debug("Module2000::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _childObject = new Scene2001(_vm, this, which);
+ break;
+ case 1:
+ createNavigationScene(getGlobalVar(0x98109F12) ? 0x004B7B48 : 0x004B7B00, which);
+ break;
+ case 2:
+ setGlobalVar(0x98109F12, 1);
+ setSubVar(0x2C145A98, 1, 1);
+ createSmackerScene(0x204B2031, true, true, false);
+ break;
}
- SetUpdateHandler(&Module2000::updateScene2002);
+ SetUpdateHandler(&Module2000::updateScene);
_childObject->handleUpdate();
}
-void Module2000::createScene2003(int which) {
- _vm->gameState().sceneNum = 2;
- setGlobalVar(0x98109F12, 1);
- setSubVar(0x2C145A98, 1, 1);
- createSmackerScene(0x204B2031, true, true, false);
- SetUpdateHandler(&Module2000::updateScene2003);
- _childObject->handleUpdate();
-}
-
-void Module2000::updateScene2001() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 0);
- } else {
- createScene2002(0);
- }
- }
-}
-
-void Module2000::updateScene2002() {
+void Module2000::updateScene() {
if (!updateChild()) {
- if (_moduleResult == 0) {
- if (getGlobalVar(0x98109F12)) {
- createScene2002(0);
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ sendMessage(_parentModule, 0x1009, 0);
} else {
- createScene2003(-1);
+ createScene(1, 0);
+ }
+ break;
+ case 1:
+ if (_moduleResult == 0) {
+ if (getGlobalVar(0x98109F12)) {
+ createScene(1, 0);
+ } else {
+ createScene(2, -1);
+ }
+ } else if (_moduleResult == 1) {
+ createScene(1, 1);
+ } else if (_moduleResult == 2) {
+ createScene(0, 0);
}
- } else if (_moduleResult == 1) {
- createScene2002(1);
- } else if (_moduleResult == 2) {
- createScene2001(0);
+ break;
+ case 2:
+ createScene(1, 0);
+ break;
}
}
}
-void Module2000::updateScene2003() {
- if (!updateChild()) {
- createScene2002(0);
- }
-}
-
// Scene2001
Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
diff --git a/engines/neverhood/module2000.h b/engines/neverhood/module2000.h
index 23ac8a8..8e741b3 100644
--- a/engines/neverhood/module2000.h
+++ b/engines/neverhood/module2000.h
@@ -36,12 +36,8 @@ public:
virtual ~Module2000();
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createScene2001(int which);
- void createScene2002(int which);
- void createScene2003(int which);
- void updateScene2001();
- void updateScene2002();
- void updateScene2003();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene2001
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index ce9250a..dd4144f 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -27,8 +27,6 @@ namespace Neverhood {
Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _volume(0) {
- debug("Create Module2300(%d)", which);
-
// TODO Sound1ChList_addSoundResources(0x1A214010, dword_4B6938, true);
// TODO Sound1ChList_setSoundValuesMulti(dword_4B6938, true, 50, 600, 10, 10, 150);
@@ -45,33 +43,17 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Sound1ChList_sub_407C70(0x1A214010, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- case 0:
- createScene2301(-1);
- break;
- case 1:
- createScene2302(-1);
- break;
- case 2:
- createScene2303(-1);
- break;
- case 3:
- createScene2304(-1);
- break;
- case 4:
- createScene2305(-1);
- break;
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else if (which == 1) {
- createScene2303(0);
+ createScene(2, 0);
} else if (which == 2) {
- createScene2304(0);
+ createScene(3, 0);
} else if (which == 3) {
- createScene2305(-1);
+ createScene(4, -1);
} else if (which == 4) {
- createScene2302(3);
+ createScene(1, 3);
} else {
- createScene2301(1);
+ createScene(0, 1);
}
}
@@ -80,136 +62,119 @@ Module2300::~Module2300() {
// TODO Sound1ChList_sub_407A50(0x1A214010);
}
-void Module2300::createScene2301(int which) {
- _vm->gameState().sceneNum = 0;
- createNavigationScene(0x004B67B8, which);
- SetUpdateHandler(&Module2300::updateScene2301);
-}
-
-void Module2300::createScene2302(int which) {
- _vm->gameState().sceneNum = 1;
- createNavigationScene(0x004B67E8, which);
- SetUpdateHandler(&Module2300::updateScene2302);
- if (_flag) {
- _volume = 15;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 15);
- }
-}
-
-void Module2300::createScene2303(int which) {
- _vm->gameState().sceneNum = 2;
- createNavigationScene(0x004B6878, which);
- SetUpdateHandler(&Module2300::updateScene2303);
-}
-
-void Module2300::createScene2304(int which) {
- _vm->gameState().sceneNum = 3;
- if (getGlobalVar(0x10938830)) {
- createNavigationScene(0x004B68F0, which);
- } else {
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _volume);
- createNavigationScene(0x004B68A8, which);
+void Module2300::createScene(int sceneNum, int which) {
+ debug("Module2300::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createNavigationScene(0x004B67B8, which);
+ break;
+ case 1:
+ createNavigationScene(0x004B67E8, which);
if (_flag) {
- _volume = 87;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 87);
+ _volume = 15;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 15);
}
- }
- SetUpdateHandler(&Module2300::updateScene2304);
-}
-
-void Module2300::createScene2305(int which) {
- _vm->gameState().sceneNum = 4;
- // TODO Sound1ChList_sub_4080B0(true);
- createSmackerScene(0x20080A0B, true, true, false);
- SetUpdateHandler(&Module2300::updateScene2305);
-}
-
-void Module2300::updateScene2301() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2302(4);
- _childObject->handleUpdate();
+ break;
+ case 2:
+ createNavigationScene(0x004B6878, which);
+ break;
+ case 3:
+ if (getGlobalVar(0x10938830)) {
+ createNavigationScene(0x004B68F0, which);
} else {
- sendMessage(_parentModule, 0x1009, 0);
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ createNavigationScene(0x004B68A8, which);
+ if (_flag) {
+ _volume = 87;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 87);
+ }
}
+ break;
+ case 4:
+ // TODO Sound1ChList_sub_4080B0(true);
+ createSmackerScene(0x20080A0B, true, true, false);
+ break;
}
+ SetUpdateHandler(&Module2300::updateScene);
+ _childObject->handleUpdate();
}
-void Module2300::updateScene2302() {
+void Module2300::updateScene() {
if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene2301(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene2303(1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 3) {
- createScene2302(3);
- _childObject->handleUpdate();
- } else if (_moduleResult == 4) {
- createScene2304(1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 5) {
- sendMessage(_parentModule, 0x1009, 3);
- } else {
- sendMessage(_parentModule, 0x1009, 4);
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(1, 4);
+ } else {
+ sendMessage(_parentModule, 0x1009, 0);
+ }
+ break;
+ case 1:
+ if (_moduleResult == 1) {
+ createScene(0, 0);
+ } else if (_moduleResult == 2) {
+ createScene(2, 1);
+ } else if (_moduleResult == 3) {
+ createScene(1, 3);
+ } else if (_moduleResult == 4) {
+ createScene(3, 1);
+ } else if (_moduleResult == 5) {
+ sendMessage(_parentModule, 0x1009, 3);
+ } else {
+ sendMessage(_parentModule, 0x1009, 4);
+ }
+ break;
+ case 2:
+ if (_moduleResult == 1) {
+ sendMessage(_parentModule, 0x1009, 3);
+ } else {
+ createScene(1, 5);
+ }
+ break;
+ case 3:
+ if (_moduleResult == 1) {
+ sendMessage(_parentModule, 0x1009, 2);
+ } else {
+ createScene(1, 1);
+ }
+ break;
+ case 4:
+ // TODO Sound1ChList_sub_4080B0(false);
+ createScene(1, 2);
+ break;
}
} else {
+ switch (_vm->gameState().sceneNum) {
+ case 1:
#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume++;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
- }
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume++;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
#endif
#if 0 // TODO
- if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
- Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
- Sound1ChList_setVolume(0x48498E46, 70);
- Sound1ChList_setVolume(0x50399F64, 70);
- }
+ if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
+ Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
+ Sound1ChList_setVolume(0x48498E46, 70);
+ Sound1ChList_setVolume(0x50399F64, 70);
+ }
#endif
- }
-}
-
-void Module2300::updateScene2303() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 3);
- } else {
- createScene2302(5);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module2300::updateScene2304() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 2);
- } else {
- createScene2302(1);
- _childObject->handleUpdate();
- }
- } else {
+ break;
+ case 3:
#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
- navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume--;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
- }
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
+ navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume--;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
#endif
- }
-}
-
-void Module2300::updateScene2305() {
- if (!updateChild()) {
- // TODO Sound1ChList_sub_4080B0(false);
- createScene2302(2);
- _childObject->handleUpdate();
+ break;
+ }
}
}
diff --git a/engines/neverhood/module2300.h b/engines/neverhood/module2300.h
index 9f705db..7222559 100644
--- a/engines/neverhood/module2300.h
+++ b/engines/neverhood/module2300.h
@@ -36,20 +36,10 @@ public:
Module2300(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2300();
protected:
- // TODO ResourceTable _resourceTable1;
- // TODO ResourceTable _resourceTable2;
bool _flag;
int _volume;
- void createScene2301(int which);
- void createScene2302(int which);
- void createScene2303(int which);
- void createScene2304(int which);
- void createScene2305(int which);
- void updateScene2301();
- void updateScene2302();
- void updateScene2303();
- void updateScene2304();
- void updateScene2305();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index c28d0eb..219f595 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -29,8 +29,6 @@ namespace Neverhood {
Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundVolume(0) {
- debug("Create Module3000(%d)", which);
-
// TODO Sound1ChList_addSoundResources(0x81293110, dword_4B7FC8, true);
// TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 1, 50, 600, 5, 150);
// TODO Sound1ChList_setSoundValues(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
@@ -46,53 +44,15 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
- switch (_vm->gameState().sceneNum) {
- default:
- case 1:
- createScene3002(-1);
- break;
- case 2:
- createScene3003(-1);
- break;
- case 3:
- createScene3004(-1);
- break;
- case 4:
- createScene3005(-1);
- break;
- case 5:
- createScene3006(-1);
- break;
- case 6:
- createScene3007(-1);
- break;
- case 7:
- createScene3008(-1);
- break;
- case 8:
- createScene3009(-1);
- break;
- case 9:
- createScene3010(-1);
- break;
- case 10:
- createScene3011(-1);
- break;
- case 11:
- createScene3012(-1);
- break;
- case 12:
- createScene3013(-1);
- break;
- }
+ createScene(_vm->gameState().sceneNum, -1);
} else if (which == 0) {
- createScene3002(0);
+ createScene(1, 0);
} else if (which == 1) {
- createScene3005(2);
+ createScene(4, 2);
} else if (which == 2) {
- createScene3005(1);
+ createScene(4, 1);
} else if (which == 3) {
- createScene3006(1);
+ createScene(5, 1);
}
}
@@ -101,384 +61,296 @@ Module3000::~Module3000() {
// TODO Sound1ChList_sub_407A50(0x81293110);
}
-void Module3000::createScene3002(int which) {
- _vm->gameState().sceneNum = 1;
- if (!getGlobalVar(0x01BA1A52)) {
- createNavigationScene(0x004B7C80, which);
- } else if (getGlobalVar(0x10938830)) {
- createNavigationScene(0x004B7CE0, which);
- } else {
- createNavigationScene(0x004B7CB0, which);
- }
- SetUpdateHandler(&Module3000::updateScene3002);
-}
-
-void Module3000::createScene3002b(int which) {
- _vm->gameState().sceneNum = 1;
- if (!getGlobalVar(0x01BA1A52)) {
- if (getGlobalVar(0x10938830)) {
- createSmackerScene(0x00940021, true, true, false);
+void Module3000::createScene(int sceneNum, int which) {
+ static const byte kNavigationTypes05[] = {3, 0};
+ static const byte kNavigationTypes06[] = {5};
+ debug("Module3000::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 1:
+ if (!getGlobalVar(0x01BA1A52)) {
+ createNavigationScene(0x004B7C80, which);
+ } else if (getGlobalVar(0x10938830)) {
+ createNavigationScene(0x004B7CE0, which);
} else {
- createSmackerScene(0x01140021, true, true, false);
+ createNavigationScene(0x004B7CB0, which);
+ }
+ break;
+ case 2:
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ if (_flag) {
+ _soundVolume = 90;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 90);
}
- } else {
if (getGlobalVar(0x10938830)) {
- createSmackerScene(0x001011B1, true, true, false);
+ createNavigationScene(0x004B7D58, which);
} else {
- createSmackerScene(0x001021B1, true, true, false);
+ createNavigationScene(0x004B7D10, which);
}
+ break;
+ case 3:
+ if (getGlobalVar(0x09221A62))
+ createNavigationScene(0x004B7E60, which);
+ else if (getGlobalVar(0x10938830))
+ createNavigationScene(0x004B7DA0, which);
+ else
+ createNavigationScene(0x004B7E00, which);
+ break;
+ case 4:
+ if (getGlobalVar(0x09221A62))
+ createNavigationScene(0x004B7F20, which);
+ else
+ createNavigationScene(0x004B7EC0, which);
+ break;
+ case 5:
+ createNavigationScene(0x004B7F80, which, kNavigationTypes05);
+ break;
+ case 6:
+ createNavigationScene(0x004B7FB0, which, kNavigationTypes06);
+ break;
+ case 7:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
+ if (!getSubVar(0x40050052, 0x089809C2)) {
+ setSubVar(0x40050052, 0x089809C2, 1);
+ createSmackerScene(0x90022001, true, true, false);
+ } else
+ createSmackerScene(0x98022001, true, true, false);
+ break;
+ case 8:
+ _childObject = new Scene3009(_vm, this, which);
+ break;
+ case 9:
+ _childObject = new Scene3010(_vm, this, 0);
+ break;
+ case 10:
+ _childObject = new Scene3011(_vm, this, 0);
+ break;
+ case 11:
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
+ if (!getSubVar(0x40050052, 0x10130993)) {
+ setSubVar(0x40050052, 0x10130993, 1);
+ createSmackerScene(0x31093019, true, true, false);
+ } else
+ createSmackerScene(0x20093019, true, true, false);
+ break;
+ case 12:
+ _childObject = new Scene3010(_vm, this, 1);
+ break;
+ // NOTE: Newly introduced sceneNums
+ case 1001:
+ if (!getGlobalVar(0x01BA1A52))
+ if (getGlobalVar(0x10938830))
+ createSmackerScene(0x00940021, true, true, false);
+ else
+ createSmackerScene(0x01140021, true, true, false);
+ else
+ if (getGlobalVar(0x10938830))
+ createSmackerScene(0x001011B1, true, true, false);
+ else
+ createSmackerScene(0x001021B1, true, true, false);
+ setGlobalVar(0x01BA1A52, getGlobalVar(0x01BA1A52) ? 0 : 1);
+ break;
+ case 1006:
+ createSmackerScene(0x080810C5, true, true, false);
+ break;
+ case 1008:
+ createSmackerScene(getGlobalVar(0xF0402B0A), true, true, false);
+ break;
}
- SetUpdateHandler(&Module3000::updateScene3002b);
- setGlobalVar(0x01BA1A52, getGlobalVar(0x01BA1A52) ? 0 : 1);
-}
-
-void Module3000::createScene3003(int which) {
- _vm->gameState().sceneNum = 2;
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
- if (_flag) {
- _soundVolume = 90;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 90);
- }
- if (getGlobalVar(0x10938830)) {
- createNavigationScene(0x004B7D58, which);
- } else {
- createNavigationScene(0x004B7D10, which);
- }
- SetUpdateHandler(&Module3000::updateScene3003);
-}
-
-void Module3000::createScene3004(int which) {
- _vm->gameState().sceneNum = 3;
- if (getGlobalVar(0x09221A62)) {
- createNavigationScene(0x004B7E60, which);
- } else if (getGlobalVar(0x10938830)) {
- createNavigationScene(0x004B7DA0, which);
- } else {
- createNavigationScene(0x004B7E00, which);
- }
- SetUpdateHandler(&Module3000::updateScene3004);
-}
-
-void Module3000::createScene3005(int which) {
- _vm->gameState().sceneNum = 4;
- if (getGlobalVar(0x09221A62)) {
- createNavigationScene(0x004B7F20, which);
- } else {
- createNavigationScene(0x004B7EC0, which);
- }
- SetUpdateHandler(&Module3000::updateScene3005);
-}
-
-void Module3000::createScene3006(int which) {
- static const byte kNavigationTypes[] = {3, 0};
- _vm->gameState().sceneNum = 5;
- createNavigationScene(0x004B7F80, which, kNavigationTypes);
- SetUpdateHandler(&Module3000::updateScene3006);
-}
-
-void Module3000::createScene3007(int which) {
- static const byte kNavigationTypes[] = {5};
- _vm->gameState().sceneNum = 6;
- createNavigationScene(0x004B7FB0, which, kNavigationTypes);
- SetUpdateHandler(&Module3000::updateScene3007);
-}
-
-void Module3000::createScene3008(int which) {
- _vm->gameState().sceneNum = 7;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
- if (!getSubVar(0x40050052, 0x089809C2)) {
- setSubVar(0x40050052, 0x089809C2, 1);
- createSmackerScene(0x90022001, true, true, false);
- } else {
- createSmackerScene(0x98022001, true, true, false);
- }
- SetUpdateHandler(&Module3000::updateScene3002b);
-}
-
-void Module3000::createScene3009(int which) {
- _vm->gameState().sceneNum = 8;
- _childObject = new Scene3009(_vm, this, which);
- SetUpdateHandler(&Module3000::updateScene3009);
-}
-
-void Module3000::createScene3010(int which) {
- _vm->gameState().sceneNum = 9;
- _childObject = new Scene3010(_vm, this, 0);
- SetUpdateHandler(&Module3000::updateScene3010);
-}
-
-void Module3000::createScene3011(int which) {
- _vm->gameState().sceneNum = 10;
- _childObject = new Scene3011(_vm, this, 0);
- SetUpdateHandler(&Module3000::updateScene3011);
-}
-
-void Module3000::createScene3012(int which) {
- _vm->gameState().sceneNum = 11;
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
- if (!getSubVar(0x40050052, 0x10130993)) {
- setSubVar(0x40050052, 0x10130993, 1);
- createSmackerScene(0x31093019, true, true, false);
- } else {
- createSmackerScene(0x20093019, true, true, false);
- }
- SetUpdateHandler(&Module3000::updateScene3002b);
-}
-
-void Module3000::createScene3013(int which) {
- _vm->gameState().sceneNum = 12;
- _childObject = new Scene3010(_vm, this, 1);
- SetUpdateHandler(&Module3000::updateScene3002b);
-}
-
-void Module3000::updateScene3002() {
+ SetUpdateHandler(&Module3000::updateScene);
_childObject->handleUpdate();
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (navigationIndex == 1) {
- if (frameNumber == 0) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
- } else if (frameNumber == 100) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
- }
- } else if (navigationIndex == 0) {
- if (frameNumber == 0) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
- } else if (frameNumber == 10) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
- }
- if (_flag && _soundVolume < 90 && frameNumber % 2) {
- if (frameNumber == 0)
- _soundVolume = 40;
- else
- _soundVolume++;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
- }
- }
- }
-#endif
- if (_done) {
- int areaType = navigationScene()->getNavigationAreaType();
- _done = false;
- delete _childObject;
- _childObject = NULL;
- if (!getGlobalVar(0x01BA1A52)) {
- if (_moduleResult == 0) {
- createScene3010(-1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 0);
- }
- } else {
- if (_moduleResult == 0) {
- if (areaType == 2) {
- createScene3003(0);
- _childObject->handleUpdate();
- } else {
- //createScene3002b(-1);
- _childObject->handleUpdate();
- }
- } else if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 0);
- }
- }
- }
}
-void Module3000::updateScene3002b() {
+void Module3000::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 1:
- if (getGlobalVar(0x01BA1A52)) {
- createScene3002(0);
- _childObject->handleUpdate();
+ if (!getGlobalVar(0x01BA1A52)) {
+ if (_moduleResult == 0)
+ createScene(9, -1);
+ else if (_moduleResult == 1)
+ sendMessage(_parentModule, 0x1009, 0);
} else {
- createScene3013(-1);
- _childObject->handleUpdate();
+ if (_moduleResult == 0)
+ if (_navigationAreaType == 2)
+ createScene(2, 0);
+ else
+ createScene(1001, -1);
+ else if (_moduleResult == 1)
+ sendMessage(_parentModule, 0x1009, 0);
}
break;
+ case 2:
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ if (_flag) {
+ _soundVolume = 0;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
+ }
+ if (_moduleResult == 0) {
+ createScene(3, 0);
+ } else if (_moduleResult == 1) {
+ setGlobalVar(0x01BA1A52, 0);
+ createScene(1, 1);
+ }
+ break;
+ case 3:
+ if (_moduleResult == 1)
+ createScene(4, 0);
+ else if (_moduleResult == 3)
+ createScene(10, -1);
+ else if (getGlobalVar(0x09221A62))
+ createScene(5, 0);
+ else
+ createScene(2, 1);
+ break;
+ case 4:
+ if (_moduleResult == 0)
+ sendMessage(_parentModule, 0x1009, 1);
+ else if (_moduleResult == 1)
+ createScene(7, -1);
+ else if (_moduleResult == 2)
+ createScene(3, 3);
+ break;
+ case 5:
+ if (_moduleResult == 0)
+ createScene(6, 0);
+ else if (_moduleResult == 1)
+ createScene(3, 0);
+ break;
+ case 6:
+ if (_navigationAreaType == 4)
+ createScene(11, -1);
+ else
+ createScene(1006, -1);
+ break;
case 7:
+ createScene(8, -1);
+ break;
case 8:
- createScene3009(-1);
+ _flag = getGlobalVar(0x10938830); // CHECKME
+ if (_moduleResult != 1) {
+ // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
+ createScene(4, 1);
+ } else if (getGlobalVar(0xF0402B0A)) {
+ createScene(1008, -1);
+ } else {
+ // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0);
+ createScene(4, 1);
+ }
+ break;
+ case 9:
+ if (_moduleResult == 0 || _moduleResult == 2)
+ createScene(1, 0);
+ else if (_moduleResult == 1)
+ createScene(1001, -1);
+ break;
+ case 10:
+ createScene(3, 3);
break;
case 11:
sendMessage(_parentModule, 0x1009, 3);
break;
case 12:
- createScene3002(0);
- _childObject->handleUpdate();
+ createScene(1, 0);
break;
- default:
- createScene3006(0);
+ case 1001:
+ if (getGlobalVar(0x01BA1A52))
+ createScene(1, 0);
+ else
+ createScene(12, -1);
+ break;
+ case 1006:
+ createScene(5, 0);
+ break;
+ case 1008:
+ createScene(8, -1);
break;
- }
- }
-}
-
-void Module3000::updateScene3003() {
- if (!updateChild()) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
- if (_flag) {
- _soundVolume = 0;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
- }
- if (_moduleResult == 0) {
- createScene3004(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 1) {
- setGlobalVar(0x01BA1A52, 0);
- createScene3002(1);
- _childObject->handleUpdate();
}
} else {
+ switch (_vm->gameState().sceneNum) {
+ case 1:
#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (_flag && _soundVolume > 1 && frameNumber % 2) {
- _soundVolume--;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (navigationIndex == 1) {
+ if (frameNumber == 0) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ } else if (frameNumber == 100) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ }
+ } else if (navigationIndex == 0) {
+ if (frameNumber == 0) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ } else if (frameNumber == 10) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ }
+ if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (frameNumber == 0)
+ _soundVolume = 40;
+ else
+ _soundVolume++;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
+ }
}
- if (navigationIndex == 0) {
- if (frameNumber == 35) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+#endif
+ break;
+ case 2:
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (_flag && _soundVolume > 1 && frameNumber % 2) {
+ _soundVolume--;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
}
- } else if (navigationIndex == 1) {
- if (frameNumber == 55) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ if (navigationIndex == 0) {
+ if (frameNumber == 35) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ }
+ } else if (navigationIndex == 1) {
+ if (frameNumber == 55) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ }
}
}
- }
#endif
- }
-}
-
-void Module3000::updateScene3004() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- createScene3005(0);
- _childObject->handleUpdate();
- } else if (_moduleResult == 3) {
- createScene3011(-1);
- _childObject->handleUpdate();
- } else if (getGlobalVar(0x09221A62)) {
- createScene3006(0);
- _childObject->handleUpdate();
- } else {
- createScene3003(1);
- _childObject->handleUpdate();
- }
- } else {
+ break;
+ case 3:
#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (navigationIndex == 2) {
- if (frameNumber == 40) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
- }
- if (_flag && _soundVolume < 90 && frameNumber % 2) {
- if (frameNumber == 0)
- _soundVolume = 40;
- else
- _soundVolume++;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (navigationIndex == 2) {
+ if (frameNumber == 40) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ }
+ if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (frameNumber == 0)
+ _soundVolume = 40;
+ else
+ _soundVolume++;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
}
}
- }
#endif
- }
-}
-
-void Module3000::updateScene3005() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- sendMessage(_parentModule, 0x1009, 1);
- } else if (_moduleResult == 1) {
- createScene3008(-1);
- _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- createScene3004(3);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module3000::updateScene3006() {
- if (!updateChild()) {
- if (_moduleResult == 0) {
- createScene3007(0);
- } else if (_moduleResult == 1) {
- createScene3004(0);
- }
- _childObject->handleUpdate();
- } else {
+ break;
+ case 5:
#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
- // TODO Sound1ChList_sub_4080B0(false);
- }
+ if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
#endif
- }
-}
-
-void Module3000::updateScene3007() {
- _childObject->handleUpdate();
- if (_done) {
- int areaType = navigationScene()->getNavigationAreaType();
- _done = false;
- delete _childObject;
- _childObject = NULL;
- if (areaType == 4) {
- createScene3012(-1);
- _childObject->handleUpdate();
- } else {
- createSmackerScene(0x080810C5, true, true, false);
- SetUpdateHandler(&Module3000::updateScene3002b);
- }
- }
-}
-
-void Module3000::updateScene3009() {
- if (!updateChild()) {
- _flag = getGlobalVar(0x10938830); // CHECKME
- if (_moduleResult != 1) {
- // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
- createScene3005(1);
- _childObject->handleUpdate();
- } else if (getGlobalVar(0xF0402B0A)) {
- createSmackerScene(getGlobalVar(0xF0402B0A), true, true, false);
- SetUpdateHandler(&Module3000::updateScene3002b);
- } else {
- // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0);
- createScene3005(1);
- _childObject->handleUpdate();
- }
- }
-}
-
-void Module3000::updateScene3010() {
- if (!updateChild()) {
- if (_moduleResult == 0 || _moduleResult == 2) {
- createScene3002(0);
- } else if (_moduleResult == 1) {
- createScene3002b(-1);
+ break;
}
- _childObject->handleUpdate();
- }
-}
-
-void Module3000::updateScene3011() {
- if (!updateChild()) {
- createScene3004(3);
- _childObject->handleUpdate();
}
}
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 63e5261..2764c83 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -37,30 +37,8 @@ public:
protected:
int _soundVolume;
bool _flag;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createScene3002(int which);
- void createScene3002b(int which);
- void createScene3003(int which);
- void createScene3004(int which);
- void createScene3005(int which);
- void createScene3006(int which);
- void createScene3007(int which);
- void createScene3008(int which);
- void createScene3009(int which);
- void createScene3010(int which);
- void createScene3011(int which);
- void createScene3012(int which);
- void createScene3013(int which);
- void updateScene3002();
- void updateScene3002b();
- void updateScene3003();
- void updateScene3004();
- void updateScene3005();
- void updateScene3006();
- void updateScene3007();
- void updateScene3009();
- void updateScene3010();
- void updateScene3011();
+ void createScene(int sceneNum, int which);
+ void updateScene();
};
// Scene3009
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index ae29063..c24bf6a 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -81,9 +81,7 @@ void SmackerScene::nextVideo() {
setSubVar(0x00800410, smackerFileHash, 1);
}
if (_fileHashListIndex == 0) {
- _smackerPlayer = new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false);
- addEntity(_smackerPlayer);
- addSurface(_smackerPlayer->getSurface());
+ _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false));
// TODO? Screen.hSmack = _smackerPlayer;
} else {
_smackerPlayer->open(smackerFileHash, false);
Commit: 10ff1590305eff85e97ad84f33a0397b54d1341d
https://github.com/scummvm/scummvm/commit/10ff1590305eff85e97ad84f33a0397b54d1341d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Move createModuleXXX/updateModuleXXX methods
There are merged into createModule and updateModule in the GameModule class
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e6bd99e..8cdd98e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -38,31 +38,22 @@
namespace Neverhood {
GameModule::GameModule(NeverhoodEngine *vm)
- : Module(vm, NULL) {
+ : Module(vm, NULL), _moduleNum(-1) {
// Other initializations moved to actual engine class
-
// TODO
-
// TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
-
SetMessageHandler(&GameModule::handleMessage);
-
}
GameModule::~GameModule() {
// TODO Sound1ChList_sub_407AF0(0x2D0031);
-
delete _childObject;
_childObject = NULL;
-
// TODO: Set palette to black but probably not neccessary
-
// TODO Sound1ChList_sub_408480();
-
// TODO Set debug vars (maybe)
-
}
void GameModule::handleMouseMove(int16 x, int16 y) {
@@ -87,6 +78,7 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
void GameModule::initScene1307Vars() {
+ // Exit if it's already initialized
if (getSubVar(0x40050052, 0x25400B10))
return;
@@ -256,238 +248,171 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
-// createModule1500(0); // Logos and intro video //Real
-// createModule1000(-1);
-// createModule2300(2);
- //createModule1200(-1);
- //createModule1800(-1);
- //createModule1700(-1);
- //createModule1700(1);
- //createModule1400(-1);
+// createModule(1500, 0); // Logos and intro video //Real
#if 0
_vm->gameState().sceneNum = 0;
- createModule1200(-1);
+ createModule(1200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
- createModule1800(-1);
+ createModule(1800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
- createModule2000(-1);
+ createModule(2000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 4;
- createModule2200(-1);
+ createModule(2200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
- createModule1000(-1);
+ createModule(1000, -1);
#endif
#if 1
_vm->gameState().sceneNum = 12;
- createModule3000(-1);
+ createModule(3000, -1);
#endif
}
-void GameModule::createModule1000(int which) {
- setGlobalVar(0x91080831, 0x03294419);
- _childObject = new Module1000(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1000);
-}
-
-void GameModule::updateModule1000() {
- if (!updateChild()) {
- createModule2300(0);
- _childObject->handleUpdate();
- }
-}
-
-void GameModule::createModule1200(int which) {
- setGlobalVar(0x91080831, 0x00478311);
- _childObject = new Module1200(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1200);
-}
-
-void GameModule::updateModule1200() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- error("// TODO createModule2600(0);");
- // TODO createModule2600(0);
- // TODO _childObject->handleUpdate();
- } else {
- createModule2300(2);
- _childObject->handleUpdate();
- }
- }
-}
-
-void GameModule::createModule1300(int which) {
- setGlobalVar(0x91080831, 0x0061C090);
- _childObject = new Module1300(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1300);
-}
-
-void GameModule::updateModule1300() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- // TODO _gameState.clear();
- // TODO GameModule_handleKeyEscape
- } else {
- // TODO createModule2900(0);
- _childObject->handleUpdate();
- }
- }
-}
-
-void GameModule::createModule1400(int which) {
- setGlobalVar(0x91080831, 0x00AD0012);
- _childObject = new Module1400(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1400);
-}
-
-void GameModule::updateModule1400() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- error("WEIRD!");
- } else {
- // TODO createModule1600(1);
- // TODO _childObject->handleUpdate();
- }
- }
-}
-
-void GameModule::createModule1500(int which) {
- _someFlag1 = false;
- setGlobalVar(0x91080831, 0x00F10114);
- _childObject = new Module1500(_vm, this, which, true);
- SetUpdateHandler(&GameModule::updateModule1500);
-}
-
-void GameModule::updateModule1500() {
- if (!updateChild()) {
- createModule1000(0);
- _childObject->handleUpdate();
- }
-}
-
-void GameModule::createModule1700(int which) {
- setGlobalVar(0x91080831, 0x04212331);
- _childObject = new Module1700(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1700);
-}
-
-void GameModule::updateModule1700() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- // TODO createModule2900(3);
- // TODO _childObject->handleUpdate();
- } else {
- // TODO createModule1600(2);
- // TODO _childObject->handleUpdate();
- }
- }
-}
-
-void GameModule::createModule1800(int which) {
- setGlobalVar(0x91080831, 0x04A14718);
- _childObject = new Module1800(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule1800);
-}
-
-void GameModule::updateModule1800() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- // TODO GameState_clear();
- // TODO GameModule_handleKeyEscape();
- } else if (_moduleResult == 2) {
- // TODO createModule2700(0);
- // TODO _childObject->handleUpdate();
- } else if (_moduleResult == 3) {
- createModule3000(3);
- _childObject->handleUpdate();
- } else {
- // TODO createModule2800(0);
- // TODO _childObject->handleUpdate();
- }
- }
-}
-
-void GameModule::createModule2000(int which) {
- setGlobalVar(0x91080831, 0x08250000);
- _childObject = new Module2000(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule2000);
-}
-
-void GameModule::updateModule2000() {
- if (!updateChild()) {
- // TODO createModule2900(4);
- _childObject->handleUpdate();
- }
-}
-
-void GameModule::createModule2200(int which) {
- setGlobalVar(0x91080831, 0x11391412);
- _childObject = new Module2200(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule2200);
-}
-
-void GameModule::updateModule2200() {
- if (!updateChild()) {
- createModule2300(1);
- _childObject->handleUpdate();
+void GameModule::createModule(int moduleNum, int which) {
+ debug("GameModule::createModule(%d, %d)", moduleNum, which);
+ _moduleNum = moduleNum;
+ switch (_moduleNum) {
+ case 1000:
+ setGlobalVar(0x91080831, 0x03294419);
+ _childObject = new Module1000(_vm, this, which);
+ break;
+ case 1200:
+ setGlobalVar(0x91080831, 0x00478311);
+ _childObject = new Module1200(_vm, this, which);
+ break;
+ case 1300:
+ setGlobalVar(0x91080831, 0x0061C090);
+ _childObject = new Module1300(_vm, this, which);
+ break;
+ case 1400:
+ setGlobalVar(0x91080831, 0x00AD0012);
+ _childObject = new Module1400(_vm, this, which);
+ break;
+ case 1500:
+ _someFlag1 = false;
+ setGlobalVar(0x91080831, 0x00F10114);
+ _childObject = new Module1500(_vm, this, which, true);
+ break;
+ case 1700:
+ setGlobalVar(0x91080831, 0x04212331);
+ _childObject = new Module1700(_vm, this, which);
+ break;
+ case 1800:
+ setGlobalVar(0x91080831, 0x04A14718);
+ _childObject = new Module1800(_vm, this, which);
+ break;
+ case 2000:
+ setGlobalVar(0x91080831, 0x08250000);
+ _childObject = new Module2000(_vm, this, which);
+ break;
+ case 2200:
+ setGlobalVar(0x91080831, 0x11391412);
+ _childObject = new Module2200(_vm, this, which);
+ break;
+ case 2300:
+ setGlobalVar(0x91080831, 0x1A214010);
+ _childObject = new Module2300(_vm, this, which);
+ break;
+ case 3000:
+ setGlobalVar(0x91080831, 0x81293110);
+ _childObject = new Module3000(_vm, this, which);
+ break;
+ default:
+ error("GameModule::createModule() Could not create module %d", moduleNum);
}
+ SetUpdateHandler(&GameModule::updateModule);
+ _childObject->handleUpdate();
}
-void GameModule::createModule2300(int which) {
- setGlobalVar(0x91080831, 0x1A214010);
- _childObject = new Module2300(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule2300);
-}
-
-void GameModule::updateModule2300() {
+void GameModule::updateModule() {
if (!updateChild()) {
- if (_moduleResult == 1) {
- createModule2200(0);
- } else if (_moduleResult == 2) {
- createModule1200(0);
- } else if (_moduleResult == 3) {
- // TODO createModule2400(0);
- } else if (_moduleResult == 4) {
- createModule3000(0);
- } else {
- createModule1000(1);
- }
- _childObject->handleUpdate();
- }
-}
-
-void GameModule::createModule2400(int which) {
- error("createModule2400");
-}
-
-void GameModule::createModule3000(int which) {
- setGlobalVar(0x91080831, 0x81293110);
- _childObject = new Module3000(_vm, this, which);
- SetUpdateHandler(&GameModule::updateModule3000);
-}
-
-void GameModule::updateModule3000() {
- if (!updateChild()) {
- if (_moduleResult == 1) {
- // TODO createModule1900(0);
- // TODO _childObject->handleUpdate();
- } else if (_moduleResult == 2) {
- // WEIRD: Sets the errorFlag
- } else if (_moduleResult == 3) {
- createModule1800(3);
- _childObject->handleUpdate();
- } else if (_moduleResult == 4) {
- createModule3000(0);
- _childObject->handleUpdate();
- } else {
- createModule2300(4);
- _childObject->handleUpdate();
+ switch (_moduleNum) {
+ case 1000:
+ createModule(2300, 0);
+ break;
+ case 1200:
+ if (_moduleResult == 1) {
+ createModule(2600, 0);
+ } else {
+ createModule(2300, 2);
+ }
+ break;
+ case 1300:
+ if (_moduleResult == 1) {
+ // TODO _gameState.clear();
+ // TODO GameModule_handleKeyEscape
+ } else {
+ createModule(2900, 0);
+ }
+ break;
+ case 1400:
+ if (_moduleResult == 1) {
+ error("WEIRD!");
+ } else {
+ createModule(1600, 1);
+ }
+ break;
+ case 1500:
+ createModule(1000, 0);
+ break;
+ case 1700:
+ if (_moduleResult == 1) {
+ createModule(2900, 3);
+ } else {
+ createModule(1600, 2);
+ }
+ break;
+ case 1800:
+ if (_moduleResult == 1) {
+ // TODO GameState_clear();
+ // TODO GameModule_handleKeyEscape();
+ } else if (_moduleResult == 2) {
+ createModule(2700, 0);
+ } else if (_moduleResult == 3) {
+ createModule(3000, 3);
+ } else {
+ createModule(2800, 0);
+ }
+ break;
+ case 2000:
+ createModule(2900, 4);
+ break;
+ case 2200:
+ createModule(2300, 1);
+ break;
+ case 2300:
+ if (_moduleResult == 1) {
+ createModule(2200, 0);
+ } else if (_moduleResult == 2) {
+ createModule(1200, 0);
+ } else if (_moduleResult == 3) {
+ createModule(2400, 0);
+ } else if (_moduleResult == 4) {
+ createModule(3000, 0);
+ } else {
+ createModule(1000, 1);
+ }
+ break;
+ case 3000:
+ if (_moduleResult == 1) {
+ createModule(1900, 0);
+ } else if (_moduleResult == 2) {
+ // WEIRD: Sets the errorFlag
+ } else if (_moduleResult == 3) {
+ createModule(1800, 3);
+ } else if (_moduleResult == 4) {
+ createModule(3000, 0);
+ } else {
+ createModule(2300, 4);
+ }
+ break;
}
}
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 02f16c5..6da7123 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -45,36 +45,10 @@ protected:
bool _someFlag1;
bool _field2C;
uint32 _counter;
- /* TODO
- ResourceTable _resourceTable1;
- ResourceTable _resourceTable2;
- ResourceTable _resourceTable3;
- ResourceTable _resourceTable4;
- */
+ int _moduleNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createModule1000(int which);
- void updateModule1000();
- void createModule1200(int which);
- void updateModule1200();
- void createModule1300(int which);
- void updateModule1300();
- void createModule1400(int which);
- void updateModule1400();
- void createModule1500(int which);
- void updateModule1500();
- void createModule1700(int which);
- void updateModule1700();
- void createModule1800(int which);
- void updateModule1800();
- void createModule2000(int which);
- void updateModule2000();
- void createModule2200(int which);
- void updateModule2200();
- void createModule2300(int which);
- void updateModule2300();
- void createModule2400(int which);
- void createModule3000(int which);
- void updateModule3000();
+ void createModule(int moduleNum, int which);
+ void updateModule();
};
} // End of namespace Neverhood
Commit: fa695229bed037257099e6c082f7e50be1119882
https://github.com/scummvm/scummvm/commit/fa695229bed037257099e6c082f7e50be1119882
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Add Sprite::setVisible and use it instead of direct access to the surface member
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 4539b37..1cc4b43 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -174,7 +174,7 @@ void AsScene1001Door::callback1() {
break;
case 3:
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
break;
default:
setFileHash(0x624C0498, 0, -1);
@@ -193,7 +193,7 @@ void AsScene1001Door::callback2() {
void AsScene1001Door::callback3() {
_soundResource1.play();
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
AsScene1001Hammer::AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor)
@@ -255,7 +255,7 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
case 0x3002:
SetMessageHandler(NULL);
setGlobalVar(0x03C698DA, 1);
- _surface->setVisible(false);
+ setVisible(false);
break;
}
return 0;
@@ -310,14 +310,14 @@ SsCommonButtonSprite::SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentSce
_priority = 1100;
_soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
- _surface->setVisible(false);
+ setVisible(false);
SetUpdateHandler(&SsCommonButtonSprite::update);
SetMessageHandler(&SsCommonButtonSprite::handleMessage);
}
void SsCommonButtonSprite::update() {
if (_countdown != 0 && (--_countdown) == 0) {
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -326,7 +326,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x480B:
sendMessage(_parentScene, 0x480B, 0);
- _surface->setVisible(true);
+ setVisible(true);
_countdown = 8;
_soundResource.play(_soundFileHash);
break;
@@ -740,7 +740,7 @@ Class505::Class505(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1400) {
createSurface(1025, 88, 165);
- _surface->setVisible(false);
+ setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class505::handleMessage);
}
@@ -752,11 +752,11 @@ uint32 Class505::handleMessage(int messageNum, const MessageParam ¶m, Entity
_x = ((Sprite*)sender)->getX() - 98;
_y = ((Sprite*)sender)->getY() - 111;
setFileHash(0x0422255A, 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
break;
case 0x3002:
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
break;
}
return messageResult;
@@ -844,7 +844,7 @@ Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, ui
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _surface->setVisible(false);
+ setVisible(false);
_needRefresh = true;
SetUpdateHandler(&Class426::update);
@@ -906,7 +906,7 @@ void Class426::update() {
_countdown = 4;
} else if (_status == 3) {
_status = 0;
- _surface->setVisible(false);
+ setVisible(false);
}
}
}
@@ -918,7 +918,7 @@ uint32 Class426::handleMessage(int messageNum, const MessageParam ¶m, Entity
sendMessage(_parentScene, 0x480B, 0);
_status = 1;
_countdown = 4;
- _surface->setVisible(true);
+ setVisible(true);
_soundResource.play(_soundFileHash);
break;
}
@@ -1195,7 +1195,7 @@ Class506::Class506(NeverhoodEngine *vm)
setFileHash(0x004A4495, -1, -1);
_newHashListIndex = -2;
} else {
- _surface->setVisible(false);
+ setVisible(false);
}
SetUpdateHandler(&Class506::update);
SetMessageHandler(&Class506::handleMessage4491B0);
@@ -1241,7 +1241,7 @@ void Class506::sub449250() {
setFileHash(0x004A4495, 0, -1);
SetMessageHandler(&Class506::handleMessage4491B0);
_newHashListIndex = -2;
- _surface->setVisible(true);
+ setVisible(true);
}
void Class506::sub449280() {
@@ -1249,11 +1249,11 @@ void Class506::sub449280() {
_playBackwards = true;
SetMessageHandler(&Class506::handleMessage449210);
SetAnimationCallback3(&Class506::sub4492C0);
- _surface->setVisible(true);
+ setVisible(true);
}
void Class506::sub4492C0() {
- _surface->setVisible(false);
+ setVisible(false);
setFileHash1();
}
@@ -1263,26 +1263,26 @@ Class478::Class478(NeverhoodEngine *vm, Klayman *klayman)
createSurface(1200, 40, 163);
SetUpdateHandler(&Class478::update);
SetMessageHandler(&Sprite::handleMessage);
- _surface->setVisible(false);
+ setVisible(false);
}
void Class478::update() {
if (_klayman->getCurrAnimFileHash() == 0x3A292504) {
setFileHash(0xBA280522, _frameIndex, -1);
_newHashListIndex = _klayman->getFrameIndex();
- _surface->setVisible(true);
+ setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
} else if (_klayman->getCurrAnimFileHash() == 0x122D1505) {
setFileHash(0x1319150C, _frameIndex, -1);
_newHashListIndex = _klayman->getFrameIndex();
- _surface->setVisible(true);
+ setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
} else {
- _surface->setVisible(false);
+ setVisible(false);
}
AnimatedSprite::update();
}
@@ -1294,19 +1294,19 @@ Class479::Class479(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman)
SetUpdateHandler(&Class479::update);
SetMessageHandler(&Class479::handleMessage);
createSurface(1000, 33, 41);
- _surface->setVisible(false);
+ setVisible(false);
}
void Class479::update() {
if (_klayman->getCurrAnimFileHash() == 0xAC20C012 && _klayman->getFrameIndex() < 50) {
setFileHash(0x9820C913, _klayman->getFrameIndex(), -1);
_newHashListIndex = _klayman->getFrameIndex();
- _surface->setVisible(true);
+ setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
} else {
- _surface->setVisible(false);
+ setVisible(false);
}
AnimatedSprite::update();
}
@@ -1656,7 +1656,7 @@ AsScene1004TrashCan::AsScene1004TrashCan(NeverhoodEngine *vm)
createSurface(800, 56, 50);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1004TrashCan::handleMessage);
- _surface->setVisible(false);
+ setVisible(false);
}
uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1669,11 +1669,11 @@ uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam &pa
break;
case 0x2002:
setFileHash(0xEB312C11, 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
break;
case 0x3002:
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
break;
}
return 0;
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index ff04937..9cab544 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -202,7 +202,7 @@ AsScene1201Tape::AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32
if (!getSubVar(0x02038314, _nameHash) && !getSubVar(0x02720344, _nameHash)) {
SetMessageHandler(&AsScene1201Tape::handleMessage);
} else {
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
}
}
@@ -216,7 +216,7 @@ uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m,
break;
case 0x4806:
setSubVar(0x02038314, _nameHash, 1);
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
break;
}
@@ -283,7 +283,7 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
_countdown = 25;
} else {
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -310,21 +310,21 @@ uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam &p
void AsScene1201RightDoor::sub40D7E0() {
setFileHash(0xD088AC30, 0, -1);
_newHashListIndex = -2;
- _surface->setVisible(true);
+ setVisible(true);
_soundResource.play(calcHash("fxDoorOpen20"));
}
void AsScene1201RightDoor::sub40D830() {
setFileHash(0xD088AC30, -1, -1);
_playBackwards = true;
- _surface->setVisible(true);
+ setVisible(true);
_soundResource.play(calcHash("fxDoorClose20"));
SetAnimationCallback3(&AsScene1201RightDoor::sub40D880);
}
void AsScene1201RightDoor::sub40D880() {
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
Class464::Class464(NeverhoodEngine *vm)
@@ -334,7 +334,7 @@ Class464::Class464(NeverhoodEngine *vm)
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class464::handleMessage);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- _surface->setVisible(false);
+ setVisible(false);
}
uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -344,11 +344,11 @@ uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity
_x = 436;
_y = 339;
setFileHash(0xA060C599, 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
break;
case 0x3002:
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
removeCallbacks();
break;
}
@@ -447,7 +447,7 @@ Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(&Class465::spriteUpdate40D150);
setFileHash(0x828C0411, 0, -1);
- _surface->setVisible(false);
+ setVisible(false);
}
Class465::~Class465() {
@@ -457,7 +457,7 @@ Class465::~Class465() {
void Class465::update() {
AnimatedSprite::update();
if (getGlobalVar(0x20A0C516)) {
- _surface->setVisible(true);
+ setVisible(true);
SetUpdateHandler(&AnimatedSprite::update);
// TODO Sound1ChList_addSoundResource(0x041080A4, 0x460A1050, true);
// TODO Sound1ChList_playLooping(0x460A1050);
@@ -540,7 +540,7 @@ uint32 AsScene1201Match::handleMessage40C360(int messageNum, const MessageParam
messageResult = 1;
break;
case 0x4806:
- _surface->setVisible(false);
+ setVisible(false);
setGlobalVar(0x0112090A, 3);
break;
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 518568c..f27952f 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -428,7 +428,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_class595 = addSprite(new Class595(_vm, this));
_sprite1 = insertStaticSprite(0x942FC224, 300);
_sprite2 = insertStaticSprite(0x70430830, 1200);
- _sprite2->getSurface()->setVisible(false);
+ _sprite2->setVisible(false);
_sprite3 = insertStaticSprite(0x16E01E20, 1100);
_asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getSurface()->getDrawRect().y, false));
@@ -533,7 +533,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2032:
- _sprite2->getSurface()->setVisible(true);
+ _sprite2->setVisible(true);
break;
case 0x4806:
sendMessage(_parentModule, 0x1024, 2);
@@ -555,7 +555,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _asRing2) {
sendMessage(_asBridge, 0x4809, 0);
setGlobalVar(0x13206309, 0);
- _sprite2->getSurface()->setVisible(false);
+ _sprite2->setVisible(false);
} else if (sender == _asRing4) {
sendMessage(_ssFence, 0x4809, 0);
setGlobalVar(0x80101B1E, 0);
@@ -627,7 +627,7 @@ uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam &p
_soundResource.play(0x470007EE);
setFileHash1();
SetMessageHandler(NULL);
- _surface->setVisible(false);
+ setVisible(false);
break;
}
return messageResult;
@@ -687,7 +687,7 @@ Class544::Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority,
: AnimatedSprite(vm, 0x548E9411, surfacePriority, x, y), _parentScene(parentScene) {
if (getGlobalVar(0x31C63C51)) {
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
} else {
SetMessageHandler(&Class544::handleMessage);
@@ -703,7 +703,7 @@ uint32 Class544::handleMessage(int messageNum, const MessageParam ¶m, Entity
break;
case 0x4806:
setGlobalVar(0x31C63C51, 1);
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
break;
}
@@ -830,14 +830,14 @@ void AsScene1306Elevator::update() {
AnimatedSprite::update();
if (_frameIndex == 7) {
_soundResource3.play();
- _asElevatorDoor->getSurface()->setVisible(false);
+ _asElevatorDoor->setVisible(false);
}
}
void AsScene1306Elevator::upGoingDown() {
AnimatedSprite::update();
if (_frameIndex == 5) {
- _asElevatorDoor->getSurface()->setVisible(true);
+ _asElevatorDoor->setVisible(true);
}
}
@@ -861,7 +861,7 @@ uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam &pa
}
void AsScene1306Elevator::stGoingUp() {
- _surface->setVisible(true);
+ setVisible(true);
_isDown = false;
SetUpdateHandler(&AsScene1306Elevator::update);
setFileHash(0x043B0270, 0, -1);
@@ -875,13 +875,13 @@ void AsScene1306Elevator::cbGoingUpEvent() {
_isUp = true;
_countdown = 144;
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
void AsScene1306Elevator::stGoingDown() {
SetUpdateHandler(&AsScene1306Elevator::upGoingDown);
_isUp = false;
- _surface->setVisible(true);
+ setVisible(true);
setFileHash(0x043B0270, -1, -1);
_playBackwards = true;
SetAnimationCallback3(&AsScene1306Elevator::cbGoingDownEvent);
@@ -1466,7 +1466,7 @@ Class549::Class549(NeverhoodEngine *vm, Scene *parentScene)
_parentScene(parentScene) {
SetMessageHandler(&Class549::handleMessage);
- _surface->setVisible(false);
+ setVisible(false);
setFileHash1();
}
@@ -1488,7 +1488,7 @@ uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class549::sub455470() {
setFileHash(0xBA0AE050, 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
SetAnimationCallback3(&Class549::hide);
_soundResource.play(calcHash("fxDoorOpen38"));
}
@@ -1496,13 +1496,13 @@ void Class549::sub455470() {
void Class549::hide() {
sendMessage(_parentScene, 0x2000, 0);
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
void Class549::sub4554F0() {
setFileHash(0xBA0AE050, -1, -1);
_playBackwards = true;
- _surface->setVisible(true);
+ setVisible(true);
SetAnimationCallback3(&Class549::sub455550);
_soundResource.play(calcHash("fxDoorClose38"));
}
@@ -1541,14 +1541,14 @@ void Class592::sub455710() {
void Class592::sub455740() {
sendMessage(_parentScene, 0x2004, 0);
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
Class593::Class593(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0x80180A10, 100, 320, 240), _parentScene(parentScene) {
SetMessageHandler(&Class593::handleMessage);
- _surface->setVisible(false);
+ setVisible(false);
setFileHash1();
Entity::_priority = 1200;
}
@@ -1570,7 +1570,7 @@ uint32 Class593::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class593::sub4558F0() {
setFileHash(0x80180A10, 0, -1);
- _surface->setVisible(false);
+ setVisible(false);
_newHashListIndex = -2;
}
@@ -1583,13 +1583,13 @@ void Class593::sub455920() {
void Class593::sub455950() {
sendMessage(_parentScene, 0x2003, 0);
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
Class601::Class601(NeverhoodEngine *vm, uint32 fileHash, int index)
: StaticSprite(vm, fileHash, 100) {
- _surface->setVisible(false);
+ setVisible(false);
_x = _spriteResource.getPosition().x + index * 20;
StaticSprite::update();
}
@@ -1680,7 +1680,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x80455A41)) {
_sprite5 = addSprite(new Class592(_vm, this));
_sprite4 = insertStaticSprite(0x0101A624, 1100);
- _sprite4->getSurface()->setVisible(false);
+ _sprite4->setVisible(false);
} else {
_sprite5 = insertStaticSprite(0x080811A0, 100);
setRectList(0x004B5980);
@@ -1689,13 +1689,13 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
InsertKlayman(KmScene1308, 41, 440);
setMessageList(0x004B57D0);
sendMessage(_class549, 0x4808, 0);
- _sprite1->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
- _klayman->getSurface()->setVisible(false);
+ _klayman->setVisible(false);
} else {
_sprite5 = insertStaticSprite(0x080811A0, 100);
- _klayman->getSurface()->setVisible(false);
+ _klayman->setVisible(false);
}
}
@@ -1744,8 +1744,8 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x4AC68808) {
clearRectList();
sendMessage(_class549, 0x4809, 0);
- _sprite1->getSurface()->setVisible(false);
- _klayman->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
+ _klayman->setVisible(false);
}
break;
case 0x1022:
@@ -1763,19 +1763,19 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B5980);
}
setMessageList(0x004B57E8);
- _sprite1->getSurface()->setVisible(true);
- _klayman->getSurface()->setVisible(true);
+ _sprite1->setVisible(true);
+ _klayman->setVisible(true);
break;
case 0x2001:
sendMessage(_parentModule, 0x1009, 0);
break;
case 0x2003:
- _class601_1->getSurface()->setVisible(false);
- _class601_2->getSurface()->setVisible(false);
- _class601_3->getSurface()->setVisible(false);
+ _class601_1->setVisible(false);
+ _class601_2->setVisible(false);
+ _class601_3->setVisible(false);
break;
case 0x2004:
- _sprite4->getSurface()->setVisible(true);
+ _sprite4->setVisible(true);
setRectList(0x004B5990);
break;
case 0x4807:
@@ -1783,9 +1783,9 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480F:
sendMessage(_class593, 0x2002, 0);
- _class601_1->getSurface()->setVisible(true);
- _class601_2->getSurface()->setVisible(true);
- _class601_3->getSurface()->setVisible(true);
+ _class601_1->setVisible(true);
+ _class601_2->setVisible(true);
+ _class601_3->setVisible(true);
break;
case 0x4826:
if (sender == _class489) {
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 32918b1..f50fb25 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -259,7 +259,7 @@ void Class526::spriteUpdate466720() {
setFileHash1();
SetSpriteCallback(NULL);
SetMessageHandler(NULL);
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -297,7 +297,7 @@ void Class527::spriteUpdate466920() {
setFileHash1();
SetSpriteCallback(NULL);
SetMessageHandler(NULL);
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -322,7 +322,7 @@ Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
} else {
_flag = false;
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -356,7 +356,7 @@ uint32 Class528::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class528::sub466BF0() {
_flag = true;
- _surface->setVisible(true);
+ setVisible(true);
setFileHash(0x04551900, 0, -1);
_newHashListIndex = -2;
_soundResource.play(calcHash("fxDoorOpen24"));
@@ -364,7 +364,7 @@ void Class528::sub466BF0() {
void Class528::sub466C50() {
_flag = false;
- _surface->setVisible(true);
+ setVisible(true);
setFileHash(0x04551900, -1, -1);
_soundResource.play(calcHash("fxDoorClose24"));
_playBackwards = true;
@@ -373,7 +373,7 @@ void Class528::sub466C50() {
void Class528::sub466CB0() {
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
static const Class489Item kClass489Items[] = {
@@ -577,7 +577,7 @@ void Class489::sub434D80() {
setFileHash1();
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(NULL);
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -681,24 +681,24 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0xB84B1100, 100, 0));
_sprite1 = insertStaticSprite(0x38EA100C, 1005);
_sprite2 = insertStaticSprite(0x98D0223C, 1200);
- _sprite2->getSurface()->setVisible(false);
+ _sprite2->setVisible(false);
if (which < 0) {
InsertKlayman(KmScene1401, 380, 447);
setMessageList(0x004B65C8);
- _sprite1->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
} else if (which == 1) {
InsertKlayman(KmScene1401, 0, 447);
setMessageList(0x004B65D0);
- _sprite1->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
} else if (which == 2) {
InsertKlayman(KmScene1401, 660, 447);
setMessageList(0x004B65D8);
- _sprite1->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
} else {
InsertKlayman(KmScene1401, 290, 413);
setMessageList(0x004B65E8);
- _sprite1->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
}
if (getGlobalVar(0x04A105B3) == 2) {
@@ -737,10 +737,10 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1401::update() {
Scene::update();
if (_class489 && !_flag && _class489->getY() < 360) {
- _sprite2->getSurface()->setVisible(true);
+ _sprite2->setVisible(true);
_flag = true;
} else {
- _sprite2->getSurface()->setVisible(false);
+ _sprite2->setVisible(false);
}
}
@@ -793,13 +793,13 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x482A:
- _sprite1->getSurface()->setVisible(true);
+ _sprite1->setVisible(true);
if (_class489) {
sendMessage(_class489, 0x482B, 0);
}
break;
case 0x482B:
- _sprite1->getSurface()->setVisible(false);
+ _sprite1->setVisible(false);
if (_class489) {
sendMessage(_class489, 0x482A, 0);
}
@@ -863,13 +863,13 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class482::sub428500() {
sendMessage(_parentScene, 0x2000, 0);
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
void Class482::sub428530() {
sendMessage(_parentScene, 0x2001, 0);
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
void Class482::sub428560() {
@@ -994,7 +994,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_parentModule, 0x1009, 0);
} else {
clearRectList();
- _klayman->getSurface()->setVisible(false);
+ _klayman->setVisible(false);
showMouse(false);
sendMessage(_class482, 0x2002, 0);
sub428220();
@@ -1258,7 +1258,7 @@ void AsScene1407Mouse::stGoThroughHole() {
SetMessageHandler(NULL);
SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
SetAnimationCallback3(&AsScene1407Mouse::stArriveAtHole);
- _surface->setVisible(false);
+ setVisible(false);
_countdown = 12;
}
@@ -1270,11 +1270,11 @@ void AsScene1407Mouse::stArriveAtHole() {
sendMessage(_parentScene, 0x2000, 0);
_walkDestX = 512;
stWalkToDest();
- _surface->setVisible(true);
+ setVisible(true);
} else {
_walkDestX = _x + 14;
stWalkToDest();
- _surface->setVisible(true);
+ setVisible(true);
}
}
@@ -1294,7 +1294,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
_asMouse = addSprite(new AsScene1407Mouse(_vm, this));
_ssResetButton = insertStaticSprite(0x12006600, 100);
- _ssResetButton->getSurface()->setVisible(false);
+ _ssResetButton->setVisible(false);
}
@@ -1303,7 +1303,7 @@ void Scene1407::update() {
if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0)) {
sendMessage(_parentModule, 0x1009, 1);
} else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0)) {
- _ssResetButton->getSurface()->setVisible(false);
+ _ssResetButton->setVisible(false);
}
}
@@ -1320,7 +1320,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
param.asPoint().y >= 62 && param.asPoint().y <= 90) {
// The reset button was clicked
sendMessage(_asMouse, 0x2001, 0);
- _ssResetButton->getSurface()->setVisible(true);
+ _ssResetButton->setVisible(true);
_soundResource.play(0x44045000);
_resetButtonCountdown = 12;
} else {
@@ -1359,7 +1359,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0A230219);
_class401_1 = insertStaticSprite(0x01102A33, 100);
- _class401_1->getSurface()->setVisible(false);
+ _class401_1->setVisible(false);
_class401_2 = insertStaticSprite(0x04442520, 995);
@@ -1431,10 +1431,10 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4807:
- _class401_1->getSurface()->setVisible(false);
+ _class401_1->setVisible(false);
break;
case 0x480F:
- _class401_1->getSurface()->setVisible(true);
+ _class401_1->setVisible(true);
break;
case 0x4826:
if (sender == _class489) {
@@ -1634,7 +1634,7 @@ AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, ui
_x = kAsScene1405TileItemPositions[_index].x;
_y = kAsScene1405TileItemPositions[_index].y;
createSurface1(0x844B805C, 1100);
- _surface->setVisible(false);
+ setVisible(false);
if (getSubVar(0xCCE0280F, _index))
_countdown = _vm->_rnd->getRandomNumber(36 - 1) + 1;
SetUpdateHandler(&AsScene1405Tile::update);
@@ -1672,7 +1672,7 @@ void AsScene1405Tile::show() {
if (!_flag) {
_flag = true;
_soundResource.play();
- _surface->setVisible(true);
+ setVisible(true);
}
}
@@ -1680,7 +1680,7 @@ void AsScene1405Tile::hide() {
if (_flag) {
_flag = false;
_soundResource.play();
- _surface->setVisible(false);
+ setVisible(false);
}
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 9188dab..58fc835 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -144,7 +144,7 @@ Class606::Class606(NeverhoodEngine *vm, Scene *parentScene, int index, int surfa
if (!getSubVar(0x02038314, _index) && !getSubVar(0x02720344, _index)) {
SetMessageHandler(&Class606::handleMessage);
} else {
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
}
_deltaRect = _drawRect;
@@ -164,7 +164,7 @@ uint32 Class606::handleMessage(int messageNum, const MessageParam ¶m, Entity
break;
case 0x4806:
setSubVar(0x02038314, _index, 1);
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
break;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 3bc3797..1f118a4 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -650,7 +650,7 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *
} else {
setFileHash(0xE2CB0412, 0, -1);
_newHashListIndex = 0;
- _doorLightSprite->getSurface()->setVisible(false);
+ _doorLightSprite->setVisible(false);
}
}
@@ -667,10 +667,10 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
case 0x100D:
if (param.asInteger() == 0x11001090) {
if (_doorOpen)
- _doorLightSprite->getSurface()->setVisible(true);
+ _doorLightSprite->setVisible(true);
} else if (param.asInteger() == 0x11283090) {
if (!_doorOpen)
- _doorLightSprite->getSurface()->setVisible(false);
+ _doorLightSprite->setVisible(false);
}
break;
case 0x2000:
@@ -1254,7 +1254,7 @@ Class545::Class545(NeverhoodEngine *vm, Scene *parentScene, int index, int surfa
if (!getSubVar(0x0090EA95, _index) && !getSubVar(0x08D0AB11, _index)) {
SetMessageHandler(&Class545::handleMessage);
} else {
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
}
}
@@ -1268,7 +1268,7 @@ uint32 Class545::handleMessage(int messageNum, const MessageParam ¶m, Entity
break;
case 0x4806:
setSubVar(0x0090EA95, _index, 1);
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
}
return messageResult;
@@ -1405,10 +1405,10 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x9A500914)) {
- _ssSmallLeftDoor->getSurface()->setVisible(false);
+ _ssSmallLeftDoor->setVisible(false);
_klayman->getSurface()->getClipRect() = _rightDoorClipRect;
} else {
- _ssSmallRightDoor->getSurface()->setVisible(false);
+ _ssSmallRightDoor->setVisible(false);
_klayman->getSurface()->getClipRect() = _leftDoorClipRect;
}
@@ -1440,17 +1440,17 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2003:
if (sender == _asLeftDoor) {
- _ssSmallLeftDoor->getSurface()->setVisible(false);
+ _ssSmallLeftDoor->setVisible(false);
} else {
- _ssSmallRightDoor->getSurface()->setVisible(false);
+ _ssSmallRightDoor->setVisible(false);
}
break;
case 0x4808:
if (sender == _asLeftDoor) {
- _ssSmallLeftDoor->getSurface()->setVisible(true);
+ _ssSmallLeftDoor->setVisible(true);
_klayman->getSurface()->getClipRect() = _leftDoorClipRect;
} else {
- _ssSmallRightDoor->getSurface()->setVisible(true);
+ _ssSmallRightDoor->setVisible(true);
_klayman->getSurface()->getClipRect() = _rightDoorClipRect;
}
break;
@@ -1734,7 +1734,7 @@ Class607::Class607(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority,
: StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene) {
if (getGlobalVar(0x45080C38)) {
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
} else {
SetMessageHandler(&Class607::handleMessage);
@@ -1752,7 +1752,7 @@ uint32 Class607::handleMessage(int messageNum, const MessageParam ¶m, Entity
break;
case 0x4806:
setGlobalVar(0x45080C38, 1);
- _surface->setVisible(false);
+ setVisible(false);
SetMessageHandler(NULL);
break;
}
@@ -2191,7 +2191,7 @@ void AsScene2207WallRobotAnimation::stStartAnimation() {
} else {
setFileHash(0xCCFD6090, 0, -1);
_idle = false;
- _surface->setVisible(true);
+ setVisible(true);
}
}
@@ -2207,7 +2207,7 @@ void AsScene2207WallRobotAnimation::cbStopAnimation() {
_soundResource4.stop();
// TODO Sound1ChList_deleteSoundByHash(0x12121943);
_idle = true;
- _surface->setVisible(false);
+ setVisible(false);
}
AsScene2207WallCannonAnimation::AsScene2207WallCannonAnimation(NeverhoodEngine *vm)
@@ -2242,7 +2242,7 @@ void AsScene2207WallCannonAnimation::stStartAnimation() {
if (!_idle) {
SetAnimationCallback3(NULL);
} else {
- _surface->setVisible(true);
+ setVisible(true);
setFileHash(0x8CAA0099, 0, -1);
_idle = false;
}
@@ -2254,7 +2254,7 @@ void AsScene2207WallCannonAnimation::stStopAnimation() {
void AsScene2207WallCannonAnimation::cbStopAnimation() {
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
_idle = true;
}
@@ -2309,8 +2309,8 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_asWallRobotAnimation = addSprite(new AsScene2207WallRobotAnimation(_vm, this));
_asWallCannonAnimation = addSprite(new AsScene2207WallCannonAnimation(_vm));
- _asWallRobotAnimation->getSurface()->setVisible(false);
- _asWallCannonAnimation->getSurface()->setVisible(false);
+ _asWallRobotAnimation->setVisible(false);
+ _asWallCannonAnimation->setVisible(false);
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x2C4061C4, 100, 0));
@@ -2452,8 +2452,8 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x480F:
sendMessage(_asWallRobotAnimation, 0x2006, 0);
sendMessage(_asWallCannonAnimation, 0x2006, 0);
- _asWallRobotAnimation->getSurface()->setVisible(true);
- _asWallCannonAnimation->getSurface()->setVisible(true);
+ _asWallRobotAnimation->setVisible(true);
+ _asWallCannonAnimation->setVisible(true);
break;
case 0x4826:
if (sender == _asTape) {
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 219f595..82bcc54 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -462,7 +462,7 @@ SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Sc
_deltaRect.y = 0;
_deltaRect.width = _spriteResource.getDimensions().width;
_deltaRect.height = _spriteResource.getDimensions().height;
- _surface->setVisible(false);
+ setVisible(false);
processDelta();
_needRefresh = true;
SetUpdateHandler(&SsScene3009FireCannonButton::update);
@@ -474,7 +474,7 @@ void SsScene3009FireCannonButton::update() {
StaticSprite::update();
if (_flag1 && !_soundResource.isPlaying()) {
sendMessage(_parentScene, 0x2000, 0);
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -484,7 +484,7 @@ uint32 SsScene3009FireCannonButton::handleMessage(int messageNum, const MessageP
case 0x1011:
if (!_flag1 && !_parentScene->sub462E90()) {
_flag1 = true;
- _surface->setVisible(true);
+ setVisible(true);
_soundResource.play();
}
messageResult = 1;
@@ -516,9 +516,9 @@ SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index)
void SsScene3009SymbolEdges::update() {
if (_blinkCountdown != 0 && (--_blinkCountdown == 0)) {
if (_blinkToggle) {
- _surface->setVisible(true);
+ setVisible(true);
} else {
- _surface->setVisible(false);
+ setVisible(false);
}
StaticSprite::update();
_blinkCountdown = 3;
@@ -527,19 +527,19 @@ void SsScene3009SymbolEdges::update() {
}
void SsScene3009SymbolEdges::show() {
- _surface->setVisible(true);
+ setVisible(true);
StaticSprite::update();
_blinkCountdown = 0;
}
void SsScene3009SymbolEdges::hide() {
- _surface->setVisible(false);
+ setVisible(false);
StaticSprite::update();
_blinkCountdown = 0;
}
void SsScene3009SymbolEdges::startBlinking() {
- _surface->setVisible(true);
+ setVisible(true);
StaticSprite::update();
_blinkCountdown = 3;
_blinkToggle = true;
@@ -556,12 +556,12 @@ SsScene3009TargetLine::SsScene3009TargetLine(NeverhoodEngine *vm, int index)
_drawRect.y = 0;
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
- _surface->setVisible(false);
+ setVisible(false);
_needRefresh = true;
}
void SsScene3009TargetLine::show() {
- _surface->setVisible(true);
+ setVisible(true);
StaticSprite::update();
}
@@ -589,7 +589,7 @@ SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSy
void SsScene3009SymbolArrow::hide() {
_enabled = false;
- _surface->setVisible(false);
+ setVisible(false);
}
void SsScene3009SymbolArrow::update() {
@@ -633,14 +633,14 @@ AsScene3009VerticalIndicator::AsScene3009VerticalIndicator(NeverhoodEngine *vm,
createSurface1(0xC2463913, 1200);
_needRefresh = true;
updatePosition();
- _surface->setVisible(false);
+ setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009VerticalIndicator::handleMessage);
}
void AsScene3009VerticalIndicator::show() {
setFileHash(0xC2463913, 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
updatePosition();
_enabled = true;
}
@@ -666,7 +666,7 @@ AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *
createSurface1(0xC0C12954, 1200);
_needRefresh = true;
updatePosition();
- _surface->setVisible(false);
+ setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009HorizontalIndicator::handleMessage);
if (varValue == 8 || varValue == 9 || varValue == 10) {
@@ -706,7 +706,7 @@ void AsScene3009HorizontalIndicator::suMoveRight() {
void AsScene3009HorizontalIndicator::show() {
setFileHash(0xC0C12954, 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
updatePosition();
_enabled = true;
}
@@ -1105,12 +1105,12 @@ void SsScene3010DeadBoltButton::update() {
if (_countdown1 != 0 && (--_countdown1 == 0)) {
_soundResource1.play();
- _surface->setVisible(false);
+ setVisible(false);
setSprite(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
}
if (_countdown2 != 0 && (--_countdown2 == 0)) {
- _surface->setVisible(true);
+ setVisible(true);
setSprite(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
}
@@ -1124,7 +1124,7 @@ uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessagePar
if (_buttonEnabled) {
_soundResource2.play();
_soundResource3.play();
- _surface->setVisible(true);
+ setVisible(true);
_buttonLocked = true;
sendMessage(_parentScene, 0x2000, _buttonIndex);
} else {
@@ -1142,7 +1142,7 @@ uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessagePar
void SsScene3010DeadBoltButton::disableButton() {
_buttonLocked = true;
setSprite(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
- _surface->setVisible(true);
+ setVisible(true);
}
void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) {
@@ -1185,7 +1185,7 @@ AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene
_soundResource2.load(0x420073DC);
}
- _surface->setVisible(false);
+ setVisible(false);
stIdle();
if (initUnlocked)
unlock(true);
@@ -1222,7 +1222,7 @@ void AsScene3010DeadBolt::stIdle() {
void AsScene3010DeadBolt::unlock(bool skipAnim) {
if (!_unlocked) {
- _surface->setVisible(true);
+ setVisible(true);
if (skipAnim) {
setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], -1, 0);
_newHashListIndex = -2;
@@ -1247,7 +1247,7 @@ void AsScene3010DeadBolt::stIdleMessage() {
void AsScene3010DeadBolt::lock() {
if (!_locked) {
_locked = true;
- _surface->setVisible(true);
+ setVisible(true);
setFileHash(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
setCallback1(AnimationCallback(&AsScene3010DeadBolt::stDisabledMessage));
@@ -1266,7 +1266,7 @@ void AsScene3010DeadBolt::setCountdown(int count) {
}
void AsScene3010DeadBolt::stDisabled() {
- _surface->setVisible(true);
+ setVisible(true);
setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
setCallback1(AnimationCallback(&AsScene3010DeadBolt::stDisabledMessage));
@@ -1276,7 +1276,7 @@ void AsScene3010DeadBolt::stDisabled() {
}
void AsScene3010DeadBolt::stDisabledMessage() {
- _surface->setVisible(false);
+ setVisible(false);
sendMessage(_parentScene, 0x2003, _boltIndex);
}
@@ -1447,7 +1447,7 @@ SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bo
_deltaRect.y = 0;
_deltaRect.width = _spriteResource.getDimensions().width;
_deltaRect.height = _spriteResource.getDimensions().height;
- _surface->setVisible(false);
+ setVisible(false);
processDelta();
_needRefresh = true;
SetUpdateHandler(&SsScene3011Button::update);
@@ -1457,7 +1457,7 @@ SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bo
void SsScene3011Button::update() {
StaticSprite::update();
if (_countdown != 0 && (--_countdown == 0)) {
- _surface->setVisible(false);
+ setVisible(false);
}
}
@@ -1467,7 +1467,7 @@ uint32 SsScene3011Button::handleMessage(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x1011:
if (_countdown == 0) {
- _surface->setVisible(true);
+ setVisible(true);
_countdown = 4;
sendMessage(_parentScene, 0x2000, 0);
_soundResource.play();
@@ -1496,7 +1496,7 @@ AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
_soundResource1.load(0x64428609);
_soundResource2.load(0x7080023B);
}
- _surface->setVisible(false);
+ setVisible(false);
_needRefresh = true;
SetUpdateHandler(&AnimatedSprite::update);
}
@@ -1504,7 +1504,7 @@ AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
void AsScene3011Symbol::show(bool flag) {
_flag2 = flag;
setFileHash(kAsScene3011SymbolFileHashes[_index], 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
if (flag) {
_soundResource2.play();
} else {
@@ -1514,7 +1514,7 @@ void AsScene3011Symbol::show(bool flag) {
void AsScene3011Symbol::hide() {
setFileHash1();
- _surface->setVisible(false);
+ setVisible(false);
}
void AsScene3011Symbol::stopSound() {
@@ -1529,7 +1529,7 @@ void AsScene3011Symbol::change(int index, bool flag) {
_index = index;
_flag2 = flag;
setFileHash(kAsScene3011SymbolFileHashes[_index], 0, -1);
- _surface->setVisible(true);
+ setVisible(true);
if (flag) {
_soundResource2.play();
} else {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index f17b2d4..1c4008e 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -57,6 +57,7 @@ public:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void loadDataResource(uint32 fileHash);
int16 defFilterY(int16 y);
+ void setVisible(bool value) { _surface->setVisible(value); }
protected:
void (Sprite::*_spriteUpdateCb)();
Common::String _spriteUpdateCbName; // For debugging purposes
Commit: 2f670690bc1febbd402a5743f400c4463af7ebc7
https://github.com/scummvm/scummvm/commit/2f670690bc1febbd402a5743f400c4463af7ebc7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Add Scene::setPalette for simpled palette creation and use it
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/entity.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index d0d7ec2..ace2b5b 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -353,8 +353,8 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_surfaceFlag = true;
- _background = addBackground(new DirtyBackground(_vm, 0x8A000044, 0, 0));
- _palette = new Palette(_vm, kDiskplayerPaletteFileHashes[_which]);
+ setBackground(0x8A000044);
+ setPalette(kDiskplayerPaletteFileHashes[_which]);
_playButton = new DiskplayerPlayButton(_vm, this);
addSprite(_playButton);
_vm->_collisionMan->addSprite(_playButton);
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 582e93f..924a7a7 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -103,16 +103,16 @@ public:
// NOTE: These were overloaded before for the various message parameter types
// it caused some problems so each type gets its own sendMessage variant now
uint32 sendMessage(Entity *receiver, int messageNum, const MessageParam ¶m) {
- return receiver->receiveMessage(messageNum, param, this);
+ return receiver ? receiver->receiveMessage(messageNum, param, this) : 0;
}
uint32 sendMessage(Entity *receiver, int messageNum, uint32 param) {
- return receiver->receiveMessage(messageNum, MessageParam(param), this);
+ return sendMessage(receiver, messageNum, MessageParam(param));
}
uint32 sendPointMessage(Entity *receiver, int messageNum, const NPoint ¶m) {
- return receiver->receiveMessage(messageNum, MessageParam(param), this);
+ return sendMessage(receiver, messageNum, MessageParam(param));
}
uint32 sendEntityMessage(Entity *receiver, int messageNum, Entity *param) {
- return receiver->receiveMessage(messageNum, MessageParam((Entity*)param), this);
+ return sendMessage(receiver, messageNum, MessageParam((Entity*)param));
}
int getPriority() const { return _priority; }
// Shortcuts for game variable access
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 1cc4b43..8dda9ed 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -82,30 +82,27 @@ void Module1000::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
- if (_moduleResult == 2) {
+ if (_moduleResult == 2)
createScene(2, 0);
- } else {
+ else
createScene(1, 0);
- }
break;
case 1:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
sendMessage(_parentModule, 0x1009, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(3, 0);
- } else {
+ else
createScene(0, 1);
- }
break;
case 2:
createScene(0, 2);
break;
case 3:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(4, 0);
- } else {
+ else
createScene(1, 2);
- }
break;
case 4:
// TODO Music18hList_stop(_musicFileHash, 0, 1);
@@ -213,9 +210,7 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x00352100) {
- if (_asDoor) {
- sendMessage(_asDoor, 0x2000, 0);
- }
+ sendMessage(_asDoor, 0x2000, 0);
} else if (param.asInteger() == 0x0A1A0109) {
_soundResource.play(0x66410886);
}
@@ -309,7 +304,7 @@ SsCommonButtonSprite::SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentSce
: StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene), _soundResource(vm), _countdown(0) {
_priority = 1100;
- _soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
+ _soundFileHash = soundFileHash ? soundFileHash : 0x44141000;
setVisible(false);
SetUpdateHandler(&SsCommonButtonSprite::update);
SetMessageHandler(&SsCommonButtonSprite::handleMessage);
@@ -346,8 +341,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->setHitRects(0x004B4860);
_surfaceFlag = false;
setBackground(0x4086520E);
- _palette = new Palette(_vm, 0x4086520E);
- _palette->usePalette();
+ setPalette(0x4086520E);
insertMouse433(0x6520A400);
if (which < 0) {
@@ -1349,8 +1343,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x12C23307);
- _palette = new Palette(_vm, 0x12C23307);
- _palette->usePalette();
+ setPalette(0x12C23307);
_flag = false;
@@ -1629,8 +1622,7 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF
SetMessageHandler(&Class152::handleMessage);
setBackground(backgroundFileHash);
- _palette = new Palette(_vm, backgroundFileHash);
- _palette->usePalette();
+ setPalette(backgroundFileHash);
insertMouse435(cursorFileHash, 20, 620);
}
@@ -1692,13 +1684,12 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x50C03005);
if (getGlobalVar(0x0D0A14D10)) {
- _palette = new Palette(_vm, 0xA30BA329);
+ setPalette(0xA30BA329);
_palette->addBasePalette(0xA30BA329, 0, 256, 0);
} else {
- _palette = new Palette(_vm, 0x50C03005);
+ setPalette(0x50C03005);
_palette->addBasePalette(0x50C03005, 0, 256, 0);
}
- _palette->usePalette();
addEntity(_palette);
insertMouse433(0x03001504);
@@ -1791,14 +1782,12 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0xD0A14D10)) {
setBackground(0x2800E011);
- _palette = new Palette(_vm, 0x2800E011);
- _palette->usePalette();
+ setPalette(0x2800E011);
insertStaticSprite(0x492D5AD7, 100);
insertMouse435(0x0E015288, 20, 620);
} else {
setBackground(0x8870A546);
- _palette = new Palette(_vm, 0x8870A546);
- _palette->usePalette();
+ setPalette(0x8870A546);
insertStaticSprite(0x40D1E0A9, 100);
insertStaticSprite(0x149C00A6, 100);
insertMouse435(0x0A54288F, 20, 620);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 9cab544..81e61c7 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -838,13 +838,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
setBackground(0x4019A2C4);
- _palette = new Palette(_vm, 0x4019A2C4);
- _palette->usePalette();
+ setPalette(0x4019A2C4);
_asRightDoor = NULL;
} else {
setBackground(0x40206EC5);
- _palette = new Palette(_vm, 0x40206EC5);
- _palette->usePalette();
+ setPalette(0x40206EC5);
_asRightDoor = addSprite(new AsScene1201RightDoor(_vm, _klayman, which == 2));
}
@@ -1146,8 +1144,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x60210ED5);
- _palette = new Palette(_vm, 0x60210ED5);
- _palette->usePalette();
+ setPalette(0x60210ED5);
addEntity(_palette);
_paletteResource.load(0x60250EB5);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index f27952f..8f3483a 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -421,8 +421,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B0A38);
setBackground(0x420643C4);
- _palette = new Palette(_vm, 0x420643C4);
- _palette->usePalette();
+ setPalette(0x420643C4);
insertMouse433(0x643C0428);
_class595 = addSprite(new Class595(_vm, this));
@@ -646,8 +645,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004AF9E8);
setBackground(0x01581A9C);
- _palette = new Palette(_vm, 0x01581A9C);
- _palette->usePalette();
+ setPalette(0x01581A9C);
insertMouse433(0x81A9801D);
if (!getGlobalVar(0xAC00C0D0)) {
@@ -718,8 +716,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B91A8);
setBackground(0x062C0214);
- _palette = new Palette(_vm, 0x062C0214);
- _palette->usePalette();
+ setPalette(0x062C0214);
insertMouse433(0xC021006A);
if (getGlobalVar(0xAC00C0D0)) {
@@ -789,8 +786,7 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B6E98);
setBackground(0x28801B64);
- _palette = new Palette(_vm, 0x28801B64);
- _palette->usePalette();
+ setPalette(0x28801B64);
insertMouse433(0x01B60280);
if (which < 0) {
@@ -905,8 +901,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1306::handleMessage);
setBackground(0x05303114);
- _palette = new Palette(_vm, 0x05303114);
- _palette->usePalette();
+ setPalette(0x05303114);
insertMouse433(0x0311005B);
if (!getGlobalVar(0x13382860)) {
@@ -1311,8 +1306,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1307::update);
setBackground(0xA8006200);
- _palette = new Palette(_vm, 0xA8006200);
- _palette->usePalette();
+ setPalette(0xA8006200);
addEntity(_palette);
insertMouse435(0x06204A88, 20, 620);
@@ -1630,8 +1624,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1308::handleMessage);
setBackground(0x41024202);
- _palette = new Palette(_vm, 0x41024202);
- _palette->usePalette();
+ setPalette(0x41024202);
insertMouse433(0x24206418);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 17, 1100, 502, 445, 0x9148A011));
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index f50fb25..3f61ceb 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -664,8 +664,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x08221FA5);
- _palette = new Palette(_vm, 0x08221FA5);
- _palette->usePalette();
+ setPalette(0x08221FA5);
insertMouse433(0x21FA108A);
// TODO _class427 = addSprite(new Class427(_vm, this, 0x980F3124, 0x12192892, 100, 0));
@@ -885,9 +884,8 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_background = addBackground(new Background(_vm, 0x231482F0, 0, 0));
_background->getSurface()->getDrawRect().y = -10;
// TODO g_screen->field_26 = 0;
- _palette = new Palette(_vm, 0x231482F0);
+ setPalette(0x231482F0);
_palette->addPalette(0x91D3A391, 0, 64, 0);
- _palette->usePalette();
insertMouse433(0x482F4239);
_class454_1 = addSprite(new Class454(_vm, 0x15402D64, 1100));
@@ -1288,8 +1286,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1407::update);
setBackground(0x00442225);
- _palette = new Palette(_vm, 0x00442225);
- _palette->usePalette();
+ setPalette(0x00442225);
insertMouse435(0x4222100C, 20, 620);
_asMouse = addSprite(new AsScene1407Mouse(_vm, this));
@@ -1354,8 +1351,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x2110A234);
- _palette = new Palette(_vm, 0x2110A234);
- _palette->usePalette();
+ setPalette(0x2110A234);
insertMouse433(0x0A230219);
_class401_1 = insertStaticSprite(0x01102A33, 100);
@@ -1477,9 +1473,8 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B8D80);
setBackground(0xAC0B006F);
- _palette = new Palette(_vm, 0xAC0B006F);
+ setPalette(0xAC0B006F);
_palette->addPalette(0x00801510, 0, 65, 0);
- _palette->usePalette();
insertMouse433(0xB006BAC8);
if (getGlobalVar(0x13382860) == 5) {
@@ -1692,8 +1687,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x0C0C007D);
- _palette = new Palette(_vm, 0x0C0C007D);
- _palette->usePalette();
+ setPalette(0x0C0C007D);
insertMouse435(0xC00790C8, 20, 620);
// TODO: Some debug code: Leave two matching tiles open
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 09567f5..54a4685 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -93,8 +93,7 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
setBackground(backgroundFileHash);
- _palette = new Palette(_vm);
- _palette->usePalette();
+ setPalette();
addEntity(_palette);
_palette->addBasePalette(backgroundFileHash, 0, 256, 0);
_palette->startFadeToPalette(12);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 58fc835..f551911 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -188,10 +188,9 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x03118226);
- _palette = new Palette(_vm, 0x03118226);
+ setPalette(0x03118226);
_palette->addBasePalette(0x91D3A391, 0, 64, 0);
_palette->copyBasePalette(0, 256, 0);
- _palette->usePalette();
addEntity(_palette);
insertMouse433(0x18222039);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index a30bb93..b2e9a0e 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -102,8 +102,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2001::handleMessage);
setBackground(0xA6417244);
- _palette = new Palette(_vm, 0xA6417244);
- _palette->usePalette();
+ setPalette(0xA6417244);
insertMouse433(0x17240A6C);
_class401 = insertStaticSprite(0x0D641724, 1100);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 1f118a4..a0db788 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -736,8 +736,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
loadHitRectList();
setBackground(0x40008208);
- _palette = new Palette(_vm, 0x40008208);
- _palette->usePalette();
+ setPalette(0x40008208);
insertMouse433(0x0820C408);
_asTape = addSprite(new AsScene1201Tape(_vm, this, 7, 1100, 459, 432, 0x9148A011));
@@ -1119,8 +1118,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x08100A0C);
- _palette = new Palette(_vm, 0x08100A0C);
- _palette->usePalette();
+ setPalette(0x08100A0C);
addEntity(_palette);
insertMouse435(0x00A08089, 20, 620);
@@ -1349,8 +1347,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x82C80334);
- _palette = new Palette(_vm, 0x82C80334);
- _palette->usePalette();
+ setPalette(0x82C80334);
insertMouse433(0x80330824);
_vm->_collisionMan->setHitRects(0x004B8320);
@@ -1512,8 +1509,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
_isLightOn = true;
setBackground(0x0008028D);
- _palette = new Palette(_vm, 0x0008028D);
- _palette->usePalette();
+ setPalette(0x0008028D);
addEntity(_palette);
insertMouse433(0x80289008);
_ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0);
@@ -1521,8 +1517,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
_isLightOn = false;
setBackground(0xD00A028D);
- _palette = new Palette(_vm, 0xD00A028D);
- _palette->usePalette();
+ setPalette(0xD00A028D);
addEntity(_palette);
insertMouse433(0xA0289D08);
_ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0);
@@ -1807,8 +1802,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(fileHash);
- _palette = new Palette(_vm, fileHash);
- _palette->usePalette();
+ setPalette(fileHash);
addEntity(_palette);
_palette->addBasePalette(fileHash, 0, 256, 0);
@@ -2292,8 +2286,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
setBackground(0x88C00241);
- _palette = new Palette(_vm, 0x88C00241);
- _palette->usePalette();
+ setPalette(0x88C00241);
insertMouse433(0x00245884);
_ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);
@@ -2334,8 +2327,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(0x81890D14, 1);
setBackground(0x05C02A55);
- _palette = new Palette(_vm, 0x05C02A55);
- _palette->usePalette();
+ setPalette(0x05C02A55);
insertMouse433(0x02A51054);
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
@@ -2531,8 +2523,7 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_background->getSpriteResource().getPosition().y = 480;
addBackground(_background);
- _palette = new Palette(_vm, 0x08100289);
- _palette->usePalette();
+ setPalette(0x08100289);
addEntity(_palette); // Why?
insertMouse435(0x0028D089, 40, 600);
@@ -2708,14 +2699,12 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
setBackground(0x11840E24);
- _palette = new Palette(_vm, 0x11840E24);
- _palette->usePalette();
+ setPalette(0x11840E24);
insertMouse433(0x40E20110);
setRectList(0x004B3DC8);
} else {
setBackground(0x25848E24);
- _palette = new Palette(_vm, 0x25848E24);
- _palette->usePalette();
+ setPalette(0x25848E24);
addEntity(_palette);
_palette->copyBasePalette(0, 256, 0);
_palette->addPalette(0x68033B1C, 0, 65, 0);
@@ -2846,14 +2835,12 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
if (!getGlobalVar(0x4D080E54) && _sceneInfo140->bgFilename2) {
setRectList(0x004B2BF8);
setBackground(_sceneInfo140->bgFilename2);
- _palette = new Palette(_vm, _sceneInfo140->bgFilename2);
- _palette->usePalette();
+ setPalette(_sceneInfo140->bgFilename2);
insertMouse433(0x14320138);
} else {
setRectList(0x004B2BB8);
setBackground(_sceneInfo140->bgFilename1);
- _palette = new Palette(_vm, _sceneInfo140->bgFilename1);
- _palette->usePalette();
+ setPalette(_sceneInfo140->bgFilename1);
insertMouse433(0x63A40028);
}
@@ -2943,14 +2930,12 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x4D080E54)) {
setRectList(0x004B5588);
setBackground(0x40339414);
- _palette = new Palette(_vm, 0x40339414);
- _palette->usePalette();
+ setPalette(0x40339414);
insertMouse433(0x3941040B);
} else {
setRectList(0x004B55C8);
setBackground(0x071963E5);
- _palette = new Palette(_vm, 0x071963E5);
- _palette->usePalette();
+ setPalette(0x071963E5);
insertMouse433(0x14320138);
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 82bcc54..e7714c0 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -795,7 +795,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_screen->clear();
setBackground(0xD000420C);
- _palette = new Palette(_vm, 0xD000420C);
+ setPalette(0xD000420C);
insertMouse435(0x04208D08, 20, 620);
_ssFireCannonButton = addSprite(new SsScene3009FireCannonButton(_vm, this));
@@ -821,7 +821,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, kScene3009SmackerFileHashes[_cannonLocation], false, _keepVideo));
_smackerPlayer->setDrawPos(89, 37);
- _palette->usePalette();
+ _palette->usePalette(); // Use it again since the SmackerPlayer overrides the usage
insertStaticSprite(0x8540252C, 400);
@@ -1032,7 +1032,7 @@ bool Scene3009::isSymbolsPart2Solved() {
}
bool Scene3009::sub462E90() {
- return /*_flag3 || */_flag4;
+ return _flag4;
}
// Scene3010
@@ -1153,10 +1153,7 @@ void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) {
_drawRect.y = 0;
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = _spriteResource.getDimensions().width;
- _deltaRect.height = _spriteResource.getDimensions().height;
+ _deltaRect = _drawRect;
processDelta();
_needRefresh = true;
StaticSprite::update();
@@ -1294,8 +1291,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
setBackground(0x80802626);
- _palette = new Palette(_vm, 0x80802626);
- _palette->usePalette();
+ setPalette(0x80802626);
for (int i = 0; i < 3; i++) {
_asDeadBolts[i] = new AsScene3010DeadBolt(_vm, this, i, which == 1);//CHECKME
@@ -1443,10 +1439,7 @@ SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bo
_drawRect.y = 0;
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = _spriteResource.getDimensions().width;
- _deltaRect.height = _spriteResource.getDimensions().height;
+ _deltaRect = _drawRect;
setVisible(false);
processDelta();
_needRefresh = true;
@@ -1546,9 +1539,7 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
_index1 = getGlobalVar(0x2414C2F2);
setBackground(0x92124A04);
-
- _palette = new Palette(_vm, 0xA4070114);
- _palette->usePalette();
+ setPalette(0xA4070114);
addEntity(_palette);
insertMouse435(0x24A00929, 20, 620);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 5072d53..f1ee554 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -186,6 +186,11 @@ void Scene::changeBackground(uint32 fileHash) {
_background->load(fileHash);
}
+void Scene::setPalette(uint32 fileHash) {
+ _palette = fileHash ? new Palette(_vm, fileHash) : new Palette(_vm);
+ _palette->usePalette();
+}
+
Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 31dd61d..bcae324 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -55,6 +55,7 @@ public:
Background *addBackground(Background *background);
void setBackground(uint32 fileHash, bool dirtyBackground = true);
void changeBackground(uint32 fileHash);
+ void setPalette(uint32 fileHash = 0);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL);
void insertMouse435(uint32 fileHash, int16 x1, int16 x2);
Commit: 1b2d496d186c6f838526f51f7d0b3eea70a8b322
https://github.com/scummvm/scummvm/commit/1b2d496d186c6f838526f51f7d0b3eea70a8b322
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Try to clean up the clipRect stuff a little
Changed paths:
engines/neverhood/graphics.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/scene.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 36bd95e..08fa1f5 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -44,14 +44,29 @@ struct NRect {
int16 x1, y1, x2, y2;
NRect() : x1(0), y1(0), x2(0), y2(0) {}
NRect(int16 x01, int16 y01, int16 x02, int16 y02) : x1(x01), y1(y01), x2(x02), y2(y02) {}
+ void set(int16 x01, int16 y01, int16 x02, int16 y02) {
+ x1 = x01;
+ y1 = y01;
+ x2 = x02;
+ y2 = y02;
+ }
};
typedef Common::Array<NRect> NRectArray;
+// TODO: Use Common::Rect
struct NDrawRect {
int16 x, y, width, height;
NDrawRect() : x(0), y(0), width(0), height(0) {}
NDrawRect(int16 x0, int16 y0, int16 width0, int16 height0) : x(x0), y(y0), width(width0), height(height0) {}
+ int16 x2() { return x + width; }
+ int16 y2() { return y + height; }
+ void set(int16 x0, int16 y0, int16 width0, int16 height0) {
+ x = x0;
+ y = y0;
+ width = width0;
+ height = height0;
+ }
};
class AnimResource;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 8dda9ed..ddd3e0a 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -369,18 +369,11 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x2080A3A8, 1300);
- // TODO: This sucks somehow, find a better way
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
if (getGlobalVar(0xD217189D) == 0) {
_asDoor = addSprite(new AsScene1001Door(_vm));
- _asDoor->getSurface()->getClipRect().x1 = 0;
- _asDoor->getSurface()->getClipRect().y1 = 0;
- _asDoor->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
- _asDoor->getSurface()->getClipRect().y2 = 480;
+ _asDoor->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
} else {
_asDoor = NULL;
}
@@ -395,10 +388,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x03C698DA) == 0) {
tempSprite = insertStaticSprite(0x8C066150, 200);
_asWindow = addSprite(new AsScene1001Window(_vm));
- _asWindow->getSurface()->getClipRect().x1 = tempSprite->getSurface()->getDrawRect().x;
- _asWindow->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
- _asWindow->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
- _asWindow->getSurface()->getClipRect().y2 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
+ _asWindow->setClipRect(tempSprite->getDrawRect());
} else {
_asWindow = NULL;
}
@@ -526,12 +516,7 @@ AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool f
SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
}
- debug("clipY1 = %d", clipY1);
-
- _surface->getClipRect().x1 = 0;
- _surface->getClipRect().y1 = clipY1;
- _surface->getClipRect().x2 = 640;
- _surface->getClipRect().y2 = 480;
+ setClipRect(0, clipY1, 640, 480);
_x = x;
_y = y;
@@ -664,7 +649,7 @@ AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
_spriteResource.load2(0x1052370F);
createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _surface->getClipRect() = clipRect;
+ setClipRect(clipRect);
_x = 526;
@@ -764,7 +749,7 @@ AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Sce
SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
SetSpriteCallback(&AsScene1002DoorSpy::spriteUpdate448AA0);
createSurface(800, 136, 147);
- _surface->getClipRect() = clipRect;
+ setClipRect(clipRect);
spriteUpdate448AA0();
_soundResource.load(0xC0C40298);
setFileHash(0x586C1D48, 0, 0);
@@ -803,17 +788,14 @@ void AsScene1002DoorSpy::spriteUpdate448AA0() {
}
void AsScene1002DoorSpy::sub448AC0() {
- _surface->getClipRect() = _rect;
+ setClipRect(_rect);
_parentScene->setSurfacePriority(getSurface(), 800);
setFileHash(0x586C1D48, 0, 0);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
}
void AsScene1002DoorSpy::sub448B10() {
- _surface->getClipRect().x1 = 0;
- _surface->getClipRect().y1 = 0;
- _surface->getClipRect().x2 = 640;
- _surface->getClipRect().y2 = 480;
+ setClipRect(0, 0, 640, 480);
_parentScene->setSurfacePriority(getSurface(), 1200);
setFileHash(0x586C1D48, 1, -1);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage448A60);
@@ -1313,14 +1295,11 @@ uint32 Class479::handleMessage(int messageNum, const MessageParam ¶m, Entity
sendMessage(_parentScene, 0x1022, 1200);
_flag1 = true;
_savedClipRect = _surface->getClipRect();
- _surface->getClipRect().x1 = 0;
- _surface->getClipRect().y1 = 0;
- _surface->getClipRect().x2 = 640;
- _surface->getClipRect().y2 = 480;
+ setClipRect(0, 0, 640, 480);
} else if (param.asInteger() == 0x88001184) {
sendMessage(_parentScene, 0x1022, 1000);
if (_flag1) {
- _surface->getClipRect() = _savedClipRect;
+ setClipRect(_savedClipRect);
}
}
break;
@@ -1362,54 +1341,39 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
- _klayman->getSurface()->getClipRect().x1 = 31;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height;
+ _klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
InsertKlaymanInitArgs(KmScene1002, 379, 435, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4270);
- _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
+ _class478->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
InsertKlaymanInitArgs(KmScene1002, 650, 435, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4478);
- _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
+ _class478->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
} else if (which == 2) {
InsertKlaymanInitArgs(KmScene1002, 68, 645, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4298);
- _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
+ _class478->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
_class478 = addSprite(new Class478(_vm, _klayman));
setMessageList(0x004B4470);
- _klayman->getSurface()->getClipRect().x1 = 31;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
+ _class478->setClipRect(_klayman->getClipRect());
_class479 = addSprite(new Class479(_vm, this, _klayman));
- _class479->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _class479->setClipRect(_klayman->getClipRect());
_klayman->setRepl(64, 0);
_vm->_gameState.field2 = 0;
}
@@ -1417,16 +1381,14 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x23303124);
tempSprite = insertStaticSprite(0xB3242310, 825);
- tempClipRect.x1 = tempSprite->getSurface()->getDrawRect().x;
- tempClipRect.y1 = tempSprite->getSurface()->getDrawRect().y;
- tempClipRect.x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- tempClipRect.y2 = _ssLadderArchPart2->getSurface()->getDrawRect().y + _ssLadderArchPart2->getSurface()->getDrawRect().height;
+ tempClipRect.set(tempSprite->getDrawRect().x, tempSprite->getDrawRect().y,
+ _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart2->getDrawRect().y2());
- _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 258, 191, _class599->getSurface()->getDrawRect().y, false));
- _asRing2 = addSprite(new AsScene1002Ring(_vm, this, false, 297, 189, _class599->getSurface()->getDrawRect().y, false));
- _asRing3 = addSprite(new AsScene1002Ring(_vm, this, true, 370, 201, _class599->getSurface()->getDrawRect().y, getGlobalVar(0x8306F218) != 0));
- _asRing4 = addSprite(new AsScene1002Ring(_vm, this, false, 334, 191, _class599->getSurface()->getDrawRect().y, false));
- _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 425, 184, _class599->getSurface()->getDrawRect().y, false));
+ _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 258, 191, _class599->getDrawRect().y, false));
+ _asRing2 = addSprite(new AsScene1002Ring(_vm, this, false, 297, 189, _class599->getDrawRect().y, false));
+ _asRing3 = addSprite(new AsScene1002Ring(_vm, this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(0x8306F218) != 0));
+ _asRing4 = addSprite(new AsScene1002Ring(_vm, this, false, 334, 191, _class599->getDrawRect().y, false));
+ _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 425, 184, _class599->getDrawRect().y, false));
_asDoor = addSprite(new AsScene1002Door(_vm, tempClipRect));
@@ -1456,11 +1418,8 @@ Scene1002::~Scene1002() {
void Scene1002::update() {
Scene::update();
if (!_flag1B4 && _klayman->getY() > 230) {
- _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
+ _class478->setClipRect(_klayman->getClipRect());
deleteSprite(&_ssLadderArchPart3);
_klayman->clearRepl();
_flag1B4 = true;
@@ -1480,6 +1439,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
+ // Debug stuff (original)
if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
setGlobalVar(0x8306F218, 1);
setGlobalVar(0x1B144052, 3);
@@ -1487,6 +1447,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x000D:
+ // Debug stuff (original)
if (param.asInteger() == 0x48848178) {
setGlobalVar(0x8306F218, 1);
setGlobalVar(0x1B144052, 3);
@@ -1499,15 +1460,12 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (getGlobalVar(0x8306F218)) {
setMessageList(0x004B4428);
} else {
- // TODO _resourceTable3.load();
setMessageList(0x004B4448);
}
messageResult = 1;
} else if (param.asInteger() == 0x4A845A00) {
- // TODO _resourceTable4.load();
sendEntityMessage(_klayman, 0x1014, _asRing1);
} else if (param.asInteger() == 0x43807801) {
- // TODO _resourceTable4.load();
sendEntityMessage(_klayman, 0x1014, _asRing2);
} else if (param.asInteger() == 0x46C26A01) {
if (getGlobalVar(0x8306F218)) {
@@ -1518,27 +1476,19 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
setGlobalVar(0x2B514304, 1);
setMessageList(0x004B44A8);
} else {
- // TODO _resourceTable5.load();
setMessageList(0x004B44A0);
}
}
messageResult = 1;
} else if (param.asInteger() == 0x468C7B11) {
- // TODO _resourceTable4.load();
sendEntityMessage(_klayman, 0x1014, _asRing4);
} else if (param.asInteger() == 0x42845B19) {
- // TODO _resourceTable4.load();
sendEntityMessage(_klayman, 0x1014, _asRing5);
} else if (param.asInteger() == 0xC0A07458) {
sendEntityMessage(_klayman, 0x1014, _class426);
}
break;
case 0x1024:
- if (param.asInteger() == 1) {
- // TODO _resourceTable3.load();
- } else if (param.asInteger() == 3) {
- // TODO _resourceTable2.load();
- }
sendMessage(_parentModule, 0x1024, param.asInteger());
break;
case 0x2000:
@@ -1717,11 +1667,8 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x3060222E, 1300);
tempSprite = insertStaticSprite(0x0E002004, 1300);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _klayman->setClipRect(0, tempSprite->getDrawRect().y, 640, 480);
+ _class478->setClipRect(_klayman->getClipRect());
_asTrashCan = addSprite(new AsScene1004TrashCan(_vm));
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index a7046ce..47b1a91 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -267,14 +267,6 @@ public:
Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Scene1002();
protected:
- // TODO ResourceTable _resourceTable1;
- // TODO ResourceTable _resourceTable2;
- // TODO ResourceTable _resourceTable3;
- // TODO ResourceTable _resourceTable4;
- // TODO ResourceTable _resourceTable5;
- // TODO ResourceTable _resourceTable6;
- // TODO ResourceTable _resourceTable7;
- // TODO ResourceTable _resourceTable8;
Sprite *_asRing1;
Sprite *_asRing2;
Sprite *_asRing3;
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 81e61c7..62462fc 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -27,7 +27,6 @@ namespace Neverhood {
Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO _resourceTable.setResourceList(0x004B3E68);
SetMessageHandler(&Module1200::handleMessage);
debug("Module1200: which = %d", which);
@@ -188,10 +187,7 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
}
createSurface(50, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _surface->getClipRect().x1 = 0;
- _surface->getClipRect().y1 = 0;
- _surface->getClipRect().x2 = 640;
- _surface->getClipRect().y2 = clipY2;
+ setClipRect(0, 0, 640, clipY2);
_needRefresh = true;
StaticSprite::update();
}
@@ -774,22 +770,19 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
tempSprite = insertStaticSprite(0x03C82530, 100);
- topY1 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
+ topY1 = tempSprite->getY() + tempSprite->getDrawRect().height;
tempSprite = insertStaticSprite(0x88182069, 200);
- topY2 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
+ topY2 = tempSprite->getY() + tempSprite->getDrawRect().height;
tempSprite = insertStaticSprite(0x476014E0, 300);
- topY3 = tempSprite->getY() + tempSprite->getSurface()->getDrawRect().height;
+ topY3 = tempSprite->getY() + tempSprite->getDrawRect().height;
tempSprite = insertStaticSprite(0x04063110, 500);
topY4 = tempSprite->getY() + 1;
_class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1));
- _class466->getSurface()->getClipRect().x1 = 0;
- _class466->getSurface()->getClipRect().y1 = topY4;
- _class466->getSurface()->getClipRect().x2 = 640;
- _class466->getSurface()->getClipRect().y2 = 480;
+ _class466->setClipRect(0, topY4, 640, 480);
insertStaticSprite(0x400B04B0, 1200);
@@ -797,7 +790,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
x1 = tempSprite->getX();
tempSprite = insertStaticSprite(0xA29223FA, 1200);
- x2 = tempSprite->getX() + tempSprite->getSurface()->getDrawRect().width;
+ x2 = tempSprite->getX() + tempSprite->getDrawRect().width;
class464 = addSprite(new Class464(_vm));
@@ -830,10 +823,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AEC10);
}
- _klayman->getSurface()->getClipRect().x1 = x1;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = x2;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(x1, 0, x2, 480);
_klayman->setRepl(64, 0);
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
@@ -851,17 +841,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (!getGlobalVar(0x0A18CA33)) {
AsScene1201TntMan *asTntMan;
asTntMan = new AsScene1201TntMan(_vm, this, _class466, which == 1);
- asTntMan->getSurface()->getClipRect().x1 = x1;
- asTntMan->getSurface()->getClipRect().y1 = 0;
- asTntMan->getSurface()->getClipRect().x2 = x2;
- asTntMan->getSurface()->getClipRect().y2 = 480;
+ asTntMan->setClipRect(x1, 0, x2, 480);
_vm->_collisionMan->addSprite(asTntMan);
_asTntMan = addSprite(asTntMan);
tempSprite = addSprite(new Class465(_vm, _asTntMan));
- tempSprite->getSurface()->getClipRect().x1 = x1;
- tempSprite->getSurface()->getClipRect().y1 = 0;
- tempSprite->getSurface()->getClipRect().x2 = x2;
- tempSprite->getSurface()->getClipRect().y2 = 480;
+ tempSprite->setClipRect(x1, 0, x2, 480);
asTntMan->setRepl(64, 0);
}
@@ -926,10 +910,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x63D400BC, 900);
_asLeftDoor = addSprite(new AsScene1201LeftDoor(_vm, _klayman));
- _asLeftDoor->getSurface()->getClipRect().x1 = x1;
- _asLeftDoor->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
- _asLeftDoor->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
- _asLeftDoor->getSurface()->getClipRect().y2 = 480;
+ _asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
setGlobalVar(0x0112090A, 1);
@@ -944,10 +925,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
_asCreature = addSprite(new AsScene1201Creature(_vm, this, _klayman));
- _asCreature->getSurface()->getClipRect().x1 = x1;
- _asCreature->getSurface()->getClipRect().y1 = 0;
- _asCreature->getSurface()->getClipRect().x2 = x2;
- _asCreature->getSurface()->getClipRect().y2 = 480;
+ _asCreature->setClipRect(x1, 0, x2, 480);
}
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 8f3483a..48a8b54 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -430,18 +430,15 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2->setVisible(false);
_sprite3 = insertStaticSprite(0x16E01E20, 1100);
- _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getSurface()->getDrawRect().y, false));
- _asRing2 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32, 132, _class595->getSurface()->getDrawRect().y, getGlobalVar(0x13206309)));
- _asRing3 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32, 122, _class595->getSurface()->getDrawRect().y, false));
- _asRing4 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32 + 32 + 32, 132, _class595->getSurface()->getDrawRect().y, getGlobalVar(0x80101B1E)));
- _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getSurface()->getDrawRect().y, false));
+ _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getDrawRect().y, false));
+ _asRing2 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x13206309)));
+ _asRing3 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false));
+ _asRing4 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x80101B1E)));
+ _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false));
_asBridge = addSprite(new AsScene1302Bridge(_vm, this));
_ssFence = addSprite(new SsScene1302Fence(_vm));
- _ssFence->getSurface()->getClipRect().x1 = 0;
- _ssFence->getSurface()->getClipRect().y1 = 0;
- _ssFence->getSurface()->getClipRect().x2 = 640;
- _ssFence->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
+ _ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
InsertKlaymanInitArgs(KmScene1002, 380, 364, (_class595, NULL));
@@ -451,10 +448,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B0870);
}
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480);
_asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, true));
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
@@ -658,10 +652,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
InsertKlayman(KmScene1303, 207, 332);
setMessageList(0x004AF9A0);
- _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
@@ -746,10 +737,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B90F0);
}
- _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
@@ -1236,7 +1224,7 @@ void AsScene1307Key::stRemoveKey() {
void AsScene1307Key::stInsertKey() {
_pointIndex = 0;
sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4]);
- _surface->getClipRect() = _clipRects[getSubVar(0xA010B810, _index) % 4];
+ setClipRect(_clipRects[getSubVar(0xA010B810, _index) % 4]);
SetSpriteCallback(&AsScene1307Key::suInsertKey);
_newHashListIndex = -2;
}
@@ -1246,10 +1234,7 @@ void AsScene1307Key::stMoveKey() {
int16 newX = pt.x + kAsScene1307KeyXDelta;
int16 newY = pt.y + kAsScene1307KeyYDelta;
sendMessage(_parentScene, 0x1022, 1000);
- _surface->getClipRect().x1 = 0;
- _surface->getClipRect().y1 = 0;
- _surface->getClipRect().x2 = 640;
- _surface->getClipRect().y2 = 480;
+ setClipRect(0, 0, 640, 480);
_prevX = _x;
_prevY = _y;
if (newX == _x && newY == _y) {
@@ -1311,28 +1296,16 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x06204A88, 20, 620);
tempSprite = insertStaticSprite(0x00A3621C, 800);
- _clipRects[0].x1 = tempSprite->getSurface()->getDrawRect().x;
- _clipRects[0].y1 = 0;
- _clipRects[0].x2 = 640;
- _clipRects[0].y2 = 480;
+ _clipRects[0].set(tempSprite->getDrawRect().x, 0, 640, 480);
tempSprite = insertStaticSprite(0x00A3641C, 600);
- _clipRects[1].x1 = tempSprite->getSurface()->getDrawRect().x;
- _clipRects[1].y1 = 0;
- _clipRects[1].x2 = 640;
- _clipRects[1].y2 = 480;
+ _clipRects[1].set(tempSprite->getDrawRect().x, 0, 640, 480);
tempSprite = insertStaticSprite(0x00A3681C, 400);
- _clipRects[2].x1 = tempSprite->getSurface()->getDrawRect().x;
- _clipRects[2].y1 = 0;
- _clipRects[2].x2 = 640;
- _clipRects[2].y2 = 480;
+ _clipRects[2].set(tempSprite->getDrawRect().x, 0, 640, 480);
tempSprite = insertStaticSprite(0x00A3701C, 200);
- _clipRects[3].x1 = tempSprite->getSurface()->getDrawRect().x;
- _clipRects[3].y1 = 0;
- _clipRects[3].x2 = 640;
- _clipRects[3].y2 = 480;
+ _clipRects[3].set(tempSprite->getDrawRect().x, 0, 640, 480);
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(0x08D0AB11, keyIndex)) {
@@ -1693,25 +1666,16 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (_sprite4) {
- _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite4->getSurface()->getDrawRect().x + _sprite4->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite4->getDrawRect().x2(), 480);
} else {
- _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
if (getGlobalVar(0x04A105B3) == 4) {
_class489 = new Class489(_vm, this, _klayman, 0);
addSprite(_class489);
_vm->_collisionMan->addSprite(_class489);
- _class489->getSurface()->getClipRect().x1 = 0;
- _class489->getSurface()->getClipRect().y1 = 0;
- _class489->getSurface()->getClipRect().x2 = 0;
- _class489->getSurface()->getClipRect().y2 = _sprite2->getSurface()->getDrawRect().y + _sprite2->getSurface()->getDrawRect().height;
+ _class489->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_class489->setRepl(64, 0);
} else {
_class489 = NULL;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 3f61ceb..7bff294 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -714,16 +714,10 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->processDelta();
setMessageList(0x004B6670);
}
- _class489->getSurface()->getClipRect().x1 = _sprite3->getSurface()->getDrawRect().x;
- _class489->getSurface()->getClipRect().y1 = _sprite2->getSurface()->getDrawRect().y;
- _class489->getSurface()->getClipRect().x2 = 640;
- _class489->getSurface()->getClipRect().y2 = 480;
+ _class489->setClipRect(_sprite3->getDrawRect().x, _sprite2->getDrawRect().y, 640, 480);
}
- _klayman->getSurface()->getClipRect().x1 = _sprite3->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480);
if (which == 0 && _class489 && _class489->hasMessageHandler()) {
sendMessage(_class489, 0x482B, 0);
@@ -881,8 +875,8 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1402::handleMessage);
- _background = addBackground(new Background(_vm, 0x231482F0, 0, 0));
- _background->getSurface()->getDrawRect().y = -10;
+ setBackground(0x231482F0);
+ setBackgroundY(-10);
// TODO g_screen->field_26 = 0;
setPalette(0x231482F0);
_palette->addPalette(0x91D3A391, 0, 64, 0);
@@ -928,10 +922,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (_class482) {
- _class482->getSurface()->getClipRect().x1 = 0;
- _class482->getSurface()->getClipRect().y1 = 0;
- _class482->getSurface()->getClipRect().x2 = 640;
- _class482->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ _class482->setClipRect(0, 0, 640, _class454_3->getDrawRect().y2());
}
if (getGlobalVar(0x4A105B3) == 1) {
@@ -948,39 +939,27 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->processDelta();
setMessageList(0x004B0BD0);
}
- _class489->getSurface()->getClipRect().x1 = _class454_1->getSurface()->getDrawRect().x;
- _class489->getSurface()->getClipRect().y1 = 0;
- _class489->getSurface()->getClipRect().x2 = _class454_2->getSurface()->getDrawRect().x;
- _class489->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ _class489->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x, _class454_3->getDrawRect().y2());
}
- _klayman->getSurface()->getClipRect().x1 = _class454_1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _class454_2->getSurface()->getDrawRect().x + _class454_2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ _klayman->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x2(), _class454_3->getDrawRect().y2());
}
void Scene1402::update() {
if (_flag) {
- _background->getSurface()->getDrawRect().y = _vm->_rnd->getRandomNumber(10 - 1) - 10;
- // TODO g_screen->field_26 = -10 - _background->getSurface()->getDrawRect().y;
+ setBackgroundY(_vm->_rnd->getRandomNumber(10 - 1) - 10);
+ // TODO g_screen->field_26 = -10 - _background->getDrawRect().y;
} else {
- _background->getSurface()->getDrawRect().y = -10;
+ setBackgroundY(-10);
// TODO g_screen->field_26 = 0;
SetUpdateHandler(&Scene::update);
}
Scene::update();
if (_class482) {
- _class482->getSurface()->getClipRect().x1 = 0;
- _class482->getSurface()->getClipRect().y1 = 0;
- _class482->getSurface()->getClipRect().x2 = 640;
- _class482->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ _class482->setClipRect(0, 0, 640, _class454_3->getDrawRect().y2());
}
- _klayman->getSurface()->getClipRect().x1 = _class454_1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _class454_2->getSurface()->getDrawRect().x + _class454_2->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _class454_3->getSurface()->getDrawRect().y + _class454_3->getSurface()->getDrawRect().height;
+ _klayman->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x2(), _class454_3->getDrawRect().y2());
}
uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1392,10 +1371,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->processDelta();
setMessageList(0x004B1F70);
}
- _class489->getSurface()->getClipRect().x1 = 0;
- _class489->getSurface()->getClipRect().y1 = 0;
- _class489->getSurface()->getClipRect().x2 = 640;
- _class489->getSurface()->getClipRect().y2 = _class401_2->getSurface()->getDrawRect().y + _class401_2->getSurface()->getDrawRect().height;
+ _class489->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
class489->setRepl(64, 0);
}
@@ -1515,16 +1491,10 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->processDelta();
setMessageList(0x004B8CB8);
}
- _class489->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
- _class489->getSurface()->getClipRect().y1 = 0;
- _class489->getSurface()->getClipRect().x2 = 640;
- _class489->getSurface()->getClipRect().y2 = 480;
+ _class489->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
- _klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index f551911..30e4631 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -210,47 +210,32 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
InsertKlayman(KmScene1705, 231, 434);
setMessageList(0x004B69E8);
sendMessage(this, 0x2000, 0);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 1) {
InsertKlayman(KmScene1705, 431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08);
sendMessage(this, 0x2000, 1);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 2) {
InsertKlayman(KmScene1705, 431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0);
sendMessage(this, 0x2000, 1);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 3) {
InsertKlayman(KmScene1705, 431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18);
sendMessage(this, 0x2000, 1);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else {
InsertKlayman(KmScene1705, 231, 74);
sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
sendMessage(this, 0x2000, 0);
tempSprite = insertStaticSprite(0x30303822, 1100);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
- _klayman->getSurface()->getClipRect().x2 = _sprite->getSurface()->getDrawRect().x + _sprite->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, tempSprite->getDrawRect().y, _sprite->getDrawRect().x2(), 480);
}
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index b2e9a0e..3977598 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -133,10 +133,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setDoDeltaX(1);
}
- _klayman->getSurface()->getClipRect().x1 = _class401->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_class401->getDrawRect().x, 0, 640, 480);
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index a0db788..124ace6 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -760,16 +760,16 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
}
tempSprite = insertStaticSprite(0x030326A0, 1100);
- _rect1.x1 = tempSprite->getSurface()->getDrawRect().x;
+ _rect1.x1 = tempSprite->getDrawRect().x;
insertStaticSprite(0x811DA061, 1100);
tempSprite = insertStaticSprite(0x11180022, 1100);
- _rect2.x1 = tempSprite->getSurface()->getDrawRect().x;
+ _rect2.x1 = tempSprite->getDrawRect().x;
tempSprite = insertStaticSprite(0x0D411130, 1100);
- _rect1.y2 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
- _rect2.y1 = tempSprite->getSurface()->getDrawRect().y + tempSprite->getSurface()->getDrawRect().height;
+ _rect1.y2 = tempSprite->getDrawRect().y2();
+ _rect2.y1 = tempSprite->getDrawRect().y2();
_doorLightSprite = insertStaticSprite(0xA4062212, 900);
@@ -1366,15 +1366,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
_ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100);
- _leftDoorClipRect.x1 = _ssSmallLeftDoor->getSurface()->getDrawRect().x;
- _leftDoorClipRect.y1 = 0;
- _leftDoorClipRect.x2 = 640;
- _leftDoorClipRect.y2 = 480;
-
- _rightDoorClipRect.x1 = 0;
- _rightDoorClipRect.y1 = 0;
- _rightDoorClipRect.x2 = _ssSmallRightDoor->getSurface()->getDrawRect().x + _ssSmallRightDoor->getSurface()->getDrawRect().width;
- _rightDoorClipRect.y2 = 480;
+ _leftDoorClipRect.set(_ssSmallLeftDoor->getDrawRect().x, 0, 640, 480);
+ _rightDoorClipRect.set(0, 0, _ssSmallRightDoor->getDrawRect().x2(), 480);
sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);
sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor);
@@ -1403,10 +1396,10 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x9A500914)) {
_ssSmallLeftDoor->setVisible(false);
- _klayman->getSurface()->getClipRect() = _rightDoorClipRect;
+ _klayman->setClipRect(_rightDoorClipRect);
} else {
_ssSmallRightDoor->setVisible(false);
- _klayman->getSurface()->getClipRect() = _leftDoorClipRect;
+ _klayman->setClipRect(_leftDoorClipRect);
}
setRectList(0x004B8420);
@@ -1445,10 +1438,10 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x4808:
if (sender == _asLeftDoor) {
_ssSmallLeftDoor->setVisible(true);
- _klayman->getSurface()->getClipRect() = _leftDoorClipRect;
+ _klayman->setClipRect(_leftDoorClipRect);
} else {
_ssSmallRightDoor->setVisible(true);
- _klayman->getSurface()->getClipRect() = _rightDoorClipRect;
+ _klayman->setClipRect(_rightDoorClipRect);
}
break;
case 0x4826:
@@ -1548,10 +1541,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_isKlaymanInLight = true;
}
- _klayman->getSurface()->getClipRect().x1 = _ssDoorFrame->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480);
loadDataResource(0x00144822);
_klayman->setSoundFlag(true);
@@ -1563,14 +1553,14 @@ void Scene2205::update() {
if (!_isLightOn && getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x0008028D, 0, 256, 0);
- _background->load(0x0008028D);
+ changeBackground(0x0008028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0x2D309030);
sendMessage(_ssDoorFrame, 0x2000, 0);
changeMouseCursor(0x80289008);
_isLightOn = true;
} else if (_isLightOn && !getGlobalVar(0x4D080E54)) {
_palette->addPalette(0xD00A028D, 0, 256, 0);
- _background->load(0xD00A028D);
+ changeBackground(0xD00A028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84);
sendMessage(_ssDoorFrame, 0x2000, 0);
changeMouseCursor(0xA0289D08);
@@ -1769,10 +1759,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2 = insertStaticSprite(0x3406A333, 300);
_sprite3 = insertStaticSprite(0x24A223A2, 100);
_sprite4 = addSprite(new Class603(_vm, 0x26133023));
- _sprite4->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
- _sprite4->getSurface()->getClipRect().y1 = 0;
- _sprite4->getSurface()->getClipRect().x2 = 640;
- _sprite4->getSurface()->getClipRect().y2 = 480;
+ _sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8AF8);
_sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x0E038022, 100, 0));
insertMouse433(0x83212411);
@@ -1784,10 +1771,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2 = insertStaticSprite(0x020462E0, 300);
_sprite3 = insertStaticSprite(0x900626A2, 100);
_sprite4 = addSprite(new Class603(_vm, 0x544822A8));
- _sprite4->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
- _sprite4->getSurface()->getClipRect().y1 = 0;
- _sprite4->getSurface()->getClipRect().x2 = 640;
- _sprite4->getSurface()->getClipRect().y2 = 480;
+ _sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8B58);
_sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x16882608, 100, 0));
insertMouse433(0x02A41E09);
@@ -1795,10 +1779,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_class604 = addSprite(new Class604(_vm, 0x317831A0));
}
- _class604->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
- _class604->getSurface()->getClipRect().y1 = 0;
- _class604->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
- _class604->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
+ _class604->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
setBackground(fileHash);
@@ -1894,10 +1875,7 @@ void Scene2206::sub481950() {
setSurfacePriority(_sprite2->getSurface(), 300);
setSurfacePriority(_sprite3->getSurface(), 100);
setSurfacePriority(_sprite4->getSurface(), 200);
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, 0, 640, 480);
}
void Scene2206::sub4819D0() {
@@ -1909,10 +1887,7 @@ void Scene2206::sub4819D0() {
setSurfacePriority(_sprite2->getSurface(), 1300);
setSurfacePriority(_sprite3->getSurface(), 1100);
setSurfacePriority(_sprite4->getSurface(), 1200);
- _klayman->getSurface()->getClipRect().x1 = _sprite2->getSurface()->getDrawRect().x;
- _klayman->getSurface()->getClipRect().y1 = 0;
- _klayman->getSurface()->getClipRect().x2 = _sprite3->getSurface()->getDrawRect().x + _sprite3->getSurface()->getDrawRect().width;
- _klayman->getSurface()->getClipRect().y2 = _sprite1->getSurface()->getDrawRect().y + _sprite1->getSurface()->getDrawRect().height;
+ _klayman->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
}
void Scene2206::sub481B00() {
@@ -2307,20 +2282,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x2C4061C4, 100, 0));
- _asLever->getSurface()->getClipRect().x1 = 0;
- _asLever->getSurface()->getClipRect().y1 = 0;
- _asLever->getSurface()->getClipRect().x2 = _ssMaskPart3->getSurface()->getDrawRect().x + _ssMaskPart3->getSurface()->getDrawRect().width;
- _asLever->getSurface()->getClipRect().y2 = 480;
-
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = _ssMaskPart2->getSurface()->getDrawRect().y + _ssMaskPart2->getSurface()->getDrawRect().height;
-
- _asElevator->getSurface()->getClipRect().x1 = 0;
- _asElevator->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
- _asElevator->getSurface()->getClipRect().x2 = 640;
- _asElevator->getSurface()->getClipRect().y2 = _ssMaskPart2->getSurface()->getDrawRect().y + _ssMaskPart2->getSurface()->getDrawRect().height;
+ _asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480);
+ _klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
+ _asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
} else {
@@ -2342,15 +2306,8 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_asWallCannonAnimation = NULL;
_ssButton = NULL;
- _klayman->getSurface()->getClipRect().x1 = 0;
- _klayman->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
- _klayman->getSurface()->getClipRect().x2 = 640;
- _klayman->getSurface()->getClipRect().y2 = 480;
-
- _asElevator->getSurface()->getClipRect().x1 = 0;
- _asElevator->getSurface()->getClipRect().y1 = _ssMaskPart1->getSurface()->getDrawRect().y;
- _asElevator->getSurface()->getClipRect().x2 = 640;
- _asElevator->getSurface()->getClipRect().y2 = 480;
+ _klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);
+ _asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index bcae324..fd11509 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -40,6 +40,9 @@ namespace Neverhood {
#define InsertKlayman(KlaymanClass, X, Y) _klayman = new KlaymanClass(_vm, this, X, Y); addSprite(_klayman)
#define InsertKlaymanInitArgs(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
+#define InsertSprite(SpriteClass) (SpriteClass*)addSprite(new SpriteClass(_vm));
+#define InsertSpriteInitArgs(SpriteClass, InitArgs) (SpriteClass*)addSprite((new SpriteClass(_vm))-> init InitArgs);
+
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
@@ -55,6 +58,8 @@ public:
Background *addBackground(Background *background);
void setBackground(uint32 fileHash, bool dirtyBackground = true);
void changeBackground(uint32 fileHash);
+ void setBackgroundY(int16 y) { _background->getSurface()->getDrawRect().y = y; }
+ int16 getBackgroundY() { return _background->getSurface()->getDrawRect().y; }
void setPalette(uint32 fileHash = 0);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL);
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 9dc1d8b..480e9e9 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -98,6 +98,22 @@ int16 Sprite::defFilterY(int16 y) {
return y;
}
+void Sprite::setClipRect(int16 x1, int16 y1, int16 x2, int16 y2) {
+ NRect &clipRect = _surface->getClipRect();
+ clipRect.x1 = x1;
+ clipRect.y1 = y1;
+ clipRect.x2 = x2;
+ clipRect.y2 = y2;
+}
+
+void Sprite::setClipRect(NRect& clipRect) {
+ _surface->getClipRect() = clipRect;
+}
+
+void Sprite::setClipRect(NDrawRect& drawRect) {
+ setClipRect(drawRect.x, drawRect.y, drawRect.x2(), drawRect.y2());
+}
+
// StaticSprite
StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 1c4008e..59109d6 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -58,6 +58,12 @@ public:
void loadDataResource(uint32 fileHash);
int16 defFilterY(int16 y);
void setVisible(bool value) { _surface->setVisible(value); }
+ NDrawRect& getDrawRect() { return _surface->getDrawRect(); }
+ // Some shortcuts to set the clipRect
+ NRect& getClipRect() { return _surface->getClipRect(); }
+ void setClipRect(int16 x1, int16 y1, int16 x2, int16 y2);
+ void setClipRect(NRect& clipRect);
+ void setClipRect(NDrawRect& drawRect);
protected:
void (Sprite::*_spriteUpdateCb)();
Common::String _spriteUpdateCbName; // For debugging purposes
Commit: 9aff6337bcfa95ba6ef6c17c9e018470f81407b4
https://github.com/scummvm/scummvm/commit/9aff6337bcfa95ba6ef6c17c9e018470f81407b4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Try to cleanup sprite creation with a templated insertSprite function (only in Module1000 so far)
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/scene.h
engines/neverhood/sprite.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index ddd3e0a..e160a71 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -372,28 +372,28 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
if (getGlobalVar(0xD217189D) == 0) {
- _asDoor = addSprite(new AsScene1001Door(_vm));
+ _asDoor = insertSprite<AsScene1001Door>();
_asDoor->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
} else {
_asDoor = NULL;
}
- _asLever = addSprite(new AsScene1001Lever(_vm, this, 150, 433, 1));
+ _asLever = insertSprite<AsScene1001Lever>(this, 150, 433, 1);
insertStaticSprite(0x809861A6, 950);
insertStaticSprite(0x89C03848, 1100);
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x15288120, 100, 0));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
if (getGlobalVar(0x03C698DA) == 0) {
tempSprite = insertStaticSprite(0x8C066150, 200);
- _asWindow = addSprite(new AsScene1001Window(_vm));
+ _asWindow = insertSprite<AsScene1001Window>();
_asWindow->setClipRect(tempSprite->getDrawRect());
} else {
_asWindow = NULL;
}
- _asHammer = addSprite(new AsScene1001Hammer(_vm, _asDoor));
+ _asHammer = insertSprite<AsScene1001Hammer>(_asDoor);
}
@@ -516,7 +516,7 @@ AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool f
SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
}
- setClipRect(0, clipY1, 640, 480);
+ setClipRect(0, clipY1, 640, 480);
_x = x;
_y = y;
@@ -1329,38 +1329,38 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x06149428, 1100);
insertStaticSprite(0x312C8774, 1100);
- _ssLadderArch = addSprite(new SsScene1002LadderArch(_vm, this));
+ _ssLadderArch = insertSprite<SsScene1002LadderArch>(this);
_ssLadderArchPart1 = insertStaticSprite(0x060000A0, 1200);
_ssLadderArchPart2 = insertStaticSprite(0xB2A423B0, 1100);
_ssLadderArchPart3 = insertStaticSprite(0x316E0772, 1100);
- _class599 = addSprite(new Class599(_vm, this));
+ _class599 = insertSprite<Class599>(this);
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
InsertKlaymanInitArgs(KmScene1002, 379, 435, (_class599, _ssLadderArch));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
InsertKlaymanInitArgs(KmScene1002, 650, 435, (_class599, _ssLadderArch));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4478);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
} else if (which == 2) {
InsertKlaymanInitArgs(KmScene1002, 68, 645, (_class599, _ssLadderArch));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4298);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
@@ -1368,11 +1368,11 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
sendMessage(_klayman, 0x4820, 0);
} else {
InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4470);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
- _class479 = addSprite(new Class479(_vm, this, _klayman));
+ _class479 = insertSprite<Class479>(this, _klayman);
_class479->setClipRect(_klayman->getClipRect());
_klayman->setRepl(64, 0);
_vm->_gameState.field2 = 0;
@@ -1384,26 +1384,22 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
tempClipRect.set(tempSprite->getDrawRect().x, tempSprite->getDrawRect().y,
_ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart2->getDrawRect().y2());
- _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 258, 191, _class599->getDrawRect().y, false));
- _asRing2 = addSprite(new AsScene1002Ring(_vm, this, false, 297, 189, _class599->getDrawRect().y, false));
- _asRing3 = addSprite(new AsScene1002Ring(_vm, this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(0x8306F218) != 0));
- _asRing4 = addSprite(new AsScene1002Ring(_vm, this, false, 334, 191, _class599->getDrawRect().y, false));
- _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 425, 184, _class599->getDrawRect().y, false));
-
- _asDoor = addSprite(new AsScene1002Door(_vm, tempClipRect));
-
- tempSprite = addSprite(new Class505(_vm));
-
- _asDoorSpy = addSprite(new AsScene1002DoorSpy(_vm, tempClipRect, this, _asDoor, tempSprite));
-
- _class426 = addSprite(new Class426(_vm, this, 0x00412692, 0x140B60BE, 800, 0));
- _asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, false));
-
+ _asRing1 = insertSprite<AsScene1002Ring>(this, false, 258, 191, _class599->getDrawRect().y, false);
+ _asRing2 = insertSprite<AsScene1002Ring>(this, false, 297, 189, _class599->getDrawRect().y, false);
+ _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(0x8306F218) != 0);
+ _asRing4 = insertSprite<AsScene1002Ring>(this, false, 334, 191, _class599->getDrawRect().y, false);
+ _asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _class599->getDrawRect().y, false);
+
+ _asDoor = insertSprite<AsScene1002Door>(tempClipRect);
+ tempSprite = insertSprite<Class505>();
+ _asDoorSpy = insertSprite<AsScene1002DoorSpy>(tempClipRect, this, _asDoor, tempSprite);
+ _class426 = insertSprite<Class426>(this, 0x00412692, 0x140B60BE, 800, 0);
+ _asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, false);
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
- _class506 = addSprite(new Class506(_vm));
+ _class506 = insertSprite<Class506>();
setRectList(0x004B43A0);
@@ -1660,7 +1656,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
updatePaletteArea();
- _class478 = addSprite(new Class478(_vm, _klayman));
+ _class478 = insertSprite<Class478>(_klayman);
insertStaticSprite(0x800034A0, 1100);
insertStaticSprite(0x64402020, 1100);
@@ -1670,7 +1666,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, tempSprite->getDrawRect().y, 640, 480);
_class478->setClipRect(_klayman->getClipRect());
- _asTrashCan = addSprite(new AsScene1004TrashCan(_vm));
+ _asTrashCan = insertSprite<AsScene1004TrashCan>();
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index fd11509..d0decd2 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -40,8 +40,8 @@ namespace Neverhood {
#define InsertKlayman(KlaymanClass, X, Y) _klayman = new KlaymanClass(_vm, this, X, Y); addSprite(_klayman)
#define InsertKlaymanInitArgs(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
-#define InsertSprite(SpriteClass) (SpriteClass*)addSprite(new SpriteClass(_vm));
-#define InsertSpriteInitArgs(SpriteClass, InitArgs) (SpriteClass*)addSprite((new SpriteClass(_vm))-> init InitArgs);
+#define InsertSprite(SpriteObj, SpriteClass) SpriteObj = (SpriteClass*)addSprite(new SpriteClass(_vm));
+#define InsertSpriteInitArgs(SpriteObj, SpriteClass, InitArgs) SpriteObj = new SpriteClass(_vm); ((SpriteClass*)(SpriteObj))-> init InitArgs; addSprite(SpriteObj)
class Scene : public Entity {
public:
@@ -69,6 +69,35 @@ public:
void changeMouseCursor(uint32 fileHash);
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
+ // Some crazy templated functions to make the logic code smaller/simpler (imo!)
+ template<class T>
+ T* insertSprite() {
+ return (T*)addSprite(new T(_vm));
+ }
+ template<class T, class Arg1>
+ T* insertSprite(Arg1 arg1) {
+ return (T*)addSprite(new T(_vm, arg1));
+ }
+ template<class T, class Arg1, class Arg2>
+ T* insertSprite(Arg1 arg1, Arg2 arg2) {
+ return (T*)addSprite(new T(_vm, arg1, arg2));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3>
+ T* insertSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3) {
+ return (T*)addSprite(new T(_vm, arg1, arg2, arg3));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4>
+ T* insertSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) {
+ return (T*)addSprite(new T(_vm, arg1, arg2, arg3, arg4));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
+ T* insertSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+ return (T*)addSprite(new T(_vm, arg1, arg2, arg3, arg4, arg5));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
+ T* insertSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) {
+ return (T*)addSprite(new T(_vm, arg1, arg2, arg3, arg4, arg5, arg6));
+ }
protected:
Module *_parentModule;
Common::Array<Entity*> _entities;
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 59109d6..10ebc19 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -40,6 +40,7 @@ class Sprite : public Entity {
public:
Sprite(NeverhoodEngine *vm, int objectPriority);
~Sprite();
+ void init() {}
BaseSurface *getSurface() { return _surface; }
void processDelta();
void setDoDeltaX(int type);
Commit: abf78e07eee50df3bd588c924d3c2ddf35a0e956
https://github.com/scummvm/scummvm/commit/abf78e07eee50df3bd588c924d3c2ddf35a0e956
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Replace InsertKlayman macros with template functions (still weird but nicer)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 8cdd98e..3beb325 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -270,8 +270,8 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 12;
- createModule(3000, -1);
+ _vm->gameState().sceneNum = 1;
+ createModule(1000, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index b5d266e..4d4d9c4 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2115,19 +2115,14 @@ uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶
// KmScene1002
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL),
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _class599(class599), _ssLadderArch(ssLadderArch),
_status(0) {
setKlaymanTable1();
}
-void KmScene1002::init(Sprite *class599, Sprite *ssLadderArch) {
- _class599 = class599;
- _ssLadderArch = ssLadderArch;
-}
-
void KmScene1002::xUpdate() {
if (_x >= 250 && _x <= 435 && _y >= 420) {
if (_status == 0) {
@@ -2694,18 +2689,14 @@ void KmScene1004::sub478170() {
// KmScene1201
-KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) {
+KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) {
// TODO setKlaymanTable(dword_4AEF10, 3);
_flagF6 = true;
}
-void KmScene1201::init(Entity *class464) {
- _class464 = class464;
-}
-
uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
@@ -3878,7 +3869,7 @@ void KmScene2001::sub440270() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
-KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
// TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3886,10 +3877,6 @@ KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
_flagF6 = false;
}
-void KmScene2201::init(NRect *clipRects, int clipRectsCount) {
- // TODO
-}
-
uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3f15b8f..a4d3557 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -44,7 +44,6 @@ struct KlaymanTableItem {
class Klayman : public AnimatedSprite {
public:
Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
- void init() { }
void update();
@@ -262,8 +261,7 @@ protected:
class KmScene1002 : public Klayman {
public:
- KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(Sprite *class599, Sprite *ssLadderArch);
+ KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch);
protected:
Sprite *_class599;
Sprite *_ssLadderArch;
@@ -309,8 +307,7 @@ protected:
class KmScene1201 : public Klayman {
public:
- KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(Entity *class464);
+ KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464);
protected:
Entity *_class464;
int _countdown;
@@ -431,8 +428,7 @@ protected:
class KmScene2201 : public Klayman {
public:
- KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(NRect *clipRects, int clipRectsCount);
+ KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index e160a71..14bc4a4 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -338,7 +338,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1001::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B4860);
+ setHitRects(0x004B4860);
_surfaceFlag = false;
setBackground(0x4086520E);
setPalette(0x4086520E);
@@ -346,24 +346,24 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
setRectList(0x004B49F0);
- InsertKlayman(KmScene1001, 200, 433);
+ insertKlayman<KmScene1001>(200, 433);
setMessageList(0x004B4888);
} else if (which == 1) {
setRectList(0x004B49F0);
- InsertKlayman(KmScene1001, 640, 433);
+ insertKlayman<KmScene1001>(640, 433);
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene1001, 390, 433);
+ insertKlayman<KmScene1001>(390, 433);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene1001, 300, 433);
+ insertKlayman<KmScene1001>(300, 433);
}
setMessageList(0x004B4970);
} else {
setRectList(0x004B4A00);
- InsertKlayman(KmScene1001, 200, 433);
+ insertKlayman<KmScene1001>(200, 433);
setMessageList(0x004B4890);
}
@@ -1317,7 +1317,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1002::update);
SetMessageHandler(&Scene1002::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B4138);
+ setHitRects(0x004B4138);
_surfaceFlag = true;
@@ -1338,28 +1338,28 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
- InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
- InsertKlaymanInitArgs(KmScene1002, 379, 435, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(379, 435, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
- InsertKlaymanInitArgs(KmScene1002, 650, 435, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(650, 435, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4478);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
} else if (which == 2) {
- InsertKlaymanInitArgs(KmScene1002, 68, 645, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(68, 645, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4298);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
@@ -1367,7 +1367,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.field2 = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
- InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4470);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
@@ -1642,15 +1642,15 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
setRectList(0x004B7C70);
- InsertKlayman(KmScene1004, 330, 327);
+ insertKlayman<KmScene1004>(330, 327);
setMessageList(0x004B7C18);
} else if (which == 1) {
setRectList(0x004B7C70);
- InsertKlayman(KmScene1004, 330, 327);
+ insertKlayman<KmScene1004>(330, 327);
setMessageList(0x004B7C08);
} else {
loadDataResource(0x01900A04);
- InsertKlayman(KmScene1004, _dataResource.getPoint(0x80052A29).x, 27);
+ insertKlayman<KmScene1004>(_dataResource.getPoint(0x80052A29).x, 27);
setMessageList(0x004B7BF0);
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 62462fc..9c84950 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -753,7 +753,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1201::update);
SetMessageHandler(&Scene1201::handleMessage);
- _vm->_collisionMan->setHitRects(0x004AEBD0);
+ setHitRects(0x004AEBD0);
_surfaceFlag = true;
@@ -797,29 +797,29 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Scene1201: which = %d", which);
if (which < 0) {
- InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
+ insertKlayman<KmScene1201>(364, 333, class464);
setMessageList(0x004AEC08);
} else if (which == 3) {
- InsertKlaymanInitArgs(KmScene1201, 400, 329, (class464));
+ insertKlayman<KmScene1201>(400, 329, class464);
setMessageList(0x004AEC08);
} else if (which == 2) {
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- InsertKlaymanInitArgs(KmScene1201, 374, 333, (class464));
+ insertKlayman<KmScene1201>(374, 333, class464);
setMessageList(0x004AEC08);
} else {
- InsertKlaymanInitArgs(KmScene1201, 640, 329, (class464));
+ insertKlayman<KmScene1201>(640, 329, class464);
setMessageList(0x004AEC20);
}
} else if (which == 1) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
+ insertKlayman<KmScene1201>(364, 333, class464);
_klayman->setDoDeltaX(1);
} else {
- InsertKlaymanInitArgs(KmScene1201, 246, 333, (class464));
+ insertKlayman<KmScene1201>(246, 333, class464);
}
setMessageList(0x004AEC30);
} else {
- InsertKlaymanInitArgs(KmScene1201, 0, 336, (class464));
+ insertKlayman<KmScene1201>(0, 336, class464);
setMessageList(0x004AEC10);
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 48a8b54..4876135 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -417,7 +417,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource(vm) {
SetMessageHandler(&Scene1302::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B0858);
+ setHitRects(0x004B0858);
setRectList(0x004B0A38);
setBackground(0x420643C4);
@@ -441,10 +441,10 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
- InsertKlaymanInitArgs(KmScene1002, 380, 364, (_class595, NULL));
+ insertKlayman<KmScene1002>(380, 364, _class595, (Sprite*)NULL);
setMessageList(0x004B0868);
} else {
- InsertKlaymanInitArgs(KmScene1002, 293, 330, (_class595, NULL));
+ insertKlayman<KmScene1002>(293, 330, _class595, (Sprite*)NULL);
setMessageList(0x004B0870);
}
@@ -649,7 +649,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0xA014216B, 1100);
- InsertKlayman(KmScene1303, 207, 332);
+ insertKlayman<KmScene1303>(207, 332);
setMessageList(0x004AF9A0);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
@@ -730,10 +730,10 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x090AF033, 1100);
if (which < 0) {
- InsertKlayman(KmScene1304, 217, 347);
+ insertKlayman<KmScene1304>(217, 347);
setMessageList(0x004B90E8);
} else {
- InsertKlayman(KmScene1304, 100, 347);
+ insertKlayman<KmScene1304>(100, 347);
setMessageList(0x004B90F0);
}
@@ -778,10 +778,10 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x01B60280);
if (which < 0) {
- InsertKlayman(KmScene1305, 212, 441);
+ insertKlayman<KmScene1305>(212, 441);
setMessageList(0x004B6E40);
} else {
- InsertKlayman(KmScene1305, 212, 441);
+ insertKlayman<KmScene1305>(212, 441);
setMessageList(0x004B6E48);
}
@@ -913,45 +913,45 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x00042313, 1100);
if (which < 0) {
- InsertKlayman(KmScene1306, 380, 440);
+ insertKlayman<KmScene1306>(380, 440);
setMessageList(0x004AFAD0);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 1) {
- InsertKlayman(KmScene1306, 136, 440);
+ insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene1306, 515, 440);
+ insertKlayman<KmScene1306>(515, 440);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene1306, 355, 440);
+ insertKlayman<KmScene1306>(355, 440);
}
setMessageList(0x004AFBC8);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 3) {
- InsertKlayman(KmScene1306, 534, 440);
+ insertKlayman<KmScene1306>(534, 440);
setMessageList(0x004AFC30);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 4) {
- InsertKlayman(KmScene1306, 136, 440);
+ insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 5) {
- InsertKlayman(KmScene1306, 136, 440);
+ insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else {
- InsertKlayman(KmScene1306, 286, 408);
+ insertKlayman<KmScene1306>(286, 408);
setSurfacePriority(_asElevator->getSurface(), 1100);
setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
setSurfacePriority(_sprite1->getSurface(), 1080);
@@ -1621,7 +1621,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite4 = NULL;
if (which < 0) {
- InsertKlayman(KmScene1308, 380, 440);
+ insertKlayman<KmScene1308>(380, 440);
setMessageList(0x004B57C0);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1631,7 +1631,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 1) {
- InsertKlayman(KmScene1308, 640, 440);
+ insertKlayman<KmScene1308>(640, 440);
setMessageList(0x004B57C8);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1641,7 +1641,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 2) {
- InsertKlayman(KmScene1308, 475, 440);
+ insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
_sprite5 = addSprite(new Class592(_vm, this));
@@ -1652,7 +1652,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else {
- InsertKlayman(KmScene1308, 41, 440);
+ insertKlayman<KmScene1308>(41, 440);
setMessageList(0x004B57D0);
sendMessage(_class549, 0x4808, 0);
_sprite1->setVisible(false);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 7bff294..b135458 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -683,19 +683,19 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2->setVisible(false);
if (which < 0) {
- InsertKlayman(KmScene1401, 380, 447);
+ insertKlayman<KmScene1401>(380, 447);
setMessageList(0x004B65C8);
_sprite1->setVisible(false);
} else if (which == 1) {
- InsertKlayman(KmScene1401, 0, 447);
+ insertKlayman<KmScene1401>(0, 447);
setMessageList(0x004B65D0);
_sprite1->setVisible(false);
} else if (which == 2) {
- InsertKlayman(KmScene1401, 660, 447);
+ insertKlayman<KmScene1401>(660, 447);
setMessageList(0x004B65D8);
_sprite1->setVisible(false);
} else {
- InsertKlayman(KmScene1401, 290, 413);
+ insertKlayman<KmScene1401>(290, 413);
setMessageList(0x004B65E8);
_sprite1->setVisible(false);
}
@@ -892,16 +892,16 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B0C98);
if (which < 0) {
- InsertKlayman(KmScene1402, 377, 391);
+ insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
if (!getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 0));
}
} else if (which == 1) {
- InsertKlayman(KmScene1402, 42, 391);
+ insertKlayman<KmScene1402>(42, 391);
setMessageList(0x004B0B50);
} else if (which == 2) {
- InsertKlayman(KmScene1402, 377, 391);
+ insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
if (getGlobalVar(0x70A1189C)) {
@@ -913,7 +913,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_class482 = addSprite(new Class482(_vm, this, 0));
}
} else {
- InsertKlayman(KmScene1402, 513, 391);
+ insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 2));
@@ -1351,10 +1351,10 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape2->setRepl(64, 0);
if (which < 0) {
- InsertKlayman(KmScene1403, 380, 463);
+ insertKlayman<KmScene1402>(380, 463);
setMessageList(0x004B1F18);
} else {
- InsertKlayman(KmScene1403, 640, 463);
+ insertKlayman<KmScene1402>(640, 463);
setMessageList(0x004B1F20);
}
_klayman->setRepl(64, 0);
@@ -1464,21 +1464,21 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
- InsertKlayman(KmScene1404, 376, 406);
+ insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C28);
} else if (which == 1) {
- InsertKlayman(KmScene1404, 376, 406);
+ insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C30);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene1404, 347, 406);
+ insertKlayman<KmScene1404>(347, 406);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene1404, 187, 406);
+ insertKlayman<KmScene1404>(187, 406);
}
setMessageList(0x004B8D28);
} else {
- InsertKlayman(KmScene1404, 30, 406);
+ insertKlayman<KmScene1404>(30, 406);
setMessageList(0x004B8C38);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 30e4631..9547d34 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -182,7 +182,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1705::handleMessage);
SetUpdateHandler(&Scene1705::update);
- _vm->_collisionMan->setHitRects(0x004B69D8);
+ setHitRects(0x004B69D8);
_surfaceFlag = true;
@@ -207,30 +207,30 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
which = 4;
if (which < 0) {
- InsertKlayman(KmScene1705, 231, 434);
+ insertKlayman<KmScene1705>(231, 434);
setMessageList(0x004B69E8);
sendMessage(this, 0x2000, 0);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 1) {
- InsertKlayman(KmScene1705, 431, 434);
+ insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 2) {
- InsertKlayman(KmScene1705, 431, 434);
+ insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 3) {
- InsertKlayman(KmScene1705, 431, 434);
+ insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else {
- InsertKlayman(KmScene1705, 231, 74);
+ insertKlayman<KmScene1705>(231, 74);
sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
sendMessage(this, 0x2000, 0);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 3977598..b870d82 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -108,26 +108,26 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_class401 = insertStaticSprite(0x0D641724, 1100);
if (which < 0) {
- InsertKlayman(KmScene2001, 300, 345);
+ insertKlayman<KmScene2001>(300, 345);
setMessageList(0x004B3538);
sendMessage(this, 0x2000, 0);
} else if (which == 1) {
- InsertKlayman(KmScene2001, 116, 345);
+ insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3540);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
- InsertKlayman(KmScene2001, 116, 345);
+ insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B35F0);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
- InsertKlayman(KmScene2001, 116, 345);
+ insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3550);
sendMessage(this, 0x2000, 1);
} else {
- InsertKlayman(KmScene2001, 390, 345);
+ insertKlayman<KmScene2001>(390, 345);
setMessageList(0x004B3530);
sendMessage(this, 0x2000, 0);
_klayman->setDoDeltaX(1);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 124ace6..59dcbfc 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -774,25 +774,25 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_doorLightSprite = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
- InsertKlaymanInitArgs(KmScene2201, 300, 427, (&_rect1, 2));
+ insertKlayman<KmScene2201>(300, 427, &_rect1, 2);
setMessageList(0x004B8118);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else if (which == 1) {
- InsertKlaymanInitArgs(KmScene2201, 412, 393, (&_rect1, 2));
+ insertKlayman<KmScene2201>(412, 393, &_rect1, 2);
setMessageList(0x004B8130);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlaymanInitArgs(KmScene2201, 379, 427, (&_rect1, 2));
+ insertKlayman<KmScene2201>(379, 427, &_rect1, 2);
_klayman->setDoDeltaX(1);
} else {
- InsertKlaymanInitArgs(KmScene2201, 261, 427, (&_rect1, 2));
+ insertKlayman<KmScene2201>(261, 427, &_rect1, 2);
}
setMessageList(0x004B8178);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
- InsertKlaymanInitArgs(KmScene2201, pt.x, pt.y, (&_rect1, 2));
+ insertKlayman<KmScene2201>(pt.x, pt.y, &_rect1, 2);
setMessageList(0x004B8120);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, true));
}
@@ -1350,7 +1350,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x82C80334);
insertMouse433(0x80330824);
- _vm->_collisionMan->setHitRects(0x004B8320);
+ setHitRects(0x004B8320);
if (getGlobalVar(0x13382860) == 1) {
_class545 = addSprite(new Class545(_vm, this, 2, 1100, 282, 432));
@@ -1376,21 +1376,21 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asRightDoor);
if (which < 0) {
- InsertKlayman(KmScene2203, 200, 427);
+ insertKlayman<KmScene2203>(200, 427);
setMessageList(0x004B8340);
} else if (which == 1) {
- InsertKlayman(KmScene2203, 640, 427);
+ insertKlayman<KmScene2203>(640, 427);
setMessageList(0x004B8350);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene2203, 362, 427);
+ insertKlayman<KmScene2203>(362, 427);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene2203, 202, 427);
+ insertKlayman<KmScene2203>(202, 427);
}
setMessageList(0x004B8358);
} else {
- InsertKlayman(KmScene2203, 0, 427);
+ insertKlayman<KmScene2203>(0, 427);
setMessageList(0x004B8348);
}
@@ -1496,7 +1496,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2205::handleMessage);
SetUpdateHandler(&Scene2205::update);
- _vm->_collisionMan->setHitRects(0x004B0620);
+ setHitRects(0x004B0620);
_surfaceFlag = true;
if (getGlobalVar(0x4D080E54)) {
@@ -1522,21 +1522,21 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
if (which < 0) {
- InsertKlayman(KmScene2205, 320, 417);
+ insertKlayman<KmScene2205>(320, 417);
setMessageList(0x004B0658);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else if (which == 1) {
- InsertKlayman(KmScene2205, 640, 417);
+ insertKlayman<KmScene2205>(640, 417);
setMessageList(0x004B0648);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else {
- InsertKlayman(KmScene2205, 0, 417);
+ insertKlayman<KmScene2205>(0, 417);
setMessageList(0x004B0640);
_isKlaymanInLight = true;
}
@@ -1795,24 +1795,24 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_class607);
if (which < 0) {
- InsertKlayman(KmScene2206, 200, 430);
+ insertKlayman<KmScene2206>(200, 430);
setMessageList(0x004B88A8);
} else if (which == 1) {
- InsertKlayman(KmScene2206, 640, 430);
+ insertKlayman<KmScene2206>(640, 430);
setMessageList(0x004B88B8);
} else if (which == 2) {
- InsertKlayman(KmScene2206, 205, 396);
+ insertKlayman<KmScene2206>(205, 396);
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
sub4819D0();
_soundResource.play(0x53B8284A);
} else if (which == 3) {
- InsertKlayman(KmScene2206, kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
+ insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
setMessageList(0x004B8A70);
} else {
- InsertKlayman(KmScene2206, 0, 430);
+ insertKlayman<KmScene2206>(0, 430);
setMessageList(0x004B88B0);
}
@@ -2251,7 +2251,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2207::update);
_surfaceFlag = true;
- InsertKlayman(KmScene2207, 0, 0);
+ insertKlayman<KmScene2207>(0, 0);
_klayman->setRepl(64, 0);
setMessageList(0x004B38E8);
@@ -2673,18 +2673,18 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
- InsertKlayman(KmScene2242, 200, 430);
+ insertKlayman<KmScene2242>(200, 430);
setMessageList(0x004B3C18);
} else if (which == 1) {
- InsertKlayman(KmScene2242, 530, 430);
+ insertKlayman<KmScene2242>(530, 430);
setMessageList(0x004B3D60);
} else if (which == 2) {
- InsertKlayman(KmScene2242, kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
+ insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
setMessageList(0x004B3D48);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene2242, 0, 430);
+ insertKlayman<KmScene2242>(0, 430);
setMessageList(0x004B3C20);
}
@@ -2802,18 +2802,18 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
}
if (which < 0) {
- InsertKlayman(KmHallOfRecords, 200, 430);
+ insertKlayman<KmHallOfRecords>(200, 430);
setMessageList(0x004B2900);
} else if (which == 1) {
- InsertKlayman(KmHallOfRecords, 640, 430);
+ insertKlayman<KmHallOfRecords>(640, 430);
setMessageList(0x004B2910);
} else if (which == 2) {
- InsertKlayman(KmHallOfRecords, kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
+ insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
setMessageList(0x004B2B70);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmHallOfRecords, 0, 430);
+ insertKlayman<KmHallOfRecords>(0, 430);
setMessageList(0x004B2908);
}
@@ -2897,18 +2897,18 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
- InsertKlayman(KmScene2247, 200, 430);
+ insertKlayman<KmScene2247>(200, 430);
setMessageList(0x004B5428);
} else if (which == 1) {
- InsertKlayman(KmScene2247, 640, 430);
+ insertKlayman<KmScene2247>(640, 430);
setMessageList(0x004B5438);
} else if (which == 2) {
- InsertKlayman(KmScene2247, kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
+ insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
setMessageList(0x004B5530);
} else {
- InsertKlayman(KmScene2247, 0, 430);
+ insertKlayman<KmScene2247>(0, 430);
setMessageList(0x004B5430);
}
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index f1ee554..8d7fc78 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -191,6 +191,10 @@ void Scene::setPalette(uint32 fileHash) {
_palette->usePalette();
}
+void Scene::setHitRects(uint32 id) {
+ _vm->_collisionMan->setHitRects(id);
+}
+
Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index d0decd2..09d34b5 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -37,12 +37,6 @@
namespace Neverhood {
-#define InsertKlayman(KlaymanClass, X, Y) _klayman = new KlaymanClass(_vm, this, X, Y); addSprite(_klayman)
-#define InsertKlaymanInitArgs(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
-
-#define InsertSprite(SpriteObj, SpriteClass) SpriteObj = (SpriteClass*)addSprite(new SpriteClass(_vm));
-#define InsertSpriteInitArgs(SpriteObj, SpriteClass, InitArgs) SpriteObj = new SpriteClass(_vm); ((SpriteClass*)(SpriteObj))-> init InitArgs; addSprite(SpriteObj)
-
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
@@ -61,6 +55,7 @@ public:
void setBackgroundY(int16 y) { _background->getSurface()->getDrawRect().y = y; }
int16 getBackgroundY() { return _background->getSurface()->getDrawRect().y; }
void setPalette(uint32 fileHash = 0);
+ void setHitRects(uint32 id);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL);
void insertMouse435(uint32 fileHash, int16 x1, int16 x2);
@@ -70,6 +65,36 @@ public:
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
// Some crazy templated functions to make the logic code smaller/simpler (imo!)
+ // insertKlayman
+ template<class T>
+ void insertKlayman() {
+ _klayman = (T*)addSprite(new T(_vm, this));
+ }
+ template<class T, class Arg1>
+ void insertKlayman(Arg1 arg1) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1));
+ }
+ template<class T, class Arg1, class Arg2>
+ void insertKlayman(Arg1 arg1, Arg2 arg2) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5, arg6));
+ }
+ // insertSprite
template<class T>
T* insertSprite() {
return (T*)addSprite(new T(_vm));
Commit: 3872efe2a50a881cf4c2f778bee408982a52487e
https://github.com/scummvm/scummvm/commit/3872efe2a50a881cf4c2f778bee408982a52487e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Start with Module1100 and add Scene1105
Changed paths:
A engines/neverhood/module1100.cpp
A engines/neverhood/module1100.h
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module.mk
engines/neverhood/module2200.cpp
engines/neverhood/smackerscene.cpp
engines/neverhood/smackerscene.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 924a7a7..9256c13 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -131,6 +131,9 @@ public:
void incGlobalVar(uint32 nameHash, int incrValue) {
setGlobalVar(nameHash, getGlobalVar(nameHash) + incrValue);
}
+ void incSubVar(uint32 nameHash, uint32 subNameHash, int incrValue) {
+ setSubVar(nameHash, subNameHash, getSubVar(nameHash, subNameHash) + incrValue);
+ }
protected:
void (Entity::*_updateHandlerCb)();
uint32 (Entity::*_messageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 3beb325..c6dc006 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -24,6 +24,7 @@
#include "neverhood/graphics.h"
#include "neverhood/module1000.h"
+#include "neverhood/module1100.h"
#include "neverhood/module1200.h"
#include "neverhood/module1300.h"
#include "neverhood/module1400.h"
@@ -269,10 +270,14 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(1000, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 4;
+ createModule(1100, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -283,6 +288,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x03294419);
_childObject = new Module1000(_vm, this, which);
break;
+ case 1100:
+ setGlobalVar(0x91080831, 0x0002C818);
+ _childObject = new Module1100(_vm, this, which);
+ break;
case 1200:
setGlobalVar(0x91080831, 0x00478311);
_childObject = new Module1200(_vm, this, which);
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index c58c924..79197ed 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -84,6 +84,15 @@ void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1,
_childObject = smackerScene;
}
+void Module::createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort) {
+ SmackerScene *smackerScene;
+ _sceneType = kSceneTypeSmacker;
+ smackerScene = new SmackerScene(_vm, this, doubleSurface, flag1, canAbort);
+ smackerScene->setFileHashList(fileHashList);
+ smackerScene->nextVideo();
+ _childObject = smackerScene;
+}
+
bool Module::updateChild() {
if (_childObject) {
_childObject->handleUpdate();
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index c0fdaa7..2f6ce69 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -60,6 +60,7 @@ protected:
NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
+ void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort);
bool updateChild();
};
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 1b4d6e4..bbbbb02 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS = \
klayman.o \
module.o \
module1000.o \
+ module1100.o \
module1200.o \
module1300.o \
module1400.o \
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
new file mode 100644
index 0000000..3ee3f4c
--- /dev/null
+++ b/engines/neverhood/module1100.cpp
@@ -0,0 +1,663 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1100.h"
+#include "neverhood/gamemodule.h"
+
+namespace Neverhood {
+
+Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else if (which == 1) {
+ createScene(9, 1);
+ } else {
+ createScene(9, 3);
+ }
+
+ // TODO Sound1ChList_addSoundResources(0x2C818, dword_4B85B0, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B85B0, true, 50, 600, 20, 250);
+ // TODO Sound1ChList_setSoundValues(0x74E01054, false, 100, 200, 10, 20);
+ // TODO Sound1ChList_setVolume(0x74E01054, 60);
+ // TODO Sound1ChList_sub_407C70(0x2C818, 0x41861371, 0x43A2507F);
+
+}
+
+Module1100::~Module1100() {
+ // TODO Sound1ChList_sub_407A50(0x2C818);
+}
+
+void Module1100::createScene(int sceneNum, int which) {
+ static const uint32 kSmackerFileHashList06[] = {0x10880805, 0x1088081D, 0};
+ static const uint32 kSmackerFileHashList07[] = {0x00290321, 0x01881000, 0};
+ debug("Module1100::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _countdown = 65;
+ createNavigationScene(0x004B8430, which);
+ break;
+ case 1:
+ _countdown = 50;
+ createNavigationScene(0x004B8460, which);
+ break;
+ case 2:
+ if (getGlobalVar(0x610210B7)) {
+ createNavigationScene(0x004B84F0, which);
+ } else {
+ createNavigationScene(0x004B8490, which);
+ }
+ break;
+ case 3:
+ if (getGlobalVar(0x610210B7)) {
+ createNavigationScene(0x004B8580, which);
+ } else {
+ createNavigationScene(0x004B8550, which);
+ }
+ break;
+ case 4:
+ _childObject = new Scene1105(_vm, this, which);
+ break;
+ case 5:
+ if (getGlobalVar(0x610210B7))
+ createSmackerScene(0x04180001, true, false, false);
+ else
+ createSmackerScene(0x04180007, true, false, false);
+ break;
+ case 6:
+ // TODO Sound1ChList_sub_407AF0(0x2C818);
+ createSmackerScene(kSmackerFileHashList06, true, true, false);
+ break;
+ case 7:
+ // TODO Sound1ChList_setSoundValues(0x74E01054, false, 0, 0, 0, 0);
+ createSmackerScene(kSmackerFileHashList07, true, true, false);
+ break;
+ case 8:
+//TODO _childObject = new Scene1109(_vm, this, which);
+ break;
+ case 1002:
+ _countdown = 40;
+ // TODO Sound1ChList_sub_4080B0(true);
+ createSmackerScene(0x00012211, true, true, false);
+ break;
+ }
+ SetUpdateHandler(&Module1100::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module1100::updateScene() {
+ if (!updateChild()) {
+ debug("_vm->gameState().sceneNum = %d", _vm->gameState().sceneNum);
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _countdown = 0;
+ // TODO Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64);
+ // TODO Sound1ChList_setVolume(0x48498E46, 65);
+ // TODO Sound1ChList_setVolume(0x50399F64, 65);
+ if (_moduleResult == 0) {
+ createScene(1, 0);
+ } else if (_moduleResult == 1) {
+ createScene(8, 0);
+ }
+ break;
+ case 1:
+ // TODO Sound1ChList_sub_407C70(0x2C818, 0x41861371, 0x43A2507F);
+ if (getGlobalVar(0x0C0288F4)) {
+ if (_moduleResult == 0) {
+ createScene(6, -1);
+ } else if (_moduleResult == 1) {
+ createScene(0, 1);
+ }
+ } else {
+ if (_moduleResult == 0) {
+ createScene(2, 0);
+ } else if (_moduleResult == 1) {
+ createScene(0, 1);
+ }
+ }
+ break;
+ case 2:
+ // TODO Sound1ChList_setSoundValues(0x74E01054, false, 0, 0, 0, 0);
+ if (_navigationAreaType == 3) {
+ createScene(7, -1);
+ } else if (_moduleResult == 1) {
+ createScene(3, 0);
+ } else if (_moduleResult == 2) {
+ createScene(1002, -1);
+ }
+ break;
+ case 3:
+ if (_moduleResult == 0) {
+ createScene(4, 0);
+ } else if (_moduleResult == 1) {
+ createScene(2, 3);
+ }
+ break;
+ case 4:
+ if (_moduleResult == 0) {
+ createScene(3, 0);
+ } else if (_moduleResult == 1) {
+ createScene(5, -1);
+ }
+ break;
+ case 5:
+ if (getGlobalVar(0x610210B7)) {
+ createScene(3, 0);
+ } else {
+ createScene(4, 0);
+ }
+ break;
+ case 6:
+ sendMessage(_parentModule, 0x1009, 1);
+ break;
+ case 7:
+ createScene(2, 2);
+ break;
+ case 8:
+ if (_moduleResult == 0) {
+ createScene(0, 0);
+ } else if (_moduleResult == 1) {
+ sendMessage(_parentModule, 0x1009, 0);
+ }
+ break;
+ case 1002:
+ _countdown = 0;
+ // TODO Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64, 0);
+ createScene(1, 1);
+ break;
+ }
+ } else {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+#if 0 // TODO
+ if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
+ Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64);
+ Sound1ChList_setVolume(0x48498E46, 65);
+ Sound1ChList_setVolume(0x50399F64, 65);
+ }
+#endif
+ break;
+ case 1:
+#if 0 // TODO
+ if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
+ Sound1ChList_sub_407C70(0x2C818, 0x41861371, 0x43A2507F);
+ }
+#endif
+ break;
+ case 2:
+ // TODO Sound1ChList_setSoundValues(0x74E01054, !navigationScene()->soundFlag1, 0, 0, 0, 0);
+ break;
+ case 5:
+ case 6:
+ case 7:
+ case 1002:
+ if (_countdown != 0 && (--_countdown == 0)) {
+ // TODO Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64);
+ // TODO Sound1ChList_setVolume(0x48498E46, 65);
+ // TODO Sound1ChList_setVolume(0x50399F64, 65);
+ }
+ break;
+ }
+ }
+}
+
+static const uint32 kScene1105FileHashes[] = {
+ 0x00028006,
+ 0x0100A425,
+ 0x63090415,
+ 0x082100C4,
+ 0x0068C607,
+ 0x00018344,
+ 0x442090E4,
+ 0x0400E004,
+ 0x5020A054,
+ 0xB14A891E
+};
+
+static const uint32 kScene1105BackgroundFileHashes[] = {
+ 0x20018662,
+ 0x20014202,
+ 0x20012202,
+ 0x20010002 // CHECKME: This used ??
+};
+
+static const uint32 kSsScene1105SymbolDieFileHashes[] = {
+ 0,
+ 0x90898414,
+ 0x91098414,
+ 0x92098414,
+ 0x94098414,
+ 0x98098414,
+ 0x80098414,
+ 0xB0098414,
+ 0xD0098414,
+ 0x10098414
+};
+
+SsScene1105Button::SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &rect)
+ : StaticSprite(vm, fileHash, 200), _soundResource(vm), _parentScene(parentScene),
+ _countdown(0) {
+
+ _rect = rect;
+ SetMessageHandler(&SsScene1105Button::handleMessage);
+ SetUpdateHandler(&SsScene1105Button::update);
+ setVisible(false);
+}
+
+void SsScene1105Button::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ sendMessage(_parentScene, 0x4807, 0);
+ setVisible(false);
+ }
+}
+
+uint32 SsScene1105Button::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0) {
+ sendMessage(_parentScene, 0x4826, 0);
+ messageResult = 1;
+ }
+ break;
+ case 0x480B:
+ _countdown = 8;
+ setVisible(true);
+ _soundResource.play(0x44141000);
+ break;
+ }
+ return messageResult;
+}
+
+SsScene1105Symbol::SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16 x, int16 y)
+ : StaticSprite(vm, fileHash, 200) {
+
+ _x = x;
+ _y = y;
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ StaticSprite::update();
+}
+
+void SsScene1105Symbol::hide() {
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+SsScene1105SymbolDie::SsScene1105SymbolDie(NeverhoodEngine *vm, uint index, int16 x, int16 y)
+ : StaticSprite(vm, 1100), _index(index) {
+
+ SetMessageHandler(&SsScene1105SymbolDie::handleMessage);
+ _x = x;
+ _y = y;
+ createSurface(200, 50, 50);
+ loadSymbolSprite();
+}
+
+uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ loadSymbolSprite();
+ break;
+ }
+ return messageResult;
+}
+
+void SsScene1105SymbolDie::loadSymbolSprite() {
+ load(kSsScene1105SymbolDieFileHashes[getSubVar(0x61084036, _index)], true, false);
+ _drawRect.x = -(_spriteResource.getDimensions().width / 2);
+ _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ StaticSprite::update();
+}
+
+void SsScene1105SymbolDie::hide() {
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm),
+ _parentScene(parentScene) {
+
+ // TODO createSurface3(100, dword_4AF4C0);
+ createSurface(100, 640, 480); //TODO: Remeove once the line above is done
+ _x = 320;
+ _y = 240;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1105TeddyBear::handleMessage);
+ setFileHash(0x65084002, 0, -1);
+ _newHashListIndex = 0;
+ setVisible(false);
+ _needRefresh = true;
+ updatePosition();
+ _soundResource1.load(0xCE840261);
+ _soundResource2.load(0xCCA41A62);
+}
+
+uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2002:
+ if (getGlobalVar(0x610210B7)) {
+ setFileHash(0x6B0C0432, 0, -1);
+ _soundResource1.play();
+ } else {
+ setFileHash(0x65084002, 0, -1);
+ _soundResource2.play();
+ }
+ break;
+ case 0x3002:
+ sendMessage(_parentScene, 0x2003, 0);
+ setFileHash1();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1105TeddyBear::show() {
+ setVisible(true);
+ _needRefresh = true;
+ updatePosition();
+}
+
+void AsScene1105TeddyBear::hide() {
+ setVisible(false);
+ _needRefresh = true;
+ updatePosition();
+}
+
+SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene)
+ : StaticSprite(vm, 900), _soundResource(vm), _parentScene(parentScene),
+ _countdown(0), _flag1(false) {
+
+ _spriteResource.load2(0x8228A46C);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _deltaRect = _drawRect;
+ _needRefresh = true;
+ processDelta();
+ setVisible(false);
+ _soundResource.load(0x44045140);
+ SetUpdateHandler(&SsScene1105OpenButton::update);
+ SetMessageHandler(&SsScene1105OpenButton::handleMessage);
+}
+
+void SsScene1105OpenButton::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ setVisible(false);
+ sendMessage(_parentScene, 0x2001, 0);
+ }
+}
+
+uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0 && !_flag1) {
+ _soundResource.play();
+ setVisible(true);
+ _flag1 = true;
+ _countdown = 4;
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
+ _soundResource3(vm), _countdown(0), _flag1(false), _flag2(false), _flag3(false),
+ _flag4(false), _flag5(false), _backgroundIndex(0) {
+
+ Sprite *ssOpenButton;
+
+ _vm->gameModule()->initScene1405Vars();
+
+ _surfaceFlag = true;
+ SetUpdateHandler(&Scene1105::update);
+ SetMessageHandler(&Scene1105::handleMessage);
+
+ setBackground(0x20010002);
+ setPalette(0x20010002);
+
+ _asTeddyBear = insertSprite<AsScene1105TeddyBear>(this);
+ ssOpenButton = insertSprite<SsScene1105OpenButton>(this);
+ _vm->_collisionMan->addSprite(ssOpenButton);
+ insertMouse435(0x10006208, 20, 620);
+
+ _soundResource1.load(0x48442057);
+ _soundResource2.load(0xC025014F);
+ _soundResource3.load(0x68E25540);
+
+}
+
+uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = 0;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO Debug stuff
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (!_flag2 && _backgroundIndex == 0) {
+ if (_flag1) {
+ _flag1 = false;
+ _backgroundIndex = 15;
+ SetUpdateHandler(&Scene1105::upClosePanel);
+ } else
+ _flag1 = true;
+ _flag5 = false;
+ }
+ }
+ break;
+ // TODO Debug stuff
+ case 0x2001:
+ showMouse(false);
+ _backgroundIndex = 24;
+ SetUpdateHandler(&Scene1105::upOpenPanel);
+ break;
+ case 0x2003:
+ _backgroundIndex = 24;
+ _flag5 = true;
+ SetUpdateHandler(&Scene1105::upClosePanel);
+ break;
+ case 0x4807:
+ if (sender == _ssActionButton) {
+ if (getSubVar(0x7500993A, 0) == getSubVar(0x61084036, 0) &&
+ getSubVar(0x7500993A, 1) == getSubVar(0x61084036, 1) &&
+ getSubVar(0x7500993A, 2) == getSubVar(0x61084036, 2)) {
+ setGlobalVar(0x610210B7, 1);
+ _soundResource3.play();
+ _flag3 = true;
+ } else {
+ sendMessage(_asTeddyBear, 0x2002, 0);
+ }
+ showMouse(false);
+ _flag2 = true;
+ }
+ break;
+ case 0x4826:
+ if (_flag1) {
+ if (sender == _ssActionButton) {
+ sendMessage(_ssActionButton, 0x480B, 0);
+ _flag1 = false;
+ } else if (!getGlobalVar(0x610210B7)) {
+ if (sender == _ssSymbol1UpButton) {
+ if (getSubVar(0x61084036, 0) < 9) {
+ incSubVar(0x61084036, 0, +1);
+ sendMessage(_ssSymbol1UpButton, 0x480B, 0);
+ sendMessage(_ssSymbolDice[0], 0x2000, 0);
+ }
+ } else if (sender == _ssSymbol1DownButton) {
+ if (getSubVar(0x61084036, 0) > 1) {
+ incSubVar(0x61084036, 0, -1);
+ sendMessage(_ssSymbol1DownButton, 0x480B, 0);
+ sendMessage(_ssSymbolDice[0], 0x2000, 0);
+ }
+ } else if (sender == _ssSymbol2UpButton) {
+ if (getSubVar(0x61084036, 1) < 9) {
+ incSubVar(0x61084036, 1, +1);
+ sendMessage(_ssSymbol2UpButton, 0x480B, 0);
+ sendMessage(_ssSymbolDice[1], 0x2000, 0);
+ }
+ } else if (sender == _ssSymbol2DownButton) {
+ if (getSubVar(0x61084036, 1) > 1) {
+ incSubVar(0x61084036, 1, -1);
+ sendMessage(_ssSymbol2DownButton, 0x480B, 0);
+ sendMessage(_ssSymbolDice[1], 0x2000, 0);
+ }
+ } else if (sender == _ssSymbol3UpButton) {
+ if (getSubVar(0x61084036, 2) < 9) {
+ incSubVar(0x61084036, 2, +1);
+ sendMessage(_ssSymbol3UpButton, 0x480B, 0);
+ sendMessage(_ssSymbolDice[2], 0x2000, 0);
+ }
+ } else if (sender == _ssSymbol3DownButton) {
+ if (getSubVar(0x61084036, 2) > 1) {
+ incSubVar(0x61084036, 2, -1);
+ sendMessage(_ssSymbol3DownButton, 0x480B, 0);
+ sendMessage(_ssSymbolDice[2], 0x2000, 0);
+ }
+ }
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Scene1105::createObjects() {
+ _ssSymbols[0] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(0x13100631, 0)], 161, 304);
+ _ssSymbols[1] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(0x13100631, 1)], 294, 304);
+ _ssSymbols[2] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(0x13100631, 2)], 440, 304);
+
+ _ssSymbolDice[0] = insertSprite<SsScene1105SymbolDie>(0, 206, 304);
+ _ssSymbolDice[1] = insertSprite<SsScene1105SymbolDie>(1, 339, 304);
+ _ssSymbolDice[2] = insertSprite<SsScene1105SymbolDie>(2, 485, 304);
+
+ _ssSymbol1UpButton = insertSprite<SsScene1105Button>(this, 0x08002860, NRect(146, 362, 192, 403));
+ _vm->_collisionMan->addSprite(_ssSymbol1UpButton);
+ _ssSymbol1DownButton = insertSprite<SsScene1105Button>(this, 0x42012460, NRect(147, 404, 191, 442));
+ _vm->_collisionMan->addSprite(_ssSymbol1DownButton);
+ _ssSymbol2UpButton = insertSprite<SsScene1105Button>(this, 0x100030A0, NRect(308, 361, 355, 402));
+ _vm->_collisionMan->addSprite(_ssSymbol2UpButton);
+ _ssSymbol2DownButton = insertSprite<SsScene1105Button>(this, 0x840228A0, NRect(306, 406, 352, 445));
+ _vm->_collisionMan->addSprite(_ssSymbol2DownButton);
+ _ssSymbol3UpButton = insertSprite<SsScene1105Button>(this, 0x20000120, NRect(476, 358, 509, 394));
+ _vm->_collisionMan->addSprite(_ssSymbol3UpButton);
+ _ssSymbol3DownButton = insertSprite<SsScene1105Button>(this, 0x08043121, NRect(463, 401, 508, 438));
+ _vm->_collisionMan->addSprite(_ssSymbol3DownButton);
+ _ssActionButton = insertSprite<SsScene1105Button>(this, 0x8248AD35, NRect(280, 170, 354, 245));
+ _vm->_collisionMan->addSprite(_ssActionButton);
+
+ _flag1 = true;
+
+ _asTeddyBear->show();
+
+ // TODO: Find a nicer way
+ deleteSprite((Sprite**)&_mouseCursor);
+ insertMouse435(0x18666208, 20, 620);
+
+}
+
+void Scene1105::upOpenPanel() {
+ Scene::update();
+ if (_backgroundIndex != 0) {
+ _backgroundIndex--;
+ if (_backgroundIndex < 6 && _backgroundIndex % 2 == 0) {
+ uint32 backgroundFileHash = kScene1105BackgroundFileHashes[_backgroundIndex / 2];
+ changeBackground(backgroundFileHash);
+ _palette->addPalette(backgroundFileHash, 0, 256, 0);
+ }
+ if (_backgroundIndex == 10) {
+ _soundResource1.play();
+ }
+ if (_backgroundIndex == 0) {
+ SetUpdateHandler(&Scene1105::update);
+ _countdown = 2;
+ }
+ }
+}
+
+void Scene1105::upClosePanel() {
+ Scene::update();
+ if (_backgroundIndex != 0) {
+ _backgroundIndex--;
+ if (_backgroundIndex == 14) {
+ showMouse(false);
+ _ssSymbols[0]->hide();
+ _ssSymbols[1]->hide();
+ _ssSymbols[2]->hide();
+ _ssSymbolDice[0]->hide();
+ _ssSymbolDice[1]->hide();
+ _ssSymbolDice[2]->hide();
+ }
+ if (_backgroundIndex < 6 && _backgroundIndex % 2 == 0) {
+ uint32 backgroundFileHash = kScene1105BackgroundFileHashes[3 - _backgroundIndex / 2]; // CHECKME
+ if (_backgroundIndex == 4) {
+ _soundResource2.play();
+ _asTeddyBear->hide();
+ }
+ changeBackground(backgroundFileHash);
+ _palette->addPalette(backgroundFileHash, 0, 256, 0);
+ }
+ if (_backgroundIndex == 0) {
+ SetUpdateHandler(&Scene1105::update);
+ _flag4 = true;
+ }
+ }
+}
+
+void Scene1105::update() {
+
+ // DEBUG: Show the correct code
+ debug("(%d, %d) (%d, %d) (%d, %d)",
+ getSubVar(0x7500993A, 0), getSubVar(0x61084036, 0),
+ getSubVar(0x7500993A, 1), getSubVar(0x61084036, 1),
+ getSubVar(0x7500993A, 2), getSubVar(0x61084036, 2));
+
+ Scene::update();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ createObjects();
+ }
+ if (_flag4 && !_soundResource2.isPlaying()) {
+ sendMessage(_parentModule, 0x1009, _flag5);
+ }
+ if (_flag3 && !_soundResource3.isPlaying()) {
+ sendMessage(_asTeddyBear, 0x2002, 0);
+ _flag3 = false;
+ }
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1100.h b/engines/neverhood/module1100.h
new file mode 100644
index 0000000..8d49f8f
--- /dev/null
+++ b/engines/neverhood/module1100.h
@@ -0,0 +1,128 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1100_H
+#define NEVERHOOD_MODULE1100_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module1100
+
+class Module1100 : public Module {
+public:
+ Module1100(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1100();
+protected:
+ int _countdown;
+ void createScene(int sceneNum, int which);
+ void updateScene();
+};
+
+class SsScene1105Button : public StaticSprite {
+public:
+ SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &rect);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class SsScene1105Symbol : public StaticSprite {
+public:
+ SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16 x, int16 y);
+ void hide();
+};
+
+class SsScene1105SymbolDie : public StaticSprite {
+public:
+ SsScene1105SymbolDie(NeverhoodEngine *vm, uint index, int16 x, int16 y);
+ void hide();
+protected:
+ uint _index;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void loadSymbolSprite();
+};
+
+class AsScene1105TeddyBear : public AnimatedSprite {
+public:
+ AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene);
+ void show();
+ void hide();
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class SsScene1105OpenButton : public StaticSprite {
+public:
+ SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ int _countdown;
+ bool _flag1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1105 : public Scene {
+public:
+ Scene1105(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ int _countdown;
+ int _backgroundIndex;
+ bool _flag1;
+ bool _flag2;
+ bool _flag3;
+ bool _flag4;
+ bool _flag5;
+ AsScene1105TeddyBear *_asTeddyBear;
+ SsScene1105Symbol *_ssSymbols[3];
+ SsScene1105SymbolDie *_ssSymbolDice[3];
+ Sprite *_ssSymbol1UpButton;
+ Sprite *_ssSymbol1DownButton;
+ Sprite *_ssSymbol2UpButton;
+ Sprite *_ssSymbol2DownButton;
+ Sprite *_ssSymbol3UpButton;
+ Sprite *_ssSymbol3DownButton;
+ Sprite *_ssActionButton;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createObjects();
+ void upOpenPanel();
+ void upClosePanel();
+ void update();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1100_H */
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 59dcbfc..c37cdac 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -217,6 +217,9 @@ void Module2200::createScene(int sceneNum, int which) {
_childObject->handleUpdate();
}
+#define HallOfRecordsSceneLink(nextSceneNum, prevSceneNum) \
+ if (_moduleResult == 1) createScene(nextSceneNum, 0); else if (_moduleResult == 2) createScene(7, 0); else createScene(prevSceneNum, 1)
+
void Module2200::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
@@ -274,346 +277,118 @@ void Module2200::updateScene() {
createScene(5, 3);
break;
case 9:
- if (_moduleResult == 1) {
- createScene(10, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(46, 1);
- }
+ HallOfRecordsSceneLink(10, 46);
break;
case 10:
- if (_moduleResult == 1) {
- createScene(11, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(9, 1);
- }
+ HallOfRecordsSceneLink(11, 9);
break;
case 11:
- if (_moduleResult == 1) {
- createScene(12, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(10, 1);
- }
+ HallOfRecordsSceneLink(12, 10);
break;
case 12:
- if (_moduleResult == 1) {
- createScene(13, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(11, 1);
- }
+ HallOfRecordsSceneLink(13, 11);
break;
case 13:
- if (_moduleResult == 1) {
- createScene(14, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(12, 1);
- }
+ HallOfRecordsSceneLink(14, 12);
break;
case 14:
- if (_moduleResult == 1) {
- createScene(15, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(13, 1);
- }
+ HallOfRecordsSceneLink(15, 13);
break;
case 15:
- if (_moduleResult == 1) {
- createScene(16, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(14, 1);
- }
+ HallOfRecordsSceneLink(16, 14);
break;
case 16:
- if (_moduleResult == 1) {
- createScene(17, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(15, 1);
- }
+ HallOfRecordsSceneLink(17, 15);
break;
case 17:
- if (_moduleResult == 1) {
- createScene(18, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(16, 1);
- }
+ HallOfRecordsSceneLink(18, 16);
break;
case 18:
- if (_moduleResult == 1) {
- createScene(19, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(17, 1);
- }
+ HallOfRecordsSceneLink(19, 17);
break;
case 19:
- if (_moduleResult == 1) {
- createScene(20, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(18, 1);
- }
+ HallOfRecordsSceneLink(20, 18);
break;
case 20:
- if (_moduleResult == 1) {
- createScene(21, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(19, 1);
- }
+ HallOfRecordsSceneLink(21, 19);
break;
case 21:
- if (_moduleResult == 1) {
- createScene(22, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(20, 1);
- }
+ HallOfRecordsSceneLink(22, 20);
break;
case 22:
- if (_moduleResult == 1) {
- createScene(23, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(21, 1);
- }
+ HallOfRecordsSceneLink(23, 21);
break;
case 23:
- if (_moduleResult == 1) {
- createScene(24, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(22, 1);
- }
+ HallOfRecordsSceneLink(24, 22);
break;
case 24:
- if (_moduleResult == 1) {
- createScene(25, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(23, 1);
- }
+ HallOfRecordsSceneLink(25, 23);
break;
case 25:
- if (_moduleResult == 1) {
- createScene(26, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(24, 1);
- }
+ HallOfRecordsSceneLink(26, 24);
break;
case 26:
- if (_moduleResult == 1) {
- createScene(27, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(25, 1);
- }
+ HallOfRecordsSceneLink(27, 25);
break;
case 27:
- if (_moduleResult == 1) {
- createScene(28, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(26, 1);
- }
+ HallOfRecordsSceneLink(28, 26);
break;
case 28:
- if (_moduleResult == 1) {
- createScene(29, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(27, 1);
- }
+ HallOfRecordsSceneLink(29, 27);
break;
case 29:
- if (_moduleResult == 1) {
- createScene(30, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(28, 1);
- }
+ HallOfRecordsSceneLink(30, 28);
break;
case 30:
- if (_moduleResult == 1) {
- createScene(31, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(29, 1);
- }
+ HallOfRecordsSceneLink(31, 29);
break;
case 31:
- if (_moduleResult == 1) {
- createScene(32, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(30, 1);
- }
+ HallOfRecordsSceneLink(32, 30);
break;
case 32:
- if (_moduleResult == 1) {
- createScene(33, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(31, 1);
- }
+ HallOfRecordsSceneLink(33, 31);
break;
case 33:
- if (_moduleResult == 1) {
- createScene(34, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(32, 1);
- }
+ HallOfRecordsSceneLink(34, 32);
break;
case 34:
- if (_moduleResult == 1) {
- createScene(42, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(33, 1);
- }
+ HallOfRecordsSceneLink(42, 33);
break;
case 35:
- if (_moduleResult == 1) {
- createScene(36, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(45, 1);
- }
+ HallOfRecordsSceneLink(36, 45);
break;
case 36:
- if (_moduleResult == 1) {
- createScene(37, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(35, 1);
- }
+ HallOfRecordsSceneLink(37, 35);
break;
case 37:
- if (_moduleResult == 1) {
- createScene(38, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(36, 1);
- }
+ HallOfRecordsSceneLink(38, 36);
break;
case 38:
- if (_moduleResult == 1) {
- createScene(39, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(37, 1);
- }
+ HallOfRecordsSceneLink(39, 37);
break;
case 39:
- if (_moduleResult == 1) {
- createScene(40, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(38, 1);
- }
+ HallOfRecordsSceneLink(40, 38);
break;
case 40:
- if (_moduleResult == 1) {
- createScene(41, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(39, 1);
- }
+ HallOfRecordsSceneLink(41, 39);
break;
case 41:
- if (_moduleResult == 1) {
- createScene(47, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(40, 1);
- }
+ HallOfRecordsSceneLink(47, 40);
break;
case 42:
- if (_moduleResult == 1) {
- createScene(43, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(34, 1);
- }
+ HallOfRecordsSceneLink(43, 34);
break;
case 43:
- if (_moduleResult == 1) {
- createScene(44, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(42, 1);
- }
+ HallOfRecordsSceneLink(44, 42);
break;
case 44:
- if (_moduleResult == 1) {
- createScene(45, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(43, 1);
- }
+ HallOfRecordsSceneLink(45, 43);
break;
case 45:
- if (_moduleResult == 1) {
- createScene(35, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(44, 1);
- }
+ HallOfRecordsSceneLink(35, 44);
break;
case 46:
- if (_moduleResult == 1) {
- createScene(9, 0);
- } else if (_moduleResult == 2) {
- createScene(7, 0);
- } else {
- createScene(5, 1);
- }
+ HallOfRecordsSceneLink(9, 5);
break;
case 47:
createScene(41, 1);
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index c24bf6a..fe78e50 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -59,7 +59,7 @@ void SmackerScene::setFileHash(uint32 fileHash) {
_fileHashList = _fileHash;
}
-void SmackerScene::setFileHashList(uint32 *fileHashList) {
+void SmackerScene::setFileHashList(const uint32 *fileHashList) {
debug("SmackerScene::setFileHashList(...)");
_fileHashList = fileHashList;
}
diff --git a/engines/neverhood/smackerscene.h b/engines/neverhood/smackerscene.h
index b3c354c..0523766 100644
--- a/engines/neverhood/smackerscene.h
+++ b/engines/neverhood/smackerscene.h
@@ -34,7 +34,7 @@ public:
SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort);
virtual ~SmackerScene();
void setFileHash(uint32 fileHash);
- void setFileHashList(uint32 *fileHashList);
+ void setFileHashList(const uint32 *fileHashList);
void nextVideo();
protected:
bool _doubleSurface;
@@ -43,7 +43,7 @@ protected:
bool _fieldDF;
bool _playNextVideoFlag;
int _fileHashListIndex;
- uint32 *_fileHashList;
+ const uint32 *_fileHashList;
uint32 _fileHash[2];
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 95cfa04e3bdddf15db55ea0859d77cf41e102620
https://github.com/scummvm/scummvm/commit/95cfa04e3bdddf15db55ea0859d77cf41e102620
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1105
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index ef32a22..de90983 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -340,6 +340,13 @@ static const uint32 messageListOffsets[] = {
};
static const uint32 navigationListOffsets[] = {
+ // Module1100
+ 2, 0x004B8430,
+ 2, 0x004B8460,
+ 4, 0x004B84F0,
+ 4, 0x004B8490,
+ 2, 0x004B8580,
+ 2, 0x004B8550,
// Module1300
6, 0x004B2718,
2, 0x004B27A8,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index f902613..9d22f38 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 8a08287e7b92d9db70a2eee9a8b76302e282809b
https://github.com/scummvm/scummvm/commit/8a08287e7b92d9db70a2eee9a8b76302e282809b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1109
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index de90983..16c00a7 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -48,6 +48,9 @@ static const uint32 rectListOffsets[] = {
3, 0x004B43A0,
// Scene1004
1, 0x004B7C70,
+ // Scene1109
+ 1, 0x004B63A8,
+ 1, 0x004B6398,
// Scene1201
1, 0x004AEE58,
1, 0x004AEDC8,
@@ -134,6 +137,12 @@ static const uint32 messageListOffsets[] = {
2, 0x004B7C08,
1, 0x004B7C18,
2, 0x004B7C20,
+ // Scene1109
+ 1, 0x004B6260,
+ 2, 0x004B6268,
+ 4, 0x004B6318,
+ 2, 0x004B6278,
+ 1, 0x004B6258,
// Scene1201
1, 0x004AEC08,
2, 0x004AEC10,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 9d22f38..47123e8 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 47f1fe141b2205d6ce8999fa1a327310de4a1790
https://github.com/scummvm/scummvm/commit/47f1fe141b2205d6ce8999fa1a327310de4a1790
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:40-07:00
Commit Message:
NEVERHOOD: Add Scene1109
- Also fix some bugs regarding a missing parameter to setMessageList in various scenes
Changed paths:
engines/neverhood/background.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1100.cpp
engines/neverhood/module1100.h
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2000.cpp
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/background.cpp b/engines/neverhood/background.cpp
index 0c522db..e235eaa 100644
--- a/engines/neverhood/background.cpp
+++ b/engines/neverhood/background.cpp
@@ -62,7 +62,7 @@ void Background::load(uint32 fileHash) {
DirtyBackground::DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority)
: Background(vm, objectPriority) {
- // TODO _spriteResource.load(calcHash(fileName));
+ _spriteResource.load(calcHash(fileName));
createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_surface->drawSpriteResource(_spriteResource);
}
@@ -85,5 +85,4 @@ void DirtyBackground::createSurface(int surfacePriority, int16 width, int16 heig
}
-
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c6dc006..4d1c27d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -275,7 +275,7 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 4;
+ _vm->gameState().sceneNum = 8;
createModule(1100, -1);
#endif
}
@@ -353,6 +353,14 @@ void GameModule::updateModule() {
createModule(2300, 2);
}
break;
+ case 1100:
+ if (_moduleResult == 0) {
+ createModule(2900, 2);
+ } else {
+ setGlobalVar(0xD0A14D10, 1);
+ createModule(1300, 0);
+ }
+ break;
case 1300:
if (_moduleResult == 1) {
// TODO _gameState.clear();
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 4d4d9c4..4916056 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2687,6 +2687,102 @@ void KmScene1004::sub478170() {
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
}
+KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+
+ // Empty
+}
+
+uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x2000:
+ _flag1 = param.asInteger() != 0;
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub421350));
+ else
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _x4 = param.asInteger();
+ setCallback2(AnimationCallback(&Klayman::sub41F9E0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481D:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ break;
+ case 0x481E:
+ if (_flag)
+ setCallback2(AnimationCallback(&Klayman::sub421510));
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x4835:
+ sendMessage(_parentScene, 0x2000, 1);
+ _flag1 = true;
+ setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ break;
+ case 0x4836:
+ sendMessage(_parentScene, 0x2000, 0);
+ _flag1 = false;
+ setCallback2(AnimationCallback(&Klayman::sub421310));
+ break;
+ case 0x483D:
+ sub461F30();
+ break;
+ case 0x483E:
+ sub461F70();
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene1109::handleMessage461EA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ _soundResource1.play(0x85B10BB8);
+ } else if (param.asInteger() == 0x4E6A0CA0) {
+ _soundResource1.play(0xC5B709B0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene1109::sub461F30() {
+ _status2 = 0;
+ _flagE5 = false;
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1109::handleMessage461EA0);
+ setFileHash(0x2C2A4A1C, 0, -1);
+}
+
+void KmScene1109::sub461F70() {
+ _status2 = 0;
+ _flagE5 = false;
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene1109::handleMessage461EA0);
+ setFileHash(0x3C2E4245, 0, -1);
+}
+
// KmScene1201
KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a4d3557..7b3530c 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -305,6 +305,17 @@ protected:
void sub478170();
};
+class KmScene1109 : public Klayman {
+public:
+ KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag1;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage461EA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub461F30();
+ void sub461F70();
+};
+
class KmScene1201 : public Klayman {
public:
KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464);
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 3ee3f4c..4bafbd9 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -94,7 +94,7 @@ void Module1100::createScene(int sceneNum, int which) {
createSmackerScene(kSmackerFileHashList07, true, true, false);
break;
case 8:
-//TODO _childObject = new Scene1109(_vm, this, which);
+ _childObject = new Scene1109(_vm, this, which);
break;
case 1002:
_countdown = 40;
@@ -108,7 +108,6 @@ void Module1100::createScene(int sceneNum, int which) {
void Module1100::updateScene() {
if (!updateChild()) {
- debug("_vm->gameState().sceneNum = %d", _vm->gameState().sceneNum);
switch (_vm->gameState().sceneNum) {
case 0:
_countdown = 0;
@@ -660,4 +659,61 @@ void Scene1105::update() {
}
}
+Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, which) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1109::handleMessage);
+
+ setBackground(0x8449E02F);
+ setPalette(0x8449E02F);
+ insertMouse433(0x9E02B84C);
+
+ _sprite1 = insertStaticSprite(0x600CEF01, 1100);
+
+ if (which < 0) {
+ insertKlayman<KmScene1109>(140, 436);
+ setMessageList(0x004B6260);
+ sendMessage(this, 0x2000, 0);
+ } else if (which == 1) {
+ insertKlayman<KmScene1109>(450, 436);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004B6268, false);
+ sendMessage(this, 0x2000, 1);
+ } else if (which == 2) {
+ insertKlayman<KmScene1109>(450, 436);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004B6318, false);
+ sendMessage(this, 0x2000, 1);
+ } else if (which == 3) {
+ insertKlayman<KmScene1109>(450, 436);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004B6278, false);
+ sendMessage(this, 0x2000, 1);
+ } else {
+ insertKlayman<KmScene1109>(0, 436);
+ setMessageList(0x004B6258);
+ sendMessage(this, 0x2000, 0);
+ }
+
+ _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480);
+
+}
+
+uint32 Scene1109::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ if (param.asInteger()) {
+ setRectList(0x004B63A8);
+ _klayman->setKlaymanTable3();
+ } else {
+ setRectList(0x004B6398);
+ _klayman->setKlaymanTable1();
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1100.h b/engines/neverhood/module1100.h
index 8d49f8f..c46c1df 100644
--- a/engines/neverhood/module1100.h
+++ b/engines/neverhood/module1100.h
@@ -123,6 +123,14 @@ protected:
void update();
};
+class Scene1109 : public Scene {
+public:
+ Scene1109(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1100_H */
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 9c84950..8853dd0 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -971,7 +971,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2002:
if (getGlobalVar(0x20A0C516)) {
sendEntityMessage(_klayman, 0x1014, _asTntMan);
- setMessageList2(0x004AECF0);
+ setMessageList2(0x004AECF0, false);
} else if (getGlobalVar(0x0112090A) == 3) {
sendEntityMessage(_klayman, 0x1014, _asTntMan);
if (_klayman->getX() > _asTntMan->getX()) {
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 4876135..1f3716b 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1719,7 +1719,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else {
setRectList(0x004B5980);
}
- setMessageList(0x004B57E8);
+ setMessageList(0x004B57E8, false);
_sprite1->setVisible(true);
_klayman->setVisible(true);
break;
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 9547d34..8140608 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -214,19 +214,19 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 1) {
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004B6A08);
+ setMessageList(0x004B6A08, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 2) {
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004B6AA0);
+ setMessageList(0x004B6AA0, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 3) {
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004B6A18);
+ setMessageList(0x004B6A18, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else {
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index b870d82..22ee648 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -114,17 +114,17 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 1) {
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004B3540);
+ setMessageList(0x004B3540, false);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004B35F0);
+ setMessageList(0x004B35F0, false);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004B3550);
+ setMessageList(0x004B3550, false);
sendMessage(this, 0x2000, 1);
} else {
insertKlayman<KmScene2001>(390, 345);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 8d7fc78..441ee1e 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -249,14 +249,14 @@ void Scene::update() {
if (_mouseClicked) {
if (_klayman) {
// TODO: Merge later
- if (_klayman->hasMessageHandler() &&
+ if (_messageListFlag &&
+ _klayman->hasMessageHandler() &&
sendMessage(_klayman, 0x1008, 0) != 0 &&
- _messageListFlag &&
queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
- } else if (_klayman->hasMessageHandler() &&
- sendMessage(_klayman, 0x1008, 0) != 0 &&
- _messageListFlag) {
+ } else if (_messageListFlag &&
+ _klayman->hasMessageHandler() &&
+ sendMessage(_klayman, 0x1008, 0) != 0) {
_mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
}
} else if (queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
Commit: 2445e6aba8e9724737a069eb4e018f8e60015aac
https://github.com/scummvm/scummvm/commit/2445e6aba8e9724737a069eb4e018f8e60015aac
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add tables for Module1600 and Scene1608
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 16c00a7..01ddd15 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -81,6 +81,9 @@ static const uint32 rectListOffsets[] = {
1, 0x004B2008,
// Scene1404
1, 0x004B8D80,
+ // Scene1608
+ 1, 0x004B47D0,
+ 1, 0x004B4810,
// Scene1705
1, 0x004B6B40,
1, 0x004B6B30,
@@ -242,6 +245,14 @@ static const uint32 messageListOffsets[] = {
3, 0x004B8CA0,
2, 0x004B8CD0,
2, 0x004B8D18,
+ // Scene1608
+ 1, 0x004B46A8,
+ 1, 0x004B46B0,
+ 1, 0x004B47A8,
+ 3, 0x004B4748,
+ 2, 0x004B4770,
+ 2, 0x004B46C8,
+ 2, 0x004B4760,
// Scene1705
1, 0x004B69E8,
2, 0x004B6A08,
@@ -362,6 +373,14 @@ static const uint32 navigationListOffsets[] = {
2, 0x004B27D8,
2, 0x004B2808,
2, 0x004B2838,
+ // Module1600
+ 4, 0x004B39D0,
+ 2, 0x004B3A30,
+ 2, 0x004B3A60,
+ 6, 0x004B3A90,
+ 2, 0x004B3B20,
+ 2, 0x004B3B50,
+ 2, 0x004B3B80,
// Module1700
2, 0x004AE8B8,
3, 0x004AE8E8,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 47123e8..5561301 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 236ca705e8082184aae61aae5e2d561d09b7043c
https://github.com/scummvm/scummvm/commit/236ca705e8082184aae61aae5e2d561d09b7043c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add Module1600 and Scene1608 (stuff will be renamed later)
Changed paths:
A engines/neverhood/module1600.cpp
A engines/neverhood/module1600.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module.mk
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 4d1c27d..854a5cc 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -29,6 +29,7 @@
#include "neverhood/module1300.h"
#include "neverhood/module1400.h"
#include "neverhood/module1500.h"
+#include "neverhood/module1600.h"
#include "neverhood/module1700.h"
#include "neverhood/module1800.h"
#include "neverhood/module2000.h"
@@ -275,8 +276,9 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 8;
- createModule(1100, -1);
+ _vm->gameState().sceneNum = 7;
+ _vm->gameState().which = 1;
+ createModule(1600, -1);
#endif
}
@@ -309,6 +311,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x00F10114);
_childObject = new Module1500(_vm, this, which, true);
break;
+ case 1600:
+ setGlobalVar(0x91080831, 0x01A008D8);
+ _childObject = new Module1600(_vm, this, which);
+ break;
case 1700:
setGlobalVar(0x91080831, 0x04212331);
_childObject = new Module1700(_vm, this, which);
@@ -379,6 +385,15 @@ void GameModule::updateModule() {
case 1500:
createModule(1000, 0);
break;
+ case 1600:
+ if (_moduleResult == 1) {
+ createModule(1400, 0);
+ } else if (_moduleResult == 2) {
+ createModule(1700, 0);
+ } else {
+ createModule(2100, 0);
+ }
+ break;
case 1700:
if (_moduleResult == 1) {
createModule(2900, 3);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 4916056..27ef84a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -282,7 +282,7 @@ void Klayman::sub421350() {
SetMessageHandler(&Klayman::handleMessage41D360);
_counter3 = 0;
_counterMax = 8;
- _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ _counter3Max = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
void Klayman::update41D1C0() {
@@ -3719,6 +3719,93 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene1608::KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+}
+
+uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x2032:
+ _flag1 = param.asInteger() != 0;
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub421350));
+ else
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ break;
+ case 0x481E:
+ if (_flag)
+ setCallback2(AnimationCallback(&Klayman::sub421510));
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ } else if (param.asInteger() == 0) {
+ setCallback2(AnimationCallback(&Klayman::sub420870));
+ } else if (param.asInteger() == 4) {
+ setCallback2(AnimationCallback(&Klayman::sub420930));
+ } else if (param.asInteger() == 3) {
+ setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub420830));
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x4835:
+ sendMessage(_parentScene, 0x2032, 1);
+ _flag1 = true;
+ setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ break;
+ case 0x4836:
+ sendMessage(_parentScene, 0x2032, 0);
+ _flag1 = false;
+ setCallback2(AnimationCallback(&Klayman::sub421310));
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
// KmScene1705
KmScene1705::KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 7b3530c..84cb05a 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -413,6 +413,14 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene1608 : public Klayman {
+public:
+ KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag1;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene1705 : public Klayman {
public:
KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 79197ed..5be9a63 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -110,4 +110,8 @@ bool Module::updateChild() {
return true;
}
+void Module::leaveModule(uint32 result) {
+ sendMessage(_parentModule, 0x1009, result);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 2f6ce69..57a42c6 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -62,6 +62,7 @@ protected:
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort);
bool updateChild();
+ void leaveModule(uint32 result);
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index bbbbb02..5a597fb 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -17,6 +17,7 @@ MODULE_OBJS = \
module1300.o \
module1400.o \
module1500.o \
+ module1600.o \
module1700.o \
module1800.o \
module2000.o \
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
new file mode 100644
index 0000000..a23e710
--- /dev/null
+++ b/engines/neverhood/module1600.cpp
@@ -0,0 +1,1387 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1600.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/module1200.h"
+#include "neverhood/module2200.h"
+
+namespace Neverhood {
+
+Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else if (which == 1) {
+ createScene(4, 1);
+ } else if (which == 2) {
+ createScene(5, 0);
+ } else if (which == 3) {
+ createScene(6, 1);
+ } else if (which == 4) {
+ createScene(1, 0);
+ } else {
+ createScene(0, 0);
+ }
+
+ // TODO Sound1ChList_addSoundResources(0x1A008D8, dword_4B3BB0, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B3BB0, true, 50, 600, 5, 150);
+ // TODO Sound1ChList_sub_407C70(0x1A008D8, 0x41861371, 0x43A2507F, 0);
+
+}
+
+Module1600::~Module1600() {
+ // TODO Sound1ChList_sub_407A50(0x1A008D8);
+}
+
+void Module1600::createScene(int sceneNum, int which) {
+ debug("Module1600::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createNavigationScene(0x004B39D0, which);
+ break;
+ case 1:
+ createNavigationScene(0x004B3A30, which);
+ break;
+ case 2:
+ createNavigationScene(0x004B3A60, which);
+ break;
+ case 3:
+ createNavigationScene(0x004B3A90, which);
+ break;
+ case 4:
+ createNavigationScene(0x004B3B20, which);
+ break;
+ case 5:
+ createNavigationScene(0x004B3B50, which);
+ break;
+ case 6:
+ createNavigationScene(0x004B3B80, which);
+ break;
+ case 7:
+ _childObject = new Scene1608(_vm, this, which);
+ break;
+ case 8:
+//TODO _childObject = new Scene1609(_vm, this, which);
+ break;
+ case 1001:
+ if (getGlobalVar(0xA0808898) == 1) {
+ createSmackerScene(0x80050200, true, true, false);
+ } else if (getGlobalVar(0xA0808898) == 2) {
+ createSmackerScene(0x80090200, true, true, false);
+ } else {
+ createSmackerScene(0x80000200, true, true, false);
+ }
+ if (getGlobalVar(0xA0808898) >= 2)
+ setGlobalVar(0xA0808898, 0);
+ else
+ incGlobalVar(0xA0808898, +1);
+ break;
+ }
+ SetUpdateHandler(&Module1600::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module1600::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 0)
+ createScene(2, 0);
+ else if (_moduleResult == 1)
+ createScene(1, 0);
+ else if (_moduleResult == 2)
+ leaveModule(4);
+ break;
+ case 1:
+ if (_moduleResult == 0)
+ createScene(1001, -1);
+ else if (_moduleResult == 1)
+ createScene(0, 3);
+ break;
+ case 2:
+ if (_moduleResult == 0)
+ createScene(3, 0);
+ else if (_moduleResult == 1)
+ createScene(0, 2);
+ break;
+ case 3:
+ if (_moduleResult == 0)
+ createScene(5, 0);
+ else if (_moduleResult == 2)
+ createScene(6, 0);
+ else if (_moduleResult == 3)
+ createScene(2, 1);
+ else if (_moduleResult == 4)
+ createScene(4, 0);
+ break;
+ case 4:
+ if (_moduleResult == 0)
+ leaveModule(1);
+ else if (_moduleResult == 1)
+ createScene(3, 1);
+ break;
+ case 5:
+ if (_moduleResult == 0)
+ leaveModule(2);
+ else if (_moduleResult == 1)
+ createScene(3, 3);
+ break;
+ case 6:
+ if (_moduleResult == 0)
+ createScene(8, -1);
+ else if (_moduleResult == 1)
+ createScene(3, 5);
+ break;
+ case 7:
+ createScene(6, 1);
+ break;
+ case 8:
+ if (_moduleResult == 0)
+ createScene(6, 0);
+ else
+ createScene(7, 0);
+ break;
+ case 1001:
+ createScene(1, 0);
+ break;
+ }
+ }
+}
+
+Class521::Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
+ : AnimatedSprite(vm, 1000), _parentScene(parentScene) {
+
+ SetUpdateHandler(&Class521::update);
+ SetMessageHandler(&Class521::handleMessage);
+ SetSpriteCallback(NULL);
+
+ // TODO createSurface2(200, dword_4AF4C0);
+ createSurface(200, 640, 480); //TODO: Remove once the line above is done
+ _x = x;
+ _y = y;
+
+ _field100 = 0;
+ _exitDirection = 0;
+ _currPointIndex = 0;
+ _againDestPtFlag = 0;
+ _stepError = 0;
+ _againDestPointFlag = 0;
+ _steps = 0;
+ _flag10E = 0;
+ _moreY = 0;
+ _flag10F = 0;
+ _flag113 = 0;
+ _flag114 = 1;
+ _flag11A = 0;
+ _newDeltaXType = -1;
+ _field11E = 0;
+ _pathPoints = NULL;
+ _rectList = NULL;
+
+ setFileHash(0xD4220027, 0, -1);
+ setDoDeltaX(getGlobalVar(0x21E60190));
+
+}
+
+Class521::~Class521() {
+ if (_callback1Cb == AnimationCallback(&Class521::sub45D620)) {
+ setGlobalVar(0x21E60190, !getGlobalVar(0x21E60190));
+ }
+}
+
+void Class521::setPathPoints(NPointArray *pathPoints) {
+ _pathPoints = pathPoints;
+}
+
+void Class521::update() {
+ if (_newDeltaXType >= 0) {
+ setDoDeltaX(_newDeltaXType);
+ _newDeltaXType = -1;
+ }
+ AnimatedSprite::update();
+ if (_againDestPtFlag && _moreY == 0 && !_flag10F) {
+ _againDestPtFlag = 0;
+ _againDestPointFlag = 0;
+ sendPointMessage(this, 0x2004, _againDestPt);
+ } else if (_againDestPointFlag && _moreY == 0 && !_flag10F) {
+ _againDestPointFlag = 0;
+ sendMessage(this, 0x2003, _againDestPointIndex);
+ }
+ sub45CE10();
+ sub45E0A0();
+}
+
+void Class521::update45C790() {
+ Class521::update();
+ if (++_idleCounter >= _idleCounterMax)
+ sub45D050();
+ sub45E0A0();
+}
+
+uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1019:
+ SetSpriteCallback(NULL);
+ break;
+ /* NOTE: Implemented in setPathPoints
+ case 0x2000:
+ case 0x2001:
+ */
+ case 0x2002:
+ // Set the current position without moving
+ _currPointIndex = param.asInteger();
+ _stepError = 0;
+ _x = pathPoint(_currPointIndex).x;
+ _y = pathPoint(_currPointIndex).y;
+ break;
+ case 0x2003:
+ // Move to a point by its index
+ {
+ int newPointIndex = param.asInteger();
+ if (_moreY <= 0 && !_flag10F) {
+ _someX = pathPoint(newPointIndex).x;
+ _someY = pathPoint(newPointIndex).y;
+ if (_currPointIndex < newPointIndex) {
+ moveToNextPoint();
+ } else if (_currPointIndex == newPointIndex && _stepError == 0) {
+ if (_currPointIndex == 0) {
+ _moreY = 0;
+ sendMessage(_parentScene, 0x2005, 0);
+ } else if (_currPointIndex == (int)_pathPoints->size()) {
+ _moreY = 0;
+ sendMessage(_parentScene, 0x2006, 0);
+ }
+ } else {
+ moveToPrevPoint();
+ }
+ } else {
+ _againDestPointFlag = 1;
+ _againDestPointIndex = newPointIndex;
+ }
+ }
+ break;
+ case 0x2004:
+ // Move to the point closest to the parameter point
+ {
+ int minMatchIndex = -1;
+ int minMatchDistance, distance;
+ NPoint pt = param.asPoint();
+ if (_moreY <= 0 && !_flag10F) {
+ // Check if we're already exiting (or something)
+ if ((pt.x <= 20 && _exitDirection == 1) ||
+ (pt.x >= 620 && _exitDirection == 3) ||
+ (pt.y <= 20 && _exitDirection == 2) ||
+ (pt.y >= 460 && _exitDirection == 4))
+ break;
+ _someX = pt.x;
+ _someY = pt.y;
+ minMatchDistance = calcDistance(_someX, _someY, _x, _y) + 1;
+ for (int i = _currPointIndex + 1; i < (int)_pathPoints->size(); i++) {
+ distance = calcDistance(_someX, _someY, pathPoint(i).x, pathPoint(i).y);
+ if (distance >= minMatchDistance)
+ break;
+ minMatchDistance = distance;
+ minMatchIndex = i;
+ }
+ for (int i = _currPointIndex; i >= 0; i--) {
+ distance = calcDistance(_someX, _someY, pathPoint(i).x, pathPoint(i).y);
+ if (distance >= minMatchDistance)
+ break;
+ minMatchDistance = distance;
+ minMatchIndex = i;
+ }
+ if (minMatchIndex == -1) {
+ if (_currPointIndex == 0) {
+ moveToPrevPoint();
+ } else {
+ SetSpriteCallback(NULL);
+ }
+ } else {
+ if (minMatchIndex > _currPointIndex) {
+ moveToNextPoint();
+ } else {
+ moveToPrevPoint();
+ }
+ }
+ } else {
+ _againDestPtFlag = 1;
+ _againDestPt = pt;
+ }
+ }
+ break;
+ case 0x2007:
+ _moreY = param.asInteger();
+ _steps = 0;
+ _flag10E = 0;
+ SetSpriteCallback(&Class521::suMoveToPrevPoint);
+ _lastDistance = 640;
+ break;
+ case 0x2008:
+ _moreY = param.asInteger();
+ _steps = 0;
+ _flag10E = 0;
+ SetSpriteCallback(&Class521::suMoveToNextPoint);
+ _lastDistance = 640;
+ break;
+ case 0x2009:
+ sub45CF80();
+ break;
+ case 0x200A:
+ sub45CFB0();
+ break;
+ /* NOTE: Implemented in setRectList
+ case 0x200B:
+ case 0x200C:
+ */
+ case 0x200E:
+ sub45D180();
+ break;
+ case 0x200F:
+ sub45CD00();
+ _newDeltaXType = param.asInteger();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class521::handleMessage45CC30(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Class521::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (_flag10F && param.asInteger() == 0x025424A2) {
+ removeCallbacks();
+ }
+ break;
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class521::handleMessage45CCA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x2009:
+ sub45CF80();
+ break;
+ case 0x3002:
+ sendMessage(_parentScene, 0x200A, 0);
+ SetMessageHandler(&Class521::handleMessage);
+ break;
+ }
+ return 0;
+}
+
+void Class521::sub45CD00() {
+ bool doDeltaX = _doDeltaX;
+ SetSpriteCallback(NULL);
+ _againDestPtFlag = 0;
+ _againDestPointFlag = 0;
+ _flag10E = 0;
+ _flag10F = 0;
+ _flag113 = 0;
+ _flag114 = 0;
+ _flag11A = 0;
+ _rectList = NULL;
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetAnimationCallback3(&Class521::sub45CFE0);
+ setFileHash(0x35698F78, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update45C790);
+ setCallback1(AnimationCallback(&Class521::sub45D040));
+ setDoDeltaX(doDeltaX ? 1 : 0);
+ _currMoveDirection = 0;
+ _newMoveDirection = 0;
+ _steps = 0;
+ _idleCounter = 0;
+ _idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+}
+
+void Class521::sub45CDC0() {
+ if (_value112 == 1) {
+ _lastDistance = 640;
+ _flag113 = 0;
+ _flag10E = 0;
+ SetSpriteCallback(&Class521::suMoveToNextPoint);
+ } else if (_value112 == 2) {
+ _lastDistance = 640;
+ _flag113 = 0;
+ _flag10E = 0;
+ SetSpriteCallback(&Class521::suMoveToPrevPoint);
+ }
+}
+
+void Class521::sub45CE10() {
+ if (_flag10E && !_flag113 && !_flag10F) {
+ removeCallbacks();
+ _flag114 = 0;
+ _flag113 = 1;
+ setFileHash(0x192ADD30, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45CFE0);
+ } else if (!_flag10E && _steps && _flag113) {
+ removeCallbacks();
+ _flag113 = 0;
+ setFileHash(0x9966B138, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45D100);
+ } else {
+ bool flag = false;
+ uint index = 0;
+ if (_rectList && _rectList->size() > 0) {
+ while (index < _rectList->size()) {
+ NRect r = (*_rectList)[index];
+ if (_x >= r.x1 && _x <= r.x2 && _y >= r.y1 && _y <= r.y2)
+ break;
+ }
+ if (index < _rectList->size() && !_flag11A)
+ flag = true;
+ _flag11A = index < _rectList->size();
+ }
+ if (flag) {
+ removeCallbacks();
+ sub45D0A0();
+ } else if (_newMoveDirection != _currMoveDirection && _flag114 && !_flag10F) {
+ removeCallbacks();
+ _currMoveDirection = _newMoveDirection;
+ sub45D100();
+ }
+ }
+}
+
+void Class521::sub45CF80() {
+ setFileHash(0xA86A9538, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45CFE0);
+}
+
+void Class521::sub45CFB0() {
+ setFileHash(0xA86A9538, -1, -1);
+ _playBackwards = true;
+ SetMessageHandler(&Class521::handleMessage45CCA0);
+ SetUpdateHandler(&Class521::update);
+}
+
+void Class521::sub45CFE0() {
+ setFileHash(0x35698F78, 0, -1);
+ SetMessageHandler(&Class521::handleMessage);
+ SetUpdateHandler(&Class521::update45C790);
+ setCallback1(AnimationCallback(&Class521::sub45D040));
+ _idleCounter = 0;
+ _currMoveDirection = 0;
+ _newMoveDirection = 0;
+ _steps = 0;
+ _idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+}
+
+void Class521::sub45D040() {
+ SetUpdateHandler(&Class521::update);
+}
+
+void Class521::sub45D050() {
+ setFileHash(0xB579A77C, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45CFE0);
+ _idleCounter = 0;
+ _idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+}
+
+void Class521::sub45D0A0() {
+ _flag10F = 1;
+ removeCallbacks();
+ setFileHash(0x9C220DA4, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ setCallback1(AnimationCallback(&Class521::sub45D0E0));
+}
+
+void Class521::sub45D0E0() {
+ _flag10F = 0;
+ _newMoveDirection = 0;
+ sub45D100();
+}
+
+void Class521::sub45D100() {
+ _flag114 = 1;
+ if (_currMoveDirection == 1) {
+ setFileHash(0xD4AA03A4, 0, -1);
+ } else if (_currMoveDirection == 3) {
+ setFileHash(0xD00A1364, 0, -1);
+ } else if ((_currMoveDirection == 2 && _doDeltaX) || (_currMoveDirection == 4 && !_doDeltaX)) {
+ sub45D180();
+ } else {
+ setFileHash(0xD4220027, 0, -1);
+ }
+ setGlobalVar(0x21E60190, _doDeltaX ? 1 : 0);
+}
+
+void Class521::sub45D180() {
+ _flag10F = 1;
+ removeCallbacks();
+ setFileHash(0xF46A0324, 0, -1);
+ _value112 = 0;
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ setCallback1(AnimationCallback(&Class521::sub45D620));
+ sub45CDC0();
+}
+
+void Class521::moveToNextPoint() {
+ if (_currPointIndex >= (int)_pathPoints->size() - 1) {
+ _moreY = 0;
+ sendMessage(this, 0x1019, 0);
+ sendMessage(_parentScene, 0x2006, 0);
+ } else {
+ NPoint nextPt = pathPoint(_currPointIndex + 1);
+ NPoint currPt = pathPoint(_currPointIndex);
+ if (ABS(nextPt.y - currPt.y) <= ABS(nextPt.x - currPt.x) && nextPt.x >= currPt.x &&
+ (_currMoveDirection == 4 || _currMoveDirection == 2)) {
+ if (_currMoveDirection == 4)
+ _currMoveDirection = 2;
+ else if (_currMoveDirection == 2)
+ _currMoveDirection = 4;
+ if (_flag113)
+ sub45D390();
+ else
+ sub45D350();
+ } else {
+ if (_steps == 0) {
+ removeCallbacks();
+ _flag113 = 0;
+ setFileHash(0x9966B138, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45D100);
+ }
+ _flag10E = 0;
+ SetSpriteCallback(&Class521::suMoveToNextPoint);
+ _lastDistance = 640;
+ }
+ }
+}
+
+void Class521::sub45D350() {
+ removeCallbacks();
+ _flag10F = 1;
+ _flag10E = 1;
+ setFileHash(0x192ADD30, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45D390);
+}
+
+void Class521::sub45D390() {
+ removeCallbacks();
+ _flag10F = 1;
+ setFileHash(0xF46A0324, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ setCallback1(AnimationCallback(&Class521::sub45D620));
+ _value112 = 1;
+ sub45CDC0();
+}
+
+void Class521::moveToPrevPoint() {
+ if (_currPointIndex == 0 && _stepError == 0) {
+ _moreY = 0;
+ sendMessage(this, 0x1019, 0);
+ sendMessage(_parentScene, 0x2005, 0);
+ } else {
+ NPoint prevPt;
+ NPoint currPt;
+ if (_stepError == 0) {
+ prevPt = pathPoint(_currPointIndex - 1);
+ currPt = pathPoint(_currPointIndex);
+ } else {
+ prevPt = pathPoint(_currPointIndex);
+ currPt = pathPoint(_currPointIndex + 1);
+ }
+ if (ABS(prevPt.y - currPt.y) <= ABS(prevPt.x - currPt.x) && currPt.x >= prevPt.x &&
+ (_currMoveDirection == 2 || _currMoveDirection == 4)) {
+ if (_currMoveDirection == 2)
+ _currMoveDirection = 4;
+ else if (_currMoveDirection == 4)
+ _currMoveDirection = 2;
+ if (_flag113)
+ sub45D5D0();
+ else
+ sub45D580();
+ } else {
+ if (_steps == 0) {
+ removeCallbacks();
+ _flag113 = 0;
+ setFileHash(0x9966B138, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45D100);
+ }
+ _flag10E = 0;
+ SetSpriteCallback(&Class521::suMoveToPrevPoint);
+ _lastDistance = 640;
+ }
+ }
+}
+
+void Class521::sub45D580() {
+ _flag10F = 1;
+ _flag10E = 1;
+ setCallback1(NULL);
+ setFileHash(0x192ADD30, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ SetAnimationCallback3(&Class521::sub45D5D0);
+}
+
+void Class521::sub45D5D0() {
+ _flag10F = 1;
+ setCallback1(NULL);
+ setFileHash(0xF46A0324, 0, -1);
+ SetMessageHandler(&Class521::handleMessage45CC30);
+ SetUpdateHandler(&Class521::update);
+ setCallback1(AnimationCallback(&Class521::sub45D620));
+ _value112 = 2;
+ sub45CDC0();
+}
+
+void Class521::sub45D620() {
+ _flag10F = 0;
+ _newMoveDirection = 0;
+ setDoDeltaX(2);
+ sub45D100();
+}
+
+void Class521::suMoveToNextPoint() {
+ int16 newX = _x, newY = _y;
+
+ if (_currPointIndex >= (int)_pathPoints->size()) {
+ _moreY = 0;
+ sendMessage(this, 0x1019, 0);
+ sendMessage(_parentScene, 0x2006, 0);
+ return;
+ }
+
+ if (_flag10E) {
+ if (_steps <= 0) {
+ sendMessage(this, 0x1019, 0);
+ return;
+ } else {
+ _steps--;
+ }
+ } else if (_steps < 11) {
+ _steps++;
+ }
+
+ bool firstTime = true;
+ _anotherY = _steps;
+ int stepsCtr = _steps;
+
+ while (stepsCtr > 0) {
+ NPoint pt1;
+ NPoint pt2 = pathPoint(_currPointIndex);
+ if (_currPointIndex + 1 >= (int)_pathPoints->size())
+ pt1 = pathPoint(0);
+ else
+ pt1 = pathPoint(_currPointIndex + 1);
+ int16 deltaX = ABS(pt1.x - pt2.x);
+ int16 deltaY = ABS(pt1.y - pt2.y);
+ if (deltaX >= deltaY) {
+ _newMoveDirection = 2;
+ if (pt1.x < pt2.x)
+ _newMoveDirection = 4;
+ if (stepsCtr + _stepError >= deltaX) {
+ stepsCtr -= deltaX;
+ stepsCtr += _stepError;
+ _stepError = 0;
+ _currPointIndex++;
+ if (_currPointIndex == (int)_pathPoints->size() - 1)
+ stepsCtr = 0;
+ newX = pathPoint(_currPointIndex).x;
+ newY = pathPoint(_currPointIndex).y;
+ } else {
+ _stepError += stepsCtr;
+ if (pt1.x >= pt2.x)
+ newX += stepsCtr;
+ else
+ newX -= stepsCtr;
+ if (pt1.y >= pt2.y)
+ newY = pt2.y + (deltaY * _stepError) / deltaX;
+ else
+ newY = pt2.y - (deltaY * _stepError) / deltaX;
+ stepsCtr = 0;
+ }
+ } else {
+ _newMoveDirection = 3;
+ if (pt1.y < pt2.y)
+ _newMoveDirection = 1;
+ if (firstTime) {
+ if (pt1.y >= pt2.y) {
+ stepsCtr += 7;
+ } else {
+ stepsCtr -= 4;
+ if (stepsCtr < 0)
+ stepsCtr = 0;
+ }
+ _anotherY = stepsCtr;
+ }
+ if (stepsCtr + _stepError >= deltaY) {
+ stepsCtr -= deltaY;
+ stepsCtr += _stepError;
+ _stepError = 0;
+ _currPointIndex++;
+ if (_currPointIndex == (int)_pathPoints->size() - 1)
+ stepsCtr = 0;
+ newX = pathPoint(_currPointIndex).x;
+ newY = pathPoint(_currPointIndex).y;
+ } else {
+ _stepError += stepsCtr;
+ if (pt1.x >= pt2.x)
+ newX = pt2.x + (deltaX * _stepError) / deltaY;
+ else
+ newX = pt2.x - (deltaX * _stepError) / deltaY;
+ if (pt1.y >= pt2.y)
+ newY += stepsCtr;
+ else
+ newY -= stepsCtr;
+ stepsCtr = 0;
+ }
+ }
+ firstTime = false;
+ }
+
+ if (_moreY != 0) {
+ _x = newX;
+ _y = newY;
+ _moreY -= _anotherY;
+ if (_moreY <= 0) {
+ _flag10E = 1;
+ _moreY = 0;
+ }
+ } else {
+ int distance = calcDistance(_someX, _someY, _x, _y);
+ _x = newX;
+ _y = newY;
+ if (newX > 20 && newX < 620 && newY > 20 && newY < 460) {
+ _exitDirection = 0;
+ _field100 = 1;
+ } else if (_field100) {
+ _someX = pathPoint(_pathPoints->size() - 1).x;
+ _someY = pathPoint(_pathPoints->size() - 1).y;
+ _field100 = 0;
+ if (_x <= 20)
+ _exitDirection = 1;
+ else if (_x >= 620)
+ _exitDirection = 3;
+ else if (_y <= 20)
+ _exitDirection = 2;
+ else if (_y >= 460)
+ _exitDirection = 4;
+ if (_exitDirection != 0 && _flag10E) {
+ _flag10E = 0;
+ _steps = 11;
+ }
+ }
+ if ((distance < 20 && _exitDirection == 0 && _lastDistance < distance) ||
+ (_exitDirection == 0 && _lastDistance + 20 < distance))
+ _flag10E = 1;
+ if (distance < _lastDistance)
+ _lastDistance = distance;
+ if (_currPointIndex == (int)_pathPoints->size() - 1) {
+ _flag10E = 1;
+ _moreY = 0;
+ sendMessage(this, 0x1019, 0);
+ sendMessage(_parentScene, 0x2006, 0);
+ }
+ }
+
+}
+
+void Class521::suMoveToPrevPoint() {
+ int16 newX = _x, newY = _y;
+
+ if (_currPointIndex == 0 && _stepError == 0) {
+ _moreY = 0;
+ sendMessage(this, 0x1019, 0);
+ sendMessage(_parentScene, 0x2005, 0);
+ return;
+ }
+
+ if (_flag10E) {
+ if (_steps <= 0) {
+ sendMessage(this, 0x1019, 0);
+ return;
+ } else {
+ _steps--;
+ }
+ } else if (_steps < 11) {
+ _steps++;
+ }
+
+ bool firstTime = true;
+ _anotherY = _steps;
+ int stepsCtr = _steps;
+
+ while (stepsCtr > 0) {
+ if (_stepError == 0)
+ _currPointIndex--;
+ NPoint pt1;
+ NPoint pt2 = pathPoint(_currPointIndex);
+ if (_currPointIndex + 1 >= (int)_pathPoints->size())
+ pt1 = pathPoint(0);
+ else
+ pt1 = pathPoint(_currPointIndex + 1);
+ int16 deltaX = ABS(pt1.x - pt2.x);
+ int16 deltaY = ABS(pt1.y - pt2.y);
+ if (deltaX >= deltaY) {
+ _newMoveDirection = 4;
+ if (pt1.x < pt2.x)
+ _newMoveDirection = 2;
+ if (_stepError == 0)
+ _stepError = deltaX;
+ if (stepsCtr > _stepError) {
+ stepsCtr -= _stepError;
+ _stepError = 0;
+ if (_currPointIndex == 0)
+ stepsCtr = 0;
+ newX = pathPoint(_currPointIndex).x;
+ newY = pathPoint(_currPointIndex).y;
+ } else {
+ _stepError -= stepsCtr;
+ if (pt1.x >= pt2.x)
+ newX -= stepsCtr;
+ else
+ newX += stepsCtr;
+ if (pt1.y >= pt2.y)
+ newY = pt2.y + (deltaY * _stepError) / deltaX;
+ else
+ newY = pt2.y - (deltaY * _stepError) / deltaX;
+ stepsCtr = 0;
+ }
+ } else {
+ _newMoveDirection = 1;
+ if (pt1.y < pt2.y)
+ _newMoveDirection = 3;
+ if (firstTime) {
+ if (pt1.y >= pt2.y) {
+ stepsCtr -= 4;
+ if (stepsCtr < 0)
+ stepsCtr = 0;
+ } else {
+ stepsCtr += 7;
+ }
+ _anotherY = stepsCtr;
+ }
+ if (_stepError == 0)
+ _stepError = deltaY;
+ if (stepsCtr > _stepError) {
+ stepsCtr -= _stepError;
+ _stepError = 0;
+ if (_currPointIndex == 0)
+ stepsCtr = 0;
+ newX = pathPoint(_currPointIndex).x;
+ newY = pathPoint(_currPointIndex).y;
+ } else {
+ _stepError -= stepsCtr;
+ if (pt1.x >= pt2.x)
+ newX = pt2.x + (deltaX * _stepError) / deltaY;
+ else
+ newX = pt2.x - (deltaX * _stepError) / deltaY;
+ if (pt1.y >= pt2.y)
+ newY -= stepsCtr;
+ else
+ newY += stepsCtr;
+ stepsCtr = 0;
+ }
+ }
+ firstTime = false;
+ }
+
+ if (_moreY != 0) {
+ _x = newX;
+ _y = newY;
+ _moreY -= _anotherY;
+ if (_moreY <= 0) {
+ _flag10E = 1;
+ _moreY = 0;
+ }
+ } else {
+ int distance = calcDistance(_someX, _someY, _x, _y);
+ _x = newX;
+ _y = newY;
+ if (newX > 20 && newX < 620 && newY > 20 && newY < 460) {
+ _exitDirection = 0;
+ _field100 = 1;
+ } else if (_field100) {
+ _someX = pathPoint(0).x;
+ _someY = pathPoint(0).y;
+ _field100 = 0;
+ if (_x <= 20)
+ _exitDirection = 1;
+ else if (_x >= 620)
+ _exitDirection = 3;
+ else if (_y <= 20)
+ _exitDirection = 2;
+ else if (_y >= 460)
+ _exitDirection = 4;
+ if (_exitDirection != 0 && _flag10E) {
+ _flag10E = 0;
+ _steps = 11;
+ }
+ }
+ if ((distance < 20 && _exitDirection == 0 && _lastDistance < distance) ||
+ (_exitDirection == 0 && _lastDistance + 20 < distance))
+ _flag10E = 1;
+ if (distance < _lastDistance)
+ _lastDistance = distance;
+ if (_currPointIndex == 0 && _stepError == 0) {
+ _flag10E = 1;
+ _moreY = 0;
+ sendMessage(this, 0x1019, 0);
+ sendMessage(_parentScene, 0x2005, 0);
+ }
+ }
+
+}
+
+void Class521::sub45E0A0() {
+ // TODO
+}
+
+int Class521::calcDistance(int16 x1, int16 y1, int16 x2, int16 y2) {
+ int16 deltaX = ABS(x1 - x2);
+ int16 deltaY = ABS(y1 - y2);
+ return sqrt(deltaX * deltaX + deltaY * deltaY);
+}
+
+Class546::Class546(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 0x08C80144, 900, 320, 240), _soundResource(vm),
+ _parentScene(parentScene) {
+
+ setVisible(false);
+ SetMessageHandler(&Class546::handleMessage);
+ setFileHash1();
+}
+
+uint32 Class546::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ sub44D710();
+ break;
+ case 0x4809:
+ sub44D790();
+ break;
+ }
+ return messageResult;
+}
+
+void Class546::sub44D710() {
+ setFileHash(0x08C80144, 0, -1);
+ setVisible(true);
+ SetAnimationCallback3(&Class546::sub44D760);
+ _soundResource.play(calcHash("fxDoorOpen23"));
+}
+
+void Class546::sub44D760() {
+ sendMessage(_parentScene, 0x2033, 0);
+ setFileHash1();
+ setVisible(false);
+}
+
+void Class546::sub44D790() {
+ setFileHash(0x08C80144, -1, -1);
+ setVisible(true);
+ SetAnimationCallback3(&Class546::sub44D7F0);
+ _soundResource.play(calcHash("fxDoorClose23"));
+}
+
+void Class546::sub44D7F0() {
+ sendMessage(_parentScene, 0x2034, 0);
+ setFileHash1();
+}
+
+Class547::Class547(NeverhoodEngine *vm, int16 x, int16 y)
+ : AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
+
+ setDoDeltaX(1);
+ setFileHash(0x1209E09F, 1, -1);
+ _newHashListIndex = 1;
+}
+
+Class548::Class548(NeverhoodEngine *vm, int16 x, int16 y)
+ : AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
+
+ setDoDeltaX(1);
+ _newHashListIndex = 0;
+}
+
+Class518::Class518(NeverhoodEngine *vm, Class521 *class521)
+ : AnimatedSprite(vm, 1100), _class521(class521) {
+
+ SetUpdateHandler(&Class518::update);
+ createSurface1(0x60281C10, 150);
+ setFileHash(0x60281C10, -1, -1);
+ _newHashListIndex = -2;
+}
+
+void Class518::update() {
+ _x = _class521->getX();
+ _y = _class521->getY();
+ AnimatedSprite::update();
+}
+
+Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _class521(NULL), _countdown1(0) {
+
+ setGlobalVar(0x21E60190, 1);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1608::handleMessage44D2A0);
+
+ _class545 = insertSprite<Class545>(this, 1, 1100, 198, 220);
+ _vm->_collisionMan->addSprite(_class545);
+
+ if (which < 0) {
+ if (_vm->gameState().which == 1)
+ which = 1;
+ else {
+ setRectList(0x004B47D0);
+ insertKlayman<KmScene1608>(380, 438);
+ _klayman2 = _klayman;
+ _flag4 = false;
+ _class546 = insertSprite<Class546>(this);
+ _sprite1 = insertStaticSprite(0x7D0404E8, 1100);
+ setMessageList(0x004B46A8);
+ setBackground(0x10080E01);
+ setPalette(0x10080E01);
+ _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
+ SetUpdateHandler(&Scene1608::update44CE90);
+ insertMouse433(0x80E05108);
+ insertStaticSprite(0x4B18F868, 1200);
+ }
+ } else if (which == 0) {
+ _vm->gameState().which = 0;
+ setRectList(0x004B47D0);
+ insertKlayman<KmScene1608>(0, 438);
+ _klayman2 = _klayman;
+ _flag4 = false;
+ setMessageList(0x004B46B0);
+ setBackground(0x10080E01);
+ setPalette(0x10080E01);
+ _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ insertMouse433(0x80E05108);
+ _sprite1 = insertStaticSprite(0x7D0404E8, 1100);
+ _class546 = insertSprite<Class546>(this);
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
+ SetUpdateHandler(&Scene1608::update44CE90);
+ sendMessage(_class546, 0x4808, 0);
+ insertStaticSprite(0x4B18F868, 1200);
+ } else if (which == 2) {
+ _vm->gameState().which = 1;
+ _dataResource.load(0x003C0492);
+ _roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
+ setBackground(0x98001604);
+ setPalette(0x98001604);
+ _palette->addPalette("paPodRed", 65, 31, 65);
+ insertMouse433(0x01600988);
+ _sprite2 = insertStaticSprite(0x491F38A8, 1100);
+ _class521 = createSprite<Class521>(this, 375, 227); // Create but don't add to the sprite list yet
+ _class547 = insertSprite<Class547>(375, 227);
+ _class548 = insertSprite<Class548>(375, 227);
+ _class521->setVisible(false);
+ if (getGlobalVar(0xC0418A02)) {
+ insertKlayman<KmScene1608>(373, 220);
+ _klayman->setDoDeltaX(1);
+ } else {
+ insertKlayman<KmScene1608>(283, 220);
+ }
+ _klayman2 = _klayman;
+ setMessageList(0x004B47A8);
+ SetMessageHandler(&Scene1608::handleMessage44D3C0);
+ SetUpdateHandler(&Scene1608::update44CED0);
+ // NOTE: Setting the point array was handled by messages 0x2000 (array) and 0x2001 (count) in the original
+ _class521->setPathPoints(_roomPathPoints);
+ sendMessage(_class521, 0x2002, _roomPathPoints->size() - 1);
+ _sprite3 = insertStaticSprite(0xB47026B0, 1100);
+ _rect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _rect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _rect2 = _rect1;
+ _rect2.y2 = 215;
+ _klayman->setClipRect(_rect1);
+ _class521->setClipRect(_rect1);
+ _class547->setClipRect(_rect1);
+ _class548->setClipRect(_rect1);
+ _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ insertSprite<Class518>(_class521)->setClipRect(_rect1);
+ _flag4 = false;
+ _flag2 = false;
+ _flag1 = 0;
+ setRectList(0x004B4810);
+ }
+
+ // NOTE: Not in the else because 'which' is set to 1 in the true branch
+ if (which == 1) {
+ _vm->gameState().which = 1;
+ _dataResource.load(0x003C0492);
+ _roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
+ setBackground(0x98001604);
+ setPalette(0x98001604);
+ _palette->addPalette("paPodRed", 65, 31, 65);
+ insertMouse433(0x01600988);
+ _class521 = insertSprite<Class521>(this, 375, 227);
+ _class547 = insertSprite<Class547>(375, 227);
+ _class548 = insertSprite<Class548>(375, 227);
+ _sprite2 = insertStaticSprite(0x491F38A8, 1100);
+ _klayman2 = createSprite<KmScene1608>(this, 439, 220); // Special Klayman handling...
+ sendMessage(_klayman2, 0x2032, 1);
+ _klayman2->setDoDeltaX(1);
+ SetMessageHandler(&Scene1608::handleMessage44D470);
+ SetUpdateHandler(&Scene1608::update44D1E0);
+ _class547->setVisible(false);
+ _class548->setVisible(false);
+ // NOTE: Setting the point array was handled by messages 0x2000 (array) and 0x2001 (count) in the original
+ _class521->setPathPoints(_roomPathPoints);
+ sendMessage(_class521, 0x2002, 0);
+ sendMessage(_class521, 0x2008, 90);
+ _sprite3 = insertStaticSprite(0xB47026B0, 1100);
+ _rect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _rect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _rect2 = _rect1;
+ _rect2.y2 = 215;
+ _klayman2->setClipRect(_rect1);
+ _class521->setClipRect(_rect1);
+ _class547->setClipRect(_rect1);
+ _class548->setClipRect(_rect1);
+ _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
+ // ... _vm->_collisionMan->addSprite(_asTape);
+ insertSprite<Class518>(_class521)->setClipRect(_rect1);
+ _flag4 = true;
+ _flag2 = true;
+ _flag1 = 0;
+ }
+
+ _palette->addPalette("paKlayRed", 0, 64, 0);
+
+}
+
+Scene1608::~Scene1608() {
+ setGlobalVar(0xC0418A02, _klayman2->isDoDeltaX() ? 1 : 0);
+ // Weird
+ if (_flag4) {
+ delete _klayman2;
+ } else {
+ delete _class521;
+ }
+}
+
+void Scene1608::update44CE90() {
+ Scene::update();
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ leaveScene(0);
+ }
+}
+
+void Scene1608::update44CED0() {
+ Scene::update();
+ if (_flag1 == 1) {
+ removeSurface(_klayman->getSurface());
+ removeEntity(_klayman);
+ addSprite(_class521);
+ _flag4 = true;
+ clearRectList();
+ SetUpdateHandler(&Scene1608::update44CFE0);
+ SetMessageHandler(&Scene1608::handleMessage44D510);
+ _class547->setVisible(false);
+ _class548->setVisible(false);
+ _class521->setVisible(true);
+ sendMessage(_class521, 0x2009, 0);
+ _class521->handleUpdate();
+ _klayman = NULL;
+ _flag1 = 0;
+ }
+ if (_klayman2->getX() <= 375) {
+ _klayman2->setClipRect(_rect1);
+ } else {
+ _klayman2->setClipRect(_rect2);
+ }
+}
+
+void Scene1608::update44CFE0() {
+ Scene::update();
+ if (_mouseClicked) {
+ if (_mouseClickPos.x <= 329 && _class521->getX() == 375 && _class521->getY() == 227) {
+ sendMessage(_class521, 0x200A, 0);
+ SetUpdateHandler(&Scene1608::update44D0C0);
+ } else {
+ sendPointMessage(_class521, 0x2004, _mouseClickPos);
+ SetMessageHandler(&Scene1608::handleMessage44D470);
+ SetUpdateHandler(&Scene1608::update44D1E0);
+ }
+ _mouseClicked = false;
+ }
+ if (_klayman2->getX() <= 375) {
+ _klayman2->setClipRect(_rect1);
+ } else {
+ _klayman2->setClipRect(_rect2);
+ }
+}
+
+void Scene1608::update44D0C0() {
+ Scene::update();
+ if (_flag1 == 2) {
+ _klayman = _klayman2;
+ removeSurface(_class521->getSurface());
+ removeEntity(_class521);
+ addSprite(_klayman);
+ _flag4 = false;
+ SetMessageHandler(&Scene1608::handleMessage44D3C0);
+ SetUpdateHandler(&Scene1608::update44CED0);
+ setRectList(0x004B4810);
+ _class547->setVisible(true);
+ _class548->setVisible(true);
+ _class521->setVisible(false);
+ setMessageList(0x004B4748);
+ runMessageList();
+ _klayman->handleUpdate();
+ _flag1 = 0;
+ }
+ if (_klayman2->getX() <= 375) {
+ _klayman2->setClipRect(_rect1);
+ } else {
+ _klayman2->setClipRect(_rect2);
+ }
+}
+
+void Scene1608::update44D1E0() {
+ Scene::update();
+ if (_mouseClicked) {
+ sendPointMessage(_class521, 0x2004, _mouseClickPos);
+ _mouseClicked = false;
+ }
+ if (_class521->getX() < 300) {
+ if (_flag2) {
+ _flag2 = false;
+ _class521->setClipRect(_rect1);
+ if (!_class521->isDoDeltaX())
+ sendMessage(_class521, 0x200E, 0);
+ }
+ } else if (!_flag2) {
+ _flag2 = true;
+ _class521->setClipRect(_rect3);
+ }
+}
+
+uint32 Scene1608::handleMessage44D2A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x20250B1A) {
+ clearRectList();
+ _klayman->setVisible(false);
+ showMouse(false);
+ _sprite1->setVisible(false);
+ sendMessage(_class546, 0x4809, 0);
+ _countdown1 = 28;
+ }
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ sendEntityMessage(_klayman2, 0x1014, _asTape);
+ setMessageList(0x004B4770);
+ } else if (sender == _class545) {
+ setMessageList(0x004B46C8);
+ }
+ break;
+ }
+ return 0;
+}
+
+uint32 Scene1608::handleMessage44D3C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x60842040) {
+ _flag1 = true;
+ }
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ case 0x4826:
+ if (sender == _class545) {
+ sendEntityMessage(_klayman2, 0x1014, _class545);
+ setMessageList(0x004B4760);
+ }
+ break;
+ }
+ return 0;
+}
+
+uint32 Scene1608::handleMessage44D470(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2005:
+ leaveScene(1);
+ break;
+ case 0x2006:
+ SetMessageHandler(&Scene1608::handleMessage44D510);
+ SetUpdateHandler(&Scene1608::update44CFE0);
+ sendMessage(_class521, 0x200F, 1);
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
+uint32 Scene1608::handleMessage44D510(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x200A:
+ _flag1 = 2;
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
new file mode 100644
index 0000000..9af1a19
--- /dev/null
+++ b/engines/neverhood/module1600.h
@@ -0,0 +1,176 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1600_H
+#define NEVERHOOD_MODULE1600_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module1600
+
+class Module1600 : public Module {
+public:
+ Module1600(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1600();
+protected:
+ void createScene(int sceneNum, int which);
+ void updateScene();
+};
+
+class Class521 : public AnimatedSprite {
+public:
+ Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
+ ~Class521();
+ void setPathPoints(NPointArray *pathPoints);
+protected:
+ Scene *_parentScene;
+ NPointArray *_pathPoints;
+ NRectArray *_rectList;
+ int _newMoveDirection;
+ int _currMoveDirection;
+ int _exitDirection;
+ int _currPointIndex;
+ NPoint _againDestPt;
+ int _againDestPtFlag;
+ int _steps;
+ int _stepError;
+ int _idleCounter;
+ int _idleCounterMax;
+ int _lastDistance;
+ int _field100;
+ int _againDestPointFlag;
+ int _flag10E;
+ int _moreY;
+ int _flag10F;
+ int _flag113;
+ int _flag114;
+ int _flag11A;
+ int _newDeltaXType;
+ int _field11E;
+ int _againDestPointIndex;
+ int _value112;
+ int _anotherY;
+ int16 _someX, _someY;
+ NPoint pathPoint(uint index) { return (*_pathPoints)[index]; }
+ void update();
+ void update45C790();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage45CC30(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage45CCA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub45CD00();
+ void sub45CDC0();
+ void sub45CE10();
+ void sub45CF80();
+ void sub45CFB0();
+ void sub45CFE0();
+ void sub45D040();
+ void sub45D050();
+ void sub45D0A0();
+ void sub45D0E0();
+ void sub45D100();
+ void sub45D180();
+ void moveToNextPoint();
+ void sub45D350();
+ void sub45D390();
+ void moveToPrevPoint();
+ void sub45D580();
+ void sub45D5D0();
+ void sub45D620();
+ void suMoveToNextPoint();
+ void suMoveToPrevPoint();
+ void sub45E0A0();
+ int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2);
+};
+
+class Class546 : public AnimatedSprite {
+public:
+ Class546(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub44D710();
+ void sub44D760();
+ void sub44D790();
+ void sub44D7F0();
+};
+
+class Class547 : public AnimatedSprite {
+public:
+ Class547(NeverhoodEngine *vm, int16 x, int16 y);
+};
+
+class Class548 : public AnimatedSprite {
+public:
+ Class548(NeverhoodEngine *vm, int16 x, int16 y);
+};
+
+class Class518 : public AnimatedSprite {
+public:
+ Class518(NeverhoodEngine *vm, Class521 *class521);
+protected:
+ Class521 *_class521;
+ void update();
+};
+
+class Scene1608 : public Scene {
+public:
+ Scene1608(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene1608();
+protected:
+ Class521 *_class521;
+ Sprite *_class545;
+ Sprite *_class546;
+ Sprite *_class547;
+ Sprite *_class548;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_asTape;
+ Klayman *_klayman2;
+ NRect _rect1;
+ NRect _rect2;
+ NRect _rect3;
+ int _flag1;
+ bool _flag2;
+ bool _flag3;
+ bool _flag4;
+ int _countdown1;
+ NPointArray *_roomPathPoints;
+ void update44CE90();
+ void update44CED0();
+ void update44CFE0();
+ void update44D0C0();
+ void update44D1E0();
+ uint32 handleMessage44D2A0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage44D3C0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage44D470(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage44D510(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1600_H */
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 441ee1e..9a588f2 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -274,6 +274,10 @@ void Scene::update() {
}
+void Scene::leaveScene(uint32 result) {
+ sendMessage(_parentModule, 0x1009, result);
+}
+
uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0: // mouse moved
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 09d34b5..e962266 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -64,6 +64,7 @@ public:
void changeMouseCursor(uint32 fileHash);
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
+ void leaveScene(uint32 result);
// Some crazy templated functions to make the logic code smaller/simpler (imo!)
// insertKlayman
template<class T>
@@ -123,6 +124,35 @@ public:
T* insertSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) {
return (T*)addSprite(new T(_vm, arg1, arg2, arg3, arg4, arg5, arg6));
}
+ // createSprite
+ template<class T>
+ T* createSprite() {
+ return new T(_vm);
+ }
+ template<class T, class Arg1>
+ T* createSprite(Arg1 arg1) {
+ return new T(_vm, arg1);
+ }
+ template<class T, class Arg1, class Arg2>
+ T* createSprite(Arg1 arg1, Arg2 arg2) {
+ return new T(_vm, arg1, arg2);
+ }
+ template<class T, class Arg1, class Arg2, class Arg3>
+ T* createSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3) {
+ return new T(_vm, arg1, arg2, arg3);
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4>
+ T* createSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) {
+ return new T(_vm, arg1, arg2, arg3, arg4);
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
+ T* createSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+ return new T(_vm, arg1, arg2, arg3, arg4, arg5);
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
+ T* createSprite(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) {
+ return new T(_vm, arg1, arg2, arg3, arg4, arg5, arg6);
+ }
protected:
Module *_parentModule;
Common::Array<Entity*> _entities;
Commit: af2820fd23d152c7fddf77872198a07df680b46d
https://github.com/scummvm/scummvm/commit/af2820fd23d152c7fddf77872198a07df680b46d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add leaveModule and leaveScene
(instead of using sendMessage directly)
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module3000.cpp
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 14bc4a4..26b68e1 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -89,7 +89,7 @@ void Module1000::updateScene() {
break;
case 1:
if (_moduleResult == 1)
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
else if (_moduleResult == 2)
createScene(3, 0);
else
@@ -408,12 +408,12 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
case 0x000D:
if (param.asInteger() == 0x188B2105) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
messageResult = 1;
}
break;
@@ -1439,7 +1439,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
setGlobalVar(0x8306F218, 1);
setGlobalVar(0x1B144052, 3);
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
}
break;
case 0x000D:
@@ -1447,7 +1447,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asInteger() == 0x48848178) {
setGlobalVar(0x8306F218, 1);
setGlobalVar(0x1B144052, 3);
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
}
messageResult = 1;
break;
@@ -1577,7 +1577,7 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
}
@@ -1745,7 +1745,7 @@ uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
}
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 4bafbd9..740e487 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -168,7 +168,7 @@ void Module1100::updateScene() {
}
break;
case 6:
- sendMessage(_parentModule, 0x1009, 1);
+ leaveModule(1);
break;
case 7:
createScene(2, 2);
@@ -177,7 +177,7 @@ void Module1100::updateScene() {
if (_moduleResult == 0) {
createScene(0, 0);
} else if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 1002:
@@ -651,7 +651,7 @@ void Scene1105::update() {
createObjects();
}
if (_flag4 && !_soundResource2.isPlaying()) {
- sendMessage(_parentModule, 0x1009, _flag5);
+ leaveScene(_flag5);
}
if (_flag3 && !_soundResource3.isPlaying()) {
sendMessage(_asTeddyBear, 0x2002, 0);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 8853dd0..83a9b5c 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -77,10 +77,10 @@ void Module1200::updateScene() {
if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
createScene(2, -1);
} else {
- sendMessage(_parentModule, 0x1009, 1);
+ leaveModule(1);
}
} else {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 1:
@@ -1157,9 +1157,8 @@ Scene1202::~Scene1202() {
void Scene1202::update() {
Scene::update();
if (_soundFlag) {
- if (!_soundResource4.isPlaying()) {
- sendMessage(_parentModule, 0x1009, 0);
- }
+ if (!_soundResource4.isPlaying())
+ leaveScene(0);
} else if (_counter == 0 && isSolved()) {
SetMessageHandler(&Scene1202::handleMessage453D90);
setGlobalVar(0x000CF819, 1);
@@ -1191,7 +1190,7 @@ uint32 Scene1202::handleMessage453C10(int messageNum, const MessageParam ¶m,
case 0x0001:
// TODO: Debug/Cheat stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_soundFlag) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
case 0x000D:
@@ -1215,7 +1214,7 @@ uint32 Scene1202::handleMessage453D90(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 1f3716b..75a185b 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -214,7 +214,7 @@ void Module1300::updateScene() {
} else if (_moduleResult == 3) {
createScene(2, 0);
} else if (_moduleResult == 0) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
} else if (_moduleResult == 1) {
createScene(10, -1);
}
@@ -522,7 +522,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2002:
if (_klayman->getX() > 545) {
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
}
break;
case 0x2032:
@@ -1036,7 +1036,7 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
SetMessageHandler(&Scene1306::handleMessage);
break;
case 0x4809:
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
break;
case 0x482A:
setSurfacePriority(_asElevator->getSurface(), 1100);
@@ -1328,7 +1328,7 @@ void Scene1307::update() {
_palette->startFadeToWhite(40);
}
if (_doLeaveScene && !_soundResource.isPlaying()) {
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
setGlobalVar(0x80455A41, 1);
}
}
@@ -1368,7 +1368,7 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
} else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
}
break;
@@ -1724,7 +1724,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
_klayman->setVisible(true);
break;
case 0x2001:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
break;
case 0x2003:
_class601_1->setVisible(false);
@@ -1868,7 +1868,7 @@ uint32 Scene1317::hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Ent
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
break;
}
return messageResult;
@@ -1878,7 +1878,7 @@ uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
break;
}
return messageResult;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index b135458..0045064 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -94,7 +94,7 @@ void Module1400::updateScene() {
} else if (_moduleResult == 2) {
createScene(3, 0);
} else {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 1:
@@ -755,9 +755,9 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x1019:
if (param.asInteger() != 0) {
- sendMessage(_parentModule, 0x1009, 2);
+ leaveScene(2);
} else {
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
}
break;
case 0x480B:
@@ -968,7 +968,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x00F43389) {
if (getGlobalVar(0x70A1189C)) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
} else {
clearRectList();
_klayman->setVisible(false);
@@ -980,9 +980,9 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x1019:
if (param.asInteger()) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
} else {
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
}
break;
case 0x2000:
@@ -992,7 +992,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2001:
sub428230();
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
break;
case 0x2003:
sub428230();
@@ -1277,7 +1277,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1407::update() {
Scene::update();
if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0)) {
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
} else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0)) {
_ssResetButton->setVisible(false);
}
@@ -1291,7 +1291,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO: Debug/Cheat stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
// Exit scene
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
} else if (param.asPoint().x >= 75 && param.asPoint().x <= 104 &&
param.asPoint().y >= 62 && param.asPoint().y <= 90) {
// The reset button was clicked
@@ -1391,7 +1391,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x1019:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
break;
case 0x1022:
if (sender == _class489) {
@@ -1515,7 +1515,7 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x1019:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
break;
case 0x4826:
if (sender == _class489) {
@@ -1708,7 +1708,7 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x0001:
// TODO: Debug/Cheat stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
case 0x000D:
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 54a4685..76afb95 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -67,14 +67,14 @@ void Module1500::updateScene() {
if (_flag) {
createScene(2, -1);
} else {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 3:
createScene(0, -1);
break;
default:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
break;
}
}
@@ -119,7 +119,7 @@ void Scene1501::update() {
_countdown1--;
if (_countdown1 == 0) {
_vm->_screen->clear();
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
} else if ((_countdown2 != 0 && (--_countdown2 == 0)) /*|| !_soundResource.isPlaying()*/) {
_countdown1 = 12;
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 8140608..4426a7e 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -107,7 +107,7 @@ void Module1700::updateScene() {
createScene(4, 0);
break;
case 4:
- sendMessage(_parentModule, 0x1009, 1);
+ leaveModule(1);
break;
}
}
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index d5aa789..cce72b0 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -134,7 +134,7 @@ void Module1800::updateScene() {
break;
case 5:
if (_moduleResult == 0) {
- sendMessage(_parentModule, 0x1009, 2);
+ leaveModule(2);
} else if (_moduleResult == 1) {
createScene(4, 3);
}
@@ -143,14 +143,14 @@ void Module1800::updateScene() {
createScene(8, -1);
break;
case 7:
- sendMessage(_parentModule, 0x1009, 3);
+ leaveModule(3);
break;
case 8:
- sendMessage(_parentModule, 0x1009, 1);
+ leaveModule(1);
// TODO GameState stuff
break;
case 9:
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
break;
}
} else {
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 22ee648..9c0843c 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -68,7 +68,7 @@ void Module2000::updateScene() {
switch (_vm->gameState().sceneNum) {
case 0:
if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
} else {
createScene(1, 0);
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index c37cdac..3751a6f 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -229,7 +229,7 @@ void Module2200::updateScene() {
} else if (_moduleResult == 2) {
createScene(1, 0);
} else {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 1:
@@ -929,7 +929,7 @@ void Scene2202::update() {
Scene::update();
if (_leaveScene && !_soundResource2.isPlaying()) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
if (_isSolved && !_soundResource1.isPlaying()) {
@@ -966,7 +966,7 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x0001:
// TODO Debug stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
case 0x000D:
@@ -2356,7 +2356,7 @@ uint32 Scene2208::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 40 || param.asPoint().x >= 600) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index dd4144f..1513f7b 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -107,7 +107,7 @@ void Module2300::updateScene() {
if (_moduleResult == 1) {
createScene(1, 4);
} else {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 1:
@@ -120,21 +120,21 @@ void Module2300::updateScene() {
} else if (_moduleResult == 4) {
createScene(3, 1);
} else if (_moduleResult == 5) {
- sendMessage(_parentModule, 0x1009, 3);
+ leaveModule(3);
} else {
- sendMessage(_parentModule, 0x1009, 4);
+ leaveModule(4);
}
break;
case 2:
if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 3);
+ leaveModule(3);
} else {
createScene(1, 5);
}
break;
case 3:
if (_moduleResult == 1) {
- sendMessage(_parentModule, 0x1009, 2);
+ leaveModule(2);
} else {
createScene(1, 1);
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index e7714c0..f645fb4 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -169,7 +169,7 @@ void Module3000::updateScene() {
if (_moduleResult == 0)
createScene(9, -1);
else if (_moduleResult == 1)
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
} else {
if (_moduleResult == 0)
if (_navigationAreaType == 2)
@@ -177,7 +177,7 @@ void Module3000::updateScene() {
else
createScene(1001, -1);
else if (_moduleResult == 1)
- sendMessage(_parentModule, 0x1009, 0);
+ leaveModule(0);
}
break;
case 2:
@@ -205,7 +205,7 @@ void Module3000::updateScene() {
break;
case 4:
if (_moduleResult == 0)
- sendMessage(_parentModule, 0x1009, 1);
+ leaveModule(1);
else if (_moduleResult == 1)
createScene(7, -1);
else if (_moduleResult == 2)
@@ -248,7 +248,7 @@ void Module3000::updateScene() {
createScene(3, 3);
break;
case 11:
- sendMessage(_parentModule, 0x1009, 3);
+ leaveModule(3);
break;
case 12:
createScene(1, 0);
@@ -931,7 +931,7 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO: Debug stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !getGlobalVar(0x000809C2)) {
setGlobalVar(0x20580A86, 0);
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
case 0x000D:
@@ -1014,7 +1014,7 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene3009::playExtVideo() {
setGlobalVar(0x20580A86, _cannonLocation);
setGlobalVar(0xF0402B0A, kScene3009CannonLocationFileHashes[_cannonLocation]);
- sendMessage(_parentModule, 0x1009, 1);
+ leaveScene(1);
}
bool Scene3009::isSymbolsPart1Solved() {
@@ -1332,7 +1332,7 @@ void Scene3010::update() {
_checkUnlocked = false;
}
if (_countdown != 0 && (--_countdown == 0)) {
- sendMessage(_parentModule, 0x1009, _doorUnlocked ? 1 : 0);
+ leaveScene(_doorUnlocked ? 1 : 0);
}
}
@@ -1608,7 +1608,7 @@ uint32 Scene3011::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- sendMessage(_parentModule, 0x1009, 0);
+ leaveScene(0);
}
break;
case 0x2000:
Commit: 2275141d56a66b8a6262fb2c160cce34c46af119
https://github.com/scummvm/scummvm/commit/2275141d56a66b8a6262fb2c160cce34c46af119
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add Scene1609
- Use Scene::insertSprite<> in all scenes
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module1700.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 854a5cc..960e732 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,7 +276,7 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 8;
_vm->gameState().which = 1;
createModule(1600, -1);
#endif
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 83a9b5c..ffb4f20 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -766,7 +766,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x9A2C0409);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 3, 1100, 243, 340, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 3, 1100, 243, 340, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
tempSprite = insertStaticSprite(0x03C82530, 100);
@@ -781,7 +781,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x04063110, 500);
topY4 = tempSprite->getY() + 1;
- _class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1));
+ _class466 = insertSprite<Class466>(getGlobalVar(0x000CF819) && which != 1);
_class466->setClipRect(0, topY4, 640, 480);
insertStaticSprite(0x400B04B0, 1200);
@@ -792,7 +792,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0xA29223FA, 1200);
x2 = tempSprite->getX() + tempSprite->getDrawRect().width;
- class464 = addSprite(new Class464(_vm));
+ class464 = insertSprite<Class464>();
debug("Scene1201: which = %d", which);
@@ -833,20 +833,18 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
setBackground(0x40206EC5);
setPalette(0x40206EC5);
- _asRightDoor = addSprite(new AsScene1201RightDoor(_vm, _klayman, which == 2));
+ _asRightDoor = insertSprite<AsScene1201RightDoor>(_klayman, which == 2);
}
if (getGlobalVar(0x000CF819)) {
insertStaticSprite(0x10002ED8, 500);
if (!getGlobalVar(0x0A18CA33)) {
- AsScene1201TntMan *asTntMan;
- asTntMan = new AsScene1201TntMan(_vm, this, _class466, which == 1);
- asTntMan->setClipRect(x1, 0, x2, 480);
- _vm->_collisionMan->addSprite(asTntMan);
- _asTntMan = addSprite(asTntMan);
- tempSprite = addSprite(new Class465(_vm, _asTntMan));
+ _asTntMan = insertSprite<AsScene1201TntMan>(this, _class466, which == 1);
+ _asTntMan->setClipRect(x1, 0, x2, 480);
+ _asTntMan->setRepl(64, 0);
+ _vm->_collisionMan->addSprite(_asTntMan);
+ tempSprite = insertSprite<Class465>(_asTntMan);
tempSprite->setClipRect(x1, 0, x2, 480);
- asTntMan->setRepl(64, 0);
}
uint32 tntIndex = 1;
@@ -859,7 +857,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
clipY2 = topY2;
else
clipY2 = topY3;
- addSprite(new SsScene1201Tnt(_vm, tntIndex, getSubVar(0x10055D14, tntIndex), clipY2));
+ insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(0x10055D14, tntIndex), clipY2);
elemIndex = getSubVar(0x10055D14, tntIndex + 1);
if (kScene1201PointArray[elemIndex].y < 175)
clipY2 = topY1;
@@ -867,7 +865,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
clipY2 = topY2;
else
clipY2 = topY3;
- addSprite(new SsScene1201Tnt(_vm, tntIndex + 1, getSubVar(0x10055D14, tntIndex + 1), clipY2));
+ insertSprite<SsScene1201Tnt>(tntIndex + 1, getSubVar(0x10055D14, tntIndex + 1), clipY2);
tntIndex += 3;
}
@@ -895,7 +893,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
else
clipY2 = topY3;
}
- addSprite(new SsScene1201Tnt(_vm, tntIndex, getSubVar(0x10055D14, tntIndex), clipY2));
+ insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(0x10055D14, tntIndex), clipY2);
tntIndex++;
}
@@ -909,7 +907,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x63D400BC, 900);
- _asLeftDoor = addSprite(new AsScene1201LeftDoor(_vm, _klayman));
+ _asLeftDoor = insertSprite<AsScene1201LeftDoor>(_klayman);
_asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
@@ -919,12 +917,12 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asMatch = NULL;
if (getGlobalVar(0x0112090A) < 3) {
- _asMatch = addSprite(new AsScene1201Match(_vm, this));
+ _asMatch = insertSprite<AsScene1201Match>(this);
_vm->_collisionMan->addSprite(_asMatch);
}
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- _asCreature = addSprite(new AsScene1201Creature(_vm, this, _klayman));
+ _asCreature = insertSprite<AsScene1201Creature>(this, _klayman);
_asCreature->setClipRect(x1, 0, x2, 480);
}
@@ -1131,7 +1129,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x10ED160A, 20, 620);
for (int i = 0; i < 18; i++) {
- _asTntItems[i] = addSprite(new AsScene1202TntItem(_vm, this, i));
+ _asTntItems[i] = insertSprite<AsScene1202TntItem>(this, i);
_vm->_collisionMan->addSprite(_asTntItems[i]);
}
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index a34bd95..dc8e903 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -179,7 +179,7 @@ protected:
// TODO ResourceTable _resourceTable1;
// TODO ResourceTable _resourceTable2;
Sprite *_asMatch;
- Sprite *_asTntMan;
+ AsScene1201TntMan *_asTntMan;
Sprite *_asCreature;
Sprite *_class466;
Sprite *_asLeftDoor;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 75a185b..26b61f0 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -424,20 +424,20 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x420643C4);
insertMouse433(0x643C0428);
- _class595 = addSprite(new Class595(_vm, this));
+ _class595 = insertSprite<Class595>(this);
_sprite1 = insertStaticSprite(0x942FC224, 300);
_sprite2 = insertStaticSprite(0x70430830, 1200);
_sprite2->setVisible(false);
_sprite3 = insertStaticSprite(0x16E01E20, 1100);
- _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getDrawRect().y, false));
- _asRing2 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x13206309)));
- _asRing3 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false));
- _asRing4 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x80101B1E)));
- _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false));
+ _asRing1 = insertSprite<AsScene1002Ring>(this, false, 218, 122, _class595->getDrawRect().y, false);
+ _asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x13206309));
+ _asRing3 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false);
+ _asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x80101B1E));
+ _asRing5 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false);
- _asBridge = addSprite(new AsScene1302Bridge(_vm, this));
- _ssFence = addSprite(new SsScene1302Fence(_vm));
+ _asBridge = insertSprite<AsScene1302Bridge>(this);
+ _ssFence = insertSprite<SsScene1302Fence>();
_ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
@@ -450,7 +450,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480);
- _asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, true));
+ _asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, true);
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
@@ -643,7 +643,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x81A9801D);
if (!getGlobalVar(0xAC00C0D0)) {
- _asBalloon = addSprite(new AsScene1303Balloon(_vm, this));
+ _asBalloon = insertSprite<AsScene1303Balloon>(this);
_vm->_collisionMan->addSprite(_asBalloon);
}
@@ -711,15 +711,15 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xC021006A);
if (getGlobalVar(0xAC00C0D0)) {
- _class545 = addSprite(new Class545(_vm, this, 0, 1100, 278, 347));
+ _class545 = insertSprite<Class545>(this, 0, 1100, 278, 347);
_vm->_collisionMan->addSprite(_class545);
} else {
- _class545 = addSprite(new AnimatedSprite(_vm, 0x80106018, 100, 279, 48));
+ _class545 = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
// TODO _class545->setUpdateDeltaXY();
}
if (!getGlobalVar(0x31C63C51)) {
- _class544 = addSprite(new Class544(_vm, this, 1100, 278, 347));
+ _class544 = insertSprite<Class544>(this, 1100, 278, 347);
_vm->_collisionMan->addSprite(_class544);
} else {
_class544 = NULL;
@@ -893,20 +893,19 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0311005B);
if (!getGlobalVar(0x13382860)) {
- _class545 = addSprite(new Class545(_vm, this, 2, 1100, 435, 445));
+ _class545 = insertSprite<Class545>(this, 2, 1100, 435, 445);
_vm->_collisionMan->addSprite(_class545);
}
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x404A36A0, 100, 0x440C1000));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 19, 1100, 359, 445, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 19, 1100, 359, 445, 0x9148A011);
- _asElevatorDoor = new AnimatedSprite(_vm, 0x043B0270, 90, 320, 240);
+ _asElevatorDoor = insertSprite<AnimatedSprite>(0x043B0270, 90, 320, 240);
_asElevatorDoor->setFileHash(0x043B0270, 6, -1);
_asElevatorDoor->setNewHashListIndex(6);
- addSprite(_asElevatorDoor);
- _asElevator = addSprite(new AsScene1306Elevator(_vm, this, _asElevatorDoor));
+ _asElevator = insertSprite<AsScene1306Elevator>(this, _asElevatorDoor);
_sprite1 = insertStaticSprite(0x036A1EE0, 80);
@@ -1309,7 +1308,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(0x08D0AB11, keyIndex)) {
- _asKeys[keyIndex] = addSprite(new AsScene1307Key(_vm, this, keyIndex, _clipRects));
+ _asKeys[keyIndex] = insertSprite<AsScene1307Key>(this, keyIndex, _clipRects);
_vm->_collisionMan->addSprite(_asKeys[keyIndex]);
} else {
_asKeys[keyIndex] = NULL;
@@ -1600,21 +1599,21 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x41024202);
insertMouse433(0x24206418);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 17, 1100, 502, 445, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 17, 1100, 502, 445, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (getGlobalVar(0x01023818)) {
- addSprite(new Class513(_vm));
- addSprite(new AnimatedSprite(_vm, 0x461A1490, 200, 235, 429));
+ insertSprite<Class513>();
+ insertSprite<AnimatedSprite>(0x461A1490, 200, 235, 429);
}
_sprite1 = insertStaticSprite(0x0A042060, 1100);
- _class549 = addSprite(new Class549(_vm, this));
- _class593 = addSprite(new Class593(_vm, this));
+ _class549 = insertSprite<Class549>(this);
+ _class593 = insertSprite<Class593>(this);
- _class601_1 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 1)], 0));
- _class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1));
- _class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2));
+ _class601_1 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 1)], 0);
+ _class601_2 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1);
+ _class601_2 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2);
_sprite2 = insertStaticSprite(0x40043120, 995);
_sprite3 = insertStaticSprite(0x43003100, 995);
@@ -1644,7 +1643,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
- _sprite5 = addSprite(new Class592(_vm, this));
+ _sprite5 = insertSprite<Class592>(this);
_sprite4 = insertStaticSprite(0x0101A624, 1100);
_sprite4->setVisible(false);
} else {
@@ -1672,8 +1671,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 4) {
- _class489 = new Class489(_vm, this, _klayman, 0);
- addSprite(_class489);
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
_class489->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_class489->setRepl(64, 0);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 0045064..37fb354 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -667,17 +667,17 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x08221FA5);
insertMouse433(0x21FA108A);
- // TODO _class427 = addSprite(new Class427(_vm, this, 0x980F3124, 0x12192892, 100, 0));
- _class525 = addSprite(new Class525(_vm));
+ // TODO _class427 = insertSprite<Class427>(this, 0x980F3124, 0x12192892, 100, 0);
+ _class525 = insertSprite<Class525>();
if (!getGlobalVar(0x01023818)) {
- _class526 = addSprite(new Class526(_vm, _class525));
- _class527 = addSprite(new Class527(_vm, _class525));
+ _class526 = insertSprite<Class526>(_class525);
+ _class527 = insertSprite<Class527>(_class525);
}
_sprite3 = insertStaticSprite(0xA82BA811, 1100);
insertStaticSprite(0x0A116C60, 1100);
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0xB84B1100, 100, 0));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0xB84B1100, 100, 0);
_sprite1 = insertStaticSprite(0x38EA100C, 1005);
_sprite2 = insertStaticSprite(0x98D0223C, 1200);
_sprite2->setVisible(false);
@@ -701,7 +701,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 2) {
- _class489 = addSprite(new Class489(_vm, this, _klayman, _class525));
+ _class489 = insertSprite<Class489>(this, _klayman, _class525);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 6) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -719,11 +719,11 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480);
- if (which == 0 && _class489 && _class489->hasMessageHandler()) {
+ if (which == 0 && _class489) {
sendMessage(_class489, 0x482B, 0);
}
- _class528 = addSprite(new Class528(_vm, _klayman, which == 1));
+ _class528 = insertSprite<Class528>(_klayman, which == 1);
}
@@ -746,7 +746,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x01C66840) {
- if (_class528->hasMessageHandler() && sendMessage(_class528, 0x2001, 0) != 0) {
+ if (sendMessage(_class528, 0x2001, 0) != 0) {
setMessageList(0x004B6690);
} else {
setMessageList(0x004B66B0);
@@ -882,9 +882,9 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(0x91D3A391, 0, 64, 0);
insertMouse433(0x482F4239);
- _class454_1 = addSprite(new Class454(_vm, 0x15402D64, 1100));
- _class454_2 = addSprite(new Class454(_vm, 0x10A02120, 1100));
- _class454_3 = addSprite(new Class454(_vm, 0x60882BE0, 1100));
+ _class454_1 = insertSprite<Class454>(0x15402D64, 1100);
+ _class454_2 = insertSprite<Class454>(0x10A02120, 1100);
+ _class454_3 = insertSprite<Class454>(0x60882BE0, 1100);
if (getGlobalVar(0x70A1189C))
setRectList(0x004B0C48);
@@ -895,7 +895,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
if (!getGlobalVar(0x70A1189C)) {
- _class482 = addSprite(new Class482(_vm, this, 0));
+ _class482 = insertSprite<Class482>(this, 0);
}
} else if (which == 1) {
insertKlayman<KmScene1402>(42, 391);
@@ -905,18 +905,18 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
if (getGlobalVar(0x70A1189C)) {
- _class482 = addSprite(new Class482(_vm, this, 1));
+ _class482 = insertSprite<Class482>(this, 1);
clearRectList();
showMouse(false);
sub428220();
} else {
- _class482 = addSprite(new Class482(_vm, this, 0));
+ _class482 = insertSprite<Class482>(this, 0);
}
} else {
insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(0x70A1189C)) {
- _class482 = addSprite(new Class482(_vm, this, 2));
+ _class482 = insertSprite<Class482>(this, 2);
sub428220();
}
}
@@ -926,7 +926,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x4A105B3) == 1) {
- _class489 = addSprite(new Class489(_vm, this, _klayman, 0));
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x4A10F33) == 4) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -1268,7 +1268,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x00442225);
insertMouse435(0x4222100C, 20, 620);
- _asMouse = addSprite(new AsScene1407Mouse(_vm, this));
+ _asMouse = insertSprite<AsScene1407Mouse>(this);
_ssResetButton = insertStaticSprite(0x12006600, 100);
_ssResetButton->setVisible(false);
@@ -1340,13 +1340,11 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_class401_3 = insertStaticSprite(0x08742271, 995);
- _asTape1 = new AsScene1201Tape(_vm, this, 12, 1100, 201, 468, 0x9148A011);
- addSprite(_asTape1);
+ _asTape1 = insertSprite<AsScene1201Tape>(this, 12, 1100, 201, 468, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape1);
_asTape1->setRepl(64, 0);
- _asTape2 = new AsScene1201Tape(_vm, this, 16, 1100, 498, 468, 0x9048A093);
- addSprite(_asTape2);
+ _asTape2 = insertSprite<AsScene1201Tape>(this, 16, 1100, 498, 468, 0x9048A093);
_vm->_collisionMan->addSprite(_asTape2);
_asTape2->setRepl(64, 0);
@@ -1360,10 +1358,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setRepl(64, 0);
if (getGlobalVar(0x04A105B3) == 4) {
- Class489 *class489;
- class489 = new Class489(_vm, this, _klayman, 0);
- _class489 = class489;
- addSprite(_class489);
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 4) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -1372,7 +1367,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B1F70);
}
_class489->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
- class489->setRepl(64, 0);
+ _class489->setRepl(64, 0);
}
}
@@ -1454,13 +1449,13 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xB006BAC8);
if (getGlobalVar(0x13382860) == 5) {
- _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
+ _class545 = insertSprite<Class545>(this, 2, 1100, 267, 411);
_vm->_collisionMan->addSprite(_class545);
}
_sprite1 = insertStaticSprite(0x1900A1F8, 1100);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 14, 1100, 281, 411, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 14, 1100, 281, 411, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
@@ -1483,7 +1478,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 3) {
- _class489 = addSprite(new Class489(_vm, this, _klayman, 0));
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 0) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -1673,8 +1668,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
}
for (uint32 index = 0; index < 48; index++) {
- _tiles[index] = new AsScene1405Tile(_vm, this, index);
- addSprite(_tiles[index]);
+ _tiles[index] = insertSprite<AsScene1405Tile>(this, index);
_vm->_collisionMan->addSprite(_tiles[index]);
if (getSubVar(0xCCE0280F, index))
_tilesLeft--;
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 7b4d957..d256b82 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -143,7 +143,7 @@ public:
protected:
bool _flag;
Sprite *_class427;
- Sprite *_class489;
+ Class489 *_class489;
Sprite *_class525;
Sprite *_class526;
Sprite *_class527;
@@ -184,7 +184,7 @@ protected:
Sprite *_class454_2;
Sprite *_class454_3;
Sprite *_class482;
- Sprite *_class489;
+ Class489 *_class489;
bool _flag;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -237,7 +237,7 @@ protected:
Sprite *_class401_3;
AsScene1201Tape *_asTape1;
AsScene1201Tape *_asTape2;
- Sprite *_class489;
+ Class489 *_class489;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -251,7 +251,7 @@ public:
protected:
Sprite *_sprite1;
Sprite *_asTape;
- Sprite *_class489;
+ Class489 *_class489;
Sprite *_class545;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index a23e710..94b836a 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -83,7 +83,7 @@ void Module1600::createScene(int sceneNum, int which) {
_childObject = new Scene1608(_vm, this, which);
break;
case 8:
-//TODO _childObject = new Scene1609(_vm, this, which);
+ _childObject = new Scene1609(_vm, this, which);
break;
case 1001:
if (getGlobalVar(0xA0808898) == 1) {
@@ -1384,4 +1384,109 @@ uint32 Scene1608::handleMessage44D510(int messageNum, const MessageParam ¶m,
return 0;
}
+Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm), _countdown1(1),
+ _index1(0), _index3(0), _flag5(true), _flag6(false) {
+
+ // TODO _vm->gameModule()->initScene3011Vars();
+ _index2 = getGlobalVar(0x2414C2F2);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1609::handleMessage);
+ SetUpdateHandler(&Scene1609::update);
+
+ setBackground(0x92124A14);
+ setPalette(0x92124A14);
+
+ for (int i = 0; i < 12; i++)
+ _asSymbols[i] = insertSprite<AsScene3011Symbol>(i, false);
+
+ _ssButton = insertSprite<SsScene3011Button>(this, true);
+ _vm->_collisionMan->addSprite(_ssButton);
+
+ insertMouse435(0x24A10929, 20, 620);
+
+ _soundResource.load(0x68E25540);
+
+}
+
+void Scene1609::update() {
+ if (!_flag6 && _countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_flag5) {
+ _index1++;
+ if (_index1 >= 12)
+ _index1 = 0;
+ _asSymbols[_index3]->change(_index1 + 12, _index1 == (int)getSubVar(0x04909A50, _index2));
+ _flag5 = false;
+ _countdown1 = 36;
+ } else {
+ _asSymbols[_index3]->hide();
+ _flag5 = true;
+ _countdown1 = 12;
+ }
+ }
+ if (_flag6 && !_soundResource.isPlaying()) {
+ leaveScene(1);
+ }
+ Scene::update();
+}
+
+uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug stuff
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
+ leaveScene(0);
+ break;
+ // TODO: Debug stuff
+ case 0x2000:
+ if (!_flag6) {
+ if (_flag5)
+ _asSymbols[_index3]->change(_index1 + 12, false);
+ _asSymbols[_index3]->stopSound();
+ _index3++;
+ if (_index3 >= 12) {
+ if (testVars()) {
+ _soundResource.play();
+ setGlobalVar(0x2C531AF8, 1);
+ _flag6 = true;
+ } else {
+ _index3 = 0;
+ for (int i = 0; i < 12; i++)
+ _asSymbols[i]->hide();
+ }
+ }
+ _flag5 = true;
+ _countdown1 = 1;
+ }
+ break;
+ }
+ return 0;
+}
+
+bool Scene1609::testVars() {
+ int index1 = 0;
+ do {
+ int cmpIndex = _asSymbols[0]->getIndex();
+ if (!_asSymbols[0]->getFlag1())
+ cmpIndex -= 12;
+ if ((int)getSubVar(0x04909A50, index1) == cmpIndex)
+ break;
+ index1++;
+ } while(1);
+ for (int index2 = 0; index2 < 12; index2++) {
+ int cmpIndex = _asSymbols[index2]->getIndex();
+ if (!_asSymbols[index2]->getFlag1())
+ cmpIndex -= 12;
+ if ((int)getSubVar(0x04909A50, index1) != cmpIndex)
+ return false;
+ _index1++;
+ if (_index1 >= 12)
+ _index1 = 0;
+ _index2++;
+ }
+ return true;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 9af1a19..1096377 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/module3000.h"
namespace Neverhood {
@@ -171,6 +172,24 @@ protected:
uint32 handleMessage44D510(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene1609 : public Scene {
+public:
+ Scene1609(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource;
+ Sprite *_ssButton;
+ AsScene3011Symbol *_asSymbols[12];
+ int _index1;
+ int _index2;
+ int _index3;
+ int _countdown1;
+ bool _flag5;
+ bool _flag6;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ bool testVars();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1600_H */
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 4426a7e..ae7a7fd 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -195,13 +195,13 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x18222039);
- addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0));
- addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1));
- addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2));
+ insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0);
+ insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1);
+ insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2);
_sprite = insertStaticSprite(0x31313A22, 1100);
- _class606 = addSprite(new Class606(_vm, this, 15, 1100, 238, 439, 0x02363852));
+ _class606 = insertSprite<Class606>(this, 15, 1100, 238, 439, 0x02363852);
_vm->_collisionMan->addSprite(_class606);
which = 4;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 3751a6f..97729cb 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -514,14 +514,14 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x40008208);
insertMouse433(0x0820C408);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 7, 1100, 459, 432, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _ssDoorButton = addSprite(new Class426(_vm, this, 0xE4A43E29, 0xE4A43E29, 100, 0));
+ _ssDoorButton = insertSprite<Class426>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 i = 0; i < 9; i++) {
if ((int16)getSubVar(0x484498D0, i) >= 0) {
- addSprite(new Class444(_vm, i, (int16)getSubVar(0x484498D0, i)));
+ insertSprite<Class444>(i, (int16)getSubVar(0x484498D0, i));
}
}
@@ -551,11 +551,11 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
insertKlayman<KmScene2201>(300, 427, &_rect1, 2);
setMessageList(0x004B8118);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else if (which == 1) {
insertKlayman<KmScene2201>(412, 393, &_rect1, 2);
setMessageList(0x004B8130);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene2201>(379, 427, &_rect1, 2);
@@ -564,15 +564,15 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2201>(261, 427, &_rect1, 2);
}
setMessageList(0x004B8178);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
insertKlayman<KmScene2201>(pt.x, pt.y, &_rect1, 2);
setMessageList(0x004B8120);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, true));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, true);
}
- addSprite(new AsScene2201CeilingFan(_vm));
+ insertSprite<AsScene2201CeilingFan>();
// TODO Sound1ChList_addSoundResource(0x04106220, 0x81212040, true);
@@ -598,7 +598,7 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssDoorButton);
} else if (param.asInteger() == 0x35803198) {
- if (_asDoor->hasMessageHandler() && sendMessage(_asDoor, 0x2000, 0)) {
+ if (sendMessage(_asDoor, 0x2000, 0)) {
setMessageList(0x004B81A0);
} else {
setMessageList(0x004B81B8);
@@ -904,7 +904,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint32 index = 0; index < 9; index++) {
int16 value = (int16)getSubVar(0x484498D0, index);
if (value >= 0) {
- Sprite *puzzleTileSprite = addSprite(new SsScene2202PuzzleTile(_vm, this, index, value));
+ Sprite *puzzleTileSprite = insertSprite<SsScene2202PuzzleTile>(this, index, value);
_vm->_collisionMan->addSprite(puzzleTileSprite);
}
}
@@ -1128,15 +1128,15 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B8320);
if (getGlobalVar(0x13382860) == 1) {
- _class545 = addSprite(new Class545(_vm, this, 2, 1100, 282, 432));
+ _class545 = insertSprite<Class545>(this, 2, 1100, 282, 432);
_vm->_collisionMan->addSprite(_class545);
}
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 1, 1100, 435, 432, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _asLeftDoor = addSprite(new AsScene2203Door(_vm, this, 0));
- _asRightDoor = addSprite(new AsScene2203Door(_vm, this, 1));
+ _asLeftDoor = insertSprite<AsScene2203Door>(this, 0);
+ _asRightDoor = insertSprite<AsScene2203Door>(this, 1);
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
_ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100);
@@ -1280,21 +1280,19 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x0008028D);
addEntity(_palette);
insertMouse433(0x80289008);
- _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0);
- addSprite(_ssLightSwitch);
+ _ssLightSwitch = insertSprite<Class426>(this, 0x2D339030, 0x2D309030, 100, 0);
} else {
_isLightOn = false;
setBackground(0xD00A028D);
setPalette(0xD00A028D);
addEntity(_palette);
insertMouse433(0xA0289D08);
- _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0);
- addSprite(_ssLightSwitch);
+ _ssLightSwitch = insertSprite<Class426>(this, 0x2D339030, 0xDAC86E84, 100, 0);
}
_palette->addBasePalette(0xD00A028D, 0, 256, 0);
- _ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
+ _ssDoorFrame = insertSprite<SsScene2205DoorFrame>();
if (which < 0) {
insertKlayman<KmScene2205>(320, 417);
@@ -1533,25 +1531,25 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x2201266A, 100);
_sprite2 = insertStaticSprite(0x3406A333, 300);
_sprite3 = insertStaticSprite(0x24A223A2, 100);
- _sprite4 = addSprite(new Class603(_vm, 0x26133023));
+ _sprite4 = insertSprite<Class603>(0x26133023);
_sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8AF8);
- _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x0E038022, 100, 0));
+ _sprite5 = insertSprite<SsCommonButtonSprite>(this, 0x0E038022, 100, 0);
insertMouse433(0x83212411);
- _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x5E00E262));
- _class604 = addSprite(new Class604(_vm, 0x085E25E0));
+ _class607 = insertSprite<Class607>(this, 1100, /*464, 433, */0x5E00E262);
+ _class604 = insertSprite<Class604>(0x085E25E0);
} else {
fileHash = 0xE0102A45;
_sprite1 = insertStaticSprite(0x1C1106B8, 100);
_sprite2 = insertStaticSprite(0x020462E0, 300);
_sprite3 = insertStaticSprite(0x900626A2, 100);
- _sprite4 = addSprite(new Class603(_vm, 0x544822A8));
+ _sprite4 = insertSprite<Class603>(0x544822A8);
_sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8B58);
- _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x16882608, 100, 0));
+ _sprite5 = insertSprite<SsCommonButtonSprite>(this, 0x16882608, 100, 0);
insertMouse433(0x02A41E09);
- _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x52032563));
- _class604 = addSprite(new Class604(_vm, 0x317831A0));
+ _class607 = insertSprite<Class607>(this, 1100, /*464, 433, */0x52032563);
+ _class604 = insertSprite<Class604>(0x317831A0);
}
_class604->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
@@ -2031,7 +2029,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B38E8);
- _asElevator = addSprite(new AsScene2207Elevator(_vm, this));
+ _asElevator = insertSprite<AsScene2207Elevator>(this);
if (getGlobalVar(0x4D080E54)) {
@@ -2043,19 +2041,19 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 4, 1100, 277, 428, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _asLever = addSprite(new AsScene2207Lever(_vm, this, 527, 333, 0));
+ _asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);
_vm->_collisionMan->addSprite(_asLever);
- _asWallRobotAnimation = addSprite(new AsScene2207WallRobotAnimation(_vm, this));
- _asWallCannonAnimation = addSprite(new AsScene2207WallCannonAnimation(_vm));
+ _asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);
+ _asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>();
_asWallRobotAnimation->setVisible(false);
_asWallCannonAnimation->setVisible(false);
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x2C4061C4, 100, 0));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x2C4061C4, 100, 0);
_asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480);
_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
@@ -2071,9 +2069,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
- addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0));
- addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1));
- addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2));
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2);
_asTape = NULL;
_asLever = NULL;
@@ -2444,7 +2442,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B3E18);
}
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 10, 1100, 464, 435, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 10, 1100, 464, 435, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index f645fb4..d979bbb 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -735,15 +735,10 @@ AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene
updatePosition();
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009Symbol::handleMessage);
-
- _ssArrowPrev = new SsScene3009SymbolArrow(_vm, this, _index * 2 + 0);
- _parentScene->addSprite(_ssArrowPrev);
+ _ssArrowPrev = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _index * 2 + 0);
_vm->_collisionMan->addSprite(_ssArrowPrev);
-
- _ssArrowNext = new SsScene3009SymbolArrow(_vm, this, _index * 2 + 1);
- _parentScene->addSprite(_ssArrowNext);
+ _ssArrowNext = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _index * 2 + 1);
_vm->_collisionMan->addSprite(_ssArrowNext);
-
}
uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -798,15 +793,13 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0xD000420C);
insertMouse435(0x04208D08, 20, 620);
- _ssFireCannonButton = addSprite(new SsScene3009FireCannonButton(_vm, this));
+ _ssFireCannonButton = insertSprite<SsScene3009FireCannonButton>(this);
_vm->_collisionMan->addSprite(_ssFireCannonButton);
- _asVerticalIndicator = new AsScene3009VerticalIndicator(_vm, this, _cannonLocation);
- addSprite(_asVerticalIndicator);
+ _asVerticalIndicator = insertSprite<AsScene3009VerticalIndicator>(this, _cannonLocation);
_vm->_collisionMan->addSprite(_asVerticalIndicator);
- _asHorizontalIndicator = new AsScene3009HorizontalIndicator(_vm, this, _cannonLocation);
- addSprite(_asHorizontalIndicator);
+ _asHorizontalIndicator = insertSprite<AsScene3009HorizontalIndicator>(this, _cannonLocation);
_vm->_collisionMan->addSprite(_asHorizontalIndicator);
if (_cannonLocation != 0 && _cannonLocation != 8 && _cannonLocation != 9 && _cannonLocation != 10) {
@@ -826,16 +819,12 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x8540252C, 400);
for (int i = 0; i < 2; i++) {
- _ssSymbolEdges[i] = new SsScene3009SymbolEdges(_vm, i);
- addSprite(_ssSymbolEdges[i]);
- _ssTargetLines[i] = new SsScene3009TargetLine(_vm, i);
- addSprite(_ssTargetLines[i]);
+ _ssSymbolEdges[i] = insertSprite<SsScene3009SymbolEdges>(i);
+ _ssTargetLines[i] = insertSprite<SsScene3009TargetLine>(i);
}
-
for (int i = 0; i < 6; i++) {
- _asSymbols[i] = new AsScene3009Symbol(_vm, this, i);
- addSprite(_asSymbols[i]);
+ _asSymbols[i] = insertSprite<AsScene3009Symbol>(this, i);
if (i < 3)
_correctSymbols[i] = getSubVar(0x00504B86, i);
else
@@ -1294,10 +1283,8 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x80802626);
for (int i = 0; i < 3; i++) {
- _asDeadBolts[i] = new AsScene3010DeadBolt(_vm, this, i, which == 1);//CHECKME
- addSprite(_asDeadBolts[i]);
- _ssDeadBoltButtons[i] = new SsScene3010DeadBoltButton(_vm, this, i, initCountdown, which == 1);//CHECKME
- addSprite(_ssDeadBoltButtons[i]);
+ _asDeadBolts[i] = insertSprite<AsScene3010DeadBolt>(this, i, which == 1);//CHECKME
+ _ssDeadBoltButtons[i] = insertSprite<SsScene3010DeadBoltButton>(this, i, initCountdown, which == 1);//CHECKME
_vm->_collisionMan->addSprite(_ssDeadBoltButtons[i]);
if (getSubVar(0x14800353, kScene3010ButtonNameHashes[i]))
initCountdown++;
@@ -1533,28 +1520,25 @@ void AsScene3011Symbol::change(int index, bool flag) {
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _index2(0) {
- _surfaceFlag = true;
-
// TODO _vm->gameModule()->initScene3011Vars();
_index1 = getGlobalVar(0x2414C2F2);
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene3011::handleMessage);
+ SetUpdateHandler(&Scene3011::update);
+
setBackground(0x92124A04);
setPalette(0xA4070114);
addEntity(_palette);
insertMouse435(0x24A00929, 20, 620);
- for (int i = 0; i < 12; i++) {
- _asSymbols[i] = new AsScene3011Symbol(_vm, i, true);
- addSprite(_asSymbols[i]);
- }
+ for (int i = 0; i < 12; i++)
+ _asSymbols[i] = insertSprite<AsScene3011Symbol>(i, true);
- _ssButton = addSprite(new SsScene3011Button(_vm, this, true));
+ _ssButton = insertSprite<SsScene3011Button>(this, true);
_vm->_collisionMan->addSprite(_ssButton);
- SetUpdateHandler(&Scene3011::update);
- SetMessageHandler(&Scene3011::handleMessage);
-
}
void Scene3011::update() {
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 2764c83..2e25a0d 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -236,6 +236,8 @@ public:
void hide();
void stopSound();
void change(int index, bool flag);
+ bool getFlag1() { return _flag1; }
+ int getIndex() { return _index; }
protected:
SoundResource _soundResource1;
SoundResource _soundResource2;
Commit: 7a0a0c4b65f29981ca4f19af166d8bdca02c173c
https://github.com/scummvm/scummvm/commit/7a0a0c4b65f29981ca4f19af166d8bdca02c173c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add Module1900 and Scene1901, Scene1907
(Scene1908 is actually only used in another module...)
Changed paths:
A engines/neverhood/module1900.cpp
A engines/neverhood/module1900.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 960e732..7f74590 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -32,6 +32,7 @@
#include "neverhood/module1600.h"
#include "neverhood/module1700.h"
#include "neverhood/module1800.h"
+#include "neverhood/module1900.h"
#include "neverhood/module2000.h"
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
@@ -275,11 +276,15 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 8;
_vm->gameState().which = 1;
createModule(1600, -1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 6;
+ createModule(1900, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -323,6 +328,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x04A14718);
_childObject = new Module1800(_vm, this, which);
break;
+ case 1900:
+ setGlobalVar(0x91080831, 0x04E1C09C);
+ _childObject = new Module1900(_vm, this, which);
+ break;
case 2000:
setGlobalVar(0x91080831, 0x08250000);
_childObject = new Module2000(_vm, this, which);
@@ -413,6 +422,9 @@ void GameModule::updateModule() {
createModule(2800, 0);
}
break;
+ case 1900:
+ createModule(3000, 1);
+ break;
case 2000:
createModule(2900, 4);
break;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 27ef84a..873ba68 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3953,6 +3953,45 @@ void KmScene1705::sub468B10() {
SetMessageHandler(&KmScene1705::handleMessage4689A0);
}
+KmScene1901::KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // Empty
+}
+
+uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481D:
+ setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ break;
+ case 0x481E:
+ setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ sub41C7B0();
+ break;
+ case 0x483F:
+ sub41CD00(param.asInteger());
+ break;
+ case 0x4840:
+ sub41CD70(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _flag(false) {
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 84cb05a..5c0429e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -434,6 +434,13 @@ protected:
void sub468B10();
};
+class KmScene1901 : public Klayman {
+public:
+ KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene2001 : public Klayman {
public:
KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 5a597fb..6530a7f 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -20,6 +20,7 @@ MODULE_OBJS = \
module1600.o \
module1700.o \
module1800.o \
+ module1900.o \
module2000.o \
module2200.o \
module2300.o \
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
new file mode 100644
index 0000000..7a34a2b
--- /dev/null
+++ b/engines/neverhood/module1900.cpp
@@ -0,0 +1,691 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module1900.h"
+#include "neverhood/gamemodule.h"
+
+namespace Neverhood {
+
+Module1900::Module1900(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ // NOTE: The original has a Scene1908 here as well but it's not used here but in another module...
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else {
+ createScene(0, 0);
+ }
+
+ // TODO Sound1ChList_addSoundResources(0x04E1C09C, dword_4B8800, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B8800, true, 50, 600, 5, 150);
+
+}
+
+Module1900::~Module1900() {
+ // TODO Sound1ChList_sub_407A50(0x04E1C09C);
+}
+
+void Module1900::createScene(int sceneNum, int which) {
+ debug("Module1900::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _childObject = new Scene1901(_vm, this, which);
+ break;
+ case 6:
+ _childObject = new Scene1907(_vm, this, which);
+ break;
+ }
+ SetUpdateHandler(&Module1900::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module1900::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(6, 0);
+ } else {
+ leaveModule(0);
+ }
+ break;
+ case 6:
+ createScene(0, 1);
+ break;
+ }
+ }
+}
+
+// Scene1901
+
+Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *tempSprite;
+
+ _surfaceFlag = true;
+
+ setRectList(0x004B34C8);
+
+ setBackground(0x01303227);
+ setPalette(0x01303227);
+ insertMouse433(0x0322301B);
+
+ insertStaticSprite(0x42213133, 1100);
+
+ if (!getGlobalVar(0xA9035F60)) {
+ insertStaticSprite(0x40A40168, 100);
+ } else if (getGlobalVar(0x09221A62)) {
+ insertStaticSprite(0x124404C4, 100);
+ setGlobalVar(0x2050861A, 1);
+ } else {
+ insertStaticSprite(0x02840064, 100);
+ }
+
+ if (which < 0) {
+ insertKlayman<KmScene1901>(120, 380);
+ setMessageList(0x004B3408);
+ } else if (which == 1) {
+ insertKlayman<KmScene1901>(372, 380);
+ setMessageList(0x004B3410);
+ } else {
+ insertKlayman<KmScene1901>(0, 380);
+ setMessageList(0x004B3400);
+ }
+
+ tempSprite = insertStaticSprite(0x4830A402, 1100);
+ _klayman->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480);
+
+}
+
+static const NPoint kAsScene1907SymbolGroundPositions[] = {
+ {160, 310},
+ { 90, 340},
+ {210, 335},
+ {210, 380},
+ {310, 340},
+ {290, 400},
+ {400, 375},
+ {370, 435},
+ {475, 415}
+};
+
+static const NPoint kAsScene1907SymbolPluggedInPositions[] = {
+ {275, 125},
+ {244, 125},
+ {238, 131},
+ {221, 135},
+ {199, 136},
+ {168, 149},
+ {145, 152},
+ {123, 154},
+ {103, 157}
+};
+
+static const NPoint kAsScene1907SymbolGroundHitPositions[] = {
+ {275, 299},
+ {244, 299},
+ {238, 305},
+ {221, 309},
+ {199, 310},
+ {168, 323},
+ {145, 326},
+ {123, 328},
+ {103, 331}
+};
+
+static const NPoint kAsScene1907SymbolPluggedInDownPositions[] = {
+ {275, 136},
+ {244, 156},
+ {238, 183},
+ {221, 207},
+ {199, 228},
+ {168, 262},
+ {145, 285},
+ {123, 307},
+ {103, 331}
+};
+
+static const uint32 kAsScene1907SymbolFileHashes[] = {
+ 0x006A1034,
+ 0x006A1010,
+ 0x006A1814,
+ 0x006A1016,
+ 0x006A0014,
+ 0x002A1014,
+ 0x00EA1014,
+ 0x206A1014,
+ 0x046A1414
+};
+
+int AsScene1907Symbol::_symbolFlag1 = 0;
+int AsScene1907Symbol::_symbolFlag2 = 0;
+
+AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene, int elementIndex, int positionIndex)
+ : AnimatedSprite(vm, 1000 - positionIndex), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
+ _parentScene(parentScene), _elementIndex(elementIndex), _isMoving(false) {
+
+ _symbolFlag1 = 0;
+ _symbolFlag2 = 0;
+
+ if (getGlobalVar(0xA9035F60)) {
+ _isPluggedIn = true;
+ _currPositionIndex = elementIndex;
+ if (!getGlobalVar(0x09221A62)) {
+ _x = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].x;
+ _y = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].y;
+ } else {
+ _x = kAsScene1907SymbolPluggedInDownPositions[_currPositionIndex].x;
+ _y = kAsScene1907SymbolPluggedInDownPositions[_currPositionIndex].y;
+ }
+ createSurface1(kAsScene1907SymbolFileHashes[_elementIndex], 1000 + _currPositionIndex);
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);
+ _newHashListIndex = -2;
+ } else {
+ _isPluggedIn = false;
+ _currPositionIndex = positionIndex;
+ _soundResource1.load(0x74231924);
+ _soundResource2.load(0x36691914);
+ _soundResource3.load(0x5421D806);
+ _parentScene->setPositionFree(_currPositionIndex, false);
+ _x = kAsScene1907SymbolGroundPositions[_currPositionIndex].x;
+ _y = kAsScene1907SymbolGroundPositions[_currPositionIndex].y;
+ createSurface1(kAsScene1907SymbolFileHashes[_elementIndex], 1000 + _currPositionIndex);
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
+ _newHashListIndex = 0;
+ }
+ _deltaRect.set(0, 0, 80, 80);
+ Sprite::processDelta();
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1907Symbol::handleMessage);
+
+}
+
+void AsScene1907Symbol::update() {
+ AnimatedSprite::updateAnim();
+ handleSpriteUpdate();
+ AnimatedSprite::updatePosition();
+ if (_symbolFlag1 && !_symbolFlag2)
+ _symbolFlag1 = 0;
+}
+
+uint32 AsScene1907Symbol::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (!_isPluggedIn && !_symbolFlag1) {
+ tryToPlugIn();
+ messageResult = 1;
+ } else {
+ messageResult = 0;
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene1907Symbol::hmTryToPlugIn(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1907Symbol::suTryToPlugIn() {
+ _currStep++;
+ _x -= _deltaX;
+ _y -= _deltaY;
+ if (_currStep == 16) {
+ _x -= _smallDeltaX;
+ _y -= _smallDeltaY;
+ SetSpriteCallback(NULL);
+ }
+}
+
+void AsScene1907Symbol::suFallOff() {
+ if (_fallOffDelay != 0) {
+ _fallOffDelay--;
+ } else {
+ _y += _yAccel;
+ _yAccel += 8;
+ if (_y >= kAsScene1907SymbolGroundHitPositions[_currPositionIndex].y) {
+ _y = kAsScene1907SymbolGroundHitPositions[_currPositionIndex].y;
+ stFallOffHitGround();
+ }
+ }
+}
+
+void AsScene1907Symbol::suFallOffHitGround() {
+
+ if (_x == _someX - _xBreak)
+ _x -= _smallDeltaX;
+ else
+ _x -= _deltaX;
+
+ if (_y == kAsScene1907SymbolGroundHitPositions[_currPositionIndex].y) {
+ _y -= _someY;
+ }
+
+ if (_currStep < 8) {
+ _y -= _yAccel;
+ _yAccel -= 4;
+ if (_yAccel < 0)
+ _yAccel = 0;
+ } else if (_currStep < 15) {
+ _y += _yAccel;
+ _yAccel += 4;
+ } else {
+ _y = kAsScene1907SymbolGroundPositions[_newPositionIndex].y;
+ cbFallOffHitGroundEvent();
+ }
+
+ _currStep++;
+}
+
+void AsScene1907Symbol::suMoveDown() {
+ _y += _yIncr;
+ if (_yIncr < 11)
+ _yIncr++;
+ if (_y >= kAsScene1907SymbolPluggedInDownPositions[_elementIndex].y) {
+ _y = kAsScene1907SymbolPluggedInDownPositions[_elementIndex].y;
+ _isMoving = false;
+ SetSpriteCallback(NULL);
+ }
+}
+
+void AsScene1907Symbol::suMoveUp() {
+ _y -= _yIncr;
+ if (getGlobalVar(0x10938830)) {
+ if (_y - (9 + (_elementIndex > 5 ? 31 : 0)) < kAsScene1907SymbolPluggedInPositions[_elementIndex].y) {
+ _yIncr--;
+ } else {
+ _yIncr++;
+ }
+ } else {
+ _yIncr = 2;
+ }
+ if (_yIncr > 9)
+ _yIncr = 9;
+ else if (_yIncr < 1)
+ _yIncr = 1;
+ if (_y < kAsScene1907SymbolPluggedInPositions[_elementIndex].y) {
+ _y = kAsScene1907SymbolPluggedInPositions[_elementIndex].y;
+ _isMoving = false;
+ SetSpriteCallback(NULL);
+ }
+}
+
+void AsScene1907Symbol::tryToPlugIn() {
+ _isPluggedIn = true;
+ _symbolFlag2++;
+ _newPositionIndex = _parentScene->getNextPosition();
+ _parentScene->setPositionFree(_currPositionIndex, true);
+ sendMessage(_parentScene, 0x1022, 1100 + _newPositionIndex);
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
+ SetUpdateHandler(&AsScene1907Symbol::update);
+ SetMessageHandler(&AsScene1907Symbol::hmTryToPlugIn);
+ SetSpriteCallback(&AsScene1907Symbol::suTryToPlugIn);
+ _currStep = 0;
+ _deltaX = (_x - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].x) / 16;
+ _smallDeltaX = _x - _deltaX * 16 - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].x;
+ _deltaY = (_y - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].y) / 16;
+ _smallDeltaY = _y - _deltaY * 16 - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].y;
+ if (_elementIndex == _newPositionIndex) {
+ SetAnimationCallback3(&AsScene1907Symbol::stPlugIn);
+ } else {
+ _symbolFlag1 = 1;
+ SetAnimationCallback3(&AsScene1907Symbol::stPlugInFail);
+ }
+}
+
+void AsScene1907Symbol::fallOff(int newPositionIndex, int fallOffDelay) {
+ _isPluggedIn = false;
+ _newPositionIndex = newPositionIndex;
+ _fallOffDelay = fallOffDelay;
+ _parentScene->setPositionFree(_newPositionIndex, false);
+ _x = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].x;
+ _y = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].y;
+ _someX = _x;
+ _someY = _y;
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, 0);
+ _playBackwards = true;
+ _newHashListIndex = -2;
+ _currStep = 0;
+ _yAccel = 1;
+ SetUpdateHandler(&AsScene1907Symbol::update);
+ SetMessageHandler(&AsScene1907Symbol::handleMessage);
+ SetSpriteCallback(&AsScene1907Symbol::suFallOff);
+}
+
+void AsScene1907Symbol::stFallOffHitGround() {
+ _soundResource2.play();
+ sendMessage(_parentScene, 0x1022, 1000 + _newPositionIndex);
+ // TODO: Meh...
+ Entity::_priority = 1000 - _newPositionIndex;
+ _vm->_collisionMan->removeSprite(this);
+ _vm->_collisionMan->addSprite(this);
+ SetSpriteCallback(&AsScene1907Symbol::suFallOffHitGround);
+ SetAnimationCallback3(&AsScene1907Symbol::cbFallOffHitGroundEvent);
+ _newHashListIndex = 0;
+ _currStep = 0;
+ _yAccel = 30;
+ _deltaX = (_x - kAsScene1907SymbolGroundPositions[_newPositionIndex].x) / 15;
+ _xBreak = _deltaX * 15;
+ _smallDeltaX = _x - kAsScene1907SymbolGroundPositions[_newPositionIndex].x - _xBreak;
+ _someY = 0;
+ if (kAsScene1907SymbolGroundHitPositions[_currPositionIndex].y > kAsScene1907SymbolGroundPositions[_newPositionIndex].y)
+ _someY = kAsScene1907SymbolGroundHitPositions[_currPositionIndex].y - kAsScene1907SymbolGroundPositions[_newPositionIndex].y;
+}
+
+void AsScene1907Symbol::cbFallOffHitGroundEvent() {
+ _currPositionIndex = _newPositionIndex;
+ if (_symbolFlag2)
+ _symbolFlag2--;
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
+ _newHashListIndex = 0;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1907Symbol::handleMessage);
+ SetSpriteCallback(NULL);
+ processDelta();
+ _soundResource3.play();
+}
+
+void AsScene1907Symbol::stPlugIn() {
+ _soundResource1.play();
+ _currPositionIndex = _newPositionIndex;
+ setFileHash1();
+ SetMessageHandler(&AsScene1907Symbol::handleMessage);
+ SetSpriteCallback(NULL);
+ if (_elementIndex == 8)
+ sendMessage(_parentScene, 0x2001, 0);
+}
+
+void AsScene1907Symbol::stPlugInFail() {
+ _currPositionIndex = _newPositionIndex;
+ setFileHash1();
+ _parentScene->plugInFailed();
+}
+
+void AsScene1907Symbol::moveUp() {
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
+ setFileHash1();
+ SetMessageHandler(&AsScene1907Symbol::handleMessage);
+ SetSpriteCallback(&AsScene1907Symbol::suMoveUp);
+ _yIncr = 1;
+ _isMoving = true;
+}
+
+void AsScene1907Symbol::moveDown() {
+ setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
+ setFileHash1();
+ SetMessageHandler(&AsScene1907Symbol::handleMessage);
+ SetSpriteCallback(&AsScene1907Symbol::suMoveDown);
+ _yIncr = 4;
+ _isMoving = true;
+}
+
+SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *AsScene1907Symbol)
+ : StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene), _AsScene1907Symbol(AsScene1907Symbol),
+ _countdown1(0) {
+
+ _spriteResource.load2(0x64516424);
+ createSurface(1400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ setVisible(false);
+ _drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _deltaRect = _drawRect;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ processDelta();
+ _needRefresh = true;
+ _soundResource.load(0x44061000);
+ SetUpdateHandler(&SsScene1907UpDownButton::update);
+ SetMessageHandler(&SsScene1907UpDownButton::handleMessage);
+ if (getGlobalVar(0xA9035F60)) {
+ if (getGlobalVar(0x09221A62))
+ setToDownPosition();
+ else
+ setToUpPosition();
+ }
+}
+
+void SsScene1907UpDownButton::update() {
+ StaticSprite::update();
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ setVisible(false);
+ sendMessage(_parentScene, 0x2000, 0);
+ }
+}
+
+uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown1 == 0 && !_AsScene1907Symbol->isMoving() && getGlobalVar(0xA9035F60)) {
+ setVisible(true);
+ _countdown1 = 4;
+ StaticSprite::update();
+ _soundResource.play();
+ }
+ messageResult = 1;
+ }
+ return messageResult;
+}
+
+void SsScene1907UpDownButton::setToUpPosition() {
+ _y = _spriteResource.getPosition().y;
+ Sprite::processDelta();
+ StaticSprite::update();
+}
+
+void SsScene1907UpDownButton::setToDownPosition() {
+ _y = _spriteResource.getPosition().y + 174;
+ Sprite::processDelta();
+ StaticSprite::update();
+}
+
+AsScene1907WaterHint::AsScene1907WaterHint(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1400) {
+
+ createSurface1(0x110A1061, 1500);
+ _x = 320;
+ _y = 240;
+ setFileHash(0x110A1061, 0, -1);
+ _newHashListIndex = 0;
+ setVisible(false);
+ _needRefresh = true;
+ AnimatedSprite::updatePosition();
+ SetUpdateHandler(&AsScene1907WaterHint::update);
+ SetMessageHandler(&Sprite::handleMessage);
+}
+
+void AsScene1907WaterHint::update() {
+ AnimatedSprite::updateAnim();
+ AnimatedSprite::updatePosition();
+}
+
+uint32 AsScene1907WaterHint::handleMessage46BA20(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene1907WaterHint::show() {
+ setVisible(true);
+ setFileHash(0x110A1061, 0, -1);
+ SetMessageHandler(&AsScene1907WaterHint::handleMessage46BA20);
+ SetAnimationCallback3(&AsScene1907WaterHint::hide);
+}
+
+void AsScene1907WaterHint::hide() {
+ setFileHash1();
+ setVisible(false);
+ SetMessageHandler(&Sprite::handleMessage);
+}
+
+Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
+ _soundResource3(vm), _soundResource4(vm), _currMovingSymbolIndex(0), _pluggedInCount(0),
+ _moveDownCountdown(0), _moveUpCountdown(0), _countdown3(0), _hasPlugInFailed(false) {
+
+ _surfaceFlag = true;
+
+ //setGlobalVar(0x10938830, 1);
+
+ setBackground(0x20628E05);
+ setPalette(0x20628E05);
+
+ for (int i = 0; i < 9; i++)
+ _positionFree[i] = true;
+
+ for (int i = 0; i < 9; i++) {
+ _asSymbols[i] = insertSprite<AsScene1907Symbol>(this, i, getRandomPositionIndex());
+ _vm->_collisionMan->addSprite(_asSymbols[i]);
+ }
+
+ _ssUpDownButton = insertSprite<SsScene1907UpDownButton>(this, _asSymbols[8]);
+ _vm->_collisionMan->addSprite(_ssUpDownButton);
+
+ _asWaterHint = insertSprite<AsScene1907WaterHint>();
+
+ insertMouse435(0x28E0120E, 20, 620);
+
+ SetMessageHandler(&Scene1907::handleMessage);
+ SetUpdateHandler(&Scene1907::update);
+
+ if (getGlobalVar(0xA9035F60))
+ _pluggedInCount = 9;
+
+ _soundResource1.load(0x72004A10);
+ _soundResource2.load(0x22082A12);
+ _soundResource3.load(0x21100A10);
+ _soundResource4.load(0x68E25540);
+
+}
+
+void Scene1907::update() {
+ Scene::update();
+
+ if (_hasPlugInFailed) {
+ int fallOffDelay = 0;
+ _hasPlugInFailed = false;
+ for (int i = 0; i < 9; i++) {
+ AsScene1907Symbol *asSymbol = _asSymbols[8 - i];
+ if (asSymbol->isPluggedIn()) {
+ asSymbol->fallOff(getRandomPositionIndex(), fallOffDelay);
+ fallOffDelay += _vm->_rnd->getRandomNumber(10 - 1) + 4;
+ }
+ }
+ }
+
+ if (_moveDownCountdown != 0 && (--_moveDownCountdown == 0)) {
+ _asSymbols[_currMovingSymbolIndex]->moveDown();
+ if (_currMovingSymbolIndex > 0) {
+ _moveDownCountdown = 2;
+ _currMovingSymbolIndex--;
+ }
+ }
+
+ if (_moveUpCountdown != 0 && (--_moveUpCountdown == 0)) {
+ _moveDownCountdown = 0;
+ for (int i = 0; i < 9; i++)
+ _asSymbols[i]->moveUp();
+ }
+
+ if (_countdown3 != 0 && (--_countdown3 == 0)) {
+ _asWaterHint->show();
+ _moveUpCountdown = 4;
+ }
+
+}
+
+uint32 Scene1907::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO DEBUG stuff
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) &&
+ !_hasPlugInFailed && _moveDownCountdown == 0 && _moveUpCountdown == 0 && _countdown3 == 0) {
+ leaveScene(0);
+ }
+ break;
+ // TODO Debug stuff
+ case 0x2000:
+ if (getGlobalVar(0x09221A62)) {
+ _soundResource1.play();
+ for (int i = 0; i < 9; i++)
+ _asSymbols[i]->moveUp();
+ _ssUpDownButton->setToUpPosition();
+ setGlobalVar(0x09221A62, 0);
+ } else {
+ if (!getGlobalVar(0x10938830)) {
+ _soundResource3.play();
+ _countdown3 = 5;
+ } else {
+ _soundResource2.play();
+ _ssUpDownButton->setToDownPosition();
+ setGlobalVar(0x09221A62, 1);
+ }
+ _moveDownCountdown = 1;
+ _currMovingSymbolIndex = 8;
+ }
+ break;
+ case 0x2001:
+ _soundResource4.play();
+ setGlobalVar(0xA9035F60, 1);
+ break;
+ }
+ return 0;
+}
+
+void Scene1907::plugInFailed() {
+ _pluggedInCount = 0;
+ _hasPlugInFailed = true;
+}
+
+int Scene1907::getRandomPositionIndex() {
+ bool flag = false;
+ int index = 0;
+ for (int i = 0; i < 9; i++) {
+ if (_positionFree[i])
+ flag = true;
+ }
+ if (flag) {
+ flag = false;
+ while (!flag) {
+ index = _vm->_rnd->getRandomNumber(9 - 1);
+ if (_positionFree[index])
+ flag = true;
+ }
+ }
+ return index;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module1900.h b/engines/neverhood/module1900.h
new file mode 100644
index 0000000..7b41c57
--- /dev/null
+++ b/engines/neverhood/module1900.h
@@ -0,0 +1,150 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE1900_H
+#define NEVERHOOD_MODULE1900_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/module1200.h"
+
+namespace Neverhood {
+
+class Module1900 : public Module {
+public:
+ Module1900(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module1900();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createScene(int sceneNum, int which);
+ void updateScene();
+};
+
+// Scene1901
+
+class Scene1901 : public Scene {
+public:
+ Scene1901(NeverhoodEngine *vm, Module *parentModule, int which);
+};
+
+// Scene1907
+
+class Scene1907;
+
+class AsScene1907Symbol : public AnimatedSprite {
+public:
+ AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene, int elementIndex, int positionIndex);
+ void moveUp();
+ void moveDown();
+ void fallOff(int newPositionIndex, int fallOffDelay);
+ bool isPluggedIn() { return _isPluggedIn; }
+ bool isMoving() { return _isMoving; }
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ Scene1907 *_parentScene;
+ int _elementIndex;
+ int _currPositionIndex;
+ int _newPositionIndex;
+ bool _isPluggedIn;
+ bool _isMoving;
+ int _someX, _someY;
+ int _xBreak;
+ int _currStep;
+ int _yAccel;
+ int _yIncr;
+ int _fallOffDelay;
+ int _deltaX, _smallDeltaX;
+ int _deltaY, _smallDeltaY;
+ // Dumb, change if possible
+ static int _symbolFlag1;
+ static int _symbolFlag2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmTryToPlugIn(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suTryToPlugIn();
+ void suFallOff();
+ void suFallOffHitGround();
+ void suMoveDown();
+ void suMoveUp();
+ void tryToPlugIn();
+ void stFallOffHitGround();
+ void cbFallOffHitGroundEvent();
+ void stPlugIn();
+ void stPlugInFail();
+};
+
+class AsScene1907WaterHint : public AnimatedSprite {
+public:
+ AsScene1907WaterHint(NeverhoodEngine *vm);
+ void show();
+protected:
+ void update();
+ uint32 handleMessage46BA20(int messageNum, const MessageParam ¶m, Entity *sender);
+ void hide();
+};
+
+class SsScene1907UpDownButton : public StaticSprite {
+public:
+ SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *AsScene1907Symbol);
+ void setToUpPosition();
+ void setToDownPosition();
+protected:
+ SoundResource _soundResource;
+ Scene1907 *_parentScene;
+ AsScene1907Symbol *_AsScene1907Symbol;
+ int _countdown1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene1907 : public Scene {
+public:
+ Scene1907(NeverhoodEngine *vm, Module *parentModule, int which);
+ void plugInFailed();
+ void setPositionFree(int index, bool value) { _positionFree[index] = value; }
+ int getNextPosition() { return _pluggedInCount++; }
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ AsScene1907Symbol *_asSymbols[9];
+ SsScene1907UpDownButton *_ssUpDownButton;
+ AsScene1907WaterHint *_asWaterHint;
+ int _currMovingSymbolIndex;
+ int _pluggedInCount;
+ int _moveDownCountdown;
+ int _moveUpCountdown;
+ int _countdown3;
+ bool _hasPlugInFailed;
+ bool _positionFree[9];
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ int getRandomPositionIndex();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE1900_H */
Commit: 729e3ae26ef9c3c039861ef5212ca3588a679ca5
https://github.com/scummvm/scummvm/commit/729e3ae26ef9c3c039861ef5212ca3588a679ca5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add tables for Scene1901
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 01ddd15..9328bfd 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -87,6 +87,8 @@ static const uint32 rectListOffsets[] = {
// Scene1705
1, 0x004B6B40,
1, 0x004B6B30,
+ // Scene1901
+ 1, 0x004B34C8,
// Scene2001
1, 0x004B3680,
1, 0x004B3670,
@@ -260,6 +262,10 @@ static const uint32 messageListOffsets[] = {
2, 0x004B6A18,
1, 0x004B69F0,
2, 0x004B6AC0,
+ // Scene1901
+ 1, 0x004B3408,
+ 1, 0x004B3410,
+ 1, 0x004B3400,
// Scene2001
1, 0x004B3538,
2, 0x004B3540,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 5561301..6663e64 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: ced4efc66f68c284a290a88cbeac337021526b5e
https://github.com/scummvm/scummvm/commit/ced4efc66f68c284a290a88cbeac337021526b5e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2101
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 9328bfd..f0308bd 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -92,6 +92,9 @@ static const uint32 rectListOffsets[] = {
// Scene2001
1, 0x004B3680,
1, 0x004B3670,
+ // Scene2101
+ 1, 0x004B9008,
+ 1, 0x004B8FF8,
// Scene2203
1, 0x004B8420,
// Scene2206
@@ -272,6 +275,18 @@ static const uint32 messageListOffsets[] = {
4, 0x004B35F0,
2, 0x004B3550,
1, 0x004B3530,
+ // Scene2101
+ 1, 0x004B8E48,
+ 3, 0x004B8E50,
+ 4, 0x004B8F58,
+ 2, 0x004B8EB0,
+ 2, 0x004B8EA0,
+ 1, 0x004B8F50,
+ 1, 0x004B8F48,
+ 4, 0x004B8E80,
+ 1, 0x004B8EC8,
+ 2, 0x004B8F78,
+ 3, 0x004B8F00,
// Scene2201
1, 0x004B8118,
1, 0x004B8130,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 6663e64..72e8133 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 21ebcf2af20bf96c32f5668952dba4ed7797a89c
https://github.com/scummvm/scummvm/commit/21ebcf2af20bf96c32f5668952dba4ed7797a89c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add Module2100 and Scene2101 (not complete yet)
Changed paths:
A engines/neverhood/module2100.cpp
A engines/neverhood/module2100.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7f74590..7d463fb 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -34,6 +34,7 @@
#include "neverhood/module1800.h"
#include "neverhood/module1900.h"
#include "neverhood/module2000.h"
+#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
#include "neverhood/module3000.h"
@@ -281,10 +282,14 @@ void GameModule::startup() {
_vm->gameState().which = 1;
createModule(1600, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 6;
createModule(1900, -1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule(2100, 3);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -336,6 +341,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x08250000);
_childObject = new Module2000(_vm, this, which);
break;
+ case 2100:
+ setGlobalVar(0x91080831, 0x10A10C14);
+ _childObject = new Module2100(_vm, this, which);
+ break;
case 2200:
setGlobalVar(0x91080831, 0x11391412);
_childObject = new Module2200(_vm, this, which);
@@ -428,6 +437,13 @@ void GameModule::updateModule() {
case 2000:
createModule(2900, 4);
break;
+ case 2100:
+ if (_moduleResult == 1) {
+ createModule(2900, 1);
+ } else {
+ createModule(1600, 0);
+ }
+ break;
case 2200:
createModule(2300, 1);
break;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 873ba68..865c91a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -4091,6 +4091,157 @@ void KmScene2001::sub440270() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
+KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+
+ // Empty
+}
+
+uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x2000:
+ _flag1 = param.asInteger() != 0;
+ messageResult = 1;
+ break;
+ case 0x4001:
+ case 0x4800:
+ sub41C930(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub421350));
+ else
+ setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ break;
+ case 0x4811:
+ setCallback2(AnimationCallback(&KmScene2101::sub4862C0));
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420060));
+ } else if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ } else {
+ setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ }
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ setCallback2(AnimationCallback(&Klayman::sub420120));
+ } else if (param.asInteger() == 2) {
+ setCallback2(AnimationCallback(&Klayman::sub420170));
+ }else {
+ setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ sub41C7B0();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ if (_flag1)
+ setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ break;
+ case 0x481E:
+ if (_flag)
+ setCallback2(AnimationCallback(&Klayman::sub421510));
+ break;
+ case 0x4834:
+ setCallback2(AnimationCallback(&Klayman::sub421160));
+ break;
+ case 0x4835:
+ sendMessage(_parentScene, 0x2000, 1);
+ _flag1 = true;
+ setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ break;
+ case 0x4836:
+ sendMessage(_parentScene, 0x2000, 0);
+ _flag1 = false;
+ setCallback2(AnimationCallback(&Klayman::sub421310));
+ break;
+ case 0x483D:
+ sub486320();
+ break;
+ case 0x483E:
+ sub486360();
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene2101::handleMessage486160(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ int16 speedUpFrameIndex;
+ switch (messageNum) {
+ case 0x1008:
+ speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
+ if (_frameIndex < speedUpFrameIndex) {
+ setFileHash(0x35AA8059, speedUpFrameIndex, -1);
+ _y = 438;
+ }
+ messageResult = 0;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x1A1A0785) {
+ _soundResource1.play(0x40F0A342);
+ } else if (param.asInteger() == 0x60428026) {
+ _soundResource1.play(0x40608A59);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene2101::handleMessage486230(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ _soundResource1.play(0x85B10BB8);
+ } else if (param.asInteger() == 0x4E6A0CA0) {
+ _soundResource1.play(0xC5B709B0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2101::sub4862C0() {
+ _status2 = 1;
+ _flagE5 = false;
+ setFileHash(0x35AA8059, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene2101::handleMessage486160);
+ _soundResource1.play(0x402E82D4);
+}
+
+void KmScene2101::sub486320() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0xFF290E30, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene2101::handleMessage486230);
+}
+
+void KmScene2101::sub486360() {
+ _status2 = 0;
+ _flagE5 = false;
+ setFileHash(0x9A28CA1C, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteCallback(NULL);
+ SetMessageHandler(&KmScene2101::handleMessage486230);
+}
+
KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
// TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 5c0429e..eb6ab40 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -452,6 +452,19 @@ protected:
void sub440270();
};
+class KmScene2101 : public Klayman {
+public:
+ KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _flag1;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage486160(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage486230(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub4862C0();
+ void sub486320();
+ void sub486360();
+};
+
class KmScene2201 : public Klayman {
public:
KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 6530a7f..9484e2e 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -22,6 +22,7 @@ MODULE_OBJS = \
module1800.o \
module1900.o \
module2000.o \
+ module2100.o \
module2200.o \
module2300.o \
module3000.o \
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
new file mode 100644
index 0000000..e07e990
--- /dev/null
+++ b/engines/neverhood/module2100.cpp
@@ -0,0 +1,298 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2100.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/module1200.h"
+
+namespace Neverhood {
+
+Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ // TODO Music18hList_add(0x10A10C14, 0x11482B95);
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else if (which == 1) {
+ createScene(0, 0);
+ } else if (which == 2) {
+ createScene(0, 3);
+ } else {
+ createScene(0, 1);
+ }
+
+}
+
+Module2100::~Module2100() {
+ // TODO Music18hList_deleteGroup(0x10A10C14);
+}
+
+void Module2100::createScene(int sceneNum, int which) {
+ debug("Module2100::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Music18hList_play(0x11482B95, 0, 1, 1);
+ _childObject = new Scene2101(_vm, this, which);
+ break;
+ }
+ SetUpdateHandler(&Module2100::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2100::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ setGlobalVar(0x2090590C, 1);
+ leaveModule(0);
+ } else {
+ leaveModule(1);
+ }
+ break;
+ }
+ }
+}
+
+// Scene2101
+
+Class538::Class538(NeverhoodEngine *vm, bool flag)
+ : AnimatedSprite(vm, 1100), _soundResource(vm) {
+
+ // TODO createSurface3(100, dword_4B9018);
+ createSurface(100, 640, 480); //TODO: Remove once the line above is done
+ _x = 320;
+ _y = 240;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class538::handleMessage);
+ if (flag) {
+ setFileHash(0x0C202B9C, -1, -1);
+ _newHashListIndex = -2;
+ } else {
+ setVisible(false);
+ }
+}
+
+uint32 Class538::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ removeCallbacks();
+ break;
+ case 0x4808:
+ openDoor();
+ break;
+ case 0x4809:
+ closeDoor();
+ break;
+ }
+ return messageResult;
+}
+
+void Class538::openDoor() {
+ setFileHash(0x0C202B9C, 0, -1);
+ _newHashListIndex = -2;
+ setVisible(true);
+ _soundResource.play(calcHash("fxDoorOpen32"));
+}
+
+void Class538::closeDoor() {
+ setFileHash(0xC222A8D4, 0, -1);
+ _newHashListIndex = -2;
+ setVisible(true);
+ SetAnimationCallback3(&Class538::hide);
+ _soundResource.play(calcHash("fxDoorClose32"));
+}
+
+void Class538::hide() {
+ setFileHash1();
+ setVisible(false);
+}
+
+Class539::Class539(NeverhoodEngine *vm, Sprite *klayman)
+ : AnimatedSprite(vm, 1400), _klayman(klayman) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class539::handleMessage);
+ createSurface(1200, 88, 165);
+ setVisible(false);
+}
+
+uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2001:
+ _x = _klayman->getX();
+ _y = _klayman->getY() - 132;
+ setFileHash(0x0422255A, 0, -1);
+ setVisible(true);
+ break;
+ case 0x3002:
+ setFileHash1();
+ setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2101::handleMessage);
+ SetUpdateHandler(&Scene2101::update);
+
+ setBackground(0x44242305);
+ setPalette(0x44242305);
+ insertMouse433(0x4230144A);
+
+ insertStaticSprite(0x00502330, 1100);
+ _sprite1 = insertStaticSprite(0x78492010, 1100);
+ // TODO _class427 = insertSprite<Class427>(this, 0x72427010, 0x32423010, 200, 0);
+ _asTape1 = insertSprite<AsScene1201Tape>(this, 18, 1100, 412, 443, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape1);
+ _asTape2 = insertSprite<AsScene1201Tape>(this, 11, 1100, 441, 443, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape2);
+
+ if (which < 0) {
+ insertKlayman<KmScene2101>(380, 438);
+ setMessageList(0x004B8E48);
+ sendMessage(this, 0x2000, 0);
+ _class538 = insertSprite<Class538>(false);
+ _value1 = 1;
+ _countdown1 = 0;
+ } else if (which == 1) {
+ insertKlayman<KmScene2101>(640, 438);
+ setMessageList(0x004B8E50);
+ sendMessage(this, 0x2000, 0);
+ _class538 = insertSprite<Class538>(true);
+ _value1 = 2;
+ _countdown1 = 48;
+ } else if (which == 2) {
+ insertKlayman<KmScene2101>(115, 438);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004B8F58);
+ sendMessage(this, 0x2000, 1);
+ _class538 = insertSprite<Class538>(false);
+ _value1 = 1;
+ _countdown1 = 0;
+ } else if (which == 3) {
+ insertKlayman<KmScene2101>(115, 438);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004B8EB0);
+ sendMessage(this, 0x2000, 1);
+ _class538 = insertSprite<Class538>(false);
+ _value1 = 1;
+ _countdown1 = 0;
+ } else {
+ insertKlayman<KmScene2101>(115, 438);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004B8EA0);
+ sendMessage(this, 0x2000, 1);
+ _class538 = insertSprite<Class538>(false);
+ _value1 = 1;
+ _countdown1 = 0;
+ }
+
+ _class539 = insertSprite<Class539>(_klayman);
+ _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480);
+
+}
+
+void Scene2101::update() {
+ if (_countdown1 != 0) {
+ if (_value1 == 2) {
+ if (--_countdown1 == 0) {
+ sendMessage(_class538, 0x4809, 0);
+ _value1 = 1;
+ }
+ } else {
+ if (_klayman->getX() > 575)
+ _messageListFlag = false;
+ if (--_countdown1 == 0) {
+ if (_klayman->getX() < 480) {
+ sendMessage(_class538, 0x4809, 0);
+ _value1 = 1;
+ } else if (_klayman->getX() >= 480 && _klayman->getX() <= 575) {
+ _klayman->setDoDeltaX(0);
+ setMessageList2(0x004B8F48);
+ sendMessage(_class538, 0x4809, 0);
+ sendMessage(_class539, 0x2001, 0);
+ _value1 = 1;
+ }
+ }
+ }
+ } else if (_value1 == 1 && _messageValue >= 0 && _klayman->getX() > 470 /* TODO ! && _messageList2 != 0x004B8F48*/) {
+ setMessageList2(0x004B8F50);
+ }
+ Scene::update();
+}
+
+uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02144CB1) {
+ sendEntityMessage(_klayman, 0x1014, _class427);
+ } else if (param.asInteger() == 0x21E64A00) {
+ if (_value1 == 0) {
+ setMessageList(0x004B8E80);
+ } else {
+ setMessageList(0x004B8EC8);
+ }
+ } else if (param.asInteger() == 0x41442820) {
+ messageList402220();
+ }
+ break;
+ case 0x2000:
+ if (param.asInteger() != 0) {
+ setRectList(0x004B9008);
+ _klayman->setKlaymanTable3();
+ } else {
+ setRectList(0x004B8FF8);
+ _klayman->setKlaymanTable1();
+ }
+ break;
+ case 0x480B:
+ if (sender == _class427 && _value1 == 1) {
+ sendMessage(_class538, 0x4808, 0);
+ _value1 = 0;
+ _countdown1 = 90;
+ }
+ break;
+ case 0x4826:
+ if (sender == _asTape1 || sender == _asTape2) {
+ if (_klayman->getX() >= 228 && _klayman->getX() <= 500) {
+ sendEntityMessage(_klayman, 0x1014, sender);
+ setMessageList(0x004B8F78);
+ } else if (_klayman->getX() < 228) {
+ setMessageList2(0x004B8F00);
+ }
+ }
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h
new file mode 100644
index 0000000..3e7f579
--- /dev/null
+++ b/engines/neverhood/module2100.h
@@ -0,0 +1,81 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2100_H
+#define NEVERHOOD_MODULE2100_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+class Module2100 : public Module {
+public:
+ Module2100(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2100();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createScene(int sceneNum, int which);
+ void updateScene();
+};
+
+// Scene1901
+
+class Class538 : public AnimatedSprite {
+public:
+ Class538(NeverhoodEngine *vm, bool flag);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void openDoor();
+ void closeDoor();
+ void hide();
+};
+
+class Class539 : public AnimatedSprite {
+public:
+ Class539(NeverhoodEngine *vm, Sprite *klayman);
+protected:
+ Sprite *_klayman;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2101 : public Scene {
+public:
+ Scene2101(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_class427;
+ Sprite *_asTape1;
+ Sprite *_asTape2;
+ Sprite *_class538;
+ Sprite *_class539;
+ int _countdown1;
+ int _value1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2100_H */
Commit: a7dcbd0f335023615acdcdef514e614bd6a40f76
https://github.com/scummvm/scummvm/commit/a7dcbd0f335023615acdcdef514e614bd6a40f76
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add floor button ("Class429") to Scene2101
Changed paths:
engines/neverhood/module2100.cpp
engines/neverhood/module2100.h
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index e07e990..fa0d111 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -156,6 +156,49 @@ uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
+Class427::Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
+ : StaticSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _countdown(0),
+ _fileHash1(fileHash1), _fileHash2(fileHash2), _soundFileHash(soundFileHash) {
+
+ SetUpdateHandler(&Class427::update);
+ SetMessageHandler(&Class427::handleMessage);
+ if (_soundFileHash == 0)
+ _soundFileHash = 0x44141000;
+ createSurface(1010, 61, 30);
+ if (_fileHash1) {
+ load(_fileHash1, true, true);
+ StaticSprite::update();
+ } else
+ setVisible(false);
+}
+
+void Class427::update() {
+ if (_countdown != 0 && (--_countdown == 0)) {
+ sendMessage(_parentScene, 0x1022, 1010);
+ if (_fileHash1) {
+ load(_fileHash1, true, true);
+ StaticSprite::update();
+ } else
+ setVisible(false);
+ }
+}
+
+uint32 Class427::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x480B:
+ sendMessage(_parentScene, 0x480B, 0);
+ setVisible(true);
+ sendMessage(_parentScene, 0x1022, 990);
+ load(_fileHash2, true, true);
+ StaticSprite::update();
+ _countdown = 16;
+ _soundResource.play(_soundFileHash);
+ break;
+ }
+ return messageResult;
+}
+
Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -169,7 +212,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x00502330, 1100);
_sprite1 = insertStaticSprite(0x78492010, 1100);
- // TODO _class427 = insertSprite<Class427>(this, 0x72427010, 0x32423010, 200, 0);
+ _class427 = insertSprite<Class427>(this, 0x72427010, 0x32423010, 200, 0);
_asTape1 = insertSprite<AsScene1201Tape>(this, 18, 1100, 412, 443, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape1);
_asTape2 = insertSprite<AsScene1201Tape>(this, 11, 1100, 441, 443, 0x9148A011);
diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h
index 3e7f579..65846d7 100644
--- a/engines/neverhood/module2100.h
+++ b/engines/neverhood/module2100.h
@@ -60,6 +60,20 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Class427 : public StaticSprite {
+public:
+ Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 _soundFileHash;
+ uint32 _fileHash1, _fileHash2;
+ int16 _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+
class Scene2101 : public Scene {
public:
Scene2101(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: 8840c7481924b515032ed310bb999c3003c7dbf7
https://github.com/scummvm/scummvm/commit/8840c7481924b515032ed310bb999c3003c7dbf7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:41-07:00
Commit Message:
NEVERHOOD: Add floor button to Scene1401
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1400.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7d463fb..2891bdd 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -286,10 +286,14 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 6;
createModule(1900, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 0;
createModule(2100, 3);
#endif
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule(1400, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 37fb354..8d42c7f 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -22,6 +22,7 @@
#include "neverhood/module1400.h"
#include "neverhood/module1000.h"
+#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/gamemodule.h"
@@ -667,7 +668,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x08221FA5);
insertMouse433(0x21FA108A);
- // TODO _class427 = insertSprite<Class427>(this, 0x980F3124, 0x12192892, 100, 0);
+ _class427 = insertSprite<Class427>(this, 0x980F3124, 0x12192892, 100, 0);
_class525 = insertSprite<Class525>();
if (!getGlobalVar(0x01023818)) {
Commit: 9f599a7dfcc2175a8940eacce621f5a15d762314
https://github.com/scummvm/scummvm/commit/9f599a7dfcc2175a8940eacce621f5a15d762314
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Start with Module2600 (missing Scene2609)
Changed paths:
A engines/neverhood/module2600.cpp
A engines/neverhood/module2600.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 2891bdd..a1a1fc3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -37,6 +37,7 @@
#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
+#include "neverhood/module2600.h"
#include "neverhood/module3000.h"
namespace Neverhood {
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 9484e2e..2eefff9 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -25,6 +25,7 @@ MODULE_OBJS = \
module2100.o \
module2200.o \
module2300.o \
+ module2600.o \
module3000.o \
mouse.o \
navigationscene.o \
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
new file mode 100644
index 0000000..0217fe4
--- /dev/null
+++ b/engines/neverhood/module2600.cpp
@@ -0,0 +1,199 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2600.h"
+
+namespace Neverhood {
+
+Module2600::Module2600(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, -1);
+ } else if (which == 1) {
+ createScene(4, 1);
+ } else {
+ createScene(0, 1);
+ }
+
+ // TODO Sound1ChList_addSoundResources(0x40271018, dword_4B87E8, true);
+ // TODO Sound1ChList_setSoundValuesMulti(dword_4B87E8, true, 50, 600, 5, 150);
+ // TODO Sound1ChList_sub_407C70(0x40271018, 0x41861371, 0x43A2507F);
+
+}
+
+Module2600::~Module2600() {
+ // TODO Sound1ChList_sub_407A50(0x40271018);
+}
+
+void Module2600::createScene(int sceneNum, int which) {
+ debug("Module2600::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ createNavigationScene(0x004B8608, which);
+ break;
+ case 1:
+ createNavigationScene(0x004B8638, which);
+ break;
+ case 2:
+ createNavigationScene(0x004B86C8, which);
+ break;
+ case 3:
+ if (getGlobalVar(0x0A310817)) {
+ createNavigationScene(0x004B8758, which);
+ } else {
+ createNavigationScene(0x004B86F8, which);
+ }
+ break;
+ case 4:
+ createNavigationScene(0x004B87B8, which);
+ break;
+ case 6:
+ createNavigationScene(0x004B8698, which);
+ break;
+ case 7:
+ // TODO Sound1ChList_sub_407A50(0x40271018);
+ createSmackerScene(0x30090001, true, true, false);
+ break;
+ case 8:
+//TODO _childObject = new Scene2609(_vm, this, which);
+ break;
+ case 1002:
+ if (getGlobalVar(0x40040831) == 1) {
+ createSmackerScene(0x018C0404, true, true, false);
+ } else if (getGlobalVar(0x40040831) == 2) {
+ createSmackerScene(0x018C0407, true, true, false);
+ } else {
+ createSmackerScene(0x818C0405, true, true, false);
+ }
+ if (getGlobalVar(0x40040831) >= 2) {
+ setGlobalVar(0x40040831, 0);
+ } else {
+ incGlobalVar(0x40040831, +1);
+ }
+ break;
+ case 1003:
+ createSmackerScene(0x001C0007, true, true, false);
+ break;
+ case 1006:
+ if (getGlobalVar(0x4E0BE910)) {
+ createSmackerScene(0x049A1181, true, true, false);
+ } else {
+ createSmackerScene(0x04981181, true, true, false);
+ }
+ break;
+ case 1008:
+ if (getGlobalVar(0x4E0BE910)) {
+ createSmackerScene(0x42B80941, true, true, false);
+ } else {
+ createSmackerScene(0x42980941, true, true, false);
+ }
+ break;
+ }
+ SetUpdateHandler(&Module2600::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2600::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(1, 3);
+ } else {
+ leaveModule(0);
+ }
+ break;
+ case 1:
+ if (_moduleResult == 0) {
+ createScene(6, 0);
+ } else if (_moduleResult == 1) {
+ createScene(0, 0);
+ } else if (_moduleResult == 2) {
+ createScene(2, 1);
+ } else if (_moduleResult == 3) {
+ createScene(3, 0);
+ }
+ break;
+ case 2:
+ if (_moduleResult == 0) {
+ createScene(1, 0);
+ } else if (_moduleResult == 1) {
+ createScene(1002, -1);
+ }
+ break;
+ case 3:
+ if (_moduleResult == 0) {
+ if (getGlobalVar(0x0A310817)) {
+ createScene(4, 0);
+ } else {
+ createScene(1003, -1);
+ }
+ } else if (_moduleResult == 2) {
+ createScene(1, 1);
+ } else if (_moduleResult == 3) {
+ if (getGlobalVar(0x0A310817)) {
+ createScene(4, 0);
+ } else {
+ setGlobalVar(0x0A310817, 1);
+ createScene(7, -1);
+ }
+ }
+ break;
+ case 4:
+ if (_moduleResult == 0) {
+ leaveModule(1);
+ } else {
+ createScene(3, 1);
+ }
+ break;
+ case 6:
+ if (_moduleResult == 0) {
+ createScene(1006, -1);
+ } else if (_moduleResult == 1) {
+ createScene(1, 2);
+ }
+ break;
+ case 7:
+ leaveModule(0);
+ break;
+ case 8:
+ createScene(1008, -1);
+ break;
+ case 1002:
+ createScene(2, 1);
+ break;
+ case 1003:
+ createScene(3, 0);
+ break;
+ case 1006:
+ createScene(8, -1);
+ break;
+ case 1008:
+ createScene(6, 0);
+ break;
+ }
+ }
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2600.h b/engines/neverhood/module2600.h
new file mode 100644
index 0000000..66ee360
--- /dev/null
+++ b/engines/neverhood/module2600.h
@@ -0,0 +1,45 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2600_H
+#define NEVERHOOD_MODULE2600_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module2600
+
+class Module2600 : public Module {
+public:
+ Module2600(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2600();
+protected:
+ void createScene(int sceneNum, int which);
+ void updateScene();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2600_H */
Commit: 28be9f6f4bb8db60b69bb22e72187dfa80357d9f
https://github.com/scummvm/scummvm/commit/28be9f6f4bb8db60b69bb22e72187dfa80357d9f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Add Scene2609 and hook Module2600 to the GameModule
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2600.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index a1a1fc3..fa0af07 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -292,8 +292,8 @@ void GameModule::startup() {
createModule(2100, 3);
#endif
#if 1
- _vm->gameState().sceneNum = 0;
- createModule(1400, -1);
+ _vm->gameState().sceneNum = 8;
+ createModule(2600, -1);
#endif
}
@@ -358,6 +358,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
break;
+ case 2600:
+ setGlobalVar(0x91080831, 0x40271018);
+ _childObject = new Module2600(_vm, this, which);
+ break;
case 3000:
setGlobalVar(0x91080831, 0x81293110);
_childObject = new Module3000(_vm, this, which);
@@ -465,6 +469,13 @@ void GameModule::updateModule() {
createModule(1000, 1);
}
break;
+ case 2600:
+ if (_moduleResult == 1) {
+ createModule(2500, 0);
+ } else {
+ createModule(1200, 1);
+ }
+ break;
case 3000:
if (_moduleResult == 1) {
createModule(1900, 0);
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 0217fe4..0163e97 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -76,7 +76,7 @@ void Module2600::createScene(int sceneNum, int which) {
createSmackerScene(0x30090001, true, true, false);
break;
case 8:
-//TODO _childObject = new Scene2609(_vm, this, which);
+ _childObject = new Scene2609(_vm, this, which);
break;
case 1002:
if (getGlobalVar(0x40040831) == 1) {
@@ -196,4 +196,138 @@ void Module2600::updateScene() {
}
}
+SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
+ : StaticSprite(vm, 1400), _soundResource1(vm), _soundResource2(vm),
+ _soundResource3(vm), _soundResource4(vm), _parentScene(parentScene),
+ _countdown(0) {
+
+ _spriteResource.load2(0x825A6923);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ if (!getGlobalVar(0x4E0BE910))
+ setVisible(false);
+
+ _drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _deltaRect = _drawRect;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ processDelta();
+ _needRefresh = true;
+
+ _soundResource1.load(0x10267160);
+ _soundResource2.load(0x7027FD64);
+ _soundResource3.load(0x44043000);
+ _soundResource4.load(0x44045000);
+
+ SetUpdateHandler(&SsScene2609Button::update);
+ SetMessageHandler(&SsScene2609Button::handleMessage);
+
+}
+
+void SsScene2609Button::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown == 0)) {
+ if (getGlobalVar(0x4E0BE910)) {
+ setGlobalVar(0x4E0BE910, 0);
+ sendMessage(_parentScene, 0x2001, 0);
+ } else {
+ setGlobalVar(0x4E0BE910, 1);
+ sendMessage(_parentScene, 0x2002, 0);
+ }
+ }
+}
+
+uint32 SsScene2609Button::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0) {
+ sendMessage(_parentScene, 0x2000, 0);
+ if (getGlobalVar(0x4E0BE910)) {
+ setVisible(false);
+ _soundResource4.play();
+ _soundResource2.play();
+ _countdown = 12;
+ } else {
+ setVisible(true);
+ _soundResource3.play();
+ _soundResource1.play();
+ _countdown = 96;
+ }
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2609Water::AsScene2609Water(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1000) {
+
+ _x = 240;
+ _y = 420;
+ setDoDeltaX(1);
+ createSurface1(0x9C210C90, 1200);
+ setClipRect(260, 260, 400, 368);
+ // TODO Sound1ChList_addSoundResource(0xDC2769B0, true);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2609Water::handleMessage);
+ if (getGlobalVar(0x4E0BE910))
+ sendMessage(this, 0x2002, 0);
+}
+
+uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2001:
+ setFileHash1();
+ setVisible(false);
+ // TODO Sound1ChList_stop(0xDC2769B0);
+ break;
+ case 0x2002:
+ setFileHash(0x9C210C90, 0, -1);
+ setVisible(true);
+ // TODO Sound1ChList_playLooping(0xDC2769B0);
+ break;
+ }
+ return messageResult;
+}
+
+Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _isBusy(false) {
+
+ _surfaceFlag = true;
+ setBackground(0x51409A16);
+ setPalette(0x51409A16);
+ _asWater = insertSprite<AsScene2609Water>();
+ _ssButton = insertSprite<SsScene2609Button>(this);
+ _vm->_collisionMan->addSprite(_ssButton);
+ insertMouse435(0x09A1251C, 20, 620);
+ insertStaticSprite(0x02138002, 1200);
+ insertStaticSprite(0x825E2827, 1200);
+ SetMessageHandler(&Scene2609::handleMessage);
+ SetUpdateHandler(&Scene::update);
+}
+
+uint32 Scene2609::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_isBusy)
+ leaveScene(0);
+ break;
+ case 0x2000:
+ _isBusy = true;
+ break;
+ case 0x2001:
+ _isBusy = false;
+ sendMessage(_asWater, 0x2001, 0);
+ break;
+ case 0x2002:
+ _isBusy = false;
+ sendMessage(_asWater, 0x2002, 0);
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2600.h b/engines/neverhood/module2600.h
index 66ee360..d6580a6 100644
--- a/engines/neverhood/module2600.h
+++ b/engines/neverhood/module2600.h
@@ -40,6 +40,37 @@ protected:
void updateScene();
};
+class SsScene2609Button : public StaticSprite {
+public:
+ SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2609Water : public AnimatedSprite {
+public:
+ AsScene2609Water(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2609 : public Scene {
+public:
+ Scene2609(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ bool _isBusy;
+ Sprite *_asWater;
+ Sprite *_ssButton;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2600_H */
Commit: 770689b2f1c998d637f122c524412639debfed07
https://github.com/scummvm/scummvm/commit/770689b2f1c998d637f122c524412639debfed07
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Start with Module2700 (doesn't do anything yet)
Changed paths:
A engines/neverhood/module2700.cpp
A engines/neverhood/module2700.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 2eefff9..adf58b1 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -26,6 +26,7 @@ MODULE_OBJS = \
module2200.o \
module2300.o \
module2600.o \
+ module2700.o \
module3000.o \
mouse.o \
navigationscene.o \
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
new file mode 100644
index 0000000..83b1d90
--- /dev/null
+++ b/engines/neverhood/module2700.cpp
@@ -0,0 +1,333 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2700.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/module1000.h"
+
+namespace Neverhood {
+
+static const NRect kScene2710ClipRect = NRect(0, 0, 626, 480);
+
+static const uint32 kScene2710StaticSprites[] = {
+ 0x0D2016C0,
+ 0
+};
+
+static const NRect kScene2711ClipRect = NRect(0, 0, 521, 480);
+
+static const uint32 kScene2711FileHashes1[] = {
+ 0,
+ 0x100801A1,
+ 0x201081A0,
+ 0x006800A4,
+ 0x40390120,
+ 0x000001B1,
+ 0x001000A1,
+ 0
+};
+
+static const uint32 kScene2711FileHashes2[] = {
+ 0,
+ 0x40403308,
+ 0x71403168,
+ 0x80423928,
+ 0x224131A8,
+ 0x50401328,
+ 0x70423328,
+ 0
+};
+
+static const uint32 kScene2711FileHashes3[] = {
+ 0,
+ 0x1088A021,
+ 0x108120E5,
+ 0x18A02321,
+ 0x148221A9,
+ 0x10082061,
+ 0x188820E1,
+ 0
+};
+
+static const NRect kScene2724ClipRect = NRect(0, 141, 640, 480);
+
+static const uint32 kScene2724StaticSprites[] = {
+ 0xC20D00A5,
+ 0
+};
+
+static const NRect kScene2725ClipRect = NRect(0, 0, 640, 413);
+
+static const uint32 kScene2725StaticSprites[] = {
+ 0xC20E00A5,
+ 0
+};
+
+Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
+ _soundResource3(vm), _soundResource4(vm), _soundIndex(0), _flag1(false) {
+
+ // TODO Music18hList_add(0x42212411, 0x04020210);
+ // TODO Music18hList_play(0x04020210, 24, 2, 1);
+ SetMessageHandler(&Module2700::handleMessage);
+
+
+ if (which < 0) {
+ which = _vm->gameState().which;
+ if (_vm->gameState().sceneNum == 0 || _vm->gameState().sceneNum == 30 || _vm->gameState().sceneNum == 31)
+ which = -1;
+ createScene(_vm->gameState().sceneNum, which);
+ } else {
+ createScene(0, 0);
+ }
+
+ _soundResource1.load(0x00880CCC);
+ _soundResource2.load(0x00880CC0);
+ _soundResource3.load(0x00880CCC);
+ _soundResource4.load(0x00880CC0);
+
+}
+
+Module2700::~Module2700() {
+ // TODO Sound1ChList_sub_407A50(0x42212411);
+}
+
+void Module2700::createScene(int sceneNum, int which) {
+ debug("Module2700::createScene(%d, %d)", sceneNum, which);
+ if (sceneNum != 30 && sceneNum != 31)
+ _vm->gameState().which = which;
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+//TODO _childObject = new Scene2701(_vm, this, which);
+ break;
+ case 1:
+//TODO _childObject = new Scene2702(_vm, this, which);
+ break;
+ case 2:
+ if (which == 6 || which == 7)
+ createScene2703(which, 0x004B1710);
+ else if (which == 4 || which == 5)
+ createScene2703(which, 0x004B1738);
+ else if (which == 2 || which == 3)
+ createScene2703(which, 0x004B1760);
+ else
+ createScene2703(which, 0x004B1788);
+ break;
+ case 3:
+ createScene2704(which, 0x004B17B0, 150);
+ break;
+ case 4:
+ createScene2704(which, 0x004B17D8, 150);
+ break;
+ case 5:
+ if (which >= 4) {
+//TODO _childObject = new Scene2706(_vm, this, which);
+ } else if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1828, 150);
+ } else {
+ createScene2704(which, 0x004B1800, 150);
+ }
+ break;
+ case 6:
+ createScene2704(which, 0x004B1850, 150);
+ break;
+ case 7:
+ if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1878, 150);
+ } else {
+ createScene2704(which, 0x004B18A0, 150);
+ }
+ break;
+ case 8:
+ if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B18C8, 150);
+ } else {
+ createScene2704(which, 0x004B18F0, 150);
+ }
+ break;
+ case 9:
+ createScene2704(which, 0x004B18F0, 150, kScene2710StaticSprites, &kScene2710ClipRect);
+ break;
+ case 10:
+ // TODO _vm->gameModule()->initScene2808Vars2();
+ _scene2711StaticSprites[0] = kScene2711FileHashes1[getSubVar(0x40005834, 2)];
+ _scene2711StaticSprites[1] = kScene2711FileHashes2[getSubVar(0x40005834, 1)];
+ _scene2711StaticSprites[2] = kScene2711FileHashes3[getSubVar(0x40005834, 0)];
+ _scene2711StaticSprites[3] = 0x0261282E;
+ _scene2711StaticSprites[4] = 0x9608E5A0;
+ _scene2711StaticSprites[5] = 0;
+ createScene2704(which, 0x004B1950, 150, _scene2711StaticSprites, &kScene2711ClipRect);
+ break;
+ case 11:
+ createScene2704(which, 0x004B19E0, 150);
+ break;
+ case 12:
+ createScene2704(which, 0x004B1A08, 150);
+ break;
+ case 13:
+ createScene2704(which, 0x004B1A30, 150);
+ break;
+ case 14:
+ if (which == 4 || which == 5) {
+ createScene2704(which, 0x004B1A58, 150);
+ } else if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1A80, 150);
+ } else {
+ createScene2704(which, 0x004B1AA8, 150);
+ }
+ break;
+ case 15:
+ if (which == 4 || which == 5) {
+ createScene2704(which, 0x004B1AD0, 150);
+ } else if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1AF8, 150);
+ } else {
+ createScene2704(which, 0x004B1B20, 150);
+ }
+ break;
+ case 16:
+ if (which == 4 || which == 5) {
+ createScene2704(which, 0x004B1B48, 150);
+ } else if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1B70, 150);
+ } else {
+ createScene2704(which, 0x004B1B98, 150);
+ }
+ break;
+ case 17:
+ if (which == 4 || which == 5) {
+ createScene2704(which, 0x004B1BC0, 150);
+ } else if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1BE8, 150);
+ } else {
+ createScene2704(which, 0x004B1C10, 150);
+ }
+ break;
+ case 18:
+ if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1C38, 150);
+ } else {
+ createScene2704(which, 0x004B1C60, 150);
+ }
+ break;
+ case 19:
+ if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1CB0, 150);
+ } else {
+ createScene2704(which, 0x004B1C88, 150);
+ }
+ break;
+ case 20:
+ if (which == 2 || which == 3) {
+ createScene2704(which, 0x004B1CD8, 150);
+ } else {
+ createScene2704(which, 0x004B1D00, 150);
+ }
+ break;
+ case 21:
+ createScene2704(which, 0x004B1D28, 150);
+ break;
+ case 22:
+ createScene2704(which, 0x004B1D50, 150);
+ break;
+ case 23:
+ createScene2704(which, 0x004B1D78, 150, kScene2724StaticSprites, &kScene2724ClipRect);
+ break;
+ case 24:
+ createScene2704(which, 0x004B1DB0, 150, kScene2725StaticSprites, &kScene2725ClipRect);
+ break;
+ case 25:
+ createScene2704(which, 0x004B1DE8, 150);
+ break;
+ case 26:
+ createScene2704(which, 0x004B1E10, 150);
+ break;
+ case 27:
+ createScene2704(which, 0x004B1E38, 150);
+ break;
+ case 28:
+ createScene2704(which, 0x004B1E60, 150);
+ break;
+ case 30:
+ _childObject = new Class152(_vm, this, 0x09507248, 0x0724C09D);
+ break;
+ case 31:
+//TODO _childObject = new Scene2732(_vm, this, which);
+ break;
+ }
+ SetUpdateHandler(&Module2700::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2700::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1) {
+ createScene(1, 3);
+ } else {
+ leaveModule(0);
+ }
+ break;
+ }
+ }
+}
+
+void Module2700::update() {
+}
+
+uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Module::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x200D:
+ switch (_soundIndex) {
+ case 0:
+ _soundResource1.play();
+ break;
+ case 1:
+ _soundResource2.play();
+ break;
+ case 2:
+ _soundResource3.play();
+ break;
+ case 3:
+ _soundResource4.play();
+ break;
+ }
+ _soundIndex++;
+ if (_soundIndex >= 4)
+ _soundIndex = 0;
+ break;
+ }
+ return messageResult;
+}
+
+void Module2700::createScene2703(int which, uint32 sceneInfoId, const uint32 *staticSprites, const NRect *clipRect) {
+ // TODO
+}
+
+void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
+ // TODO
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
new file mode 100644
index 0000000..a0f424e
--- /dev/null
+++ b/engines/neverhood/module2700.h
@@ -0,0 +1,56 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2700_H
+#define NEVERHOOD_MODULE2700_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module2700
+
+class Module2700 : public Module {
+public:
+ Module2700(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2700();
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ int _soundIndex;
+ bool _flag1;
+ uint32 _scene2711StaticSprites[6];
+ void createScene(int sceneNum, int which);
+ void updateScene();
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createScene2703(int which, uint32 sceneInfoId, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
+ void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2700_H */
Commit: ee1bf85456c380c4fd01fb749e6f009a5c0c2147
https://github.com/scummvm/scummvm/commit/ee1bf85456c380c4fd01fb749e6f009a5c0c2147
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Add new SceneInfo2700 structure and some tables using it for Module2700
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 2d11931..33b5a3e 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -277,6 +277,54 @@ struct SceneInfo140Item {
};
+struct SceneInfo2700Item {
+ uint32 id;
+ uint32 bgFilename;
+ uint32 class437Filename;
+ uint32 dataResourceFilename;
+ uint32 pointListName;
+ uint32 rectListName;
+ uint32 exPaletteFilename2;
+ uint32 exPaletteFilename1;
+ uint32 mouseCursorFilename;
+ int16 which1;
+ int16 which2;
+ uint32 field24;
+
+ void load(uint32 offset) {
+ byte *item = getData(offset);
+ id = offset;
+ // Only save the hashes instead of the full names
+ bgFilename = calcHash(getStringP(READ_LE_UINT32(item + 0)));
+ class437Filename = calcHash(getStringP(READ_LE_UINT32(item + 4)));
+ dataResourceFilename = calcHash(getStringP(READ_LE_UINT32(item + 8)));
+ pointListName = calcHash(getStringP(READ_LE_UINT32(item + 12)));
+ rectListName = calcHash(getStringP(READ_LE_UINT32(item + 16)));
+ exPaletteFilename2 = calcHash(getStringP(READ_LE_UINT32(item + 20)));
+ exPaletteFilename1 = calcHash(getStringP(READ_LE_UINT32(item + 24)));
+ mouseCursorFilename = calcHash(getStringP(READ_LE_UINT32(item + 28)));
+ which1 = READ_LE_UINT16(item + 32);
+ which2 = READ_LE_UINT16(item + 34);
+ field24 = READ_LE_UINT16(item + 36);
+ }
+
+ void save(FILE *fd) {
+ writeUint32LE(fd, id);
+ writeUint32LE(fd, bgFilename);
+ writeUint32LE(fd, class437Filename);
+ writeUint32LE(fd, dataResourceFilename);
+ writeUint32LE(fd, pointListName);
+ writeUint32LE(fd, rectListName);
+ writeUint32LE(fd, exPaletteFilename2);
+ writeUint32LE(fd, exPaletteFilename1);
+ writeUint32LE(fd, mouseCursorFilename);
+ writeUint16LE(fd, which1);
+ writeUint16LE(fd, which2);
+ writeUint32LE(fd, field24);
+ }
+
+};
+
template<class ITEMCLASS>
class StaticDataList {
public:
@@ -456,6 +504,7 @@ StaticDataListVector<RectList> rectLists;
StaticDataListVector<MessageList> messageLists;
StaticDataListVector<NavigationList> navigationLists;
StaticDataVector<SceneInfo140Item> sceneInfo140Items;
+StaticDataVector<SceneInfo2700Item> sceneInfo2700Items;
void addMessageList(uint32 messageListCount, uint32 messageListOffset) {
MessageList *messageList = new MessageList();
@@ -474,6 +523,7 @@ int main(int argc, char *argv[]) {
messageLists.loadListVector(messageListOffsets);
navigationLists.loadListVector(navigationListOffsets);
sceneInfo140Items.loadVector(sceneInfo140Offsets);
+ sceneInfo2700Items.loadVector(sceneInfo2700Offsets);
datFile = fopen("neverhood.dat", "wb");
@@ -485,6 +535,7 @@ int main(int argc, char *argv[]) {
hitRectLists.saveListVector(datFile);
navigationLists.saveListVector(datFile);
sceneInfo140Items.saveVector(datFile);
+ sceneInfo2700Items.saveVector(datFile);
fclose(datFile);
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index f0308bd..51954f8 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -420,6 +420,14 @@ static const uint32 navigationListOffsets[] = {
// Module2000
3, 0x004B7B48,
3, 0x004B7B00,
+ // Module2600
+ 2, 0x004B8608,
+ 4, 0x004B8638,
+ 2, 0x004B8698,
+ 2, 0x004B86C8,
+ 4, 0x004B8758,
+ 4, 0x004B86F8,
+ 2, 0x004B87B8,
// Module3000
2, 0x004B7C80,
2, 0x004B7CE0,
@@ -478,3 +486,56 @@ static const uint32 sceneInfo140Offsets[] = {
0
};
+static const uint32 sceneInfo2700Offsets[] = {
+ //
+ 0x004B1710,
+ 0x004B1738,
+ 0x004B1760,
+ 0x004B1788,
+ 0x004B17B0,
+ 0x004B17D8,
+ 0x004B1800,
+ 0x004B1828,
+ 0x004B1850,
+ 0x004B1878,
+ 0x004B18A0,
+ 0x004B18C8,
+ 0x004B18F0,
+ 0x004B1918,
+ //
+ 0x004B19E0,
+ 0x004B1A08,
+ 0x004B1A30,
+ 0x004B1A58,
+ 0x004B1A80,
+ 0x004B1AA8,
+ 0x004B1AD0,
+ 0x004B1AF8,
+ 0x004B1B20,
+ 0x004B1B48,
+ 0x004B1B70,
+ 0x004B1B98,
+ 0x004B1BC0,
+ 0x004B1BE8,
+ 0x004B1C10,
+ 0x004B1C38,
+ 0x004B1C60,
+ 0x004B1C88,
+ 0x004B1CB0,
+ 0x004B1CD8,
+ 0x004B1D00,
+ 0x004B1D28,
+ 0x004B1D50,
+ 0x004B1D78,
+ //
+ 0x004B1DB0,
+ //
+ 0x004B1DE8,
+ 0x004B1E10,
+ 0x004B1E38,
+ 0x004B1E60,
+ //
+ 0x004B1950,
+ //
+ 0
+};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 72e8133..7063311 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: e7673ffdc63f4d0a9b7b6f39161c3150537f3cd6
https://github.com/scummvm/scummvm/commit/e7673ffdc63f4d0a9b7b6f39161c3150537f3cd6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Updated dat
Changed paths:
dists/engine-data/neverhood.dat
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 7063311..b97c5a4 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: aa789ee02bf55828fb8f0bfa9aa1efe0ecb44310
https://github.com/scummvm/scummvm/commit/aa789ee02bf55828fb8f0bfa9aa1efe0ecb44310
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: More work in Module2700
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index fa0af07..9bdaa86 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -38,6 +38,7 @@
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
#include "neverhood/module2600.h"
+#include "neverhood/module2700.h"
#include "neverhood/module3000.h"
namespace Neverhood {
@@ -291,10 +292,15 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2100, 3);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 8;
createModule(2600, -1);
#endif
+#if 1
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 5;
+ createModule(2700, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -362,6 +368,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x40271018);
_childObject = new Module2600(_vm, this, which);
break;
+ case 2700:
+ setGlobalVar(0x91080831, 0x42212411);
+ _childObject = new Module2700(_vm, this, which);
+ break;
case 3000:
setGlobalVar(0x91080831, 0x81293110);
_childObject = new Module3000(_vm, this, which);
@@ -476,6 +486,9 @@ void GameModule::updateModule() {
createModule(1200, 1);
}
break;
+ case 2700:
+ createModule(1800, 2);
+ break;
case 3000:
if (_moduleResult == 1) {
createModule(1900, 0);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 97729cb..ff0afa6 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -396,6 +396,8 @@ void Module2200::updateScene() {
}
}
}
+
+#undef HallOfRecordsSceneLink
// Scene2201
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 83b1d90..f5dc078 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -166,7 +166,7 @@ void Module2700::createScene(int sceneNum, int which) {
}
break;
case 9:
- createScene2704(which, 0x004B18F0, 150, kScene2710StaticSprites, &kScene2710ClipRect);
+ createScene2704(which, 0x004B1918, 150, kScene2710StaticSprites, &kScene2710ClipRect);
break;
case 10:
// TODO _vm->gameModule()->initScene2808Vars2();
@@ -279,14 +279,196 @@ void Module2700::createScene(int sceneNum, int which) {
_childObject->handleUpdate();
}
+#define SceneLinkIf(moduleResult, sceneNum, which) \
+ if (_moduleResult == moduleResult) { createScene(sceneNum, which); break; }
+
void Module2700::updateScene() {
if (!updateChild()) {
+
+ debug("sceneNum = %d; _moduleResult = %d", _vm->gameState().sceneNum, _moduleResult);
+
switch (_vm->gameState().sceneNum) {
case 0:
- if (_moduleResult == 1) {
- createScene(1, 3);
- } else {
- leaveModule(0);
+ SceneLinkIf(1, 1, 0);
+ leaveModule(0);
+ break;
+ case 1:
+ SceneLinkIf(1, 14, 1);
+ SceneLinkIf(2, 2, 2);
+ SceneLinkIf(3, 14, 3);
+ SceneLinkIf(4, 2, 6);
+ SceneLinkIf(5, 2, 4);
+ createScene(0, 1);
+ break;
+ case 2:
+ SceneLinkIf(1, 5, 0);
+ SceneLinkIf(2, 1, 2);
+ SceneLinkIf(3, 5, 2);
+ SceneLinkIf(4, 1, 5);
+ SceneLinkIf(5, 5, 4);
+ SceneLinkIf(6, 1, 4);
+ SceneLinkIf(7, 11, 0);
+ createScene(3, 0);
+ break;
+ case 3:
+ createScene(2, 0);
+ break;
+ case 4:
+ SceneLinkIf(1, 7, 2);
+ createScene(5, 5);
+ break;
+ case 5:
+ SceneLinkIf(1, 6, 0);
+ SceneLinkIf(2, 2, 3);
+ SceneLinkIf(3, 8, 2);
+ SceneLinkIf(4, 2, 5);
+ SceneLinkIf(5, 4, 0);
+ SceneLinkIf(6, 7, 0);
+ createScene(2, 1);
+ break;
+ case 6:
+ SceneLinkIf(1, 8, 0);
+ createScene(5, 1);
+ break;
+ case 7:
+ SceneLinkIf(1, 8, 3);
+ SceneLinkIf(2, 4, 1);
+ SceneLinkIf(3, 9, 0);
+ createScene(5, 6);
+ break;
+ case 8:
+ SceneLinkIf(1, 10, 0);
+ SceneLinkIf(2, 5, 3);
+ SceneLinkIf(3, 7, 1);
+ createScene(6, 1);
+ break;
+ case 9:
+ SceneLinkIf(1, 10, 1);
+ createScene(7, 3);
+ break;
+ case 10:
+ SceneLinkIf(1, 9, 1);
+ createScene(8, 1);
+ break;
+ case 11:
+ SceneLinkIf(1, 12, 0);
+ createScene(2, 7);
+ break;
+ case 12:
+ SceneLinkIf(1, 13, 0);
+ createScene(11, 1);
+ break;
+ case 13:
+ SceneLinkIf(1, 30, 0);
+ createScene(12, 1);
+ break;
+ case 14:
+ SceneLinkIf(1, 1, 1);
+ SceneLinkIf(2, 15, 3);
+ SceneLinkIf(3, 1, 3);
+ SceneLinkIf(4, 15, 5);
+ SceneLinkIf(5, 22, 0);
+ createScene(15, 1);
+ break;
+ case 15:
+ SceneLinkIf(1, 14, 0);
+ SceneLinkIf(2, 16, 3);
+ SceneLinkIf(3, 14, 2);
+ SceneLinkIf(4, 16, 5);
+ SceneLinkIf(5, 14, 4);
+ createScene(16, 1);
+ break;
+ case 16:
+ SceneLinkIf(1, 15, 0);
+ SceneLinkIf(2, 17, 3);
+ SceneLinkIf(3, 15, 2);
+ SceneLinkIf(4, 17, 5);
+ SceneLinkIf(5, 15, 4);
+ createScene(17, 1);
+ break;
+ case 17:
+ SceneLinkIf(1, 16, 0);
+ SceneLinkIf(2, 18, 3);
+ SceneLinkIf(3, 16, 2);
+ SceneLinkIf(4, 20, 1);
+ SceneLinkIf(5, 16, 4);
+ createScene(18, 1);
+ break;
+ case 18:
+ SceneLinkIf(1, 17, 0);
+ SceneLinkIf(2, 19, 2);
+ SceneLinkIf(3, 17, 2);
+ createScene(19, 0);
+ break;
+ case 19:
+ SceneLinkIf(1, 20, 2);
+ SceneLinkIf(2, 18, 2);
+ SceneLinkIf(3, 20, 0);
+ createScene(18, 0);
+ break;
+ case 20:
+ SceneLinkIf(1, 17, 4);
+ SceneLinkIf(2, 19, 1);
+ SceneLinkIf(3, 21, 0);
+ createScene(19, 3);
+ break;
+ case 21:
+ // TODO? GameState_sub_469C50(&field_52, 0);
+ // TODO MusicMan_stopAll (if field_52 above = 1)
+ // TODO Music18hList_delete(_musicFileHash);
+ // TODO Music18hList_play(0x04020210, 0, 2, 1);
+ // TODO Sound1ChList_sub_407AF0(0x42212411);
+ createScene(20, 3);
+ break;
+ case 22:
+ SceneLinkIf(1, 23, 0);
+ createScene(14, 5);
+ break;
+ case 23:
+ SceneLinkIf(1, 24, 0);
+ createScene(22, 1);
+ break;
+ case 24:
+ SceneLinkIf(1, 25, 0);
+ createScene(23, 1);
+ break;
+ case 25:
+ SceneLinkIf(1, 26, 0);
+ createScene(24, 1);
+ break;
+ case 26:
+ SceneLinkIf(1, 27, 0);
+ createScene(25, 1);
+ break;
+ case 27:
+ SceneLinkIf(1, 28, 0);
+ createScene(26, 1);
+ break;
+ case 28:
+ SceneLinkIf(1, 31, 0);
+ createScene(27, 1);
+ break;
+ case 29:
+ createScene(13, 1);
+ break;
+ case 30:
+ createScene(28, 1);
+ break;
+ }
+ } else {
+ switch (_vm->gameState().sceneNum) {
+ case 21:
+ if (!_flag1) {
+ // TODO Music18hList_stop(0x04020210, 0, 1);
+ // TODO _vm->gameModule()->initScene2801Vars();
+ _musicFileHash = getGlobalVar(0x89A82A15);
+ // TODO? GameState_sub_469C50(&field_52, 0);
+ // TODO MusicMan_create();
+ // TODO Music18hList_add2(0x42212411, _musicFileHash);
+ // TODO Music18hList_play2(_musicFileHash, 0, /*TODO */???, 1);
+ // TODO Sound1ChList_addSoundResource(0x42212411, 0x44014282, true);
+ // TODO Sound1ChList_setSoundValues(0x44014282, true, 120, 360, 72, 0);
+ _flag1 = true;
}
break;
}
@@ -294,6 +476,7 @@ void Module2700::updateScene() {
}
void Module2700::update() {
+
}
uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -327,7 +510,113 @@ void Module2700::createScene2703(int which, uint32 sceneInfoId, const uint32 *st
}
void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
- // TODO
+ _childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
+}
+
+Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
+ const uint32 *staticSprites, const NRect *clipRect)
+ : Scene(vm, parentModule, true) {
+
+ SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2704::handleMessage);
+ SetUpdateHandler(&Scene2704::update);
+
+ setBackground(sceneInfo->bgFilename);
+ setPalette(sceneInfo->bgFilename);
+
+ if (sceneInfo->exPaletteFilename1)
+ _palette->addPalette(sceneInfo->exPaletteFilename1, 0, 65, 0);
+
+ if (sceneInfo->exPaletteFilename2)
+ _palette->addPalette(sceneInfo->exPaletteFilename2, 65, 31, 65);
+
+ while (staticSprites && *staticSprites)
+ insertStaticSprite(*staticSprites++, 1100);
+
+ insertMouse433(sceneInfo->mouseCursorFilename);
+
+ if (sceneInfo->class437Filename) {
+//TODO _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
+ _class521 = insertSprite<Class521>(this, 320, 240);
+//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ } else {
+//TODO _class437 = NULL;
+//TODO _class517 = NULL;
+ _class521 = insertSprite<Class521>(this, 320, 240);
+ }
+
+//TODO _class518 = insertSprite<Class518>(_class521);
+
+ _which1 = sceneInfo->which1;
+ _which2 = sceneInfo->which2;
+
+ _dataResource.load(sceneInfo->dataResourceFilename);
+ _pointList = _dataResource.getPointArray(sceneInfo->pointListName);
+ _class521->setPathPoints(_pointList);
+
+ if (sceneInfo->rectListName) {
+ _rectList = _dataResource.getRectArray(sceneInfo->rectListName);
+ // TODO _class521->setPathRects(_rectList);
+ }
+
+ if (which == _which2) {
+ NPoint testPoint = (*_pointList)[_pointList->size() - 1];
+ sendMessage(_class521, 0x2002, _pointList->size() - 1);
+ if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
+ sendMessage(_class521, 0x2009, 0);
+ else
+ sendMessage(_class521, 0x2007, 0);
+ } else {
+ NPoint testPoint = (*_pointList)[0];
+ sendMessage(_class521, 0x2002, 0);
+ if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
+ sendMessage(_class521, 0x2009, 0);
+ else
+ sendMessage(_class521, 0x2008, 0);
+ }
+
+ if (clipRect) {
+ _class521->getClipRect() = *clipRect;
+ if (_class517)
+ _class517->getClipRect() = *clipRect;
+ if (_class520)
+ _class520->getClipRect() = *clipRect;
+ if (_class519)
+ _class519->getClipRect() = *clipRect;
+ if (_class518)
+ _class518->getClipRect() = *clipRect;
+ }
+
+}
+
+void Scene2704::update() {
+ Scene::update();
+ if (_mouseClicked) {
+ sendPointMessage(_class521, 0x2004, _mouseClickPos);
+ _mouseClicked = false;
+ }
+}
+
+uint32 Scene2704::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2005:
+ if (_which1 >= 0)
+ leaveScene(_which1);
+ break;
+ case 0x2006:
+ if (_which2 >= 0)
+ leaveScene(_which2);
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index a0f424e..4df284c 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/module1600.h"
namespace Neverhood {
@@ -43,6 +44,7 @@ protected:
int _soundIndex;
bool _flag1;
uint32 _scene2711StaticSprites[6];
+ uint32 _musicFileHash;
void createScene(int sceneNum, int which);
void updateScene();
void update();
@@ -51,6 +53,19 @@ protected:
void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
+class Scene2704 : public Scene {
+public:
+ Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
+ const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
+protected:
+ Class521 *_class521;
+ int _which1, _which2;
+ NPointArray *_pointList;
+ NRectArray *_rectList;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2700_H */
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index ef8e532..9678031 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -601,6 +601,13 @@ NPointArray *DataResource::getPointArray(uint32 nameHash) {
return NULL;
}
+NRectArray *DataResource::getRectArray(uint32 nameHash) {
+ DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(nameHash, 3);
+ if (drDirectoryItem)
+ return _rectArrays[drDirectoryItem->offset];
+ return NULL;
+}
+
HitRectList *DataResource::getHitRectList() {
DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(calcHash("HitArray"), 3);
if (drDirectoryItem)
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index f8d282c..6436509 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -154,6 +154,7 @@ public:
void unload();
NPoint getPoint(uint32 nameHash);
NPointArray *getPointArray(uint32 nameHash);
+ NRectArray *getRectArray(uint32 nameHash);
HitRectList *getHitRectList();
MessageList *getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY);
protected:
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index d897d7a..4e7d24c 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -140,6 +140,26 @@ void StaticData::load(const char *filename) {
_sceneInfo140Items[id] = sceneInfo140;
}
+ // Load SceneInfo2700 items
+ uint32 sceneInfo2700ItemsCount = fd.readUint32LE();
+ debug("sceneInfo2700ItemsCount: %d", sceneInfo2700ItemsCount);
+ for (uint32 i = 0; i < sceneInfo2700ItemsCount; i++) {
+ SceneInfo2700 *sceneInfo2700 = new SceneInfo2700();
+ uint32 id = fd.readUint32LE();
+ sceneInfo2700->bgFilename = fd.readUint32LE();
+ sceneInfo2700->class437Filename = fd.readUint32LE();
+ sceneInfo2700->dataResourceFilename = fd.readUint32LE();
+ sceneInfo2700->pointListName = fd.readUint32LE();
+ sceneInfo2700->rectListName = fd.readUint32LE();
+ sceneInfo2700->exPaletteFilename2 = fd.readUint32LE();
+ sceneInfo2700->exPaletteFilename1 = fd.readUint32LE();
+ sceneInfo2700->mouseCursorFilename = fd.readUint32LE();
+ sceneInfo2700->which1 = fd.readUint16LE();
+ sceneInfo2700->which2 = fd.readUint16LE();
+ sceneInfo2700->field24 = fd.readUint32LE();
+ _sceneInfo2700Items[id] = sceneInfo2700;
+ }
+
}
HitRectList *StaticData::getHitRectList(uint32 id) {
@@ -172,4 +192,10 @@ SceneInfo140 *StaticData::getSceneInfo140Item(uint32 id) {
return _sceneInfo140Items[id];
}
+SceneInfo2700 *StaticData::getSceneInfo2700(uint32 id) {
+ if (!_sceneInfo2700Items[id])
+ error("StaticData::getSceneInfo2700() SceneInfo2700 with id %08X not found", id);
+ return _sceneInfo2700Items[id];
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index 2a0cc90..c223735 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -77,6 +77,21 @@ struct SceneInfo140 {
byte count;
};
+struct SceneInfo2700 {
+ uint32 id;
+ uint32 bgFilename;
+ uint32 class437Filename;
+ uint32 dataResourceFilename;
+ uint32 pointListName;
+ uint32 rectListName;
+ uint32 exPaletteFilename2;
+ uint32 exPaletteFilename1;
+ uint32 mouseCursorFilename;
+ int16 which1;
+ int16 which2;
+ uint32 field24;
+};
+
class StaticData {
public:
StaticData();
@@ -87,12 +102,14 @@ public:
MessageList *getMessageList(uint32 id);
NavigationList *getNavigationList(uint32 id);
SceneInfo140 *getSceneInfo140Item(uint32 id);
+ SceneInfo2700 *getSceneInfo2700(uint32 id);
protected:
Common::HashMap<uint32, HitRectList*> _hitRectLists;
Common::HashMap<uint32, RectList*> _rectLists;
Common::HashMap<uint32, MessageList*> _messageLists;
Common::HashMap<uint32, NavigationList*> _navigationLists;
Common::HashMap<uint32, SceneInfo140*> _sceneInfo140Items;
+ Common::HashMap<uint32, SceneInfo2700*> _sceneInfo2700Items;
};
} // End of namespace Neverhood
Commit: 463039c40666c5417cf298365d31690299685e5f
https://github.com/scummvm/scummvm/commit/463039c40666c5417cf298365d31690299685e5f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Add Scene2706
- Move calcDistance from Class521 to graphics.cpp
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 9bdaa86..9ed447a 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -297,7 +297,7 @@ void GameModule::startup() {
createModule(2600, -1);
#endif
#if 1
- _vm->gameState().which = 0;
+ _vm->gameState().which = 4;
_vm->gameState().sceneNum = 5;
createModule(2700, -1);
#endif
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 900ad57..5bb9424 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -312,4 +312,10 @@ void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int des
}
+int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2) {
+ int16 deltaX = ABS(x1 - x2);
+ int16 deltaY = ABS(y1 - y2);
+ return sqrt((double)(deltaX * deltaX + deltaY * deltaY));
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 08fa1f5..c2adb11 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -127,6 +127,7 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
void unpackSpriteRleRepl(byte *source, int width, int height, byte *dest, int destPitch, byte oldColor, byte newColor, bool flipX, bool flipY);
void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
+int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2);
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 94b836a..15e2474 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -973,12 +973,6 @@ void Class521::sub45E0A0() {
// TODO
}
-int Class521::calcDistance(int16 x1, int16 y1, int16 x2, int16 y2) {
- int16 deltaX = ABS(x1 - x2);
- int16 deltaY = ABS(y1 - y2);
- return sqrt(deltaX * deltaX + deltaY * deltaY);
-}
-
Class546::Class546(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0x08C80144, 900, 320, 240), _soundResource(vm),
_parentScene(parentScene) {
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 1096377..efb2b94 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -103,7 +103,6 @@ protected:
void suMoveToNextPoint();
void suMoveToPrevPoint();
void sub45E0A0();
- int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2);
};
class Class546 : public AnimatedSprite {
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index f5dc078..7d09b66 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -141,7 +141,7 @@ void Module2700::createScene(int sceneNum, int which) {
break;
case 5:
if (which >= 4) {
-//TODO _childObject = new Scene2706(_vm, this, which);
+ _childObject = new Scene2706(_vm, this, which);
} else if (which == 2 || which == 3) {
createScene2704(which, 0x004B1828, 150);
} else {
@@ -555,8 +555,8 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_which2 = sceneInfo->which2;
_dataResource.load(sceneInfo->dataResourceFilename);
- _pointList = _dataResource.getPointArray(sceneInfo->pointListName);
- _class521->setPathPoints(_pointList);
+ _trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
+ _class521->setPathPoints(_trackPoints);
if (sceneInfo->rectListName) {
_rectList = _dataResource.getRectArray(sceneInfo->rectListName);
@@ -564,14 +564,14 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
}
if (which == _which2) {
- NPoint testPoint = (*_pointList)[_pointList->size() - 1];
- sendMessage(_class521, 0x2002, _pointList->size() - 1);
+ NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
sendMessage(_class521, 0x2009, 0);
else
sendMessage(_class521, 0x2007, 0);
} else {
- NPoint testPoint = (*_pointList)[0];
+ NPoint testPoint = (*_trackPoints)[0];
sendMessage(_class521, 0x2002, 0);
if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
sendMessage(_class521, 0x2009, 0);
@@ -581,6 +581,7 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
if (clipRect) {
_class521->getClipRect() = *clipRect;
+#if 0
if (_class517)
_class517->getClipRect() = *clipRect;
if (_class520)
@@ -588,7 +589,8 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
if (_class519)
_class519->getClipRect() = *clipRect;
if (_class518)
- _class518->getClipRect() = *clipRect;
+ _class518->getClipRect() = *clipRect;
+#endif
}
}
@@ -619,4 +621,126 @@ uint32 Scene2704::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+static const struct { const char *pointListName; int which1, which2; } kSceneInfo2706[] = {
+ {"me06slotSlotPath2", 4, -1},
+ {"me06slotSlotPath3", -1, 6},
+ {"me06slotSlotPath4", -1, 5}
+};
+
+Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _newTrackIndex(-1), _count(3) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2706::handleMessage);
+
+ setBackground(0x18808B88);
+ setPalette(0x18808B88);
+
+ _palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
+
+ insertMouse433(0x08B8C180);
+
+//TODO _class437 = insertSprite<Class437>(0x18808B88);
+ _class521 = insertSprite<Class521>(this, 320, 240);
+//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+//TODO _class518 = insertSprite<Class518>(_class521);
+//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+
+ _dataResource.load(0x06000162);
+
+ if (which == 5)
+ _currTrackIndex = 2;
+ else if (which == 6)
+ _currTrackIndex = 1;
+ else
+ _currTrackIndex = 0;
+
+ _trackPoints = _dataResource.getPointArray(calcHash(kSceneInfo2706[_currTrackIndex].pointListName));
+ _class521->setPathPoints(_trackPoints);
+
+ if (which == kSceneInfo2706[_currTrackIndex].which2) {
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ if (which == 5)
+ sendMessage(_class521, 0x2007, 50);
+ else
+ sendMessage(_class521, 0x2007, 150);
+ } else {
+ sendMessage(_class521, 0x2002, 0);
+ if (which == 5)
+ sendMessage(_class521, 0x2008, 50);
+ else
+ sendMessage(_class521, 0x2008, 150);
+ }
+
+}
+
+uint32 Scene2706::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ findClosestTrack(param.asPoint());
+ break;
+ case 0x2005:
+ if (_newTrackIndex >= 0) {
+ if (kSceneInfo2706[_currTrackIndex].which1 < 0)
+ changeTrack();
+ } else if (kSceneInfo2706[_currTrackIndex].which1 >= 0)
+ leaveScene(kSceneInfo2706[_currTrackIndex].which1);
+ break;
+ case 0x2006:
+ if (_newTrackIndex >= 0) {
+ if (kSceneInfo2706[_currTrackIndex].which2 < 0)
+ changeTrack();
+ } else if (kSceneInfo2706[_currTrackIndex].which2 >= 0)
+ leaveScene(kSceneInfo2706[_currTrackIndex].which2);
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
+void Scene2706::findClosestTrack(NPoint pt) {
+ int minMatchTrackIndex = -1;
+ int minMatchDistance = 640;
+ // Find the track which contains a point closest to pt
+ for (int infoIndex = 0; infoIndex < _count; infoIndex++) {
+ NPointArray *pointList = _dataResource.getPointArray(calcHash(kSceneInfo2706[infoIndex].pointListName));
+ for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
+ NPoint testPt = (*pointList)[pointIndex];
+ int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
+ if (distance < minMatchDistance) {
+ minMatchTrackIndex = infoIndex;
+ minMatchDistance = distance;
+ }
+ }
+ }
+ if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
+ _newTrackIndex = minMatchTrackIndex;
+ _newTrackDestX = pt.x;
+ if (_currTrackIndex == 0)
+ sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ else
+ sendMessage(_class521, 0x2003, 0);
+ } else {
+ _newTrackIndex = -1;
+ sendMessage(_class521, 0x2004, pt.x);
+ }
+}
+
+void Scene2706::changeTrack() {
+ _currTrackIndex = _newTrackIndex;
+ _trackPoints = _dataResource.getPointArray(calcHash(kSceneInfo2706[_currTrackIndex].pointListName));
+ _class521->setPathPoints(_trackPoints);
+ if (_currTrackIndex == 0)
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ else
+ sendMessage(_class521, 0x2002, 0);
+ sendMessage(_class521, 0x2004, _newTrackDestX);
+ _newTrackIndex = -1;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index 4df284c..b596ccd 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -60,12 +60,31 @@ public:
protected:
Class521 *_class521;
int _which1, _which2;
- NPointArray *_pointList;
+ NPointArray *_trackPoints;
NRectArray *_rectList;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2706 : public Scene {
+public:
+ Scene2706(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Class521 *_class521;
+ Sprite *_class437;
+ Sprite *_class517;
+ Sprite *_class518;
+ Sprite *_class520;
+ Sprite *_class519;
+ int16 _newTrackDestX;
+ int _currTrackIndex, _newTrackIndex;
+ int _count;
+ NPointArray *_trackPoints;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void findClosestTrack(NPoint pt);
+ void changeTrack();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2700_H */
Commit: 31b3dec8c94975333a868cc527107a32b091a5ae
https://github.com/scummvm/scummvm/commit/31b3dec8c94975333a868cc527107a32b091a5ae
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: More tables for Module2700
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index 33b5a3e..dc77d71 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -289,7 +289,6 @@ struct SceneInfo2700Item {
uint32 mouseCursorFilename;
int16 which1;
int16 which2;
- uint32 field24;
void load(uint32 offset) {
byte *item = getData(offset);
@@ -305,7 +304,6 @@ struct SceneInfo2700Item {
mouseCursorFilename = calcHash(getStringP(READ_LE_UINT32(item + 28)));
which1 = READ_LE_UINT16(item + 32);
which2 = READ_LE_UINT16(item + 34);
- field24 = READ_LE_UINT16(item + 36);
}
void save(FILE *fd) {
@@ -320,7 +318,6 @@ struct SceneInfo2700Item {
writeUint32LE(fd, mouseCursorFilename);
writeUint16LE(fd, which1);
writeUint16LE(fd, which2);
- writeUint32LE(fd, field24);
}
};
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 51954f8..3a5d405 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -537,5 +537,7 @@ static const uint32 sceneInfo2700Offsets[] = {
//
0x004B1950,
//
+ 0x004B2240,
+ //
0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index b97c5a4..f88d516 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: d276e7ceaa307844a8db82f231bba86a6b88e121
https://github.com/scummvm/scummvm/commit/d276e7ceaa307844a8db82f231bba86a6b88e121
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Add Scene2701
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 9ed447a..64117ad 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -298,7 +298,7 @@ void GameModule::startup() {
#endif
#if 1
_vm->gameState().which = 4;
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 0;
createModule(2700, -1);
#endif
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 7d09b66..e8d3105 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -118,7 +118,7 @@ void Module2700::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
-//TODO _childObject = new Scene2701(_vm, this, which);
+ _childObject = new Scene2701(_vm, this, which);
break;
case 1:
//TODO _childObject = new Scene2702(_vm, this, which);
@@ -513,6 +513,110 @@ void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, con
_childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
}
+Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ NRect clipRect;
+ SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(0x004B2240);
+ setGlobalVar(0x21E60190, 1);
+
+ _surfaceFlag = true;
+
+ setBackground(sceneInfo->bgFilename);
+ setPalette(sceneInfo->bgFilename);
+
+ _palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
+
+ insertMouse433(0x08B08180);
+
+ _sprite1 = insertStaticSprite(0x1E086325, 1200);
+
+ clipRect.set(0, 0, 640, _sprite1->getDrawRect().x2());
+
+ if (sceneInfo->class437Filename) {
+//TODO _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
+ _class521 = insertSprite<Class521>(this, 320, 240);
+//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ } else {
+ _class437 = NULL;
+ _class521 = insertSprite<Class521>(this, 320, 240);
+ }
+
+//TODO _class518 = insertSprite<Class518>(_class521);
+
+ _which1 = sceneInfo->which1;
+ _which2 = sceneInfo->which2;
+
+ _dataResource.load(sceneInfo->dataResourceFilename);
+ _trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
+ _class521->setPathPoints(_trackPoints);
+
+ if (which == _which2) {
+ NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
+ sendMessage(_class521, 0x2007, 150);
+ } else {
+ NPoint testPoint = (*_trackPoints)[0];
+ sendMessage(_class521, 0x2002, 0);
+ if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
+ sendMessage(_class521, 0x2008, 150);
+ }
+
+ _class521->setClipRect(clipRect);
+ // TODO _class518->setClipRect(clipRect);
+
+ if (which == 1) {
+ SetMessageHandler(&Scene2701::handleMessage42F500);
+ } else {
+ sendMessage(_class521, 0x2009, 0);
+ SetMessageHandler(&Scene2701::handleMessage42F600);
+ }
+
+}
+
+uint32 Scene2701::handleMessage42F500(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ sendPointMessage(_class521, 0x2004, param.asPoint());
+ break;
+ case 0x2005:
+ if (_which1 >= 0)
+ SetMessageHandler(&Scene2701::handleMessage42F600);
+ break;
+ case 0x2006:
+ if (_which2 >= 0)
+ leaveScene(_which2);
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
+uint32 Scene2701::handleMessage42F600(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x >= 385) {
+ leaveScene(0);
+ } else {
+ sendPointMessage(_class521, 0x2004, param.asPoint());
+ SetMessageHandler(&Scene2701::handleMessage42F500);
+ }
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
const uint32 *staticSprites, const NRect *clipRect)
: Scene(vm, parentModule, true) {
@@ -621,6 +725,7 @@ uint32 Scene2704::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+static const int kSceneInfo2706Count = 3;
static const struct { const char *pointListName; int which1, which2; } kSceneInfo2706[] = {
{"me06slotSlotPath2", 4, -1},
{"me06slotSlotPath3", -1, 6},
@@ -628,7 +733,7 @@ static const struct { const char *pointListName; int which1, which2; } kSceneInf
};
Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _newTrackIndex(-1), _count(3) {
+ : Scene(vm, parentModule, true), _newTrackIndex(-1) {
_surfaceFlag = true;
SetMessageHandler(&Scene2706::handleMessage);
@@ -707,7 +812,7 @@ void Scene2706::findClosestTrack(NPoint pt) {
int minMatchTrackIndex = -1;
int minMatchDistance = 640;
// Find the track which contains a point closest to pt
- for (int infoIndex = 0; infoIndex < _count; infoIndex++) {
+ for (int infoIndex = 0; infoIndex < kSceneInfo2706Count; infoIndex++) {
NPointArray *pointList = _dataResource.getPointArray(calcHash(kSceneInfo2706[infoIndex].pointListName));
for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
NPoint testPt = (*pointList)[pointIndex];
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index b596ccd..85c5b88 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -53,6 +53,24 @@ protected:
void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
+class Scene2701 : public Scene {
+public:
+ Scene2701(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Class521 *_class521;
+ Sprite *_class437;
+ Sprite *_class517;
+ Sprite *_class520;
+ Sprite *_class519;
+ Sprite *_class518;
+ Sprite *_sprite1;
+ //NRect _rect;
+ int _which1, _which2;
+ NPointArray *_trackPoints;
+ uint32 handleMessage42F500(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage42F600(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene2704 : public Scene {
public:
Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
@@ -78,7 +96,6 @@ protected:
Sprite *_class519;
int16 _newTrackDestX;
int _currTrackIndex, _newTrackIndex;
- int _count;
NPointArray *_trackPoints;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void findClosestTrack(NPoint pt);
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 4e7d24c..147a319 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -156,7 +156,6 @@ void StaticData::load(const char *filename) {
sceneInfo2700->mouseCursorFilename = fd.readUint32LE();
sceneInfo2700->which1 = fd.readUint16LE();
sceneInfo2700->which2 = fd.readUint16LE();
- sceneInfo2700->field24 = fd.readUint32LE();
_sceneInfo2700Items[id] = sceneInfo2700;
}
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index c223735..2a2db55 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -89,7 +89,6 @@ struct SceneInfo2700 {
uint32 mouseCursorFilename;
int16 which1;
int16 which2;
- uint32 field24;
};
class StaticData {
Commit: 6315ccb5528a9a4d810779055df9184f4b2960c1
https://github.com/scummvm/scummvm/commit/6315ccb5528a9a4d810779055df9184f4b2960c1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:42-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2702
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 3a5d405..2534bce 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -539,5 +539,11 @@ static const uint32 sceneInfo2700Offsets[] = {
//
0x004B2240,
//
+ 0x004B5F68,
+ 0x004B5F8C,
+ 0x004B5FB0,
+ 0x004B5FD8,
+ 0x004B5FFC,
+ 0x004B6020,
0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index f88d516..946b19a 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: c56c93f085a7861e19a6a0befdbdd69b9837b41f
https://github.com/scummvm/scummvm/commit/c56c93f085a7861e19a6a0befdbdd69b9837b41f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:43-07:00
Commit Message:
NEVERHOOD: Add Scene2702 (needs cleanup)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 64117ad..95fe521 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -297,8 +297,8 @@ void GameModule::startup() {
createModule(2600, -1);
#endif
#if 1
- _vm->gameState().which = 4;
- _vm->gameState().sceneNum = 0;
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index e8d3105..8c81ddf 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -121,7 +121,7 @@ void Module2700::createScene(int sceneNum, int which) {
_childObject = new Scene2701(_vm, this, which);
break;
case 1:
-//TODO _childObject = new Scene2702(_vm, this, which);
+ _childObject = new Scene2702(_vm, this, which);
break;
case 2:
if (which == 6 || which == 7)
@@ -617,6 +617,181 @@ uint32 Scene2701::handleMessage42F600(int messageNum, const MessageParam ¶m,
return 0;
}
+static const uint32 kScene2702Infos[2][3] = {
+ {0x004B5F68, 0x004B5F8C, 0x004B5FB0},
+ {0x004B5FD8, 0x004B5FFC, 0x004B6020}
+};
+
+
+Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _flag1(true), _newTrackIndex(-1), _count(3) {
+
+ for (int i = 0; i < 2; i++)
+ for (int j = 0; j < 3; j++)
+ _sceneInfos[i][j] = _vm->_staticData->getSceneInfo2700(kScene2702Infos[i][j]);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2702::handleMessage);
+ SetUpdateHandler(&Scene2702::update);
+
+ setBackground(0x18808B00);
+ setPalette(0x18808B00);
+
+ _palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
+ addEntity(_palette);
+
+ insertMouse433(0x08B04180);
+
+ //TODO _class437 = insertSprite<Class437>(0x12002035);
+ _class521 = insertSprite<Class521>(this, 320, 240);
+ //TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ //TODO insertSprite<Class518>(_class521);
+ //TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ //TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+
+ _dataResource.load(0x04310014);
+
+ if (which == 1) {
+ _currSceneInfos = _sceneInfos[1];
+ _currTrackIndex = 1;
+ } else if (which == 2) {
+ _currSceneInfos = _sceneInfos[1];
+ _currTrackIndex = 2;
+ _palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
+ _flag1 = false;
+ } else if (which == 3) {
+ _currSceneInfos = _sceneInfos[0];
+ _currTrackIndex = 0;
+ } else if (which == 4) {
+ _currSceneInfos = _sceneInfos[0];
+ _currTrackIndex = 2;
+ _palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
+ _flag1 = false;
+ } else if (which == 5) {
+ _currSceneInfos = _sceneInfos[0];
+ _currTrackIndex = 1;
+ _palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
+ _flag1 = false;
+ } else {
+ _currSceneInfos = _sceneInfos[1];
+ _currTrackIndex = 0;
+ }
+
+ _trackPoints = _dataResource.getPointArray(_currSceneInfos[_currTrackIndex]->pointListName);
+ _class521->setPathPoints(_trackPoints);
+
+ if (which == _currSceneInfos[_currTrackIndex]->which2) {
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_class521, 0x2007, 150);
+ } else {
+ sendMessage(_class521, 0x2002, 0);
+ sendMessage(_class521, 0x2008, 150);
+ }
+
+ _palette->copyBasePalette(0, 256, 0);
+
+}
+
+void Scene2702::update() {
+ Scene::update();
+ if (_flag1 && _class521->getX() > 422) {
+ debug("fade #1");
+ _palette->addBasePalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addBasePalette(calcHash("paKlayShade"), 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ _flag1 = false;
+ } else if (!_flag1 && _class521->getX() <= 422) {
+ debug("fade #2");
+ _palette->addBasePalette(calcHash("paPodFloor"), 65, 31, 65);
+ _palette->addBasePalette(calcHash("paKlayFloor"), 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ _flag1 = true;
+ }
+}
+
+uint32 Scene2702::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ findClosestTrack(param.asPoint());
+ break;
+ case 0x2005:
+ if (_newTrackIndex >= 0) {
+ if (_currSceneInfos[_currTrackIndex]->which1 < 0)
+ changeTrack();
+ } else if (_currSceneInfos[_currTrackIndex]->which1 >= 0)
+ leaveScene(_currSceneInfos[_currTrackIndex]->which1);
+ break;
+ case 0x2006:
+ if (_newTrackIndex >= 0) {
+ if (_currSceneInfos[_currTrackIndex]->which2 < 0)
+ changeTrack();
+ } else if (_currSceneInfos[_currTrackIndex]->which2 >= 0)
+ leaveScene(_currSceneInfos[_currTrackIndex]->which2);
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
+void Scene2702::findClosestTrack(NPoint pt) {
+ int minMatchTrackIndex = -1;
+ int minMatchDistance = 640;
+ // Find the track which contains a point closest to pt
+ for (int infoIndex = 0; infoIndex < _count; infoIndex++) {
+ NPointArray *pointList = _dataResource.getPointArray(_currSceneInfos[infoIndex]->pointListName);
+ for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
+ NPoint testPt = (*pointList)[pointIndex];
+ int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
+ if (distance < minMatchDistance) {
+ minMatchTrackIndex = infoIndex;
+ minMatchDistance = distance;
+ }
+ }
+ }
+ if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
+ _newTrackIndex = minMatchTrackIndex;
+ _newTrackDestX = pt.x;
+ if (_currSceneInfos == _sceneInfos[0]) {
+ if (_currTrackIndex == 0)
+ sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ else
+ sendMessage(_class521, 0x2003, 0);
+ } else if (_currTrackIndex == 2) {
+ sendMessage(_class521, 0x2003, 0);
+ } else {
+ sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ }
+ } else {
+ _newTrackIndex = -1;
+ sendMessage(_class521, 0x2004, pt.x);
+ }
+}
+
+void Scene2702::changeTrack() {
+ _currTrackIndex = _newTrackIndex;
+ _trackPoints = _dataResource.getPointArray(_currSceneInfos[_currTrackIndex]->pointListName);
+ _class521->setPathPoints(_trackPoints);
+ if (_currSceneInfos == _sceneInfos[0]) {
+ if (_currTrackIndex == 0)
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ else
+ sendMessage(_class521, 0x2002, 0);
+ } else if (_currTrackIndex == 2) {
+ sendMessage(_class521, 0x2002, 0);
+ } else {
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ }
+ sendMessage(_class521, 0x2004, _newTrackDestX);
+ _newTrackIndex = -1;
+}
+
Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
const uint32 *staticSprites, const NRect *clipRect)
: Scene(vm, parentModule, true) {
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index 85c5b88..a39b52c 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -64,13 +64,34 @@ protected:
Sprite *_class519;
Sprite *_class518;
Sprite *_sprite1;
- //NRect _rect;
int _which1, _which2;
NPointArray *_trackPoints;
uint32 handleMessage42F500(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage42F600(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2702 : public Scene {
+public:
+ Scene2702(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Class521 *_class521;
+ Sprite *_class437;
+ Sprite *_class517;
+ Sprite *_class520;
+ Sprite *_class519;
+ int16 _newTrackDestX;
+ int _currTrackIndex, _newTrackIndex;
+ int _count;
+ bool _flag1;
+ SceneInfo2700 *_sceneInfos[2][3];
+ SceneInfo2700 **_currSceneInfos;
+ NPointArray *_trackPoints;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void findClosestTrack(NPoint pt);
+ void changeTrack();
+};
+
class Scene2704 : public Scene {
public:
Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
Commit: 023c36f2b6f1906c28d246a1b861e2287d85d851
https://github.com/scummvm/scummvm/commit/023c36f2b6f1906c28d246a1b861e2287d85d851
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:43-07:00
Commit Message:
NEVERHOOD: Add Class437 (still needs renaming, of course :)
Changed paths:
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 8c81ddf..096e335 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -513,6 +513,18 @@ void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, con
_childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
}
+Class437::Class437(NeverhoodEngine *vm, uint32 fileHash)
+ : StaticSprite(vm, 0) {
+
+ _spriteResource.load2(fileHash);
+ createSurface(0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -535,7 +547,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
clipRect.set(0, 0, 640, _sprite1->getDrawRect().x2());
if (sceneInfo->class437Filename) {
-//TODO _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
+ _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
_class521 = insertSprite<Class521>(this, 320, 240);
//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
@@ -643,7 +655,7 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B04180);
- //TODO _class437 = insertSprite<Class437>(0x12002035);
+ _class437 = insertSprite<Class437>(0x12002035);
_class521 = insertSprite<Class521>(this, 320, 240);
//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
//TODO insertSprite<Class518>(_class521);
@@ -817,13 +829,13 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
insertMouse433(sceneInfo->mouseCursorFilename);
if (sceneInfo->class437Filename) {
-//TODO _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
+ _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
_class521 = insertSprite<Class521>(this, 320, 240);
//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
} else {
-//TODO _class437 = NULL;
+ _class437 = NULL;
//TODO _class517 = NULL;
_class521 = insertSprite<Class521>(this, 320, 240);
}
@@ -921,7 +933,7 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B8C180);
-//TODO _class437 = insertSprite<Class437>(0x18808B88);
+ _class437 = insertSprite<Class437>(0x18808B88);
_class521 = insertSprite<Class521>(this, 320, 240);
//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
//TODO _class518 = insertSprite<Class518>(_class521);
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index a39b52c..f1ef3f5 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -53,6 +53,11 @@ protected:
void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
+class Class437 : public StaticSprite {
+public:
+ Class437(NeverhoodEngine *vm, uint32 fileHash);
+};
+
class Scene2701 : public Scene {
public:
Scene2701(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -98,6 +103,7 @@ public:
const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
protected:
Class521 *_class521;
+ Sprite *_class437;
int _which1, _which2;
NPointArray *_trackPoints;
NRectArray *_rectList;
Commit: 9cf2c83e5e5a35816ab153bf8443dac691829ea8
https://github.com/scummvm/scummvm/commit/9cf2c83e5e5a35816ab153bf8443dac691829ea8
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:39:43-07:00
Commit Message:
NEVERHOOD: Major renaming:
- Give better names to animation callback functions/vars
- Give better names to animation functions (previously known as subXXXX - not completed yet)
- Add dumpAllResources (which is a lie, since it only dumps animations for now)
- More renaming to come
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module3000.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resourceman.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index ace2b5b..4fdc736 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -179,7 +179,7 @@ uint32 Class494::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Class494::sub43BE00() {
- setFileHash1();
+ stopAnimation();
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Sprite::handleMessage);
_surface->setVisible(false);
@@ -189,7 +189,7 @@ void Class494::sub43BE20() {
setFileHash(0x100B90B4, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class494::handleMessage);
- SetAnimationCallback3(&Class494::sub43BE00);
+ NextState(&Class494::sub43BE00);
_surface->setVisible(true);
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 865c91a..567788b 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -28,17 +28,17 @@
namespace Neverhood {
static const KlaymanTableItem klaymanTable1[] = {
- {1, &Klayman::sub41FD30},
+ {1, &Klayman::stDoIdlePickEar},
{1, &Klayman::sub41FDA0},
{1, &Klayman::sub41FDF0},
- {1, &Klayman::sub41FE60},
+ {1, &Klayman::stDoIdleChest},
{1, &Klayman::sub41FEB0}
};
static const KlaymanTableItem klaymanTable2[] = {
- {1, &Klayman::sub41FD30},
+ {1, &Klayman::stDoIdlePickEar},
{1, &Klayman::sub41FDA0},
- {1, &Klayman::sub41FE60},
+ {1, &Klayman::stDoIdleChest},
{1, &Klayman::sub41FEB0}
};
@@ -51,7 +51,7 @@ static const KlaymanTableItem klaymanTable3[] = {
static const KlaymanTableItem klaymanTable4[] = {
{1, &Klayman::sub41FDA0},
- {1, &Klayman::sub41FE60},
+ {1, &Klayman::stDoIdleChest},
{1, &Klayman::sub41FEB0},
};
@@ -72,7 +72,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_y4 = y;
_flags = 2;
setKlaymanTable1();
- sub41FC80();
+ stTryStandIdle();
SetUpdateHandler(&Klayman::update);
}
@@ -87,7 +87,7 @@ uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4818:
sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
@@ -122,22 +122,22 @@ void Klayman::setKlaymanTable3() {
// TODO setKlaymanTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
}
-void Klayman::sub41FD30() {
- sub41D320(0x5B20C814, AnimationCallback(&Klayman::sub41FD40));
+void Klayman::stDoIdlePickEar() {
+ sub41D320(0x5B20C814, AnimationCallback(&Klayman::stIdlePickEar));
}
-void Klayman::sub41FD40() {
+void Klayman::stIdlePickEar() {
_status2 = 1;
_flagE5 = true;
setFileHash(0x5B20C814, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB10);
+ SetMessageHandler(&Klayman::hmIdlePickEar);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub41FCF0);
- setCallback1(AnimationCallback(&Klayman::sub41FD90));
+ NextState(&Klayman::stStandAround);
+ FinalizeState(&Klayman::evIdlePickEarDone);
}
-uint32 Klayman::handleMessage41EB10(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -149,7 +149,7 @@ uint32 Klayman::handleMessage41EB10(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FD90() {
+void Klayman::evIdlePickEarDone() {
_soundResource1.stop();
}
@@ -164,7 +164,7 @@ void Klayman::sub41FDB0() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E980);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub41FCF0);
+ NextState(&Klayman::stStandAround);
}
uint32 Klayman::handleMessage41E980(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -190,8 +190,8 @@ void Klayman::sub41FE00() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E9E0);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub41FCF0);
- setCallback1(AnimationCallback(&Klayman::sub41FE50));
+ NextState(&Klayman::stStandAround);
+ FinalizeState(&Klayman::sub41FE50);
}
void Klayman::sub41FE50() {
@@ -214,21 +214,21 @@ uint32 Klayman::handleMessage41E9E0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FE60() {
- sub41D320(0x40A0C034, AnimationCallback(&Klayman::sub41FE70));
+void Klayman::stDoIdleChest() {
+ sub41D320(0x40A0C034, AnimationCallback(&Klayman::stIdleChest));
}
-void Klayman::sub41FE70() {
+void Klayman::stIdleChest() {
_status2 = 1;
_flagE5 = true;
setFileHash(0x40A0C034, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EF80);
+ SetMessageHandler(&Klayman::hmIdleChest);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub41FCF0);
+ NextState(&Klayman::stStandAround);
}
-uint32 Klayman::handleMessage41EF80(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -251,7 +251,7 @@ void Klayman::sub41FEC0() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EFE0);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub41FCF0);
+ NextState(&Klayman::stStandAround);
}
uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -306,22 +306,22 @@ void Klayman::update41D1C0() {
if (_counter3 >= _counter3Max) {
_counter3 = 0;
_counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
- sub4213F0();
+ stIdleSitBlink();
}
}
}
-void Klayman::sub4213F0() {
+void Klayman::stIdleSitBlink() {
_status2 = 0;
_flagE5 = true;
setFileHash(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub4213B0);
+ NextState(&Klayman::stIdleSitBlinkSecond);
}
-void Klayman::sub4213B0() {
+void Klayman::stIdleSitBlinkSecond() {
_status2 = 0;
_flagE5 = true;
setFileHash(0x5C24C018, 0, -1);
@@ -330,21 +330,21 @@ void Klayman::sub4213B0() {
SetSpriteCallback(NULL);
}
-void Klayman::sub420060() {
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420060))) {
+void Klayman::stPickUpNeedle() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klayman::stPickUpNeedle))) {
_status2 = 1;
_flagE5 = false;
setFileHash(0x1449C169, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D4C0);
+ SetMessageHandler(&Klayman::hmPickUpGeneric);
SetSpriteCallback(NULL);
}
}
void Klayman::sub41FFF0() {
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
- if (!sub41CEB0(AnimationCallback(&Klayman::sub41FFF0))) {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klayman::sub41FFF0))) {
_status2 = 1;
_flagE5 = false;
setFileHash(0x0018C032, 0, -1);
@@ -395,8 +395,8 @@ void Klayman::sub421510() {
SetSpriteCallback(NULL);
}
-void Klayman::sub421160() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub421160))) {
+void Klayman::stStepOver() {
+ if (!stStartAction(AnimationCallback(&Klayman::stStepOver))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x004AA310, 0, -1);
@@ -406,8 +406,8 @@ void Klayman::sub421160() {
}
}
-void Klayman::sub4212C0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub4212C0))) {
+void Klayman::stSitInTeleporter() {
+ if (!stStartAction(AnimationCallback(&Klayman::stSitInTeleporter))) {
_status2 = 0;
_flagE5 = false;
setFileHash(0x392A0330, 0, -1);
@@ -443,7 +443,7 @@ void Klayman::sub421310() {
void Klayman::sub41CE70() {
_x4 = _x;
if (!_flagE1 && !_flagE2 && !_flagE3) {
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
}
}
@@ -452,7 +452,7 @@ void Klayman::sub41D320(uint32 fileHash, AnimationCb callback) {
_resourceHandle = _vm->_res->useResource(fileHash);
if (_resourceHandle != -1) {
// TODO _vm->_res->moveToFront(_resourceHandle);
- SetAnimationCallback3(callback);
+ NextState(callback);
SetUpdateHandler(&Klayman::update41D2B0);
}
}
@@ -470,7 +470,7 @@ void Klayman::update41D2B0() {
update();
}
-bool Klayman::sub41CF10(AnimationCb callback) {
+bool Klayman::stStartActionFromIdle(AnimationCb callback) {
if (_status2 == 2) {
_status2 = 1;
_flagE5 = false;
@@ -478,21 +478,21 @@ bool Klayman::sub41CF10(AnimationCb callback) {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41F140);
SetSpriteCallback(NULL);
- SetAnimationCallback3(callback);
+ NextState(callback);
return true;
}
return false;
}
void Klayman::sub41C7B0() {
- if (_callback1Cb) {
- AnimationCb cb = _callback1Cb;
- _callback1Cb = NULL;
+ if (_finalizeStateCb) {
+ AnimationCb cb = _finalizeStateCb;
+ _finalizeStateCb = NULL;
(this->*cb)();
}
- if (_callback3Cb) {
- AnimationCb cb = _callback3Cb;
- _callback3Cb = NULL;
+ if (_nextStateCb) {
+ AnimationCb cb = _nextStateCb;
+ _nextStateCb = NULL;
(this->*cb)();
#if 0 // TODO
} else if (_callbackList) {
@@ -513,8 +513,8 @@ void Klayman::sub41C790() {
_status3 = 0;
}
-void Klayman::sub41FC80() {
- if (!sub41CF10(AnimationCallback(&Klayman::sub41FC80))) {
+void Klayman::stTryStandIdle() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTryStandIdle))) {
_status2 = 1;
_flagE5 = true;
setFileHash(0x5420E254, 0, -1);
@@ -547,7 +547,7 @@ void Klayman::update41D0F0() {
if (_counter3 >= _counter3Max) {
_counter3 = 0;
_counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
- sub41FF00();
+ stStand();
}
}
}
@@ -560,7 +560,7 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
messageResult = _flagE5;
break;
case 0x1014:
- _attachedSprite = param.asEntity();
+ _attachedSprite = (Sprite*)(param.asEntity());
break;
case 0x1019:
sub41C7B0();
@@ -589,14 +589,14 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FF00() {
+void Klayman::stStand() {
_status2 = 1;
_flagE5 = true;
setFileHash(0x5900C41E, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Klayman::sub41FCF0);
+ NextState(&Klayman::stStandAround);
}
uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -609,7 +609,7 @@ uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FCF0() {
+void Klayman::stStandAround() {
_status2 = 1;
_flagE5 = true;
setFileHash(0x5420E254, 0, -1);
@@ -638,33 +638,33 @@ void Klayman::sub41C930(int16 x, bool flag) {
if (x == _x) {
_x4 = x;
if (!_flagE1 && !_flagE2 && !_flagE3) {
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
}
} else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
_x4 = x;
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else if (xdiff <= 42 && _status3 != 3) {
if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
_x4 = x;
} else {
_x4 = x;
- setCallback2(AnimationCallback(&Klayman::sub41FB40));
+ GotoState(&Klayman::stSneak);
}
} else if (_flagE1 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
_x4 = x;
} else if (flag) {
_x4 = x;
- error("// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));");
- // TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
+ error("// TODO AnimatedSprite_GotoState(&Klayman::sub421550));");
+ // TODO AnimatedSprite_GotoState(&Klayman::sub421550);
} else {
_x4 = x;
- setCallback2(AnimationCallback(&Klayman::sub41F950));
+ GotoState(&Klayman::stStartWalking);
}
}
-void Klayman::sub4211F0() {
+void Klayman::stWakeUp() {
_status2 = 1;
_flagE5 = false;
setFileHash(0x527AC970, 0, -1);
@@ -673,16 +673,16 @@ void Klayman::sub4211F0() {
SetSpriteCallback(NULL);
}
-void Klayman::sub4211B0() {
+void Klayman::stSleeping() {
_status2 = 0;
_flagE5 = true;
setFileHash(0x5A38C110, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E920);
+ SetMessageHandler(&Klayman::hmSleeping);
SetSpriteCallback(NULL);
}
-uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -694,7 +694,7 @@ uint32 Klayman::handleMessage41E920(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-bool Klayman::sub41CEB0(AnimationCb callback3) {
+bool Klayman::stStartAction(AnimationCb callback3) {
if (_status2 == 1) {
_status2 = 2;
_flagE5 = false;
@@ -702,7 +702,7 @@ bool Klayman::sub41CEB0(AnimationCb callback3) {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41F140);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
- SetAnimationCallback3(callback3);
+ NextState(callback3);
return true;
} else {
_x = _x4;
@@ -789,7 +789,7 @@ void Klayman::spriteUpdate41F5F0() {
}
-void Klayman::sub41FB40() {
+void Klayman::stSneak() {
_status2 = 1;
_flagE2 = true;
_flagE5 = true;
@@ -798,10 +798,10 @@ void Klayman::sub41FB40() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DD80);
SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
- setCallback1(AnimationCallback(&Klayman::sub41FBB0));
+ FinalizeState(&Klayman::stSneakDone);
}
-void Klayman::sub41FBB0() {
+void Klayman::stSneakDone() {
_flagE2 = false;
}
@@ -844,15 +844,15 @@ void Klayman::sub41CD70(int16 x) {
}
} else if (x == _x) {
_x4 = x;
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else {
sub41C930(x, false);
}
}
-void Klayman::sub41F950() {
- if (!sub41CF10(AnimationCallback(&Klayman::sub41F950))) {
+void Klayman::stStartWalking() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalking))) {
_status2 = 0;
_flagE1 = true;
_flagE5 = true;
@@ -861,12 +861,12 @@ void Klayman::sub41F950() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EC70);
SetSpriteCallback(&Klayman::spriteUpdate41F320);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
- SetAnimationCallback3(&Klayman::sub41F9E0);
+ FinalizeState(&Klayman::stStartWalkingDone);
+ NextState(&Klayman::stWalking);
}
}
-void Klayman::sub41FB30() {
+void Klayman::stStartWalkingDone() {
_flagE1 = false;
}
@@ -892,7 +892,7 @@ uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41F9E0() {
+void Klayman::stWalking() {
_status2 = 0;
_flagE1 = true;
_flagE5 = true;
@@ -900,8 +900,8 @@ void Klayman::sub41F9E0() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
- SetAnimationCallback3(&Klayman::sub41FA40);
+ FinalizeState(&Klayman::stStartWalkingDone);
+ NextState(&Klayman::sub41FA40);
}
void Klayman::spriteUpdate41F300() {
@@ -959,7 +959,7 @@ void Klayman::sub41FA40() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DD80);
SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
- setCallback1(AnimationCallback(&Klayman::sub41FBB0));
+ FinalizeState(&Klayman::stSneakDone);
}
}
@@ -1035,19 +1035,19 @@ uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FF80() {
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
- if (!sub41CEB0(AnimationCallback(&Klayman::sub41FF80))) {
+void Klayman::stPickUpGeneric() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klayman::stPickUpGeneric))) {
_status2 = 1;
_flagE5 = false;
setFileHash(0x1C28C178, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D4C0);
+ SetMessageHandler(&Klayman::hmPickUpGeneric);
SetSpriteCallback(NULL);
}
}
-uint32 Klayman::handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1073,18 +1073,18 @@ uint32 Klayman::handleMessage41D4C0(int messageNum, const MessageParam ¶m, E
}
-void Klayman::sub420120() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420120))) {
+void Klayman::stTurnPressButton() {
+ if (!stStartAction(AnimationCallback(&Klayman::stTurnPressButton))) {
_status2 = 2;
_flagE5 = true;
setFileHash(0x1C02B03D, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DAD0);
+ SetMessageHandler(&Klayman::hmPressButton);
SetSpriteCallback(NULL);
}
}
-uint32 Klayman::handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1102,24 +1102,24 @@ uint32 Klayman::handleMessage41DAD0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420170() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420170))) {
+void Klayman::stStampFloorButton() {
+ if (!stStartAction(AnimationCallback(&Klayman::stStampFloorButton))) {
_status2 = 2;
_flagE5 = true;
setFileHash(0x1C16B033, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DAD0);
+ SetMessageHandler(&Klayman::hmPressButton);
SetSpriteCallback(NULL);
}
}
-void Klayman::sub4200D0() {
- if (!sub41CF10(AnimationCallback(&Klayman::sub4200D0))) {
+void Klayman::stPressButtonSide() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stPressButtonSide))) {
_status2 = 1;
_flagE5 = true;
setFileHash(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DAD0);
+ SetMessageHandler(&Klayman::hmPressButton);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
}
}
@@ -1135,7 +1135,7 @@ void Klayman::sub41CD00(int16 x) {
sub41C930(x, false);
} else {
_x4 = x;
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
}
}
@@ -1144,7 +1144,7 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
if (_x > x1) {
if (_x == x1 + x2) {
_x4 = x1 + x2;
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else if (_x < x1 + x2) {
sub41CAC0(x1 + x2);
@@ -1154,7 +1154,7 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
} else {
if (_x == x1 - x2) {
_x4 = x1 - x2;
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else if (_x > x1 - x2) {
sub41CAC0(x1 - x2);
@@ -1169,45 +1169,45 @@ void Klayman::sub41CAC0(int16 x) {
if (x == _x) {
_x4 = x;
if (!_flagE1 && !_flagE2 && !_flagE3) {
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
}
} else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
_x4 = x;
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else if (xdiff <= 42 && _status3 != 3) {
if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
_x4 = x;
} else {
_x4 = x;
- setCallback2(AnimationCallback(&Klayman::sub41FB40));
+ GotoState(&Klayman::stSneak);
}
} else if (_flagE3 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
_x4 = x;
} else {
_x4 = x;
- setCallback2(AnimationCallback(&Klayman::sub41FBC0));
+ GotoState(&Klayman::stLargeStep);
}
}
-void Klayman::sub41FBC0() {
+void Klayman::stLargeStep() {
_status2 = 2;
_flagE3 = true;
_flagE5 = true;
setDoDeltaX(_x4 >= _x ? 1 : 0);
setFileHash(0x08B28116, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DF10);
- SetSpriteCallback(&Klayman::spriteUpdate41F780);
- setCallback1(AnimationCallback(&Klayman::sub41FC30));
+ SetMessageHandler(&Klayman::hmLargeStep);
+ SetSpriteCallback(&Klayman::suLargeStep);
+ FinalizeState(&Klayman::stLargeStepDone);
}
-void Klayman::sub41FC30() {
+void Klayman::stLargeStepDone() {
_flagE3 = false;
}
-void Klayman::spriteUpdate41F780() {
+void Klayman::suLargeStep() {
int16 xdiff = _x4 - _x;
if (_doDeltaX) {
@@ -1253,7 +1253,7 @@ void Klayman::spriteUpdate41F780() {
}
}
-uint32 Klayman::handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1271,7 +1271,7 @@ uint32 Klayman::handleMessage41DF10(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420870() {
+void Klayman::stWonderAboutHalf() {
_status2 = 0;
_flagE5 = true;
setFileHash(0xD820A114, 0, 10);
@@ -1280,7 +1280,7 @@ void Klayman::sub420870() {
SetSpriteCallback(NULL);
}
-void Klayman::sub4208B0() {
+void Klayman::stWonderAboutAfter() {
_status2 = 1;
_flagE5 = true;
setFileHash(0xD820A114, 30, -1);
@@ -1289,7 +1289,7 @@ void Klayman::sub4208B0() {
SetSpriteCallback(NULL);
}
-void Klayman::sub4208F0() {
+void Klayman::stTurnToUseHalf() {
_status2 = 0;
_flagE5 = true;
setFileHash(0x9B250AD2, 0, 7);
@@ -1312,7 +1312,7 @@ uint32 Klayman::handleMessage41EEF0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420930() {
+void Klayman::stTurnAwayFromUse() {
_status2 = 1;
_flagE5 = true;
setFileHash(0x98F88391, 4, -1);
@@ -1321,7 +1321,7 @@ void Klayman::sub420930() {
SetSpriteCallback(NULL);
}
-void Klayman::sub420830() {
+void Klayman::stWonderAbout() {
_status2 = 1;
_flagE5 = true;
setFileHash(0xD820A114, 0, -1);
@@ -1330,23 +1330,22 @@ void Klayman::sub420830() {
SetSpriteCallback(NULL);
}
-void Klayman::sub41FC40() {
+void Klayman::stPeekWall() {
_status2 = 1;
_flagE5 = true;
setFileHash(0xAC20C012, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E3C0);
+ SetMessageHandler(&Klayman::hmPeekWall);
SetSpriteCallback(NULL);
}
-uint32 Klayman::handleMessage41E3C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender) {
int16 speedUpFrameIndex;
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_frameIndex < speedUpFrameIndex) {
+ if (_frameIndex < speedUpFrameIndex)
setFileHash(0xAC20C012, speedUpFrameIndex, -1);
- }
return 0;
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -1360,7 +1359,7 @@ uint32 Klayman::handleMessage41E3C0(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub420210() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420210))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420210))) {
_status2 = 0;
setFileHash(0xD82890BA, 0, -1);
sub4201C0();
@@ -1372,7 +1371,7 @@ void Klayman::sub4201C0() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D790);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetAnimationCallback3(&Klayman::sub420340);
+ NextState(&Klayman::sub420340);
sendMessage(_attachedSprite, 0x482B, 0);
}
@@ -1412,7 +1411,7 @@ void Klayman::sub420340() {
}
void Klayman::sub420250() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420250))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420250))) {
_status2 = 0;
setFileHash(0x900980B2, 0, -1);
sub4201C0();
@@ -1420,14 +1419,14 @@ void Klayman::sub420250() {
}
void Klayman::sub420290() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420290))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420290))) {
_status2 = 0;
_flagE5 = false;
setFileHash(0xBA1910B2, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D880);
- SetAnimationCallback3(&Klayman::sub420380);
+ NextState(&Klayman::sub420380);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
@@ -1483,7 +1482,7 @@ void Klayman::sub4203C0() {
}
void Klayman::sub420300() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420300))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420300))) {
_status2 = 0;
setFileHash(0xB8699832, 0, -1);
sub4201C0();
@@ -1491,7 +1490,7 @@ void Klayman::sub420300() {
}
void Klayman::sub41CCE0(int16 x) {
- sub41CC40(((Sprite*)_attachedSprite)->getX(), x);
+ sub41CC40(_attachedSprite->getX(), x);
}
void Klayman::sub420970() {
@@ -1507,7 +1506,7 @@ void Klayman::sub420970() {
}
void Klayman::sub4209D0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub4209D0))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub4209D0))) {
_status2 = 0;
if (_y4 < _y) {
if (_statusE0 == 1) {
@@ -1609,7 +1608,7 @@ uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub420AD0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420AD0))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420AD0))) {
_status2 = 0;
if (_y4 >= _y - 30) {
sub41C7B0();
@@ -1671,7 +1670,7 @@ uint32 Klayman::handleMessage41E490(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub420FE0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420FE0))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420FE0))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0xF229C003, 0, -1);
@@ -1682,7 +1681,7 @@ void Klayman::sub420FE0() {
}
void Klayman::sub4210C0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub4210C0))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub4210C0))) {
_status2 = 0;
_flagE5 = false;
setFileHash2(0xCA221107, 0x8520108C, 0);
@@ -1693,7 +1692,7 @@ void Klayman::sub4210C0() {
}
void Klayman::sub421070() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub421070))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub421070))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0xCA221107, 0, -1);
@@ -1703,7 +1702,7 @@ void Klayman::sub421070() {
}
}
-void Klayman::sub420420() {
+void Klayman::stLandOnFeet() {
_status2 = 1;
_flagE5 = true;
setFileHash(0x18118554, 0, -1);
@@ -1725,7 +1724,7 @@ uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub420ED0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420ED0))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420ED0))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x91540140, 0, -1);
@@ -1752,7 +1751,7 @@ uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub420750() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420750))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420750))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x5CCCB330, 0, -1);
@@ -1762,8 +1761,8 @@ void Klayman::sub420750() {
}
}
-void Klayman::sub4207A0() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub4207A0))) {
+void Klayman::stTurnToUse() {
+ if (!stStartAction(AnimationCallback(&Klayman::stTurnToUse))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x9B250AD2, 0, -1);
@@ -1799,8 +1798,8 @@ void Klayman::spriteUpdate41F5A0() {
AnimatedSprite::updateDeltaXY();
}
-void Klayman::sub420600() {
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+void Klayman::stMoveObjectSkipTurnFaceObject() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
_flagE4 = false;
_flagE5 = true;
setFileHash2(0x0C1CA072, 0x01084280, 0);
@@ -1820,10 +1819,10 @@ uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, E
if (_attachedSprite)
sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
} else if (param.asInteger() == 0x02421405) {
- if (_flagE4 && _attachedSprite->hasMessageHandler() && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
- sub4205C0();
+ if (_flagE4 && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
+ stMoveObjectSkipTurn();
} else {
- setCallback1(AnimationCallback(&Klayman::sub420660));
+ FinalizeState(&Klayman::sub420660);
SetMessageHandler(&Klayman::handleMessage41D480);
}
} else if (param.asInteger() == 0x32180101) {
@@ -1839,7 +1838,7 @@ uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, E
return handleMessage41D480(messageNum, param, sender);
}
-void Klayman::sub4205C0() {
+void Klayman::stMoveObjectSkipTurn() {
_flagE4 = false;
_flagE5 = true;
setFileHash2(0x0C1CA072, 0x01084280, 0);
@@ -1848,9 +1847,9 @@ void Klayman::sub4205C0() {
SetMessageHandler(&Klayman::handleMessage41D970);
}
-void Klayman::sub420550() {
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420550))) {
+void Klayman::stMoveObjectFaceObject() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klayman::stMoveObjectFaceObject))) {
_status2 = 2;
_flagE4 = false;
_flagE5 = true;
@@ -1862,29 +1861,30 @@ void Klayman::sub420550() {
}
void Klayman::sub420C50() {
- if (!sub41CEB0(AnimationCallback(&Klayman::sub420C50))) {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420C50))) {
_status2 = 0;
if (_flagF7) {
- sub420D50();
+ stReleaseLeverUp();
} else {
sendMessage(_attachedSprite, 0x482B, 0);
setFileHash(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
- SetAnimationCallback3(&Klayman::sub420CD0);
+ NextState(&Klayman::stPullLeverDown);
_flagE5 = false;
}
}
}
-void Klayman::sub420CD0() {
+// Exactly the same code as sub420DA0 which was removed
+void Klayman::stPullLeverDown() {
setFileHash(0x0D318140, 0, -1);
sendMessage(_attachedSprite, 0x480F, 0);
- SetAnimationCallback3(&Klayman::sub420D10);
+ NextState(&Klayman::stHoldLeverDown);
}
-void Klayman::sub420D10() {
+void Klayman::stHoldLeverDown() {
setFileHash(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
@@ -1893,31 +1893,16 @@ void Klayman::sub420D10() {
_flagE5 = true;
}
-void Klayman::sub420D50() {
+void Klayman::stReleaseLeverUp() {
setFileHash(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
- SetAnimationCallback3(&Klayman::sub420DA0);
+ NextState(&Klayman::stPullLeverDown);
_flagE5 = false;
}
-void Klayman::sub420DA0() {
- setFileHash(0x0D318140, 0, -1);
- sendMessage(_attachedSprite, 0x480F, 0);
- SetAnimationCallback3(&Klayman::sub420DE0);
-}
-
-void Klayman::sub420DE0() {
- setFileHash(0x4464A440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41D360);
- _flagF7 = true;
- _flagE5 = true;
-}
-
void Klayman::sub420E20() {
if (_flagF7) {
_status2 = 2;
@@ -1926,7 +1911,7 @@ void Klayman::sub420E20() {
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
- SetAnimationCallback3(&Klayman::sub420E90);
+ NextState(&Klayman::sub420E90);
_flagE5 = false;
_flagF7 = false;
} else {
@@ -1936,7 +1921,7 @@ void Klayman::sub420E20() {
void Klayman::sub420E90() {
setFileHash(0x0928C048, 0, -1);
- setCallback1(AnimationCallback(&Klayman::sub420EB0));
+ FinalizeState(&Klayman::sub420EB0);
}
void Klayman::sub420EB0() {
@@ -1944,7 +1929,7 @@ void Klayman::sub420EB0() {
}
void Klayman::sub420680() {
- if (!sub41CF10(AnimationCallback(&Klayman::sub420680))) {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::sub420680))) {
_status2 = 2;
_counter2 = 0;
for (uint32 i = 0; i < 20; i++) {
@@ -1955,7 +1940,7 @@ void Klayman::sub420680() {
}
}
if (_counter2 == 0) {
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else {
setFileHash(0xD8C8D100, 0, -1);
@@ -2023,26 +2008,25 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
- if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub4211B0));
- }
+ if (param.asInteger() == 2)
+ GotoState(&Klayman::stSleeping);
break;
case 0x480D:
- setCallback2(AnimationCallback(&KmScene1001::sub44FA50));
+ GotoState(&KmScene1001::sub44FA50);
break;
case 0x4812:
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
- }else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -2059,15 +2043,15 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481F:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -2077,7 +2061,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4836:
if (param.asInteger() == 1) {
sendMessage(_parentScene, 0x2002, 0);
- setCallback2(AnimationCallback(&Klayman::sub4211F0));
+ GotoState(&Klayman::stWakeUp);
}
break;
case 0x483F:
@@ -2091,7 +2075,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene1001::sub44FA50() {
- if (!sub41CEB0(AnimationCallback(&KmScene1001::sub44FA50))) {
+ if (!stStartAction(AnimationCallback(&KmScene1001::sub44FA50))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x00648953, 0, -1);
@@ -2138,7 +2122,7 @@ void KmScene1002::xUpdate() {
uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2001:
- setCallback2(AnimationCallback(&KmScene1002::sub449E90));
+ GotoState(&KmScene1002::sub449E90);
break;
case 0x2007:
_otherSprite = (Sprite*)param.asEntity();
@@ -2148,43 +2132,43 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4803:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&KmScene1002::sub44A250));
+ GotoState(&KmScene1002::stJumpAndFall);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&KmScene1002::sub44A2C0));
+ GotoState(&KmScene1002::stDropFromRing);
}
break;
case 0x4804:
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
break;
case 0x4805:
switch (param.asInteger()) {
case 1:
- setCallback2(AnimationCallback(&Klayman::sub420210));
+ GotoState(&Klayman::sub420210);
break;
case 2:
- setCallback2(AnimationCallback(&Klayman::sub420250));
+ GotoState(&Klayman::sub420250);
break;
case 3:
- setCallback2(AnimationCallback(&Klayman::sub420290));
+ GotoState(&Klayman::sub420290);
break;
case 4:
- setCallback2(AnimationCallback(&Klayman::sub420300));
+ GotoState(&Klayman::sub420300);
break;
}
break;
case 0x480A:
- setCallback2(AnimationCallback(&KmScene1002::sub44A3E0));
+ GotoState(&KmScene1002::stMoveVenusFlyTrap);
break;
case 0x480D:
- setCallback2(AnimationCallback(&KmScene1002::sub449E20));
+ GotoState(&KmScene1002::sub449E20);
break;
case 0x4816:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&KmScene1002::sub44A330));
+ GotoState(&KmScene1002::stPressDoorButton);
}
break;
case 0x4817:
@@ -2196,34 +2180,34 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4820:
sendMessage(_parentScene, 0x2005, 0);
- setCallback2(AnimationCallback(&Klayman::sub420970));
+ GotoState(&Klayman::sub420970);
break;
case 0x4821:
sendMessage(_parentScene, 0x2005, 0);
_y4 = param.asInteger();
- setCallback2(AnimationCallback(&Klayman::sub4209D0));
+ GotoState(&Klayman::sub4209D0);
break;
case 0x4822:
sendMessage(_parentScene, 0x2005, 0);
_y4 = param.asInteger();
- setCallback2(AnimationCallback(&Klayman::sub420AD0));
+ GotoState(&Klayman::sub420AD0);
break;
case 0x4823:
sendMessage(_parentScene, 0x2006, 0);
- setCallback2(AnimationCallback(&Klayman::sub420BC0));
+ GotoState(&Klayman::sub420BC0);
break;
case 0x482E:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub421030));
+ GotoState(&Klayman::sub421030);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ GotoState(&Klayman::sub420FE0);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ GotoState(&Klayman::sub4210C0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub421070));
+ GotoState(&Klayman::sub421070);
}
break;
case 0x483F:
@@ -2286,14 +2270,14 @@ uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam ¶
} else if (param.asInteger() == 1) {
sub44A0D0();
} else if (param.asInteger() == 2) {
- sub44A050();
+ stSpitOutFall();
}
break;
}
return 0;
}
-uint32 KmScene1002::handleMessage449990(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2301,7 +2285,7 @@ uint32 KmScene1002::handleMessage449990(int messageNum, const MessageParam ¶
_flagE5 = false;
sendMessage(_attachedSprite, 0x2003, 0);
} else if (param.asInteger() == 0xDA600012) {
- sub44A370();
+ stHitByBoxingGlove();
} else if (param.asInteger() == 0x0D01B294) {
_flagE5 = false;
sendMessage(_attachedSprite, 0x480B, 0);
@@ -2311,7 +2295,7 @@ uint32 KmScene1002::handleMessage449990(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 KmScene1002::handleMessage449A30(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -2322,7 +2306,7 @@ uint32 KmScene1002::handleMessage449A30(int messageNum, const MessageParam ¶
if (_flagE4) {
if (_attachedSprite) {
if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0) {
- sub44A460();
+ stContinueMovingVenusFlyTrap();
}
}
} else {
@@ -2398,7 +2382,7 @@ uint32 KmScene1002::handleMessage449D60(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene1002::spriteUpdate449DC0() {
+void KmScene1002::suFallDown() {
AnimatedSprite::updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
@@ -2410,14 +2394,14 @@ void KmScene1002::spriteUpdate449DC0() {
}
void KmScene1002::sub449E20() {
- if (!sub41CEB0(AnimationCallback(&KmScene1002::sub449E20))) {
+ if (!stStartAction(AnimationCallback(&KmScene1002::sub449E20))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1002::handleMessage449800);
- SetAnimationCallback3(&Klayman::sub420420);
+ NextState(&Klayman::stLandOnFeet);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
@@ -2439,13 +2423,11 @@ void KmScene1002::sub449EF0() {
_flagE5 = false;
setFileHash(0x000BAB02, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
-
// Weird stuff happening
SetMessageHandler(&Klayman::handleMessage41D360);
//SetMessageHandler(&Klayman::handleMessage41D480);
-
- SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
- SetAnimationCallback3(&KmScene1002::sub449F70);
+ SetSpriteCallback(&KmScene1002::suFallDown);
+ NextState(&KmScene1002::sub449F70);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
}
@@ -2460,7 +2442,7 @@ void KmScene1002::sub449F70() {
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1002::handleMessage41D480);
- SetAnimationCallback3(&KmScene1002::sub44A230);
+ NextState(&KmScene1002::sub44A230);
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
@@ -2468,15 +2450,15 @@ void KmScene1002::sub449F70() {
sendMessage(_ssLadderArch, 0x482B, 0);
}
-void KmScene1002::sub44A050() {
+void KmScene1002::stSpitOutFall() {
_counter1 = 1;
_status2 = 0;
_flagE5 = false;
setFileHash(0x9308C132, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
- SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
+ SetSpriteCallback(&KmScene1002::suFallDown);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetAnimationCallback3(&KmScene1002::sub449F70);
+ NextState(&KmScene1002::sub449F70);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
}
@@ -2488,8 +2470,8 @@ void KmScene1002::sub44A0D0() {
setFileHash(0x0013A206, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
- SetAnimationCallback3(&KmScene1002::sub44A150);
+ SetSpriteCallback(&KmScene1002::suFallDown);
+ NextState(&KmScene1002::sub44A150);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
}
@@ -2504,7 +2486,7 @@ void KmScene1002::sub44A150() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D480);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&KmScene1002::sub44A230);
+ NextState(&KmScene1002::sub44A230);
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
@@ -2514,25 +2496,25 @@ void KmScene1002::sub44A150() {
void KmScene1002::sub44A230() {
setDoDeltaX(2);
- sub41FC80();
+ stTryStandIdle();
}
-void KmScene1002::sub44A250() {
- if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A250))) {
+void KmScene1002::stJumpAndFall() {
+ if (!stStartAction(AnimationCallback(&KmScene1002::stJumpAndFall))) {
sendMessage(_parentScene, 0x1024, 3);
_status2 = 2;
_flagE5 = false;
setFileHash(0xB93AB151, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage449D60);
- SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
- SetAnimationCallback3(&Klayman::sub420420);
+ SetSpriteCallback(&KmScene1002::suFallDown);
+ NextState(&Klayman::stLandOnFeet);
}
}
-void KmScene1002::sub44A2C0() {
+void KmScene1002::stDropFromRing() {
if (_attachedSprite) {
- _x = ((Sprite*)_attachedSprite)->getX();
+ _x = _attachedSprite->getX();
sendMessage(_attachedSprite, 0x4807, 0);
_attachedSprite = NULL;
}
@@ -2541,59 +2523,59 @@ void KmScene1002::sub44A2C0() {
setFileHash(0x586984B1, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D360);
- SetSpriteCallback(&KmScene1002::spriteUpdate449DC0);
- SetAnimationCallback3(&Klayman::sub420420);
+ SetSpriteCallback(&KmScene1002::suFallDown);
+ NextState(&Klayman::stLandOnFeet);
}
-void KmScene1002::sub44A330() {
+void KmScene1002::stPressDoorButton() {
_status2 = 2;
_flagE5 = true;
setDoDeltaX(0);
setFileHash(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage449990);
+ SetMessageHandler(&KmScene1002::hmPressDoorButton);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
}
-void KmScene1002::sub44A370() {
+void KmScene1002::stHitByBoxingGlove() {
_status2 = 1;
_flagE5 = false;
setFileHash(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage449C90);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- setCallback1(AnimationCallback(&KmScene1002::sub44A3C0));
+ FinalizeState(&KmScene1002::stHitByBoxingGloveDone);
}
-void KmScene1002::sub44A3C0() {
+void KmScene1002::stHitByBoxingGloveDone() {
sendMessage(_parentScene, 0x1024, 1);
}
-void KmScene1002::sub44A3E0() {
- if (!sub41CEB0(AnimationCallback(&KmScene1002::sub44A3E0))) {
+void KmScene1002::stMoveVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&KmScene1002::stMoveVenusFlyTrap))) {
_status2 = 2;
_flagE4 = false;
_flagE5 = true;
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
setFileHash(0x5C01A870, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage449A30);
+ SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- setCallback1(AnimationCallback(&KmScene1002::sub44A4B0));
+ FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
}
}
-void KmScene1002::sub44A460() {
+void KmScene1002::stContinueMovingVenusFlyTrap() {
_flagE4 = false;
_flagE5 = true;
setFileHash2(0x5C01A870, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage449A30);
+ SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- setCallback1(AnimationCallback(&KmScene1002::sub44A4B0));
+ FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
}
-void KmScene1002::sub44A4B0() {
+void KmScene1002::stMoveVenusFlyTrapDone() {
sendMessage(_attachedSprite, 0x482A, 0);
}
@@ -2612,7 +2594,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -2622,38 +2604,38 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x481E:
- setCallback2(AnimationCallback(&KmScene1004::sub478170));
+ GotoState(&KmScene1004::stReadNote);
break;
case 0x4820:
sendMessage(_parentScene, 0x2000, 0);
- setCallback2(AnimationCallback(&Klayman::sub420970));
+ GotoState(&Klayman::sub420970);
break;
case 0x4821:
sendMessage(_parentScene, 0x2000, 0);
_y4 = param.asInteger();
- setCallback2(AnimationCallback(&Klayman::sub4209D0));
+ GotoState(&Klayman::sub4209D0);
break;
case 0x4822:
sendMessage(_parentScene, 0x2000, 0);
_y4 = param.asInteger();
- setCallback2(AnimationCallback(&Klayman::sub420AD0));
+ GotoState(&Klayman::sub420AD0);
break;
case 0x4823:
sendMessage(_parentScene, 0x2001, 0);
- setCallback2(AnimationCallback(&Klayman::sub420BC0));
+ GotoState(&Klayman::sub420BC0);
break;
case 0x4824:
sendMessage(_parentScene, 0x2000, 0);
_y4 = _dataResource.getPoint(param.asInteger()).y;
- setCallback2(AnimationCallback(&Klayman::sub4209D0));
+ GotoState(&Klayman::sub4209D0);
break;
case 0x4825:
sendMessage(_parentScene, 0x2000, 0);
_y4 = _dataResource.getPoint(param.asInteger()).y;
- setCallback2(AnimationCallback(&Klayman::sub420AD0));
+ GotoState(&Klayman::sub420AD0);
break;
case 0x4828:
- setCallback2(AnimationCallback(&Klayman::sub420ED0));
+ GotoState(&Klayman::sub420ED0);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -2665,7 +2647,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene1004::handleMessage478110(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1004::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2678,12 +2660,12 @@ uint32 KmScene1004::handleMessage478110(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene1004::sub478170() {
+void KmScene1004::stReadNote() {
_status2 = 2;
_flagE5 = false;
setFileHash(0x123E9C9F, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1004::handleMessage478110);
+ SetMessageHandler(&KmScene1004::hmReadNote);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
}
@@ -2704,16 +2686,16 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub421350));
+ GotoState(&Klayman::sub421350);
else
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&Klayman::sub41F9E0));
+ GotoState(&Klayman::stWalking);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4817:
@@ -2722,24 +2704,24 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481D:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ GotoState(&Klayman::sub4214D0);
break;
case 0x481E:
if (_flag)
- setCallback2(AnimationCallback(&Klayman::sub421510));
+ GotoState(&Klayman::sub421510);
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
_flag1 = true;
- setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
_flag1 = false;
- setCallback2(AnimationCallback(&Klayman::sub421310));
+ GotoState(&Klayman::sub421310);
break;
case 0x483D:
sub461F30();
@@ -2800,26 +2782,26 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
- setCallback2(AnimationCallback(&KmScene1201::sub40DF00));
+ GotoState(&KmScene1201::sub40DF00);
break;
case 0x4812:
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4813:
- setCallback2(AnimationCallback(&KmScene1201::sub40DD20));
+ GotoState(&KmScene1201::stFetchMatch);
break;
case 0x4814:
- setCallback2(AnimationCallback(&KmScene1201::sub40DFA0));
+ GotoState(&KmScene1201::stTumbleHeadless);
break;
case 0x4815:
- setCallback2(AnimationCallback(&KmScene1201::sub40E040));
+ GotoState(&KmScene1201::sub40E040);
break;
case 0x4816:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -2834,13 +2816,13 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x481F:
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -2862,7 +2844,7 @@ void KmScene1201::update40DBE0() {
Klayman::update();
}
-uint32 KmScene1201::handleMessage40DC00(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1201::hmMatch(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2882,27 +2864,27 @@ uint32 KmScene1201::handleMessage40DC00(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene1201::sub40DD20() {
- if (!sub41CEB0(AnimationCallback(&KmScene1201::sub40DD20))) {
+void KmScene1201::stFetchMatch() {
+ if (!stStartAction(AnimationCallback(&KmScene1201::stFetchMatch))) {
_status2 = 0;
_flagE5 = false;
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
setFileHash(0x9CAA0218, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
- SetMessageHandler(&KmScene1201::handleMessage40DC00);
- SetAnimationCallback3(&KmScene1201::sub40DD90);
+ SetMessageHandler(&KmScene1201::hmMatch);
+ NextState(&KmScene1201::stLightMatch);
}
}
-void KmScene1201::sub40DD90() {
+void KmScene1201::stLightMatch() {
_status2 = 1;
_flagE5 = false;
- setDoDeltaX(((Sprite*)_attachedSprite)->getX() < _x ? 1 : 0);
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
setFileHash(0x1222A513, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
- SetMessageHandler(&KmScene1201::handleMessage40DC00);
+ SetMessageHandler(&KmScene1201::hmMatch);
}
uint32 KmScene1201::handleMessage40DDF0(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2916,7 +2898,7 @@ uint32 KmScene1201::handleMessage40DDF0(int messageNum, const MessageParam ¶
} else if (param.asInteger() == 0x02421405) {
if (_countdown != 0) {
_countdown--;
- sub40DF60();
+ stMoveObjectSkipTurn();
} else {
SetMessageHandler(&Klayman::handleMessage41D480);
}
@@ -2926,7 +2908,7 @@ uint32 KmScene1201::handleMessage40DDF0(int messageNum, const MessageParam ¶
return Klayman::handleMessage41D480(messageNum, param, sender);
}
-uint32 KmScene1201::handleMessage40DEA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1201::hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2939,7 +2921,7 @@ uint32 KmScene1201::handleMessage40DEA0(int messageNum, const MessageParam ¶
}
void KmScene1201::sub40DF00() {
- if (!sub41CEB0(AnimationCallback(&KmScene1201::sub40DF00))) {
+ if (!stStartAction(AnimationCallback(&KmScene1201::sub40DF00))) {
_status2 = 2;
_flagE5 = false;
_countdown = 8;
@@ -2951,31 +2933,31 @@ void KmScene1201::sub40DF00() {
}
}
-void KmScene1201::sub40DF60() {
- _flagE5 = false;
- setFileHash2(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&KmScene1201::update40DBE0);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::handleMessage40DDF0);
+void KmScene1201::stMoveObjectSkipTurn() {
+ _flagE5 = false;
+ setFileHash2(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&KmScene1201::update40DBE0);
+ SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene1201::handleMessage40DDF0);
}
-void KmScene1201::sub40DFA0() {
- if (!sub41CF10(AnimationCallback(&KmScene1201::sub40DFA0))) {
+void KmScene1201::stTumbleHeadless() {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stTumbleHeadless))) {
_status2 = 1;
_flagE5 = false;
setDoDeltaX(0);
setFileHash(0x2821C590, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::handleMessage40DEA0);
- SetAnimationCallback3(&Klayman::sub41FC80);
+ SetMessageHandler(&KmScene1201::hmTumbleHeadless);
+ NextState(&Klayman::stTryStandIdle);
sendMessage(_class464, 0x2006, 0);
_soundResource1.play(0x62E0A356);
}
}
void KmScene1201::sub40E040() {
- if (!sub41CF10(AnimationCallback(&KmScene1201::sub40E040))) {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::sub40E040))) {
_status2 = 1;
_flagE5 = false;
setFileHash(0x5420E254, 0, -1);
@@ -2994,19 +2976,19 @@ KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4804:
- setCallback2(AnimationCallback(&KmScene1303::sub4161D0));
+ GotoState(&KmScene1303::stPeekWall1);
break;
case 0x483B:
- setCallback2(AnimationCallback(&KmScene1303::sub4162B0));
+ GotoState(&KmScene1303::stPeekWallReturn);
break;
case 0x483C:
- setCallback2(AnimationCallback(&KmScene1303::sub416210));
+ GotoState(&KmScene1303::stPeekWall2);
break;
}
return 0;
}
-uint32 KmScene1303::handleMessage4160A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1303::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -3028,20 +3010,20 @@ void KmScene1303::update4161A0() {
Klayman::update();
_counter3++;
if (_counter3 >= _counter3Max)
- sub416250();
+ stPeekWall3();
}
-void KmScene1303::sub4161D0() {
+void KmScene1303::stPeekWall1() {
_status2 = 0;
_flagE5 = true;
setFileHash(0xAC20C012, 8, 37);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetAnimationCallback3(&KmScene1303::sub416250);
+ NextState(&KmScene1303::stPeekWall3);
}
-void KmScene1303::sub416210() {
+void KmScene1303::stPeekWall2() {
_status2 = 1;
_flagE5 = false;
setFileHash(0xAC20C012, 43, 49);
@@ -3050,7 +3032,7 @@ void KmScene1303::sub416210() {
SetMessageHandler(&Klayman::handleMessage41D480);
}
-void KmScene1303::sub416250() {
+void KmScene1303::stPeekWall3() {
_counter3 = 0;
_status2 = 0;
_flagE5 = true;
@@ -3062,13 +3044,13 @@ void KmScene1303::sub416250() {
_newHashListIndex = 42;
}
-void KmScene1303::sub4162B0() {
+void KmScene1303::stPeekWallReturn() {
_status2 = 0;
_flagE5 = false;
setFileHash(0x2426932E, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
- SetMessageHandler(&KmScene1303::handleMessage4160A0);
+ SetMessageHandler(&KmScene1303::hmPeekWallReturn);
}
KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -3084,15 +3066,15 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -3108,11 +3090,11 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x483F:
@@ -3138,10 +3120,10 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
- setCallback2(AnimationCallback(&KmScene1305::sub46BEF0));
+ GotoState(&KmScene1305::stCrashDown);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3151,7 +3133,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1305::sub46BEF0() {
+void KmScene1305::stCrashDown() {
_soundResource1.play(0x41648271);
_status2 = 1;
_flagE5 = false;
@@ -3159,12 +3141,12 @@ void KmScene1305::sub46BEF0() {
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetAnimationCallback3(&KmScene1305::sub46BF60);
+ NextState(&KmScene1305::cbCrashDownEvent);
}
-void KmScene1305::sub46BF60() {
+void KmScene1305::cbCrashDownEvent() {
setDoDeltaX(2);
- sub41FC80();
+ stTryStandIdle();
}
KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -3185,26 +3167,26 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub421350));
+ GotoState(&Klayman::sub421350);
else
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
+ GotoState(&Klayman::stStampFloorButton);
} else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -3212,7 +3194,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x481A:
- setCallback2(AnimationCallback(&Klayman::sub420680));
+ GotoState(&Klayman::sub420680);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3223,27 +3205,27 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481D:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ GotoState(&Klayman::sub4214D0);
else
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub421510));
+ GotoState(&Klayman::sub421510);
else
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x481F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -3252,30 +3234,30 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub421030));
+ GotoState(&Klayman::sub421030);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ GotoState(&Klayman::sub420FE0);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ GotoState(&Klayman::sub4210C0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub421070));
+ GotoState(&Klayman::sub421070);
}
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
_flag1 = true;
- setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
_flag1 = false;
- setCallback2(AnimationCallback(&Klayman::sub421310));
+ GotoState(&Klayman::sub421310);
break;
case 0x483D:
sub417D40();
@@ -3337,25 +3319,25 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420600));
+ GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420550));
+ GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
case 0x480D:
- setCallback2(AnimationCallback(&KmScene1001::sub420C50));
+ GotoState(&KmScene1001::sub420C50);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -3364,9 +3346,9 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481A:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&KmScene1308::sub456150));
+ GotoState(&KmScene1308::sub456150);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420680));
+ GotoState(&Klayman::sub420680);
}
break;
case 0x481B:
@@ -3377,16 +3359,16 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x4827:
- setCallback2(AnimationCallback(&Klayman::sub420E20));
+ GotoState(&Klayman::sub420E20);
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -3424,7 +3406,7 @@ uint32 KmScene1308::handleMessage(int messageNum, const MessageParam ¶m, Ent
}
void KmScene1308::sub456150() {
- if (!sub41CF10(AnimationCallback(&KmScene1308::sub456150))) {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene1308::sub456150))) {
_status2 = 2;
_flag1 = false;
for (uint i = 0; i < 3; i++) {
@@ -3446,7 +3428,7 @@ void KmScene1308::sub456150() {
}
}
if (!_flag1) {
- setCallback2(NULL);
+ gotoState(NULL);
sub41C7B0();
} else {
_flagE5 = false;
@@ -3474,22 +3456,22 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420600));
+ GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420550));
+ GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
+ GotoState(&Klayman::stStampFloorButton);
} else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -3505,11 +3487,11 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -3518,16 +3500,16 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub421030));
+ GotoState(&Klayman::sub421030);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ GotoState(&Klayman::sub420FE0);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ GotoState(&Klayman::sub4210C0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub421070));
+ GotoState(&Klayman::sub421070);
}
break;
}
@@ -3549,13 +3531,13 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420600));
+ GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420550));
+ GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
case 0x4817:
@@ -3570,10 +3552,10 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
}
return 0;
@@ -3594,25 +3576,25 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420600));
+ GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420550));
+ GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
case 0x480D:
- setCallback2(AnimationCallback(&KmScene1001::sub420C50));
+ GotoState(&KmScene1001::sub420C50);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -3627,7 +3609,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4827:
- setCallback2(AnimationCallback(&Klayman::sub420E20));
+ GotoState(&Klayman::sub420E20);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -3654,22 +3636,22 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420600));
+ GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420550));
+ GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -3677,7 +3659,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x481A:
- setCallback2(AnimationCallback(&Klayman::sub420680));
+ GotoState(&Klayman::sub420680);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3687,22 +3669,22 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x481F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -3734,17 +3716,17 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub421350));
+ GotoState(&Klayman::sub421350);
else
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -3760,23 +3742,23 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481D:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ GotoState(&Klayman::sub4214D0);
break;
case 0x481E:
if (_flag)
- setCallback2(AnimationCallback(&Klayman::sub421510));
+ GotoState(&Klayman::sub421510);
break;
case 0x481F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -3784,17 +3766,17 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2032, 1);
_flag1 = true;
- setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2032, 0);
_flag1 = false;
- setCallback2(AnimationCallback(&Klayman::sub421310));
+ GotoState(&Klayman::sub421310);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -3827,21 +3809,21 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_flag) {
- setCallback2(AnimationCallback(&Klayman::sub421350));
+ GotoState(&Klayman::sub421350);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
}
break;
case 0x4803:
- setCallback2(AnimationCallback(&KmScene1705::sub468A80));
+ GotoState(&KmScene1705::stFallSkipJump);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -3857,39 +3839,39 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481D:
if (_flag) {
- setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ GotoState(&Klayman::sub4214D0);
}
break;
case 0x481E:
if (_flag) {
- setCallback2(AnimationCallback(&Klayman::sub421510));
+ GotoState(&Klayman::sub421510);
}
break;
case 0x481F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
_flag = true;
- setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
_flag = false;
- setCallback2(AnimationCallback(&Klayman::sub421310));
+ GotoState(&Klayman::sub421310);
break;
case 0x483D:
sub468AD0();
@@ -3925,14 +3907,14 @@ void KmScene1705::spriteUpdate468A30() {
}
}
-void KmScene1705::sub468A80() {
+void KmScene1705::stFallSkipJump() {
_status2 = 2;
_flagE5 = false;
setFileHash2(0xB93AB151, 0x40A100F8, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene1705::spriteUpdate468A30);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetAnimationCallback3(&Klayman::sub420420);
+ NextState(&Klayman::stLandOnFeet);
}
void KmScene1705::sub468AD0() {
@@ -3966,17 +3948,17 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
sub41C7B0();
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4009,17 +3991,17 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_flag) {
- setCallback2(AnimationCallback(&Klayman::sub421350));
+ GotoState(&Klayman::sub421350);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
}
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&Klayman::sub41F9E0));
+ GotoState(&Klayman::stWalking);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4817:
@@ -4028,32 +4010,32 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481D:
if (_flag) {
- setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ GotoState(&Klayman::sub4214D0);
}
break;
case 0x481E:
if (_flag) {
- setCallback2(AnimationCallback(&Klayman::sub421510));
+ GotoState(&Klayman::sub421510);
}
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
_flag = true;
- setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
_flag = false;
- setCallback2(AnimationCallback(&Klayman::sub421310));
+ GotoState(&Klayman::sub421310);
break;
case 0x483D:
sub440230();
break;
case 0x483E:
- sub440270();
+ stDoTeleport();
break;
}
return 0;
@@ -4082,7 +4064,7 @@ void KmScene2001::sub440230() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
-void KmScene2001::sub440270() {
+void KmScene2001::stDoTeleport() {
_status2 = 0;
_flagE5 = false;
setFileHash(0x18AB4ED4, 0, -1);
@@ -4110,29 +4092,29 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub421350));
+ GotoState(&Klayman::sub421350);
else
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4811:
- setCallback2(AnimationCallback(&KmScene2101::sub4862C0));
+ GotoState(&KmScene2101::sub4862C0);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
- }else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -4148,24 +4130,24 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481D:
if (_flag1)
- setCallback2(AnimationCallback(&Klayman::sub4214D0));
+ GotoState(&Klayman::sub4214D0);
break;
case 0x481E:
if (_flag)
- setCallback2(AnimationCallback(&Klayman::sub421510));
+ GotoState(&Klayman::sub421510);
break;
case 0x4834:
- setCallback2(AnimationCallback(&Klayman::sub421160));
+ GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
_flag1 = true;
- setCallback2(AnimationCallback(&Klayman::sub4212C0));
+ GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
_flag1 = false;
- setCallback2(AnimationCallback(&Klayman::sub421310));
+ GotoState(&Klayman::sub421310);
break;
case 0x483D:
sub486320();
@@ -4257,14 +4239,14 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4812:
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4816:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -4282,10 +4264,10 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4293,16 +4275,16 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub421030));
+ GotoState(&Klayman::sub421030);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ GotoState(&Klayman::sub420FE0);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ GotoState(&Klayman::sub4210C0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub421070));
+ GotoState(&Klayman::sub421070);
}
break;
case 0x483F:
@@ -4327,24 +4309,24 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
- }else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -4355,10 +4337,10 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4819:
- setCallback2(AnimationCallback(&Klayman::sub420750));
+ GotoState(&Klayman::sub420750);
break;
case 0x481A:
- setCallback2(AnimationCallback(&Klayman::sub420680));
+ GotoState(&Klayman::sub420680);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4368,10 +4350,10 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- setCallback2(AnimationCallback(&Klayman::sub4207A0));
+ GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- setCallback2(AnimationCallback(&Klayman::sub4207F0));
+ GotoState(&Klayman::sub4207F0);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4403,19 +4385,19 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&KmScene2205::sub423980));
+ GotoState(&KmScene2205::sub423980);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4816:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -4446,8 +4428,8 @@ void KmScene2205::sub423980() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- SetAnimationCallback3(&Klayman::sub41FA40);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ NextState(&Klayman::sub41FA40);
+ FinalizeState(&Klayman::stStartWalkingDone);
}
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4471,33 +4453,33 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4803:
- setCallback2(AnimationCallback(&KmScene2206::sub482490));
+ GotoState(&KmScene2206::sub482490);
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&KmScene2206::sub482530));
+ GotoState(&KmScene2206::sub482530);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4812:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
- }else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -4513,15 +4495,15 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481F:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -4530,16 +4512,16 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub421030));
+ GotoState(&Klayman::sub421030);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420FE0));
+ GotoState(&Klayman::sub420FE0);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4210C0));
+ GotoState(&Klayman::sub4210C0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub421070));
+ GotoState(&Klayman::sub421070);
}
break;
case 0x4837:
@@ -4564,7 +4546,7 @@ void KmScene2206::spriteUpdate482450() {
}
void KmScene2206::sub482490() {
- if (!sub41CF10(AnimationCallback(&KmScene2206::sub482490))) {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::sub482490))) {
_status2 = 1;
sendMessage(_parentScene, 0x4803, 0);
_flagE5 = false;
@@ -4588,8 +4570,8 @@ void KmScene2206::sub482530() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- SetAnimationCallback3(&Klayman::sub41FA40);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ NextState(&Klayman::sub41FA40);
+ FinalizeState(&Klayman::stStartWalkingDone);
}
KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4600,32 +4582,32 @@ KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2001:
- setCallback2(AnimationCallback(&KmScene2207::sub442460));
+ GotoState(&KmScene2207::sub442460);
break;
case 0x2005:
spriteUpdate442430();
- setCallback2(AnimationCallback(&KmScene2207::sub41FC80));
+ GotoState(&KmScene2207::stTryStandIdle);
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x480D:
- setCallback2(AnimationCallback(&KmScene2207::sub4424B0));
+ GotoState(&KmScene2207::sub4424B0);
break;
case 0x4812:
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4816:
if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub420120));
+ GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420170));
- }else {
- setCallback2(AnimationCallback(&Klayman::sub4200D0));
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
}
break;
case 0x4817:
@@ -4640,7 +4622,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4827:
- setCallback2(AnimationCallback(&Klayman::sub420E20));
+ GotoState(&Klayman::sub420E20);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4657,13 +4639,13 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene2207::spriteUpdate442430() {
- _x = ((Sprite*)_attachedSprite)->getX() - 20;
- _y = ((Sprite*)_attachedSprite)->getY() + 46;
+ _x = _attachedSprite->getX() - 20;
+ _y = _attachedSprite->getY() + 46;
processDelta();
}
void KmScene2207::sub442460() {
- if (!sub41CF10(AnimationCallback(&KmScene2207::sub442460))) {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene2207::sub442460))) {
_status2 = 1;
_flagE5 = true;
setFileHash(0x5420E254, 0, -1);
@@ -4674,43 +4656,43 @@ void KmScene2207::sub442460() {
}
void KmScene2207::sub4424B0() {
- if (!sub41CEB0(AnimationCallback(&KmScene2207::sub4424B0))) {
+ if (!stStartAction(AnimationCallback(&KmScene2207::sub4424B0))) {
_status2 = 0;
if (_flagF7) {
- sub420D50();
+ stReleaseLeverUp();
} else {
_flagE5 = false;
setFileHash(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
- SetAnimationCallback3(&KmScene2207::sub442520);
+ NextState(&KmScene2207::sub442520);
}
}
}
void KmScene2207::sub442520() {
setFileHash(0x0D318140, 0, -1);
- SetAnimationCallback3(&KmScene2207::sub442560);
sendMessage(_attachedSprite, 0x480F, 0);
+ NextState(&KmScene2207::sub442560);
}
void KmScene2207::sub442560() {
- _flagE5 = true;
- _flagF7 = true;
setFileHash(0x1564A2C0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
- SetAnimationCallback3(&KmScene2207::sub4425A0);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ NextState(&KmScene2207::sub4425A0);
+ _flagE5 = true;
+ _flagF7 = true;
}
void KmScene2207::sub4425A0() {
- _flagE5 = true;
- _flagF7 = true;
setFileHash(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
+ SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D360);
+ _flagE5 = true;
+ _flagF7 = true;
}
KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4729,23 +4711,23 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&KmScene2242::sub444D20));
+ GotoState(&KmScene2242::sub444D20);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4812:
if (param.asInteger() == 2) {
- setCallback2(AnimationCallback(&Klayman::sub420060));
+ GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub41FFF0));
+ GotoState(&Klayman::sub41FFF0);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FF80));
+ GotoState(&Klayman::stPickUpGeneric);
}
break;
case 0x4817:
@@ -4761,15 +4743,15 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481F:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -4794,8 +4776,8 @@ void KmScene2242::sub444D20() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- SetAnimationCallback3(&Klayman::sub41FA40);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ NextState(&Klayman::sub41FA40);
+ FinalizeState(&Klayman::stStartWalkingDone);
}
KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4814,14 +4796,14 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&KmHallOfRecords::sub43B130));
+ GotoState(&KmHallOfRecords::sub43B130);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4817:
@@ -4830,15 +4812,15 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
break;
case 0x481F:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -4863,8 +4845,8 @@ void KmHallOfRecords::sub43B130() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- SetAnimationCallback3(&Klayman::sub41FA40);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ NextState(&Klayman::sub41FA40);
+ FinalizeState(&Klayman::stStartWalkingDone);
}
KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4883,14 +4865,14 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- setCallback2(AnimationCallback(&Klayman::sub41FC80));
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
- setCallback2(AnimationCallback(&KmScene2247::sub453520));
+ GotoState(&KmScene2247::sub453520);
} else {
- setCallback2(AnimationCallback(&Klayman::sub41FC40));
+ GotoState(&Klayman::stPeekWall);
}
break;
case 0x4817:
@@ -4899,15 +4881,15 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481F:
if (param.asInteger() == 0) {
- setCallback2(AnimationCallback(&Klayman::sub420870));
+ GotoState(&Klayman::stWonderAboutHalf);
} else if (param.asInteger() == 1) {
- setCallback2(AnimationCallback(&Klayman::sub4208B0));
+ GotoState(&Klayman::stWonderAboutAfter);
} else if (param.asInteger() == 3) {
- setCallback2(AnimationCallback(&Klayman::sub4208F0));
+ GotoState(&Klayman::stTurnToUseHalf);
} else if (param.asInteger() == 4) {
- setCallback2(AnimationCallback(&Klayman::sub420930));
+ GotoState(&Klayman::stTurnAwayFromUse);
} else {
- setCallback2(AnimationCallback(&Klayman::sub420830));
+ GotoState(&Klayman::stWonderAbout);
}
break;
case 0x482D:
@@ -4932,8 +4914,8 @@ void KmScene2247::sub453520() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- SetAnimationCallback3(&Klayman::sub41FA40);
- setCallback1(AnimationCallback(&Klayman::sub41FB30));
+ NextState(&Klayman::sub41FA40);
+ FinalizeState(&Klayman::stStartWalkingDone);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index eb6ab40..645ed74 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -47,25 +47,25 @@ public:
void update();
- void sub41FD30();
+ void stDoIdlePickEar();
void sub41FDA0();
void sub41FDF0();
- void sub41FE60();
+ void stDoIdleChest();
void sub41FEB0();
- void sub41FC80();
- void sub4211F0();
- void sub4211B0();
- void sub41FF80();
- void sub420120();
- void sub420170();
- void sub4200D0();
- void sub41FBC0();
- void sub420870();
- void sub4208B0();
- void sub4208F0();
- void sub420930();
- void sub420830();
- void sub41FC40();
+ void stTryStandIdle();
+ void stWakeUp();
+ void stSleeping();
+ void stPickUpGeneric();
+ void stTurnPressButton();
+ void stStampFloorButton();
+ void stPressButtonSide();
+ void stLargeStep();
+ void stWonderAboutHalf();
+ void stWonderAboutAfter();
+ void stTurnToUseHalf();
+ void stTurnAwayFromUse();
+ void stWonderAbout();
+ void stPeekWall();
void sub420210();
void sub4201C0();
void sub420340();
@@ -82,45 +82,43 @@ public:
void sub420FE0();
void sub4210C0();
void sub421070();
- void sub420420();
+ void stLandOnFeet();
void sub420ED0();
void sub420750();
- void sub4207A0();
+ void stTurnToUse();
void sub4207F0();
void sub420F20();
void sub421350();
- void sub4213F0();
- void sub4213B0();
- void sub420060();
+ void stIdleSitBlink();
+ void stIdleSitBlinkSecond();
+ void stPickUpNeedle();
void sub41FFF0();
void sub4214D0();
void sub421510();
- void sub421160();
- void sub4212C0();
+ void stStepOver();
+ void stSitInTeleporter();
void sub421310();
- void sub420600();
+ void stMoveObjectSkipTurnFaceObject();
void sub420660();
- void sub4205C0();
- void sub420550();
+ void stMoveObjectSkipTurn();
+ void stMoveObjectFaceObject();
void sub420C50();
- void sub420CD0();
- void sub420D10();
- void sub420D50();
- void sub420DA0();
- void sub420DE0();
+ void stPullLeverDown();
+ void stHoldLeverDown();
+ void stReleaseLeverUp();
void sub420E20();
void sub420E90();
void sub420EB0();
void sub420680();
- void sub41F9E0();
+ void stWalking();
void sub41FA40();
- void sub41FB30();
+ void stStartWalkingDone();
void sub41CE70();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
- void spriteUpdate41F780();
+ void suLargeStep();
void spriteUpdate41F230();
void spriteUpdate41F5A0();
void spriteUpdate41F300();
@@ -140,7 +138,7 @@ public:
protected:
Entity *_parentScene;
- Entity *_attachedSprite;
+ Sprite *_attachedSprite;
int _statusE0;
bool _flagE1;
bool _flagE2;
@@ -172,9 +170,9 @@ protected:
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub41FD40();
- void sub41FD90();
- uint32 handleMessage41EB10(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdlePickEar();
+ void evIdlePickEarDone();
+ uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41FDB0();
uint32 handleMessage41E980(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -183,8 +181,8 @@ protected:
void sub41FE50();
uint32 handleMessage41E9E0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41FE70();
- uint32 handleMessage41EF80(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdleChest();
+ uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41FEC0();
uint32 handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -192,45 +190,44 @@ protected:
void sub41D320(uint32 fileHash, AnimationCb callback);
void update41D2B0();
- bool sub41CF10(AnimationCb callback);
+ bool stStartActionFromIdle(AnimationCb callback);
void sub41C7B0();
void sub41C770();
void sub41C790();
void update41D0F0();
- void sub41FF00();
-
- void sub41FCF0();
+ void stStand();
+ void stStandAround();
uint32 handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41C930(int16 x, bool flag);
- uint32 handleMessage41E920(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender);
- bool sub41CEB0(AnimationCb callback3);
+ bool stStartAction(AnimationCb callback3);
- void sub41FB40();
- void sub41FBB0();
+ void stSneak();
+ void stSneakDone();
uint32 handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41CD70(int16 x);
- void sub41F950();
+ void stStartWalking();
uint32 handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41D4C0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41DAD0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41CD00(int16 x);
void sub41CC40(int16 x1, int16 x2);
void sub41CAC0(int16 x);
void sub41CCE0(int16 x);
- void sub41FC30();
+ void stLargeStepDone();
- uint32 handleMessage41DF10(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E3C0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D790(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D880(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41DAA0(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -272,28 +269,28 @@ protected:
void update4497D0();
uint32 handleMessage449800(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage449990(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage449A30(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449BA0(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate449DC0();
+ void suFallDown();
void sub449E20();
void sub449E90();
void sub449EF0();
void sub449F70();
- void sub44A050();
+ void stSpitOutFall();
void sub44A0D0();
void sub44A150();
void sub44A230();
- void sub44A250();
- void sub44A2C0();
- void sub44A330();
- void sub44A370();
- void sub44A3C0();
- void sub44A3E0();
- void sub44A460();
- void sub44A4B0();
+ void stJumpAndFall();
+ void stDropFromRing();
+ void stPressDoorButton();
+ void stHitByBoxingGlove();
+ void stHitByBoxingGloveDone();
+ void stMoveVenusFlyTrap();
+ void stContinueMovingVenusFlyTrap();
+ void stMoveVenusFlyTrapDone();
};
class KmScene1004 : public Klayman {
@@ -301,8 +298,8 @@ public:
KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage478110(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub478170();
+ uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stReadNote();
};
class KmScene1109 : public Klayman {
@@ -324,14 +321,14 @@ protected:
int _countdown;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void update40DBE0();
- uint32 handleMessage40DC00(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40DD20();
- void sub40DD90();
+ uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stFetchMatch();
+ void stLightMatch();
uint32 handleMessage40DDF0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40DEA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
void sub40DF00();
- void sub40DF60();
- void sub40DFA0();
+ void stMoveObjectSkipTurn();
+ void stTumbleHeadless();
void sub40E040();
};
@@ -340,12 +337,12 @@ public:
KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage4160A0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
void update4161A0();
- void sub4161D0();
- void sub416210();
- void sub416250();
- void sub4162B0();
+ void stPeekWall1();
+ void stPeekWall2();
+ void stPeekWall3();
+ void stPeekWallReturn();
};
class KmScene1304 : public Klayman {
@@ -360,8 +357,8 @@ public:
KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub46BEF0();
- void sub46BF60();
+ void stCrashDown();
+ void cbCrashDownEvent();
};
class KmScene1306 : public Klayman {
@@ -429,7 +426,7 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage4689A0(int messageNum, const MessageParam ¶m, Entity *sender);
void spriteUpdate468A30();
- void sub468A80();
+ void stFallSkipJump();
void sub468AD0();
void sub468B10();
};
@@ -449,7 +446,7 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage4401A0(int messageNum, const MessageParam ¶m, Entity *sender);
void sub440230();
- void sub440270();
+ void stDoTeleport();
};
class KmScene2101 : public Klayman {
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 26b68e1..b60c318 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -145,12 +145,12 @@ void AsScene1001Door::handleMessage2000h() {
case 1:
_soundResource1.play(0x65482F03);
setFileHash(0x624C0498, 1, 3);
- SetAnimationCallback3(&AsScene1001Door::callback1);
+ NextState(&AsScene1001Door::callback1);
break;
case 2:
_soundResource2.play();
setFileHash(0x624C0498, 6, 6);
- SetAnimationCallback3(&AsScene1001Door::callback2);
+ NextState(&AsScene1001Door::callback2);
break;
default:
// Nothing
@@ -170,7 +170,7 @@ void AsScene1001Door::callback1() {
_newHashListIndex = 1;
break;
case 3:
- setFileHash1();
+ stopAnimation();
setVisible(false);
break;
default:
@@ -183,13 +183,13 @@ void AsScene1001Door::callback1() {
void AsScene1001Door::callback2() {
setGlobalVar(0xD217189D, 1);
setFileHash(0x624C0498, 6, 6);
- SetAnimationCallback3(&AsScene1001Door::callback3);
+ NextState(&AsScene1001Door::callback3);
_x = 30;
}
void AsScene1001Door::callback3() {
_soundResource1.play();
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -734,7 +734,7 @@ uint32 Class505::handleMessage(int messageNum, const MessageParam ¶m, Entity
setVisible(true);
break;
case 0x3002:
- setFileHash1();
+ stopAnimation();
setVisible(false);
break;
}
@@ -799,7 +799,7 @@ void AsScene1002DoorSpy::sub448B10() {
_parentScene->setSurfacePriority(getSurface(), 1200);
setFileHash(0x586C1D48, 1, -1);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage448A60);
- SetAnimationCallback3(&AsScene1002DoorSpy::sub448AC0);
+ NextState(&AsScene1002DoorSpy::sub448AC0);
}
Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
@@ -1071,14 +1071,14 @@ void AsScene1002VenusFlyTrap::sub4484F0() {
setFileHash(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+ NextState(&AsScene1002VenusFlyTrap::sub448660);
}
void AsScene1002VenusFlyTrap::sub448530() {
setFileHash(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+ NextState(&AsScene1002VenusFlyTrap::sub448660);
}
void AsScene1002VenusFlyTrap::sub448560() {
@@ -1086,7 +1086,7 @@ void AsScene1002VenusFlyTrap::sub448560() {
setFileHash(0x82292851, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+ NextState(&AsScene1002VenusFlyTrap::sub448660);
}
void AsScene1002VenusFlyTrap::sub4485B0() {
@@ -1094,7 +1094,7 @@ void AsScene1002VenusFlyTrap::sub4485B0() {
setFileHash(0x86A82A11, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub4485F0);
+ NextState(&AsScene1002VenusFlyTrap::sub4485F0);
}
void AsScene1002VenusFlyTrap::sub4485F0() {
@@ -1107,7 +1107,7 @@ void AsScene1002VenusFlyTrap::sub448620() {
setFileHash(0x31303094, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(NULL);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448720);
+ NextState(&AsScene1002VenusFlyTrap::sub448720);
_countdown = 24;
}
@@ -1119,14 +1119,14 @@ void AsScene1002VenusFlyTrap::sub448660() {
if (_x >= 154 && _x <= 346) {
setGlobalVar(0x86341E88, (_x - 186) / 32);
} else {
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub4484F0);
+ NextState(&AsScene1002VenusFlyTrap::sub4484F0);
_countdown = 12;
}
} else {
if (_x >= 174 && _x <= 430) {
setGlobalVar(0x1B144052, (_x - 174) / 32);
} else {
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub4484F0);
+ NextState(&AsScene1002VenusFlyTrap::sub4484F0);
_countdown = 12;
}
}
@@ -1136,14 +1136,14 @@ void AsScene1002VenusFlyTrap::sub448720() {
setFileHash(0x152920C4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448750);
+ NextState(&AsScene1002VenusFlyTrap::sub448750);
}
void AsScene1002VenusFlyTrap::sub448750() {
setFileHash(0x84001117, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448660);
+ NextState(&AsScene1002VenusFlyTrap::sub448660);
}
void AsScene1002VenusFlyTrap::sub448780() {
@@ -1157,7 +1157,7 @@ void AsScene1002VenusFlyTrap::sub448780() {
setFileHash(0x8C2C80D4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- SetAnimationCallback3(&AsScene1002VenusFlyTrap::sub448620);
+ NextState(&AsScene1002VenusFlyTrap::sub448620);
}
}
@@ -1224,13 +1224,13 @@ void Class506::sub449280() {
setFileHash(0x004A4495, -1, -1);
_playBackwards = true;
SetMessageHandler(&Class506::handleMessage449210);
- SetAnimationCallback3(&Class506::sub4492C0);
+ NextState(&Class506::sub4492C0);
setVisible(true);
}
void Class506::sub4492C0() {
setVisible(false);
- setFileHash1();
+ stopAnimation();
}
Class478::Class478(NeverhoodEngine *vm, Klayman *klayman)
@@ -1610,7 +1610,7 @@ uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam &pa
setVisible(true);
break;
case 0x3002:
- setFileHash1();
+ stopAnimation();
setVisible(false);
break;
}
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 740e487..52c9d92 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -371,7 +371,7 @@ uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam &p
break;
case 0x3002:
sendMessage(_parentScene, 0x2003, 0);
- setFileHash1();
+ stopAnimation();
break;
}
return messageResult;
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index ffb4f20..25abf95 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -278,7 +278,7 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
_newHashListIndex = -2;
_countdown = 25;
} else {
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
}
@@ -315,11 +315,11 @@ void AsScene1201RightDoor::sub40D830() {
_playBackwards = true;
setVisible(true);
_soundResource.play(calcHash("fxDoorClose20"));
- SetAnimationCallback3(&AsScene1201RightDoor::sub40D880);
+ NextState(&AsScene1201RightDoor::sub40D880);
}
void AsScene1201RightDoor::sub40D880() {
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -343,7 +343,7 @@ uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity
setVisible(true);
break;
case 0x3002:
- setFileHash1();
+ stopAnimation();
setVisible(false);
removeCallbacks();
break;
@@ -422,7 +422,7 @@ void AsScene1201TntMan::sub40CD60() {
setFileHash(0x356803D0, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage40CCD0);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- SetAnimationCallback3(&AsScene1201TntMan::sub40CD30);
+ NextState(&AsScene1201TntMan::sub40CD30);
}
void AsScene1201TntMan::sub40CD90() {
@@ -547,9 +547,9 @@ void AsScene1201Match::sub40C3E0() {
setFileHash(0x00842374, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C320);
if (_status == 0) {
- SetAnimationCallback3(&AsScene1201Match::sub40C420);
+ NextState(&AsScene1201Match::sub40C420);
} else {
- SetAnimationCallback3(&AsScene1201Match::sub40C470);
+ NextState(&AsScene1201Match::sub40C470);
}
}
@@ -559,7 +559,7 @@ void AsScene1201Match::sub40C420() {
_y += 119;
setFileHash(0x018D0240, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C320);
- SetAnimationCallback3(&AsScene1201Match::sub40C4F0);
+ NextState(&AsScene1201Match::sub40C4F0);
}
void AsScene1201Match::sub40C470() {
@@ -569,7 +569,7 @@ void AsScene1201Match::sub40C470() {
if (_status != 0) {
_countdown = 36;
_status--;
- SetAnimationCallback3(&AsScene1201Match::sub40C3E0);
+ NextState(&AsScene1201Match::sub40C3E0);
}
}
@@ -623,10 +623,10 @@ uint32 AsScene1201Creature::handleMessage40C710(int messageNum, const MessagePar
}
break;
case 0x2004:
- setCallback2(AnimationCallback(&AsScene1201Creature::sub40C960));
+ GotoState(&AsScene1201Creature::sub40C960);
break;
case 0x2006:
- setCallback2(AnimationCallback(&AsScene1201Creature::sub40C9B0));
+ GotoState(&AsScene1201Creature::sub40C9B0);
break;
}
return messageResult;
@@ -672,7 +672,7 @@ void AsScene1201Creature::sub40C8E0() {
_countdown3 = 3;
setFileHash(0x08081513, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
- SetAnimationCallback3(&AsScene1201Creature::sub40C930);
+ NextState(&AsScene1201Creature::sub40C930);
_countdown1 = 36;
}
@@ -680,14 +680,14 @@ void AsScene1201Creature::sub40C930() {
if (!_flag) {
setFileHash(0xCA287133, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C7B0);
- SetAnimationCallback3(&AsScene1201Creature::sub40C8E0);
+ NextState(&AsScene1201Creature::sub40C8E0);
}
}
void AsScene1201Creature::sub40C960() {
setFileHash(0x08081513, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
- SetAnimationCallback3(&AsScene1201Creature::sub40C9E0);
+ NextState(&AsScene1201Creature::sub40C9E0);
_countdown1 = 48;
}
@@ -698,7 +698,7 @@ void AsScene1201Creature::sub40C990() {
void AsScene1201Creature::sub40C9B0() {
setFileHash(0xCA287133, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C830);
- SetAnimationCallback3(&AsScene1201Creature::sub40C8E0);
+ NextState(&AsScene1201Creature::sub40C8E0);
_countdown1 = 0;
}
@@ -1091,7 +1091,7 @@ void AsScene1202TntItem::sub4540A0() {
void AsScene1202TntItem::sub4540D0() {
setFileHash(kScene1202FileHashes[_index], 0, -1);
SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
- SetAnimationCallback3(&AsScene1202TntItem::sub454100);
+ NextState(&AsScene1202TntItem::sub454100);
}
void AsScene1202TntItem::sub454100() {
@@ -1099,7 +1099,7 @@ void AsScene1202TntItem::sub454100() {
_y = kScene1202Points[_index2].y;
setFileHash(kScene1202FileHashes[_index], 6, -1);
SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
- SetAnimationCallback3(&AsScene1202TntItem::sub454160);
+ NextState(&AsScene1202TntItem::sub454160);
_playBackwards = true;
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 26b61f0..cb5ed15 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -324,7 +324,7 @@ uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶
void AsScene1302Bridge::stLowerBridge() {
setFileHash(0x88148150, 0, -1);
- SetAnimationCallback3(&AsScene1302Bridge::cbLowerBridgeEvent);
+ NextState(&AsScene1302Bridge::cbLowerBridgeEvent);
_soundResource2.play();
}
@@ -618,7 +618,7 @@ uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam &p
break;
case 0x3002:
_soundResource.play(0x470007EE);
- setFileHash1();
+ stopAnimation();
SetMessageHandler(NULL);
setVisible(false);
break;
@@ -849,7 +849,7 @@ void AsScene1306Elevator::stGoingUp() {
_isDown = false;
SetUpdateHandler(&AsScene1306Elevator::update);
setFileHash(0x043B0270, 0, -1);
- SetAnimationCallback3(&AsScene1306Elevator::cbGoingUpEvent);
+ NextState(&AsScene1306Elevator::cbGoingUpEvent);
_soundResource1.play();
}
@@ -858,7 +858,7 @@ void AsScene1306Elevator::cbGoingUpEvent() {
sendMessage(_parentScene, 0x4808, 0);
_isUp = true;
_countdown = 144;
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -868,7 +868,7 @@ void AsScene1306Elevator::stGoingDown() {
setVisible(true);
setFileHash(0x043B0270, -1, -1);
_playBackwards = true;
- SetAnimationCallback3(&AsScene1306Elevator::cbGoingDownEvent);
+ NextState(&AsScene1306Elevator::cbGoingDownEvent);
_soundResource2.play();
}
@@ -876,7 +876,7 @@ void AsScene1306Elevator::cbGoingDownEvent() {
_isDown = true;
sendMessage(_parentScene, 0x4809, 0);
SetUpdateHandler(&AsScene1306Elevator::update);
- setFileHash1();
+ stopAnimation();
}
Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1433,7 +1433,7 @@ Class549::Class549(NeverhoodEngine *vm, Scene *parentScene)
SetMessageHandler(&Class549::handleMessage);
setVisible(false);
- setFileHash1();
+ stopAnimation();
}
uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1455,13 +1455,13 @@ uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class549::sub455470() {
setFileHash(0xBA0AE050, 0, -1);
setVisible(true);
- SetAnimationCallback3(&Class549::hide);
+ NextState(&Class549::hide);
_soundResource.play(calcHash("fxDoorOpen38"));
}
void Class549::hide() {
sendMessage(_parentScene, 0x2000, 0);
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -1469,13 +1469,13 @@ void Class549::sub4554F0() {
setFileHash(0xBA0AE050, -1, -1);
_playBackwards = true;
setVisible(true);
- SetAnimationCallback3(&Class549::sub455550);
+ NextState(&Class549::sub455550);
_soundResource.play(calcHash("fxDoorClose38"));
}
void Class549::sub455550() {
sendMessage(_parentScene, 0x2001, 0);
- setFileHash1();
+ stopAnimation();
}
Class592::Class592(NeverhoodEngine *vm, Scene *parentScene)
@@ -1483,7 +1483,7 @@ Class592::Class592(NeverhoodEngine *vm, Scene *parentScene)
_parentScene(parentScene) {
SetMessageHandler(&Class592::handleMessage);
- SetAnimationCallback3(&Class592::sub455710);
+ NextState(&Class592::sub455710);
_soundResource.play(0x51456049);
}
@@ -1499,14 +1499,14 @@ uint32 Class592::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class592::sub455710() {
setFileHash(0x6238B191, 0, -1);
- SetAnimationCallback3(&Class592::sub455740);
+ NextState(&Class592::sub455740);
_x = 580;
_y = 383;
}
void Class592::sub455740() {
sendMessage(_parentScene, 0x2004, 0);
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -1515,7 +1515,7 @@ Class593::Class593(NeverhoodEngine *vm, Scene *parentScene)
SetMessageHandler(&Class593::handleMessage);
setVisible(false);
- setFileHash1();
+ stopAnimation();
Entity::_priority = 1200;
}
@@ -1543,12 +1543,12 @@ void Class593::sub4558F0() {
void Class593::sub455920() {
setFileHash(0x80180A10, -1, -1);
_playBackwards = true;
- SetAnimationCallback3(&Class593::sub455950);
+ NextState(&Class593::sub455950);
}
void Class593::sub455950() {
sendMessage(_parentScene, 0x2003, 0);
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 8d42c7f..42dfdb3 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -257,7 +257,7 @@ void Class526::spriteUpdate466720() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
_soundResource.play(0x0E32247F);
- setFileHash1();
+ stopAnimation();
SetSpriteCallback(NULL);
SetMessageHandler(NULL);
setVisible(false);
@@ -295,7 +295,7 @@ void Class527::spriteUpdate466920() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
_soundResource.play(0x18020439);
- setFileHash1();
+ stopAnimation();
SetSpriteCallback(NULL);
SetMessageHandler(NULL);
setVisible(false);
@@ -322,7 +322,7 @@ Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
_countdown = 48;
} else {
_flag = false;
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
}
@@ -369,11 +369,11 @@ void Class528::sub466C50() {
setFileHash(0x04551900, -1, -1);
_soundResource.play(calcHash("fxDoorClose24"));
_playBackwards = true;
- SetAnimationCallback3(&Class528::sub466CB0);
+ NextState(&Class528::sub466CB0);
}
void Class528::sub466CB0() {
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -575,7 +575,7 @@ void Class489::sub434D80() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
sendMessage(_class525, 0x483A, 0);
- setFileHash1();
+ stopAnimation();
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(NULL);
setVisible(false);
@@ -600,7 +600,7 @@ void Class489::sub434E60() {
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage434B20);
setFileHash(0x80C32213, 0, -1);
- SetAnimationCallback3(&Class489::sub434E90);
+ NextState(&Class489::sub434E90);
}
void Class489::sub434E90() {
@@ -613,7 +613,7 @@ void Class489::sub434EC0() {
setFileHash(0x50A80517, 0, -1);
SetMessageHandler(&Class489::handleMessage434B20);
SetSpriteCallback(NULL);
- SetAnimationCallback3(&Class489::sub434F40);
+ NextState(&Class489::sub434F40);
setGlobalVar(0x12A10DB3, 1);
_soundResource1.play(0xCC4A8456);
// TODO Sound1ChList_addSoundResource(0x05331081, 0xCE428854, true);
@@ -631,7 +631,7 @@ void Class489::sub434F80() {
setFileHash(0x50A94417, 0, -1);
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage434B20);
- SetAnimationCallback3(&Class489::sub434E90);
+ NextState(&Class489::sub434E90);
setGlobalVar(0x12A10DB3, 0);
_soundResource1.play(0xCC4A8456);
// TODO Sound1ChList_deleteSoundByHash(0xCE428854);
@@ -642,7 +642,7 @@ void Class489::sub434FF0() {
setFileHash(0x22CB4A33, 0, -1);
SetSpriteCallback(&Class489::spriteUpdate434B60);
SetMessageHandler(&Class489::handleMessage434B20);
- SetAnimationCallback3(&Class489::sub434DF0);
+ NextState(&Class489::sub434DF0);
}
void Class489::sub435040() {
@@ -845,7 +845,7 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
_soundResource2.play();
setFileHash(0x20060259, -1, -1);
_playBackwards = true;
- SetAnimationCallback3(&Class482::sub428530);
+ NextState(&Class482::sub428530);
break;
case 0x3002:
removeCallbacks();
@@ -856,19 +856,19 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class482::sub428500() {
sendMessage(_parentScene, 0x2000, 0);
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
void Class482::sub428530() {
sendMessage(_parentScene, 0x2001, 0);
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
void Class482::sub428560() {
sendMessage(_parentScene, 0x2003, 0);
- setFileHash1();
+ stopAnimation();
}
Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1218,7 +1218,7 @@ void AsScene1407Mouse::stWalkToDest() {
setFileHash(0x22291510, 0, -1);
SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
- SetAnimationCallback3(&AsScene1407Mouse::stIdleLookAtGoodHole);
+ NextState(&AsScene1407Mouse::stIdleLookAtGoodHole);
}
}
@@ -1227,7 +1227,7 @@ void AsScene1407Mouse::stWalkToHole() {
setFileHash(0x22291510, 0, -1);
SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
- SetAnimationCallback3(&AsScene1407Mouse::stGoThroughHole);
+ NextState(&AsScene1407Mouse::stGoThroughHole);
}
void AsScene1407Mouse::stGoThroughHole() {
@@ -1235,7 +1235,7 @@ void AsScene1407Mouse::stGoThroughHole() {
SetSpriteCallback(NULL);
SetMessageHandler(NULL);
SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
- SetAnimationCallback3(&AsScene1407Mouse::stArriveAtHole);
+ NextState(&AsScene1407Mouse::stArriveAtHole);
setVisible(false);
_countdown = 12;
}
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 15e2474..c510601 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -206,7 +206,7 @@ Class521::Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
}
Class521::~Class521() {
- if (_callback1Cb == AnimationCallback(&Class521::sub45D620)) {
+ if (_finalizeStateCb == AnimationCallback(&Class521::sub45D620)) {
setGlobalVar(0x21E60190, !getGlobalVar(0x21E60190));
}
}
@@ -407,11 +407,11 @@ void Class521::sub45CD00() {
_flag11A = 0;
_rectList = NULL;
SetMessageHandler(&Class521::handleMessage45CC30);
- SetAnimationCallback3(&Class521::sub45CFE0);
+ NextState(&Class521::sub45CFE0);
setFileHash(0x35698F78, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update45C790);
- setCallback1(AnimationCallback(&Class521::sub45D040));
+ FinalizeState(&Class521::sub45D040);
setDoDeltaX(doDeltaX ? 1 : 0);
_currMoveDirection = 0;
_newMoveDirection = 0;
@@ -442,14 +442,14 @@ void Class521::sub45CE10() {
setFileHash(0x192ADD30, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45CFE0);
+ NextState(&Class521::sub45CFE0);
} else if (!_flag10E && _steps && _flag113) {
removeCallbacks();
_flag113 = 0;
setFileHash(0x9966B138, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45D100);
+ NextState(&Class521::sub45D100);
} else {
bool flag = false;
uint index = 0;
@@ -478,7 +478,7 @@ void Class521::sub45CF80() {
setFileHash(0xA86A9538, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45CFE0);
+ NextState(&Class521::sub45CFE0);
}
void Class521::sub45CFB0() {
@@ -492,7 +492,7 @@ void Class521::sub45CFE0() {
setFileHash(0x35698F78, 0, -1);
SetMessageHandler(&Class521::handleMessage);
SetUpdateHandler(&Class521::update45C790);
- setCallback1(AnimationCallback(&Class521::sub45D040));
+ FinalizeState(&Class521::sub45D040);
_idleCounter = 0;
_currMoveDirection = 0;
_newMoveDirection = 0;
@@ -508,7 +508,7 @@ void Class521::sub45D050() {
setFileHash(0xB579A77C, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45CFE0);
+ NextState(&Class521::sub45CFE0);
_idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
@@ -519,7 +519,7 @@ void Class521::sub45D0A0() {
setFileHash(0x9C220DA4, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- setCallback1(AnimationCallback(&Class521::sub45D0E0));
+ FinalizeState(&Class521::sub45D0E0);
}
void Class521::sub45D0E0() {
@@ -549,7 +549,7 @@ void Class521::sub45D180() {
_value112 = 0;
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- setCallback1(AnimationCallback(&Class521::sub45D620));
+ FinalizeState(&Class521::sub45D620);
sub45CDC0();
}
@@ -578,7 +578,7 @@ void Class521::moveToNextPoint() {
setFileHash(0x9966B138, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45D100);
+ NextState(&Class521::sub45D100);
}
_flag10E = 0;
SetSpriteCallback(&Class521::suMoveToNextPoint);
@@ -594,7 +594,7 @@ void Class521::sub45D350() {
setFileHash(0x192ADD30, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45D390);
+ NextState(&Class521::sub45D390);
}
void Class521::sub45D390() {
@@ -603,7 +603,7 @@ void Class521::sub45D390() {
setFileHash(0xF46A0324, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- setCallback1(AnimationCallback(&Class521::sub45D620));
+ FinalizeState(&Class521::sub45D620);
_value112 = 1;
sub45CDC0();
}
@@ -640,7 +640,7 @@ void Class521::moveToPrevPoint() {
setFileHash(0x9966B138, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45D100);
+ NextState(&Class521::sub45D100);
}
_flag10E = 0;
SetSpriteCallback(&Class521::suMoveToPrevPoint);
@@ -652,20 +652,20 @@ void Class521::moveToPrevPoint() {
void Class521::sub45D580() {
_flag10F = 1;
_flag10E = 1;
- setCallback1(NULL);
+ FinalizeState(NULL);
setFileHash(0x192ADD30, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- SetAnimationCallback3(&Class521::sub45D5D0);
+ NextState(&Class521::sub45D5D0);
}
void Class521::sub45D5D0() {
_flag10F = 1;
- setCallback1(NULL);
+ FinalizeState(NULL);
setFileHash(0xF46A0324, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
- setCallback1(AnimationCallback(&Class521::sub45D620));
+ FinalizeState(&Class521::sub45D620);
_value112 = 2;
sub45CDC0();
}
@@ -979,7 +979,7 @@ Class546::Class546(NeverhoodEngine *vm, Scene *parentScene)
setVisible(false);
SetMessageHandler(&Class546::handleMessage);
- setFileHash1();
+ stopAnimation();
}
uint32 Class546::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1001,26 +1001,26 @@ uint32 Class546::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class546::sub44D710() {
setFileHash(0x08C80144, 0, -1);
setVisible(true);
- SetAnimationCallback3(&Class546::sub44D760);
+ NextState(&Class546::sub44D760);
_soundResource.play(calcHash("fxDoorOpen23"));
}
void Class546::sub44D760() {
sendMessage(_parentScene, 0x2033, 0);
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
void Class546::sub44D790() {
setFileHash(0x08C80144, -1, -1);
setVisible(true);
- SetAnimationCallback3(&Class546::sub44D7F0);
+ NextState(&Class546::sub44D7F0);
_soundResource.play(calcHash("fxDoorClose23"));
}
void Class546::sub44D7F0() {
sendMessage(_parentScene, 0x2034, 0);
- setFileHash1();
+ stopAnimation();
}
Class547::Class547(NeverhoodEngine *vm, int16 x, int16 y)
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 7a34a2b..7bac3ff 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -355,10 +355,10 @@ void AsScene1907Symbol::tryToPlugIn() {
_deltaY = (_y - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].y) / 16;
_smallDeltaY = _y - _deltaY * 16 - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].y;
if (_elementIndex == _newPositionIndex) {
- SetAnimationCallback3(&AsScene1907Symbol::stPlugIn);
+ NextState(&AsScene1907Symbol::stPlugIn);
} else {
_symbolFlag1 = 1;
- SetAnimationCallback3(&AsScene1907Symbol::stPlugInFail);
+ NextState(&AsScene1907Symbol::stPlugInFail);
}
}
@@ -389,7 +389,7 @@ void AsScene1907Symbol::stFallOffHitGround() {
_vm->_collisionMan->removeSprite(this);
_vm->_collisionMan->addSprite(this);
SetSpriteCallback(&AsScene1907Symbol::suFallOffHitGround);
- SetAnimationCallback3(&AsScene1907Symbol::cbFallOffHitGroundEvent);
+ NextState(&AsScene1907Symbol::cbFallOffHitGroundEvent);
_newHashListIndex = 0;
_currStep = 0;
_yAccel = 30;
@@ -417,7 +417,7 @@ void AsScene1907Symbol::cbFallOffHitGroundEvent() {
void AsScene1907Symbol::stPlugIn() {
_soundResource1.play();
_currPositionIndex = _newPositionIndex;
- setFileHash1();
+ stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteCallback(NULL);
if (_elementIndex == 8)
@@ -426,13 +426,13 @@ void AsScene1907Symbol::stPlugIn() {
void AsScene1907Symbol::stPlugInFail() {
_currPositionIndex = _newPositionIndex;
- setFileHash1();
+ stopAnimation();
_parentScene->plugInFailed();
}
void AsScene1907Symbol::moveUp() {
setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
- setFileHash1();
+ stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteCallback(&AsScene1907Symbol::suMoveUp);
_yIncr = 1;
@@ -441,7 +441,7 @@ void AsScene1907Symbol::moveUp() {
void AsScene1907Symbol::moveDown() {
setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
- setFileHash1();
+ stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteCallback(&AsScene1907Symbol::suMoveDown);
_yIncr = 4;
@@ -541,11 +541,11 @@ void AsScene1907WaterHint::show() {
setVisible(true);
setFileHash(0x110A1061, 0, -1);
SetMessageHandler(&AsScene1907WaterHint::handleMessage46BA20);
- SetAnimationCallback3(&AsScene1907WaterHint::hide);
+ NextState(&AsScene1907WaterHint::hide);
}
void AsScene1907WaterHint::hide() {
- setFileHash1();
+ stopAnimation();
setVisible(false);
SetMessageHandler(&Sprite::handleMessage);
}
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index fa0d111..66f8631 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -121,12 +121,12 @@ void Class538::closeDoor() {
setFileHash(0xC222A8D4, 0, -1);
_newHashListIndex = -2;
setVisible(true);
- SetAnimationCallback3(&Class538::hide);
+ NextState(&Class538::hide);
_soundResource.play(calcHash("fxDoorClose32"));
}
void Class538::hide() {
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
@@ -149,7 +149,7 @@ uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity
setVisible(true);
break;
case 0x3002:
- setFileHash1();
+ stopAnimation();
setVisible(false);
break;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index ff0afa6..ab1fac8 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -1088,7 +1088,7 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
case 0x3002:
if (_index == getGlobalVar(0x9A500914))
sendMessage(_parentScene, 0x4808, 0);
- setFileHash1();
+ stopAnimation();
break;
case 0x4808:
setGlobalVar(0x9A500914, _index);
@@ -1832,7 +1832,7 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
break;
case 0x3002:
removeCallbacks();
- setFileHash1();
+ stopAnimation();
break;
case 0x4807:
stLeverUp();
@@ -1852,7 +1852,7 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
void AsScene2207Lever::stLeverDown() {
setFileHash(0x80880090, 1, -1);
- setCallback1(AnimationCallback(&AsScene2207Lever::stLeverDownEvent));
+ FinalizeState(&AsScene2207Lever::stLeverDownEvent);
_soundResource.play(0x40581882);
}
@@ -1862,7 +1862,7 @@ void AsScene2207Lever::stLeverDownEvent() {
void AsScene2207Lever::stLeverUp() {
setFileHash(0x80880090, 6, -1);
- setCallback1(AnimationCallback(&AsScene2207Lever::stLeverUpEvent));
+ FinalizeState(&AsScene2207Lever::stLeverUpEvent);
_playBackwards = true;
_soundResource.play(0x40581882);
}
@@ -1931,7 +1931,7 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
void AsScene2207WallRobotAnimation::stStartAnimation() {
if (!_idle) {
- SetAnimationCallback3(NULL);
+ NextState(NULL);
} else {
setFileHash(0xCCFD6090, 0, -1);
_idle = false;
@@ -1940,11 +1940,11 @@ void AsScene2207WallRobotAnimation::stStartAnimation() {
}
void AsScene2207WallRobotAnimation::stStopAnimation() {
- SetAnimationCallback3(&AsScene2207WallRobotAnimation::cbStopAnimation);
+ NextState(&AsScene2207WallRobotAnimation::cbStopAnimation);
}
void AsScene2207WallRobotAnimation::cbStopAnimation() {
- setFileHash1();
+ stopAnimation();
_soundResource1.stop();
_soundResource2.stop();
_soundResource3.stop();
@@ -1984,7 +1984,7 @@ uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const Messa
void AsScene2207WallCannonAnimation::stStartAnimation() {
if (!_idle) {
- SetAnimationCallback3(NULL);
+ NextState(NULL);
} else {
setVisible(true);
setFileHash(0x8CAA0099, 0, -1);
@@ -1993,11 +1993,11 @@ void AsScene2207WallCannonAnimation::stStartAnimation() {
}
void AsScene2207WallCannonAnimation::stStopAnimation() {
- SetAnimationCallback3(&AsScene2207WallCannonAnimation::cbStopAnimation);
+ NextState(&AsScene2207WallCannonAnimation::cbStopAnimation);
}
void AsScene2207WallCannonAnimation::cbStopAnimation() {
- setFileHash1();
+ stopAnimation();
setVisible(false);
_idle = true;
}
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 0163e97..5823e4d 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -279,7 +279,7 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2001:
- setFileHash1();
+ stopAnimation();
setVisible(false);
// TODO Sound1ChList_stop(0xDC2769B0);
break;
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index d979bbb..783e616 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1200,7 +1200,7 @@ uint32 AsScene3010DeadBolt::hmAnimation(int messageNum, const MessageParam ¶
}
void AsScene3010DeadBolt::stIdle() {
- setFileHash1();
+ stopAnimation();
SetUpdateHandler(&AsScene3010DeadBolt::update);
SetMessageHandler(&Sprite::handleMessage);
_locked = false;
@@ -1215,8 +1215,8 @@ void AsScene3010DeadBolt::unlock(bool skipAnim) {
} else {
setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
- setCallback1(AnimationCallback(&AsScene3010DeadBolt::stIdleMessage));
- SetAnimationCallback3(&AsScene3010DeadBolt::stIdle);
+ FinalizeState(&AsScene3010DeadBolt::stIdleMessage);
+ NextState(&AsScene3010DeadBolt::stIdle);
_soundResource1.play();
}
_unlocked = true;
@@ -1225,7 +1225,7 @@ void AsScene3010DeadBolt::unlock(bool skipAnim) {
}
void AsScene3010DeadBolt::stIdleMessage() {
- setFileHash1();
+ stopAnimation();
SetMessageHandler(&Sprite::handleMessage);
sendMessage(_parentScene, 0x2001, _boltIndex);
}
@@ -1236,8 +1236,8 @@ void AsScene3010DeadBolt::lock() {
setVisible(true);
setFileHash(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
- setCallback1(AnimationCallback(&AsScene3010DeadBolt::stDisabledMessage));
- SetAnimationCallback3(&AsScene3010DeadBolt::stIdle);
+ FinalizeState(&AsScene3010DeadBolt::stDisabledMessage);
+ NextState(&AsScene3010DeadBolt::stIdle);
if (_soundToggle) {
_soundResource1.play();
} else {
@@ -1255,8 +1255,8 @@ void AsScene3010DeadBolt::stDisabled() {
setVisible(true);
setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
- setCallback1(AnimationCallback(&AsScene3010DeadBolt::stDisabledMessage));
- SetAnimationCallback3(&AsScene3010DeadBolt::stIdle);
+ FinalizeState(&AsScene3010DeadBolt::stDisabledMessage);
+ NextState(&AsScene3010DeadBolt::stIdle);
_playBackwards = true;
_soundResource3.play();
}
@@ -1493,7 +1493,7 @@ void AsScene3011Symbol::show(bool flag) {
}
void AsScene3011Symbol::hide() {
- setFileHash1();
+ stopAnimation();
setVisible(false);
}
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index d94d3db..f1f4bab 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -92,63 +92,8 @@ Common::Error NeverhoodEngine::run() {
}
#if 0
- BlbArchive *blb = new BlbArchive();
- blb->open("m.blb");
- delete blb;
-#endif
-
-#if 0
- ResourceFileEntry *r = _res->findEntry(0x50A80517);
-#endif
-
-#if 0
- int resourceHandle = _res->useResource(0x0CA04202);
- debug("resourceHandle = %d", resourceHandle);
- byte *data = _res->loadResource(resourceHandle);
- bool rle;
- NDimensions dimensions;
- NUnknown unknown;
- byte *palette, *pixels;
- parseBitmapResource(data, &rle, &dimensions, &unknown, &palette, &pixels);
- debug("%d, %d", dimensions.width, dimensions.height);
- byte *rawpixels = new byte[dimensions.width * dimensions.height];
- memset(rawpixels, 0, dimensions.width * dimensions.height);
- debug("rle = %d", rle);
- unpackSpriteRle(pixels, dimensions.width, dimensions.height, rawpixels, dimensions.width, false, false);
- Common::DumpFile d;
- d.open("dump.0");
- d.write(rawpixels, dimensions.width * dimensions.height);
- d.close();
- delete[] rawpixels;
- _res->unloadResource(resourceHandle);
- _res->unuseResource(resourceHandle);
-#endif
-
-#if 0
- { // Create a new scope
- SpriteResource r(this);
- BaseSurface *surf = new BaseSurface(this, 0, 640, 480);
- r.load(0x0CA04202);
- debug("r: width = %d; height = %d", r.getDimensions().width, r.getDimensions().height);
- surf->drawSpriteResource(r);
- delete surf;
- }
-#endif
-
-#if 0
- { // Create a new scope
- AnimResource r(this);
- r.load(0x000540B0);
- }
-#endif
-
-#if 0
- { // Create a new scope
- DataResource dataResource(this);
- //dataResource.load(0x01801002);
- //dataResource.load(0x84500132);
- dataResource.load(0x81120132);
- }
+ // TODO: This should probably be implemented as debug command later
+ dumpAllResources();
#endif
#if 1
@@ -220,5 +165,84 @@ NPoint NeverhoodEngine::getMousePos() {
pt.y = _mouseY;
return pt;
}
+
+void writeTga(const char *filename, byte *pixels, byte *palette, int16 width, int16 height) {
+ byte identsize = 0;
+ byte colourmaptype = 1;
+ byte imagetype = 1;
+ uint16 colourmapstart = 0;
+ uint16 colourmaplength = 256;
+ byte colourmapbits = 24;
+ uint16 xstart = 0;
+ uint16 ystart = 0;
+ byte bits = 8;
+ byte descriptor = 0x20;
+ Common::DumpFile tga;
+ tga.open(filename);
+ tga.writeByte(identsize);
+ tga.writeByte(colourmaptype);
+ tga.writeByte(imagetype);
+ tga.writeUint16LE(colourmapstart);
+ tga.writeUint16LE(colourmaplength);
+ tga.writeByte(colourmapbits);
+ tga.writeUint16LE(xstart);
+ tga.writeUint16LE(ystart);
+ tga.writeUint16LE(width);
+ tga.writeUint16LE(height);
+ tga.writeByte(bits);
+ tga.writeByte(descriptor);
+ tga.write(palette, 768);
+ tga.write(pixels, width * height);
+ tga.close();
+}
+
+void NeverhoodEngine::dumpAllResources() {
+
+ PaletteResource paletteResource(this);
+ byte *vgaPalette = new byte[768];
+ paletteResource.load(0x4086520E);
+ byte *srcpalette = paletteResource.palette();
+ for (int i = 0; i < 256; i++) {
+ vgaPalette[i * 3 + 2] = srcpalette[i * 4 + 0];
+ vgaPalette[i * 3 + 1] = srcpalette[i * 4 + 1];
+ vgaPalette[i * 3 + 0] = srcpalette[i * 4 + 2];
+ }
+
+#if 0
+ for (int i = 0; i < 768; i++)
+ vgaPalette[i] <<= 2;
+#endif
+
+ uint entriesCount = _res->getEntryCount();
+ debug("%d entries", entriesCount);
+
+ for (uint i = 0; i < entriesCount; i++) {
+ const ResourceFileEntry &entry = _res->getEntry(i);
+ int type = _res->getResourceTypeByHash(entry.fileHash);
+ debug("hash: %08X; type: %d", entry.fileHash, type);
+ if (type == 4) {
+ AnimResource anim(this);
+ anim.load(entry.fileHash);
+ for (uint frameIndex = 0; frameIndex < anim.getFrameCount(); frameIndex++) {
+ const AnimFrameInfo &frameInfo = anim.getFrameInfo(frameIndex);
+ int16 width = (frameInfo.rect.width + 3) & 0xFFFC;
+ byte *pixels = new byte[width * frameInfo.rect.height];
+ memset(pixels, 0, width * frameInfo.rect.height);
+ anim.draw(frameIndex, pixels, width, false, false);
+ Common::String filename =
+ frameInfo.frameHash != 0
+ ? Common::String::format("%08X_%03d_%08X.tga", entry.fileHash, frameIndex, frameInfo.frameHash)
+ : Common::String::format("%08X_%03d.tga", entry.fileHash, frameIndex);
+ writeTga(filename.c_str(), pixels, vgaPalette, width, frameInfo.rect.height);
+ delete[] pixels;
+ }
+ static int n = 0;
+ //if (n++ == 25) break;
+ }
+ }
+
+ delete[] vgaPalette;
+
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index b4bc333..adc4619 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -124,6 +124,8 @@ public:
int16 getMouseY() const { return _mouseY; }
NPoint getMousePos();
+ void dumpAllResources();
+
public:
};
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
index 2261440..ed5bffa 100644
--- a/engines/neverhood/resourceman.h
+++ b/engines/neverhood/resourceman.h
@@ -68,6 +68,8 @@ public:
void unloadResource(int resourceHandle);
void freeResource(Resource *resource);
Common::SeekableReadStream *createStream(uint32 fileHash);
+ const ResourceFileEntry& getEntry(uint index) { return _entries[index]; }
+ uint getEntryCount() { return _entries.size(); }
private:
Common::Array<BlbArchive*> _archives;
Common::Array<ResourceFileEntry> _entries;
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 480e9e9..697bd6e 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -237,9 +237,9 @@ void AnimatedSprite::init() {
_frameIndex3 = 0;
_frameIndex = 0;
_hashListIndex = -1;
- _callback1Cb = NULL;
- _callback2Cb = NULL;
- _callback3Cb = NULL;
+ _finalizeStateCb = NULL;
+ _currStateCb = NULL;
+ _nextStateCb = NULL;
_newHashListIndex = -1;
_fileHash4 = 0;
_flag = false;
@@ -458,7 +458,7 @@ void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frame
_hashListIndex = -1;
}
-void AnimatedSprite::setFileHash1() {
+void AnimatedSprite::stopAnimation() {
_fileHash1 = 1;
_animStatus = 2;
}
@@ -486,52 +486,43 @@ void AnimatedSprite::setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fil
_hashListIndex = -1;
}
-void AnimatedSprite::setCallback1(AnimationCb callback1) {
- if (_callback1Cb) {
- (this->*_callback1Cb)();
- }
- _callback1Cb = callback1;
+void AnimatedSprite::setFinalizeState(AnimationCb finalizeStateCb) {
+ if (_finalizeStateCb)
+ (this->*_finalizeStateCb)();
+ _finalizeStateCb = finalizeStateCb;
}
-void AnimatedSprite::setCallback2(AnimationCb callback2) {
-
- if (_callback1Cb) {
- AnimationCb cb = _callback1Cb;
- _callback1Cb = NULL;
+void AnimatedSprite::gotoState(AnimationCb currStateCb) {
+ if (_finalizeStateCb) {
+ AnimationCb cb = _finalizeStateCb;
+ _finalizeStateCb = NULL;
(this->*cb)();
}
-
// TODO _callbackList = NULL;
- _callback3Cb = NULL;
- _callback2Cb = callback2;
-
- if (_callback2Cb) {
- (this->*_callback2Cb)();
- }
-
+ _nextStateCb = NULL;
+ _currStateCb = currStateCb;
+ if (_currStateCb)
+ (this->*_currStateCb)();
}
void AnimatedSprite::removeCallbacks() {
-
- if (_callback1Cb) {
- AnimationCb cb = _callback1Cb;
- _callback1Cb = NULL;
+ if (_finalizeStateCb) {
+ AnimationCb cb = _finalizeStateCb;
+ _finalizeStateCb = NULL;
(this->*cb)();
}
-
- if (_callback3Cb) {
- _callback2Cb = _callback3Cb;
- _callback3Cb = NULL;
- debug("Fire _callback3Cb '%s'", _callback3CbName.c_str());
- (this->*_callback2Cb)();
+ if (_nextStateCb) {
+ _currStateCb = _nextStateCb;
+ _nextStateCb = NULL;
+ debug("Fire _nextStateCb '%s'", _nextStateCbName.c_str());
+ (this->*_currStateCb)();
#if 0 // TODO
} else if (_callbackList) {
removeCallbackList();
#endif
} else {
- _callback2Cb = NULL;
+ _currStateCb = NULL;
}
-
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 10ebc19..aa22724 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -107,10 +107,10 @@ protected:
void init(uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
};
-#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
-#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback2(" #callback ")"); _callback2CbName = #callback
-#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback3(" #callback ")"); _callback3CbName = #callback
#define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback)
+#define GotoState(callback) gotoState(static_cast <void (AnimatedSprite::*)()> (callback))
+#define NextState(callback) _nextStateCb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "NextState(" #callback ")"); _nextStateCbName = #callback
+#define FinalizeState(callback) setFinalizeState(static_cast <void (AnimatedSprite::*)()> (callback));
class AnimatedSprite : public Sprite {
public:
@@ -152,24 +152,24 @@ protected:
callbackListCount dw ?
callbackList dd ?
*/
- AnimationCb _callback1Cb;
- AnimationCb _callback2Cb;
- AnimationCb _callback3Cb;
+ AnimationCb _finalizeStateCb;
+ AnimationCb _currStateCb;
+ AnimationCb _nextStateCb;
// For debugging purposes
- Common::String _callback1CbName;
- Common::String _callback2CbName;
- Common::String _callback3CbName;
+ Common::String _finalizeStateCbName;
+ Common::String _currStateCbName;
+ Common::String _nextStateCbName;
void init();
void updateAnim();
void updatePosition();
void updateFrameIndex();
void updateFrameInfo();
void createSurface1(uint32 fileHash, int surfacePriority);
- void setFileHash1();
+ void stopAnimation();
void setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5);
void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
- void setCallback1(AnimationCb callback1);
- void setCallback2(AnimationCb callback2);
+ void setFinalizeState(AnimationCb finalizeStateCb);
+ void gotoState(AnimationCb currStateCb);
void removeCallbacks();
};
Commit: 01f3f3a8dd0ad2891939d03b0ce47cbf36ea9bc6
https://github.com/scummvm/scummvm/commit/01f3f3a8dd0ad2891939d03b0ce47cbf36ea9bc6
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2013-05-08T11:39:44-07:00
Commit Message:
Merge branch 'master'
Changed paths:
A audio/decoders/codec.h
A audio/decoders/xa.cpp
A audio/decoders/xa.h
A backends/events/maemosdl/maemosdl-events.cpp
A backends/events/maemosdl/maemosdl-events.h
A backends/events/ps3sdl/ps3sdl-events.cpp
A backends/events/ps3sdl/ps3sdl-events.h
A backends/fs/ps3/ps3-fs-factory.cpp
A backends/fs/ps3/ps3-fs-factory.h
A backends/graphics/sdl/sdl-graphics.cpp
A backends/graphics/sdl/sdl-graphics.h
A backends/mixer/sdl13/sdl13-mixer.cpp
A backends/mixer/sdl13/sdl13-mixer.h
A backends/platform/bada/README.TXT
A backends/platform/bada/application.cpp
A backends/platform/bada/application.h
A backends/platform/bada/audio.cpp
A backends/platform/bada/audio.h
A backends/platform/bada/bada.mk
A backends/platform/bada/form.cpp
A backends/platform/bada/form.h
A backends/platform/bada/fs.cpp
A backends/platform/bada/fs.h
A backends/platform/bada/graphics.cpp
A backends/platform/bada/graphics.h
A backends/platform/bada/main.cpp
A backends/platform/bada/missing.cpp
A backends/platform/bada/portdefs.h
A backends/platform/bada/sscanf.cpp
A backends/platform/bada/system.cpp
A backends/platform/bada/system.h
A backends/platform/gph/devices/gp2x/mmuhack/README
A backends/platform/gph/gph.h
A backends/platform/maemo/debian/changelog
A backends/platform/maemo/debian/compat
A backends/platform/maemo/debian/control
A backends/platform/maemo/debian/copyright
A backends/platform/maemo/debian/postinst
A backends/platform/maemo/debian/rules
A backends/platform/maemo/debian/scummvm.dirs
A backends/platform/maemo/maemo-common.h
A backends/platform/maemo/maemo.cpp
A backends/platform/maemo/maemo.h
A backends/platform/maemo/main.cpp
A backends/platform/maemo/module.mk
A backends/platform/openpandora/build/PXML_schema.xsd
A backends/platform/sdl/macosx/appmenu_osx.h
A backends/platform/sdl/macosx/appmenu_osx.mm
A backends/platform/sdl/ps3/ps3-main.cpp
A backends/platform/sdl/ps3/ps3.cpp
A backends/platform/sdl/ps3/ps3.h
A backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
A backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
A backends/timer/bada/timer.cpp
A backends/timer/bada/timer.h
A backends/updates/macosx/macosx-updates.h
A backends/updates/macosx/macosx-updates.mm
A common/bitstream.h
A common/cosinetables.cpp
A common/cosinetables.h
A common/dct.cpp
A common/dct.h
A common/fft.cpp
A common/fft.h
A common/huffman.cpp
A common/huffman.h
A common/localization.cpp
A common/localization.h
A common/math.h
A common/rdft.cpp
A common/rdft.h
A common/sinetables.cpp
A common/sinetables.h
A common/updates.h
A dists/bada/Icons/mainMenu1.png
A dists/bada/Icons/mainMenu2.png
A dists/bada/Icons/splash1.png
A dists/bada/Icons/splash2.png
A dists/bada/Res/scummmobile/THEMERC
A dists/bada/Res/scummmobile/checkbox.bmp
A dists/bada/Res/scummmobile/checkbox_empty.bmp
A dists/bada/Res/scummmobile/clR6x12-iso-8859-2.fcc
A dists/bada/Res/scummmobile/clR6x12-iso-8859-5.fcc
A dists/bada/Res/scummmobile/cursor.bmp
A dists/bada/Res/scummmobile/cursor_small.bmp
A dists/bada/Res/scummmobile/fixed5x8-iso-8859-2.fcc
A dists/bada/Res/scummmobile/fixed5x8-iso-8859-5.fcc
A dists/bada/Res/scummmobile/helvB14-ASCII.fcc
A dists/bada/Res/scummmobile/helvB14.bdf
A dists/bada/Res/scummmobile/helvB18-ASCII.fcc
A dists/bada/Res/scummmobile/helvB18.bdf
A dists/bada/Res/scummmobile/helvB24-ASCII.fcc
A dists/bada/Res/scummmobile/helvB24.bdf
A dists/bada/Res/scummmobile/helvb12-iso-8859-1.fcc
A dists/bada/Res/scummmobile/helvb12-iso-8859-2.fcc
A dists/bada/Res/scummmobile/helvb12-iso-8859-5.fcc
A dists/bada/Res/scummmobile/logo.bmp
A dists/bada/Res/scummmobile/logo_small.bmp
A dists/bada/Res/scummmobile/radiobutton.bmp
A dists/bada/Res/scummmobile/radiobutton_empty.bmp
A dists/bada/Res/scummmobile/scummmobile_gfx.stx
A dists/bada/Res/scummmobile/scummmobile_layout.stx
A dists/bada/Res/scummmobile/search.bmp
A dists/bada/Res/vkeybd_bada/lowercase-symbols800x399.bmp
A dists/bada/Res/vkeybd_bada/lowercase800x399.bmp
A dists/bada/Res/vkeybd_bada/uppercase-symbols800x399.bmp
A dists/bada/Res/vkeybd_bada/uppercase800x399.bmp
A dists/bada/Res/vkeybd_bada/vkeybd_bada.xml
A dists/macosx/scummvm_osx_appcast.xml
A dists/ps3/ICON0.PNG
A dists/ps3/PIC1.PNG
A dists/ps3/readme-ps3.md
A dists/ps3/sfo.xml
A dists/win32/graphics/left.bmp
A dists/win32/graphics/scummvm-install.ico
A dists/win32/plugins/Games.dll
A dists/win32/scummvm.gdf.xml
A dists/win32/scummvm.nsi
A dists/win32/scummvm.nsi.in
A doc/QuickStart
A doc/cz/PrectiMe
A doc/de/Liesmich
A doc/de/Neues
A doc/de/Schnellstart
A doc/es/Inicio rápido
A doc/fr/DemarrageRapide
A doc/it/GuidaRapida
A doc/no-nb/HurtigStart
A engines/agi/loader_v1.cpp
A engines/agi/opcodes.cpp
A engines/agos/installshield_cab.cpp
A engines/agos/installshield_cab.h
A engines/cge/bitmap.cpp
A engines/cge/bitmap.h
A engines/cge/cge.cpp
A engines/cge/cge.h
A engines/cge/cge_main.cpp
A engines/cge/cge_main.h
A engines/cge/console.cpp
A engines/cge/console.h
A engines/cge/detection.cpp
A engines/cge/events.cpp
A engines/cge/events.h
A engines/cge/fileio.cpp
A engines/cge/fileio.h
A engines/cge/game.cpp
A engines/cge/game.h
A engines/cge/general.h
A engines/cge/module.mk
A engines/cge/snail.cpp
A engines/cge/snail.h
A engines/cge/sound.cpp
A engines/cge/sound.h
A engines/cge/talk.cpp
A engines/cge/talk.h
A engines/cge/text.cpp
A engines/cge/text.h
A engines/cge/vga13h.cpp
A engines/cge/vga13h.h
A engines/cge/vmenu.cpp
A engines/cge/vmenu.h
A engines/cge/walk.cpp
A engines/cge/walk.h
A engines/composer/composer.cpp
A engines/composer/composer.h
A engines/composer/detection.cpp
A engines/composer/graphics.cpp
A engines/composer/graphics.h
A engines/composer/module.mk
A engines/composer/resource.cpp
A engines/composer/resource.h
A engines/composer/scripting.cpp
A engines/dreamweb/backdrop.cpp
A engines/dreamweb/object.cpp
A engines/dreamweb/pathfind.cpp
A engines/dreamweb/print.cpp
A engines/dreamweb/saveload.cpp
A engines/dreamweb/sprite.cpp
A engines/dreamweb/structs.h
A engines/dreamweb/stubs.h
A engines/dreamweb/use.cpp
A engines/dreamweb/vgagrafx.cpp
A engines/gob/anifile.cpp
A engines/gob/anifile.h
A engines/gob/aniobject.cpp
A engines/gob/aniobject.h
A engines/gob/decfile.cpp
A engines/gob/decfile.h
A engines/gob/init_geisha.cpp
A engines/gob/inter_geisha.cpp
A engines/gob/minigames/geisha/diving.cpp
A engines/gob/minigames/geisha/diving.h
A engines/gob/minigames/geisha/evilfish.cpp
A engines/gob/minigames/geisha/evilfish.h
A engines/gob/minigames/geisha/penetration.cpp
A engines/gob/minigames/geisha/penetration.h
A engines/gob/rxyfile.cpp
A engines/gob/rxyfile.h
A engines/gob/save/saveload_geisha.cpp
A engines/lastexpress/fight/fight.cpp
A engines/lastexpress/fight/fight.h
A engines/lastexpress/fight/fighter.cpp
A engines/lastexpress/fight/fighter.h
A engines/lastexpress/fight/fighter_anna.cpp
A engines/lastexpress/fight/fighter_anna.h
A engines/lastexpress/fight/fighter_ivo.cpp
A engines/lastexpress/fight/fighter_ivo.h
A engines/lastexpress/fight/fighter_milos.cpp
A engines/lastexpress/fight/fighter_milos.h
A engines/lastexpress/fight/fighter_salko.cpp
A engines/lastexpress/fight/fighter_salko.h
A engines/lastexpress/fight/fighter_vesna.cpp
A engines/lastexpress/fight/fighter_vesna.h
A engines/lastexpress/menu/clock.cpp
A engines/lastexpress/menu/clock.h
A engines/lastexpress/menu/menu.cpp
A engines/lastexpress/menu/menu.h
A engines/lastexpress/menu/trainline.cpp
A engines/lastexpress/menu/trainline.h
A engines/lastexpress/sound/entry.cpp
A engines/lastexpress/sound/entry.h
A engines/lastexpress/sound/queue.cpp
A engines/lastexpress/sound/queue.h
A engines/lastexpress/sound/sound.cpp
A engines/lastexpress/sound/sound.h
A engines/sci/graphics/text32.cpp
A engines/sci/graphics/text32.h
A engines/scumm/he/logic/baseball2001.cpp
A engines/scumm/he/logic/basketball.cpp
A engines/scumm/he/logic/football.cpp
A engines/scumm/he/logic/funshop.cpp
A engines/scumm/he/logic/moonbase.cpp
A engines/scumm/he/logic/puttrace.cpp
A engines/scumm/he/logic/soccer.cpp
A engines/scumm/imuse/pcspk.cpp
A engines/scumm/imuse/pcspk.h
A engines/tsage/blue_force/blueforce_dialogs.cpp
A engines/tsage/blue_force/blueforce_dialogs.h
A engines/tsage/blue_force/blueforce_logic.cpp
A engines/tsage/blue_force/blueforce_logic.h
A engines/tsage/blue_force/blueforce_scenes0.cpp
A engines/tsage/blue_force/blueforce_scenes0.h
A engines/tsage/blue_force/blueforce_scenes1.cpp
A engines/tsage/blue_force/blueforce_scenes1.h
A engines/tsage/blue_force/blueforce_scenes2.cpp
A engines/tsage/blue_force/blueforce_scenes2.h
A engines/tsage/blue_force/blueforce_scenes3.cpp
A engines/tsage/blue_force/blueforce_scenes3.h
A engines/tsage/blue_force/blueforce_scenes4.cpp
A engines/tsage/blue_force/blueforce_scenes4.h
A engines/tsage/blue_force/blueforce_scenes5.cpp
A engines/tsage/blue_force/blueforce_scenes5.h
A engines/tsage/blue_force/blueforce_scenes6.cpp
A engines/tsage/blue_force/blueforce_scenes6.h
A engines/tsage/blue_force/blueforce_scenes7.cpp
A engines/tsage/blue_force/blueforce_scenes7.h
A engines/tsage/blue_force/blueforce_scenes8.cpp
A engines/tsage/blue_force/blueforce_scenes8.h
A engines/tsage/blue_force/blueforce_scenes9.cpp
A engines/tsage/blue_force/blueforce_scenes9.h
A engines/tsage/blue_force/blueforce_speakers.cpp
A engines/tsage/blue_force/blueforce_speakers.h
A engines/tsage/ringworld/ringworld_demo.cpp
A engines/tsage/ringworld/ringworld_demo.h
A engines/tsage/ringworld/ringworld_dialogs.cpp
A engines/tsage/ringworld/ringworld_dialogs.h
A engines/tsage/ringworld/ringworld_logic.cpp
A engines/tsage/ringworld/ringworld_logic.h
A engines/tsage/ringworld/ringworld_scenes1.cpp
A engines/tsage/ringworld/ringworld_scenes1.h
A engines/tsage/ringworld/ringworld_scenes10.cpp
A engines/tsage/ringworld/ringworld_scenes10.h
A engines/tsage/ringworld/ringworld_scenes2.cpp
A engines/tsage/ringworld/ringworld_scenes2.h
A engines/tsage/ringworld/ringworld_scenes3.cpp
A engines/tsage/ringworld/ringworld_scenes3.h
A engines/tsage/ringworld/ringworld_scenes4.cpp
A engines/tsage/ringworld/ringworld_scenes4.h
A engines/tsage/ringworld/ringworld_scenes5.cpp
A engines/tsage/ringworld/ringworld_scenes5.h
A engines/tsage/ringworld/ringworld_scenes6.cpp
A engines/tsage/ringworld/ringworld_scenes6.h
A engines/tsage/ringworld/ringworld_scenes8.cpp
A engines/tsage/ringworld/ringworld_scenes8.h
A engines/tsage/ringworld/ringworld_speakers.cpp
A engines/tsage/ringworld/ringworld_speakers.h
A engines/tsage/ringworld2/ringworld2_dialogs.cpp
A engines/tsage/ringworld2/ringworld2_dialogs.h
A engines/tsage/ringworld2/ringworld2_logic.cpp
A engines/tsage/ringworld2/ringworld2_logic.h
A engines/tsage/ringworld2/ringworld2_scenes0.cpp
A engines/tsage/ringworld2/ringworld2_scenes0.h
A engines/tsage/user_interface.cpp
A engines/tsage/user_interface.h
A graphics/cursor.h
A graphics/fonts/bdf.cpp
A graphics/fonts/bdf.h
A icons/count.ico
A test/common/math.h
A test/cxxtest_mingw.h
A video/bink_decoder.cpp
A video/bink_decoder.h
A video/binkdata.h
R engines/tsage/blueforce_logic.h
R audio/decoders/vag.cpp
R audio/decoders/vag.h
R backends/platform/gph/devices/gp2x/mmuhack/readme.txt
R backends/platform/gph/gph-sdl.h
R backends/platform/maemo/scummvm-1.1.0-maemo.patch
R devtools/create_drascula/Makefile
R devtools/create_drascula/dists/msvc8/create_drascula.sln
R devtools/create_drascula/dists/msvc8/create_drascula.vcproj
R devtools/create_drascula/dists/msvc8_to_msvc9.bat
R devtools/create_drascula/dists/msvc9/create_drascula.sln
R devtools/create_drascula/dists/msvc9/create_drascula.vcproj
R devtools/create_drascula/dists/msvc9_to_msvc8.bat
R devtools/create_hugo/dists/msvc10/create_hugo.sln
R devtools/create_hugo/dists/msvc10/create_hugo.vcxproj
R devtools/create_hugo/dists/msvc9/create_hugo.sln
R devtools/create_hugo/dists/msvc9/create_hugo.vcproj
R devtools/create_lure/Makefile
R devtools/create_lure/dists/msvc8/create_lure.sln
R devtools/create_lure/dists/msvc8/create_lure.vcproj
R devtools/create_lure/dists/msvc8_to_msvc9.bat
R devtools/create_lure/dists/msvc9/create_lure.sln
R devtools/create_lure/dists/msvc9/create_lure.vcproj
R devtools/create_lure/dists/msvc9_to_msvc8.bat
R devtools/create_mads/Makefile
R devtools/create_mads/dists/msvc9/create_mads.sln
R devtools/create_mads/dists/msvc9/create_mads.vcproj
R devtools/create_toon/dists/msvc9/create_toon.sln
R devtools/create_toon/dists/msvc9/create_toon.vcproj
R devtools/skycpt/AsciiCptCompile.sln
R devtools/skycpt/AsciiCptCompile.vcproj
R dists/nsis/graphics/scummvm-install.ico
R dists/nsis/graphics/left.bmp
R dists/nsis/scummvm.nsi
R dists/nsis/scummvm.nsi.in
R doc/translations/README-translation_template.txt
R doc/translations/README-fr.txt
R doc/he/bink-md5s.txt
R doc/he/md5s.txt
R doc/he/smacker-md5s.txt
R doc/he/u32.txt
R doc/he/versions.html
R doc/translations/README-de.txt
R engines/agi/preagi_common.cpp
R engines/agi/preagi_common.h
R engines/lastexpress/game/fight.cpp
R engines/lastexpress/game/fight.h
R engines/lastexpress/game/sound.cpp
R engines/lastexpress/game/sound.h
R engines/lastexpress/game/menu.cpp
R engines/lastexpress/game/menu.h
R engines/tsage/blueforce_logic.cpp
R engines/tsage/ringworld_demo.cpp
R engines/tsage/ringworld_demo.h
R engines/tsage/ringworld_scenes1.cpp
R engines/tsage/ringworld_scenes1.h
R engines/tsage/ringworld_scenes10.cpp
R engines/tsage/ringworld_scenes10.h
R engines/tsage/ringworld_scenes2.cpp
R engines/tsage/ringworld_scenes2.h
R engines/tsage/ringworld_scenes3.cpp
R engines/tsage/ringworld_scenes3.h
R engines/tsage/ringworld_scenes4.cpp
R engines/tsage/ringworld_scenes4.h
R engines/tsage/ringworld_scenes5.cpp
R engines/tsage/ringworld_scenes5.h
R engines/tsage/ringworld_scenes6.cpp
R engines/tsage/ringworld_scenes6.h
R engines/tsage/ringworld_scenes8.cpp
R engines/tsage/ringworld_scenes8.h
R engines/tsage/ringworld_logic.cpp
R engines/tsage/ringworld_logic.h
R graphics/dither.cpp
R graphics/dither.h
.gitignore
AUTHORS
COPYING
COPYING.LGPL
Makefile
NEWS
README
audio/audiostream.cpp
audio/audiostream.h
audio/decoders/aac.cpp
audio/decoders/aac.h
audio/decoders/adpcm.cpp
audio/decoders/adpcm_intern.h
audio/decoders/mp3.cpp
audio/decoders/qdm2.cpp
audio/decoders/qdm2.h
audio/decoders/quicktime.cpp
audio/decoders/quicktime.h
audio/decoders/quicktime_intern.h
audio/decoders/raw.cpp
audio/decoders/voc.cpp
audio/decoders/voc.h
audio/decoders/vorbis.cpp
audio/fmopl.cpp
audio/fmopl.h
audio/mididrv.cpp
audio/mididrv.h
audio/mixer.cpp
audio/mods/maxtrax.cpp
audio/module.mk
audio/mpu401.cpp
audio/rate.cpp
audio/rate_arm.cpp
audio/softsynth/appleiigs.cpp
audio/softsynth/cms.cpp
audio/softsynth/eas.cpp
audio/softsynth/emumidi.h
audio/softsynth/fmtowns_pc98/towns_audio.h
audio/softsynth/fmtowns_pc98/towns_euphony.h
audio/softsynth/fmtowns_pc98/towns_midi.cpp
audio/softsynth/fmtowns_pc98/towns_midi.h
audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
audio/softsynth/fmtowns_pc98/towns_pc98_driver.h
audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h
audio/softsynth/mt32.cpp
audio/softsynth/mt32/mt32_file.cpp
audio/softsynth/opl/dbopl.cpp
audio/softsynth/opl/dbopl.h
audio/softsynth/opl/dosbox.h
audio/softsynth/opl/mame.cpp
backends/base-backend.cpp
backends/events/dinguxsdl/dinguxsdl-events.cpp
backends/events/gph/gph-events.cpp
backends/events/linuxmotosdl/linuxmotosdl-events.cpp
backends/events/openpandora/op-events.cpp
backends/events/sdl/sdl-events.cpp
backends/events/sdl/sdl-events.h
backends/events/symbiansdl/symbiansdl-events.cpp
backends/events/symbiansdl/symbiansdl-events.h
backends/events/webossdl/webossdl-events.cpp
backends/events/webossdl/webossdl-events.h
backends/events/wincesdl/wincesdl-events.cpp
backends/events/wincesdl/wincesdl-events.h
backends/fs/ds/ds-fs-factory.cpp
backends/fs/n64/n64-fs-factory.cpp
backends/fs/n64/n64-fs.cpp
backends/fs/n64/romfsstream.cpp
backends/fs/posix/posix-fs-factory.cpp
backends/fs/posix/posix-fs-factory.h
backends/fs/posix/posix-fs.cpp
backends/fs/ps2/ps2-fs-factory.cpp
backends/fs/psp/psp-fs-factory.cpp
backends/fs/stdiostream.cpp
backends/fs/symbian/symbian-fs.cpp
backends/fs/symbian/symbianstream.cpp
backends/fs/wii/wii-fs-factory.cpp
backends/fs/wii/wii-fs-factory.h
backends/fs/wii/wii-fs.cpp
backends/fs/windows/windows-fs.cpp
backends/fs/windows/windows-fs.h
backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
backends/graphics/dinguxsdl/dinguxsdl-graphics.h
backends/graphics/gph/gph-graphics.cpp
backends/graphics/gph/gph-graphics.h
backends/graphics/graphics.h
backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
backends/graphics/opengl/gltexture.h
backends/graphics/opengl/opengl-graphics.cpp
backends/graphics/opengl/opengl-graphics.h
backends/graphics/openglsdl/openglsdl-graphics.cpp
backends/graphics/openglsdl/openglsdl-graphics.h
backends/graphics/openpandora/op-graphics.h
backends/graphics/surfacesdl/surfacesdl-graphics.cpp
backends/graphics/surfacesdl/surfacesdl-graphics.h
backends/graphics/symbiansdl/symbiansdl-graphics.cpp
backends/graphics/symbiansdl/symbiansdl-graphics.h
backends/graphics/wincesdl/wincesdl-graphics.cpp
backends/graphics/wincesdl/wincesdl-graphics.h
backends/log/log.cpp
backends/log/log.h
backends/mixer/symbiansdl/symbiansdl-mixer.cpp
backends/mixer/symbiansdl/symbiansdl-mixer.h
backends/mixer/wincesdl/wincesdl-mixer.cpp
backends/mixer/wincesdl/wincesdl-mixer.h
backends/module.mk
backends/platform/android/android.cpp
backends/platform/android/android.h
backends/platform/android/android.mk
backends/platform/android/asset-archive.h
backends/platform/android/events.cpp
backends/platform/android/gfx.cpp
backends/platform/android/jni.cpp
backends/platform/android/jni.h
backends/platform/android/module.mk
backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
backends/platform/android/texture.cpp
backends/platform/android/texture.h
backends/platform/dc/DCLauncherDialog.h
backends/platform/dc/README
backends/platform/dc/audio.cpp
backends/platform/dc/cache.S
backends/platform/dc/dc-fs.cpp
backends/platform/dc/dc.h
backends/platform/dc/dcmain.cpp
backends/platform/dc/display.cpp
backends/platform/dc/input.cpp
backends/platform/dc/label.cpp
backends/platform/dc/plugin_head.S
backends/platform/dc/selector.cpp
backends/platform/dingux/README.DINGUX
backends/platform/dingux/scummvm.gpe
backends/platform/ds/arm7/source/libcartreset/cartreset.c
backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
backends/platform/ds/arm7/source/main.cpp
backends/platform/ds/arm9/dist/readme_ds.txt
backends/platform/ds/arm9/source/dsoptions.cpp
backends/platform/ds/arm9/source/fat/disc_io.h
backends/platform/ds/arm9/source/fat/io_m3_common.c
backends/platform/ds/arm9/source/fat/io_m3_common.h
backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
backends/platform/ds/arm9/source/fat/io_njsd.c
backends/platform/ds/arm9/source/fat/io_scsd.c
backends/platform/ds/arm9/source/fat/io_scsd_asm.s
backends/platform/ds/arm9/source/fat/io_sd_common.c
backends/platform/ds/arm9/source/fat/m3sd.s
backends/platform/ds/arm9/source/keys.cpp
backends/platform/ds/arm9/source/osystem_ds.cpp
backends/platform/ds/arm9/source/scummhelp.cpp
backends/platform/ds/ds.mk
backends/platform/gph/build/gp2xwiz-bundle.sh
backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
backends/platform/gph/gph-backend.cpp
backends/platform/gph/gph-hw.cpp
backends/platform/gph/gph-hw.h
backends/platform/gph/gph-main.cpp
backends/platform/iphone/iphone_main.m
backends/platform/iphone/iphone_video.m
backends/platform/n64/Makefile
backends/platform/n64/README.N64
backends/platform/n64/framfs_save_manager.cpp
backends/platform/n64/framfs_save_manager.h
backends/platform/n64/n64.mk
backends/platform/n64/nintendo64.cpp
backends/platform/n64/osys_n64.h
backends/platform/n64/osys_n64_base.cpp
backends/platform/n64/osys_n64_events.cpp
backends/platform/n64/osys_n64_utilities.cpp
backends/platform/n64/pad_rom.sh
backends/platform/n64/pakfs_save_manager.cpp
backends/platform/n64/pakfs_save_manager.h
backends/platform/n64/portdefs.h
backends/platform/openpandora/build/PXML.xml
backends/platform/openpandora/build/pnd_make.sh
backends/platform/openpandora/build/runscummvm.sh
backends/platform/openpandora/op-backend.cpp
backends/platform/openpandora/op-bundle.mk
backends/platform/openpandora/op-main.cpp
backends/platform/openpandora/op-options.cpp
backends/platform/openpandora/op-options.h
backends/platform/openpandora/op-sdl.h
backends/platform/ps2/DmaPipe.h
backends/platform/ps2/Gs2dScreen.cpp
backends/platform/ps2/Makefile.gdb
backends/platform/ps2/Makefile.ps2
backends/platform/ps2/asyncfio.cpp
backends/platform/ps2/asyncfio.h
backends/platform/ps2/eecodyvdfs.c
backends/platform/ps2/eecodyvdfs.h
backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
backends/platform/ps2/iop/rpckbd/src/imports.lst
backends/platform/ps2/irxboot.cpp
backends/platform/ps2/irxboot.h
backends/platform/ps2/ps2debug.cpp
backends/platform/ps2/ps2debug.h
backends/platform/ps2/ps2input.cpp
backends/platform/ps2/ps2input.h
backends/platform/ps2/ps2mutex.cpp
backends/platform/ps2/ps2pad.cpp
backends/platform/ps2/ps2pad.h
backends/platform/ps2/rpckbd.c
backends/platform/ps2/rpckbd.h
backends/platform/ps2/sdlkeys.h
backends/platform/ps2/systemps2.cpp
backends/platform/psp/Makefile
backends/platform/psp/README.PSP
backends/platform/psp/README.PSP.in
backends/platform/psp/display_manager.cpp
backends/platform/psp/dummy.cpp
backends/platform/psp/image_viewer.cpp
backends/platform/psp/image_viewer.h
backends/platform/psp/input.cpp
backends/platform/psp/memory.h
backends/platform/psp/mp3.cpp
backends/platform/psp/mp3.h
backends/platform/psp/png_loader.cpp
backends/platform/psp/png_loader.h
backends/platform/psp/portdefs.h
backends/platform/psp/powerman.cpp
backends/platform/psp/pspkeyboard.cpp
backends/platform/psp/rtc.cpp
backends/platform/psp/thread.cpp
backends/platform/psp/thread.h
backends/platform/psp/trace.cpp
backends/platform/sdl/macosx/macosx.cpp
backends/platform/sdl/macosx/macosx.h
backends/platform/sdl/main.cpp
backends/platform/sdl/module.mk
backends/platform/sdl/posix/posix-main.cpp
backends/platform/sdl/sdl-sys.h
backends/platform/sdl/sdl.cpp
backends/platform/sdl/sdl.h
backends/platform/sdl/win32/win32.cpp
backends/platform/sdl/win32/win32.h
backends/platform/symbian/.placeholder
backends/platform/symbian/BuildPackageUpload_AllVersions.pl
backends/platform/symbian/README
backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
backends/platform/symbian/S60v3/ScummVM_Loc.rss
backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
backends/platform/symbian/S60v3/scummvm_reg.rss
backends/platform/symbian/S80/ScummVM_S80.mmp.in
backends/platform/symbian/S90/Scummvm_S90.mmp.in
backends/platform/symbian/UIQ2/ScummVM.rss
backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
backends/platform/symbian/UIQ3/ScummVM.rss
backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
backends/platform/symbian/UIQ3/scummvm_loc.rss
backends/platform/symbian/UIQ3/scummvm_reg.rss
backends/platform/symbian/mmp/scummvm_agi.mmp.in
backends/platform/symbian/mmp/scummvm_agos.mmp.in
backends/platform/symbian/mmp/scummvm_base.mmp.in
backends/platform/symbian/mmp/scummvm_cine.mmp.in
backends/platform/symbian/mmp/scummvm_cruise.mmp.in
backends/platform/symbian/mmp/scummvm_draci.mmp.in
backends/platform/symbian/mmp/scummvm_drascula.mmp.in
backends/platform/symbian/mmp/scummvm_gob.mmp.in
backends/platform/symbian/mmp/scummvm_groovie.mmp.in
backends/platform/symbian/mmp/scummvm_hugo.mmp.in
backends/platform/symbian/mmp/scummvm_kyra.mmp.in
backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
backends/platform/symbian/mmp/scummvm_lure.mmp.in
backends/platform/symbian/mmp/scummvm_m4.mmp.in
backends/platform/symbian/mmp/scummvm_made.mmp.in
backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
backends/platform/symbian/mmp/scummvm_queen.mmp.in
backends/platform/symbian/mmp/scummvm_saga.mmp.in
backends/platform/symbian/mmp/scummvm_sci.mmp.in
backends/platform/symbian/mmp/scummvm_scumm.mmp.in
backends/platform/symbian/mmp/scummvm_sky.mmp.in
backends/platform/symbian/mmp/scummvm_sword1.mmp.in
backends/platform/symbian/mmp/scummvm_sword2.mmp.in
backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
backends/platform/symbian/mmp/scummvm_toon.mmp.in
backends/platform/symbian/mmp/scummvm_touche.mmp.in
backends/platform/symbian/mmp/scummvm_tsage.mmp.in
backends/platform/symbian/mmp/scummvm_tucker.mmp.in
backends/platform/symbian/res/ScummVmAif.rss
backends/platform/symbian/src/ScummApp.cpp
backends/platform/symbian/src/ScummApp.h
backends/platform/symbian/src/portdefs.h
backends/platform/webos/webos.mk
backends/platform/wii/gdb.txt
backends/platform/wii/main.cpp
backends/platform/wii/module.mk
backends/platform/wii/options.cpp
backends/platform/wii/options.h
backends/platform/wii/osystem_events.cpp
backends/platform/wii/osystem_gfx.cpp
backends/platform/wii/osystem_sfx.cpp
backends/platform/wii/wii.mk
backends/platform/wince/CEActionsPocket.cpp
backends/platform/wince/CEActionsSmartphone.cpp
backends/platform/wince/CELauncherDialog.cpp
backends/platform/wince/CEScaler.cpp
backends/platform/wince/CEgui/CEGUI.h
backends/platform/wince/CEgui/PanelKeyboard.cpp
backends/platform/wince/CEkeys/CEKeys.h
backends/platform/wince/CEkeys/EventsBuffer.cpp
backends/platform/wince/README-WinCE.txt
backends/platform/wince/missing/assert.h
backends/platform/wince/missing/io.h
backends/platform/wince/wince-sdl.cpp
backends/platform/wince/wince-sdl.h
backends/platform/wince/wince.mk
backends/plugins/ds/ds-provider.cpp
backends/plugins/ds/ds-provider.h
backends/plugins/elf/arm-loader.cpp
backends/plugins/elf/arm-loader.h
backends/plugins/elf/elf-loader.cpp
backends/plugins/elf/elf-loader.h
backends/plugins/elf/elf-provider.cpp
backends/plugins/elf/elf-provider.h
backends/plugins/elf/elf32.h
backends/plugins/elf/memory-manager.cpp
backends/plugins/elf/mips-loader.cpp
backends/plugins/elf/mips-loader.h
backends/plugins/elf/ppc-loader.cpp
backends/plugins/elf/ppc-loader.h
backends/plugins/elf/shorts-segment-manager.cpp
backends/plugins/elf/shorts-segment-manager.h
backends/plugins/elf/version.cpp
backends/plugins/elf/version.h
backends/plugins/ps2/ps2-provider.cpp
backends/plugins/ps2/ps2-provider.h
backends/plugins/psp/psp-provider.cpp
backends/plugins/psp/psp-provider.h
backends/plugins/wii/wii-provider.cpp
backends/plugins/wii/wii-provider.h
backends/saves/psp/psp-saves.cpp
backends/taskbar/unity/unity-taskbar.cpp
backends/taskbar/unity/unity-taskbar.h
backends/taskbar/win32/mingw-compat.h
backends/taskbar/win32/win32-taskbar.cpp
backends/taskbar/win32/win32-taskbar.h
backends/timer/default/default-timer.cpp
backends/timer/default/default-timer.h
backends/vkeybd/virtual-keyboard-parser.cpp
backends/vkeybd/virtual-keyboard.cpp
base/commandLine.cpp
base/internal_version.h
base/main.cpp
base/plugins.cpp
base/version.cpp
common/EventDispatcher.cpp
common/EventRecorder.cpp
common/EventRecorder.h
common/algorithm.h
common/archive.cpp
common/archive.h
common/array.h
common/config-file.cpp
common/config-file.h
common/config-manager.cpp
common/config-manager.h
common/dcl.cpp
common/dcl.h
common/debug.cpp
common/events.h
common/file.cpp
common/file.h
common/forbidden.h
common/fs.cpp
common/func.h
common/hashmap.h
common/iff_container.cpp
common/iff_container.h
common/keyboard.h
common/macresman.cpp
common/memorypool.cpp
common/module.mk
common/ptr.h
common/quicktime.cpp
common/quicktime.h
common/rational.cpp
common/scummsys.h
common/serializer.h
common/singleton.h
common/str.cpp
common/str.h
common/stream.cpp
common/substream.h
common/system.cpp
common/system.h
common/taskbar.h
common/timer.h
common/tokenizer.cpp
common/translation.cpp
common/unarj.cpp
common/unzip.cpp
common/util.cpp
common/util.h
common/winexe_pe.cpp
common/xmlparser.cpp
common/xmlparser.h
common/zlib.cpp
common/zlib.h
configure
devtools/convbdf.c
devtools/create_hugo/README
devtools/create_hugo/staticdata.h
devtools/create_kyradat/create_kyradat.cpp
devtools/create_kyradat/create_kyradat.h
devtools/create_kyradat/extract.cpp
devtools/create_kyradat/extract.h
devtools/create_kyradat/games.cpp
devtools/create_kyradat/search.cpp
devtools/create_kyradat/search.h
devtools/create_kyradat/tables.cpp
devtools/create_kyradat/tables.h
devtools/create_kyradat/util.cpp
devtools/create_mads/main.cpp
devtools/create_mads/scripts/rex_nebular.txt
devtools/create_project/codeblocks.cpp
devtools/create_project/codeblocks.h
devtools/create_project/create_project.cpp
devtools/create_project/create_project.h
devtools/create_project/msbuild.cpp
devtools/create_project/msbuild.h
devtools/create_project/msvc.cpp
devtools/create_project/msvc.h
devtools/create_project/msvc10/create_project.vcxproj
devtools/create_project/msvc10/create_project.vcxproj.filters
devtools/create_project/scripts/installer.vbs
devtools/create_project/scripts/postbuild.cmd
devtools/create_project/visualstudio.cpp
devtools/create_project/visualstudio.h
devtools/create_toon/create_toon.cpp
devtools/create_toon/create_toon.h
devtools/create_toon/staticdata.h
devtools/credits.pl
devtools/sci/musicplayer.cpp
devtools/sci/scitrace.asm
devtools/scumm-md5.txt
devtools/skycpt/KmpSearch.h
devtools/skycpt/skycpt-engine.patch
devtools/tasmrecover/.gitignore
devtools/tasmrecover/dreamweb/backdrop.asm
devtools/tasmrecover/dreamweb/dreamweb.asm
devtools/tasmrecover/dreamweb/keypad.asm
devtools/tasmrecover/dreamweb/look.asm
devtools/tasmrecover/dreamweb/monitor.asm
devtools/tasmrecover/dreamweb/newplace.asm
devtools/tasmrecover/dreamweb/object.asm
devtools/tasmrecover/dreamweb/print.asm
devtools/tasmrecover/dreamweb/saveload.asm
devtools/tasmrecover/dreamweb/sblaster.asm
devtools/tasmrecover/dreamweb/sprite.asm
devtools/tasmrecover/dreamweb/talk.asm
devtools/tasmrecover/dreamweb/titles.asm
devtools/tasmrecover/dreamweb/use.asm
devtools/tasmrecover/dreamweb/vars.asm
devtools/tasmrecover/dreamweb/vgafades.asm
devtools/tasmrecover/dreamweb/vgagrafx.asm
devtools/tasmrecover/tasm-recover
devtools/tasmrecover/tasm/cpp.py
devtools/tasmrecover/tasm/lex.py
devtools/tasmrecover/tasm/op.py
devtools/tasmrecover/tasm/parser.py
devtools/tasmrecover/tasm/proc.py
devtools/themeparser.py
devtools/update-version.pl
dists/android/AndroidManifest.xml
dists/android/AndroidManifest.xml.in
dists/android/README.Android
dists/android/mkplugin.sh
dists/android/plugin-manifest.xml
dists/android/plugin-manifest.xml.in
dists/android/plugin-strings.xml
dists/android/res/layout/main.xml
dists/engine-data/README
dists/engine-data/kyra.dat
dists/iphone/Info.plist
dists/irix/scummvm.spec
dists/macosx/Info.plist
dists/macosx/Info.plist.in
dists/maemo/scummvm.servicewrapper
dists/motomagx/mgx/readme-motomagx-mgx.txt
dists/motomagx/mgx/scummvm.cfg
dists/motomagx/pep/description.ini
dists/msvc10/create_msvc10.bat
dists/msvc8/create_msvc8.bat
dists/msvc9/create_msvc9.bat
dists/os2/readme.os2
dists/redhat/scummvm-tools.spec
dists/redhat/scummvm.spec
dists/redhat/scummvm.spec.in
dists/scummvm.rc
dists/scummvm.rc.in
dists/slackware/scummvm.SlackBuild
dists/wii/READMII
dists/wii/meta.xml
dists/wii/meta.xml.in
dists/win32/ScummVM.iss
engines/advancedDetector.cpp
engines/advancedDetector.h
engines/agi/agi.cpp
engines/agi/agi.h
engines/agi/checks.cpp
engines/agi/console.cpp
engines/agi/console.h
engines/agi/cycle.cpp
engines/agi/detection.cpp
engines/agi/detection_tables.h
engines/agi/graphics.cpp
engines/agi/id.cpp
engines/agi/keyboard.cpp
engines/agi/module.mk
engines/agi/motion.cpp
engines/agi/objects.cpp
engines/agi/op_cmd.cpp
engines/agi/op_dbg.cpp
engines/agi/op_test.cpp
engines/agi/opcodes.h
engines/agi/preagi.cpp
engines/agi/preagi.h
engines/agi/preagi_mickey.cpp
engines/agi/preagi_mickey.h
engines/agi/preagi_troll.cpp
engines/agi/preagi_troll.h
engines/agi/preagi_winnie.cpp
engines/agi/preagi_winnie.h
engines/agi/saveload.cpp
engines/agi/sound.cpp
engines/agi/sound.h
engines/agi/sound_2gs.cpp
engines/agi/sound_2gs.h
engines/agi/sound_coco3.cpp
engines/agi/sound_coco3.h
engines/agi/sound_midi.cpp
engines/agi/sound_midi.h
engines/agi/sound_pcjr.cpp
engines/agi/sound_pcjr.h
engines/agi/sound_sarien.cpp
engines/agi/sound_sarien.h
engines/agi/sprite.cpp
engines/agi/text.cpp
engines/agi/view.cpp
engines/agi/view.h
engines/agi/wagparser.cpp
engines/agi/words.cpp
engines/agos/agos.cpp
engines/agos/agos.h
engines/agos/animation.cpp
engines/agos/animation.h
engines/agos/charset-fontdata.cpp
engines/agos/charset.cpp
engines/agos/contain.cpp
engines/agos/cursor.cpp
engines/agos/debug.cpp
engines/agos/debug.h
engines/agos/debugger.cpp
engines/agos/detection.cpp
engines/agos/detection_tables.h
engines/agos/draw.cpp
engines/agos/event.cpp
engines/agos/feeble.cpp
engines/agos/gfx.cpp
engines/agos/icons.cpp
engines/agos/input.cpp
engines/agos/input_pn.cpp
engines/agos/intern.h
engines/agos/items.cpp
engines/agos/menus.cpp
engines/agos/midi.cpp
engines/agos/midiparser_s1d.cpp
engines/agos/module.mk
engines/agos/oracle.cpp
engines/agos/res.cpp
engines/agos/res_ami.cpp
engines/agos/res_snd.cpp
engines/agos/rooms.cpp
engines/agos/saveload.cpp
engines/agos/script.cpp
engines/agos/script_dp.cpp
engines/agos/script_pn.cpp
engines/agos/script_s1.cpp
engines/agos/script_s2.cpp
engines/agos/script_ww.cpp
engines/agos/sound.cpp
engines/agos/sound.h
engines/agos/string.cpp
engines/agos/string_pn.cpp
engines/agos/subroutine.cpp
engines/agos/verb.cpp
engines/agos/verb_pn.cpp
engines/agos/vga.cpp
engines/agos/vga_e2.cpp
engines/agos/vga_s2.cpp
engines/agos/window.cpp
engines/agos/zones.cpp
engines/cine/detection.cpp
engines/cine/detection_tables.h
engines/cine/prc.cpp
engines/cine/texte.cpp
engines/cine/texte.h
engines/cine/various.cpp
engines/cruise/cruise.h
engines/cruise/cruise_main.cpp
engines/cruise/detection.cpp
engines/cruise/mainDraw.cpp
engines/cruise/module.mk
engines/cruise/saveload.cpp
engines/cruise/script.cpp
engines/cruise/sound.cpp
engines/cruise/sound.h
engines/dialogs.cpp
engines/draci/detection.cpp
engines/draci/game.cpp
engines/draci/saveload.cpp
engines/draci/script.cpp
engines/draci/sound.cpp
engines/drascula/detection.cpp
engines/drascula/drascula.h
engines/drascula/interface.cpp
engines/drascula/resource.cpp
engines/drascula/saveload.cpp
engines/drascula/sound.cpp
engines/dreamweb/console.cpp
engines/dreamweb/console.h
engines/dreamweb/detection.cpp
engines/dreamweb/detection_tables.h
engines/dreamweb/dreamgen.cpp
engines/dreamweb/dreamgen.h
engines/dreamweb/dreamweb.cpp
engines/dreamweb/dreamweb.h
engines/dreamweb/module.mk
engines/dreamweb/runtime.h
engines/dreamweb/stubs.cpp
engines/engine.cpp
engines/engine.h
engines/engines.mk
engines/game.cpp
engines/game.h
engines/gob/console.cpp
engines/gob/console.h
engines/gob/dataio.cpp
engines/gob/dataio.h
engines/gob/detection.cpp
engines/gob/detection_tables.h
engines/gob/draw.cpp
engines/gob/draw.h
engines/gob/draw_v1.cpp
engines/gob/draw_v2.cpp
engines/gob/game.cpp
engines/gob/gob.cpp
engines/gob/hotspots.cpp
engines/gob/hotspots.h
engines/gob/init.cpp
engines/gob/init.h
engines/gob/init_v1.cpp
engines/gob/init_v2.cpp
engines/gob/init_v6.cpp
engines/gob/inter.h
engines/gob/inter_bargon.cpp
engines/gob/inter_v1.cpp
engines/gob/inter_v3.cpp
engines/gob/inter_v6.cpp
engines/gob/module.mk
engines/gob/palanim.cpp
engines/gob/save/saveload.h
engines/gob/scenery.cpp
engines/gob/sound/sound.cpp
engines/gob/util.cpp
engines/gob/util.h
engines/gob/videoplayer.cpp
engines/gob/videoplayer.h
engines/groovie/detection.cpp
engines/groovie/groovie.cpp
engines/groovie/music.cpp
engines/groovie/music.h
engines/groovie/roq.cpp
engines/groovie/roq.h
engines/groovie/saveload.cpp
engines/groovie/script.cpp
engines/hugo/detection.cpp
engines/hugo/display.cpp
engines/hugo/file.cpp
engines/hugo/file_v1d.cpp
engines/hugo/file_v1w.cpp
engines/hugo/file_v2d.cpp
engines/hugo/file_v2w.cpp
engines/hugo/file_v3d.cpp
engines/hugo/hugo.cpp
engines/hugo/intro.cpp
engines/hugo/object.cpp
engines/hugo/parser.cpp
engines/hugo/schedule.cpp
engines/hugo/sound.cpp
engines/hugo/sound.h
engines/hugo/util.cpp
engines/kyra/animator_hof.cpp
engines/kyra/animator_lok.cpp
engines/kyra/animator_lok.h
engines/kyra/animator_mr.cpp
engines/kyra/animator_v2.cpp
engines/kyra/debugger.cpp
engines/kyra/debugger.h
engines/kyra/detection.cpp
engines/kyra/detection_tables.h
engines/kyra/gui.cpp
engines/kyra/gui.h
engines/kyra/gui_hof.cpp
engines/kyra/gui_hof.h
engines/kyra/gui_lok.cpp
engines/kyra/gui_lok.h
engines/kyra/gui_lol.cpp
engines/kyra/gui_lol.h
engines/kyra/gui_mr.cpp
engines/kyra/gui_mr.h
engines/kyra/gui_v2.cpp
engines/kyra/gui_v2.h
engines/kyra/item.h
engines/kyra/items_hof.cpp
engines/kyra/items_lok.cpp
engines/kyra/items_lol.cpp
engines/kyra/items_mr.cpp
engines/kyra/items_v2.cpp
engines/kyra/kyra_hof.cpp
engines/kyra/kyra_hof.h
engines/kyra/kyra_lok.cpp
engines/kyra/kyra_lok.h
engines/kyra/kyra_mr.cpp
engines/kyra/kyra_mr.h
engines/kyra/kyra_v1.cpp
engines/kyra/kyra_v1.h
engines/kyra/kyra_v2.cpp
engines/kyra/kyra_v2.h
engines/kyra/lol.cpp
engines/kyra/lol.h
engines/kyra/module.mk
engines/kyra/resource.cpp
engines/kyra/resource.h
engines/kyra/saveload.cpp
engines/kyra/saveload_hof.cpp
engines/kyra/saveload_lok.cpp
engines/kyra/saveload_lol.cpp
engines/kyra/saveload_mr.cpp
engines/kyra/scene_hof.cpp
engines/kyra/scene_lok.cpp
engines/kyra/scene_lol.cpp
engines/kyra/scene_mr.cpp
engines/kyra/scene_v2.cpp
engines/kyra/screen.cpp
engines/kyra/screen.h
engines/kyra/screen_hof.cpp
engines/kyra/screen_hof.h
engines/kyra/screen_lol.cpp
engines/kyra/screen_lol.h
engines/kyra/screen_v2.cpp
engines/kyra/screen_v2.h
engines/kyra/script.cpp
engines/kyra/script.h
engines/kyra/script_hof.cpp
engines/kyra/script_lok.cpp
engines/kyra/script_lol.cpp
engines/kyra/script_tim.cpp
engines/kyra/script_tim.h
engines/kyra/script_v1.cpp
engines/kyra/script_v2.cpp
engines/kyra/seqplayer.cpp
engines/kyra/seqplayer.h
engines/kyra/sequences_hof.cpp
engines/kyra/sequences_lok.cpp
engines/kyra/sequences_lol.cpp
engines/kyra/sequences_mr.cpp
engines/kyra/sequences_v2.cpp
engines/kyra/sound.cpp
engines/kyra/sound.h
engines/kyra/sound_adlib.cpp
engines/kyra/sound_adlib.h
engines/kyra/sound_amiga.cpp
engines/kyra/sound_digital.cpp
engines/kyra/sound_lol.cpp
engines/kyra/sound_midi.cpp
engines/kyra/sound_pcspk.cpp
engines/kyra/sound_towns.cpp
engines/kyra/sprites.cpp
engines/kyra/sprites.h
engines/kyra/sprites_lol.cpp
engines/kyra/staticres.cpp
engines/kyra/staticres_lol.cpp
engines/kyra/text.h
engines/kyra/text_hof.cpp
engines/kyra/text_hof.h
engines/kyra/text_lol.cpp
engines/kyra/text_lol.h
engines/kyra/text_mr.cpp
engines/kyra/timer.h
engines/kyra/timer_lok.cpp
engines/kyra/timer_lol.cpp
engines/kyra/util.cpp
engines/kyra/util.h
engines/kyra/wsamovie.cpp
engines/kyra/wsamovie.h
engines/lastexpress/data/animation.cpp
engines/lastexpress/data/background.cpp
engines/lastexpress/data/font.cpp
engines/lastexpress/data/scene.cpp
engines/lastexpress/data/sequence.cpp
engines/lastexpress/data/snd.cpp
engines/lastexpress/data/snd.h
engines/lastexpress/data/subtitle.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/detection.cpp
engines/lastexpress/entities/abbot.cpp
engines/lastexpress/entities/alexei.cpp
engines/lastexpress/entities/alouan.cpp
engines/lastexpress/entities/anna.cpp
engines/lastexpress/entities/august.cpp
engines/lastexpress/entities/boutarel.cpp
engines/lastexpress/entities/chapters.cpp
engines/lastexpress/entities/cooks.cpp
engines/lastexpress/entities/coudert.cpp
engines/lastexpress/entities/entity.cpp
engines/lastexpress/entities/entity.h
engines/lastexpress/entities/entity_intern.h
engines/lastexpress/entities/francois.cpp
engines/lastexpress/entities/gendarmes.cpp
engines/lastexpress/entities/gendarmes.h
engines/lastexpress/entities/hadija.cpp
engines/lastexpress/entities/ivo.cpp
engines/lastexpress/entities/kahina.cpp
engines/lastexpress/entities/kronos.cpp
engines/lastexpress/entities/mahmud.cpp
engines/lastexpress/entities/max.cpp
engines/lastexpress/entities/mertens.cpp
engines/lastexpress/entities/milos.cpp
engines/lastexpress/entities/mmeboutarel.cpp
engines/lastexpress/entities/pascale.cpp
engines/lastexpress/entities/rebecca.cpp
engines/lastexpress/entities/salko.cpp
engines/lastexpress/entities/servers0.cpp
engines/lastexpress/entities/servers1.cpp
engines/lastexpress/entities/sophie.cpp
engines/lastexpress/entities/tables.cpp
engines/lastexpress/entities/tatiana.cpp
engines/lastexpress/entities/train.cpp
engines/lastexpress/entities/vassili.cpp
engines/lastexpress/entities/verges.cpp
engines/lastexpress/entities/vesna.cpp
engines/lastexpress/entities/yasmin.cpp
engines/lastexpress/game/action.cpp
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/entities.cpp
engines/lastexpress/game/inventory.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/object.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/game/savepoint.cpp
engines/lastexpress/game/scenes.cpp
engines/lastexpress/game/state.cpp
engines/lastexpress/game/state.h
engines/lastexpress/graphics.cpp
engines/lastexpress/helpers.h
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/module.mk
engines/lastexpress/resource.cpp
engines/lastexpress/resource.h
engines/lastexpress/shared.h
engines/lure/debugger.cpp
engines/lure/detection.cpp
engines/lure/disk.cpp
engines/lure/hotspots.cpp
engines/lure/memory.cpp
engines/lure/module.mk
engines/lure/sound.cpp
engines/lure/sound.h
engines/m4/converse.cpp
engines/m4/detection.cpp
engines/m4/dialogs.cpp
engines/m4/globals.cpp
engines/m4/globals.h
engines/m4/m4.h
engines/m4/m4_views.cpp
engines/m4/mads_logic.cpp
engines/m4/midi.h
engines/m4/saveload.cpp
engines/m4/scripttab.h
engines/made/database.cpp
engines/made/database.h
engines/made/detection.cpp
engines/made/graphics.cpp
engines/made/graphics.h
engines/made/made.cpp
engines/made/made.h
engines/made/music.cpp
engines/made/music.h
engines/made/pmvplayer.cpp
engines/made/pmvplayer.h
engines/made/redreader.cpp
engines/made/redreader.h
engines/made/resource.cpp
engines/made/resource.h
engines/made/screen.cpp
engines/made/screen.h
engines/made/screenfx.cpp
engines/made/screenfx.h
engines/made/script.cpp
engines/made/script.h
engines/made/scriptfuncs.cpp
engines/made/scriptfuncs.h
engines/made/sound.cpp
engines/made/sound.h
engines/mohawk/console.cpp
engines/mohawk/cstime.cpp
engines/mohawk/cstime.h
engines/mohawk/cursors.cpp
engines/mohawk/cursors.h
engines/mohawk/detection_tables.h
engines/mohawk/dialogs.cpp
engines/mohawk/dialogs.h
engines/mohawk/graphics.cpp
engines/mohawk/graphics.h
engines/mohawk/livingbooks.cpp
engines/mohawk/livingbooks.h
engines/mohawk/livingbooks_code.cpp
engines/mohawk/livingbooks_code.h
engines/mohawk/mohawk.cpp
engines/mohawk/mohawk.h
engines/mohawk/myst.cpp
engines/mohawk/myst.h
engines/mohawk/myst_scripts.cpp
engines/mohawk/myst_stacks/channelwood.cpp
engines/mohawk/myst_stacks/demo.cpp
engines/mohawk/myst_stacks/demo.h
engines/mohawk/myst_stacks/dni.cpp
engines/mohawk/myst_stacks/mechanical.cpp
engines/mohawk/myst_stacks/myst.cpp
engines/mohawk/myst_stacks/myst.h
engines/mohawk/myst_stacks/preview.cpp
engines/mohawk/myst_stacks/preview.h
engines/mohawk/myst_stacks/slides.cpp
engines/mohawk/myst_stacks/slides.h
engines/mohawk/myst_state.cpp
engines/mohawk/resource.cpp
engines/mohawk/resource.h
engines/mohawk/riven.cpp
engines/mohawk/riven.h
engines/mohawk/riven_external.cpp
engines/mohawk/riven_saveload.cpp
engines/mohawk/riven_vars.cpp
engines/mohawk/sound.cpp
engines/mohawk/sound.h
engines/neverhood/detection.cpp
engines/parallaction/detection.cpp
engines/parallaction/gfxbase.cpp
engines/parallaction/graphics.h
engines/parallaction/gui_br.cpp
engines/parallaction/objects.cpp
engines/parallaction/parallaction.cpp
engines/parallaction/parser_br.cpp
engines/parallaction/parser_ns.cpp
engines/parallaction/sound.h
engines/parallaction/walk.cpp
engines/queen/command.h
engines/queen/credits.cpp
engines/queen/graphics.cpp
engines/queen/input.cpp
engines/queen/input.h
engines/queen/musicdata.cpp
engines/queen/queen.cpp
engines/queen/resource.cpp
engines/queen/resource.h
engines/queen/sound.h
engines/queen/talk.cpp
engines/saga/actor.cpp
engines/saga/actor.h
engines/saga/actor_walk.cpp
engines/saga/detection.cpp
engines/saga/detection_tables.h
engines/saga/input.cpp
engines/saga/interface.cpp
engines/saga/introproc_ite.cpp
engines/saga/music.cpp
engines/saga/palanim.h
engines/saga/puzzle.cpp
engines/saga/render.cpp
engines/saga/resource.cpp
engines/saga/saga.cpp
engines/saga/saga.h
engines/saga/saveload.cpp
engines/saga/scene.cpp
engines/saga/script.cpp
engines/saga/shorten.cpp
engines/saga/shorten.h
engines/saga/sndres.cpp
engines/saga/sthread.cpp
engines/savestate.cpp
engines/savestate.h
engines/sci/console.cpp
engines/sci/decompressor.cpp
engines/sci/decompressor.h
engines/sci/detection.cpp
engines/sci/detection_tables.h
engines/sci/engine/kernel.cpp
engines/sci/engine/kernel.h
engines/sci/engine/kernel_tables.h
engines/sci/engine/kfile.cpp
engines/sci/engine/kgraphics.cpp
engines/sci/engine/klists.cpp
engines/sci/engine/kmath.cpp
engines/sci/engine/kmisc.cpp
engines/sci/engine/kmovement.cpp
engines/sci/engine/kstring.cpp
engines/sci/engine/kvideo.cpp
engines/sci/engine/object.cpp
engines/sci/engine/savegame.cpp
engines/sci/engine/script_patches.cpp
engines/sci/engine/scriptdebug.cpp
engines/sci/engine/seg_manager.cpp
engines/sci/engine/selector.cpp
engines/sci/engine/selector.h
engines/sci/engine/static_selectors.cpp
engines/sci/engine/vm.cpp
engines/sci/engine/workarounds.cpp
engines/sci/graphics/animate.cpp
engines/sci/graphics/cache.cpp
engines/sci/graphics/cache.h
engines/sci/graphics/compare.cpp
engines/sci/graphics/compare.h
engines/sci/graphics/controls.cpp
engines/sci/graphics/cursor.cpp
engines/sci/graphics/frameout.cpp
engines/sci/graphics/frameout.h
engines/sci/graphics/paint.h
engines/sci/graphics/paint16.cpp
engines/sci/graphics/paint16.h
engines/sci/graphics/paint32.h
engines/sci/graphics/palette.cpp
engines/sci/graphics/palette.h
engines/sci/graphics/picture.cpp
engines/sci/graphics/picture.h
engines/sci/graphics/screen.cpp
engines/sci/graphics/text16.cpp
engines/sci/graphics/view.cpp
engines/sci/graphics/view.h
engines/sci/module.mk
engines/sci/parser/said.cpp
engines/sci/resource.cpp
engines/sci/resource.h
engines/sci/resource_audio.cpp
engines/sci/sci.cpp
engines/sci/sci.h
engines/sci/sound/drivers/cms.cpp
engines/sci/sound/drivers/gm_names.h
engines/sci/sound/midiparser_sci.cpp
engines/sci/sound/music.cpp
engines/sci/sound/soundcmd.cpp
engines/sci/sound/soundcmd.h
engines/scumm/actor.cpp
engines/scumm/charset.cpp
engines/scumm/charset.h
engines/scumm/costume.cpp
engines/scumm/cursor.cpp
engines/scumm/detection.cpp
engines/scumm/detection.h
engines/scumm/detection_tables.h
engines/scumm/dialogs.cpp
engines/scumm/gfx.cpp
engines/scumm/he/animation_he.cpp
engines/scumm/he/animation_he.h
engines/scumm/he/intern_he.h
engines/scumm/he/logic_he.cpp
engines/scumm/he/logic_he.h
engines/scumm/he/resource_he.cpp
engines/scumm/he/script_v100he.cpp
engines/scumm/he/script_v60he.cpp
engines/scumm/he/script_v72he.cpp
engines/scumm/he/script_v80he.cpp
engines/scumm/he/script_v90he.cpp
engines/scumm/he/sprite_he.cpp
engines/scumm/he/sprite_he.h
engines/scumm/he/wiz_he.cpp
engines/scumm/help.cpp
engines/scumm/help.h
engines/scumm/imuse/imuse.cpp
engines/scumm/imuse/imuse.h
engines/scumm/imuse/imuse_internal.h
engines/scumm/imuse/imuse_part.cpp
engines/scumm/imuse/imuse_player.cpp
engines/scumm/imuse/instrument.cpp
engines/scumm/imuse/instrument.h
engines/scumm/imuse/sysex.h
engines/scumm/imuse/sysex_samnmax.cpp
engines/scumm/imuse/sysex_scumm.cpp
engines/scumm/imuse_digi/dimuse.cpp
engines/scumm/imuse_digi/dimuse_codecs.cpp
engines/scumm/input.cpp
engines/scumm/insane/insane_enemy.cpp
engines/scumm/insane/insane_iact.cpp
engines/scumm/insane/insane_scenes.cpp
engines/scumm/module.mk
engines/scumm/palette.cpp
engines/scumm/player_towns.cpp
engines/scumm/player_v2.h
engines/scumm/player_v2base.h
engines/scumm/player_v2cms.cpp
engines/scumm/player_v2cms.h
engines/scumm/resource.cpp
engines/scumm/resource.h
engines/scumm/room.cpp
engines/scumm/saveload.cpp
engines/scumm/saveload.h
engines/scumm/script_v0.cpp
engines/scumm/script_v4.cpp
engines/scumm/script_v5.cpp
engines/scumm/scumm-md5.h
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/smush/channel.cpp
engines/scumm/smush/codec37.cpp
engines/scumm/smush/smush_font.cpp
engines/scumm/smush/smush_player.cpp
engines/scumm/sound.cpp
engines/scumm/sound.h
engines/scumm/string.cpp
engines/scumm/vars.cpp
engines/scumm/verbs.cpp
engines/sky/autoroute.h
engines/sky/compact.cpp
engines/sky/compact.h
engines/sky/debug.cpp
engines/sky/detection.cpp
engines/sky/disk.cpp
engines/sky/logic.cpp
engines/sky/sound.cpp
engines/sword1/animation.cpp
engines/sword1/control.cpp
engines/sword1/control.h
engines/sword1/debug.h
engines/sword1/detection.cpp
engines/sword1/eventman.cpp
engines/sword1/logic.cpp
engines/sword1/logic.h
engines/sword1/memman.cpp
engines/sword1/memman.h
engines/sword1/menu.cpp
engines/sword1/mouse.cpp
engines/sword1/mouse.h
engines/sword1/music.cpp
engines/sword1/music.h
engines/sword1/object.h
engines/sword1/objectman.cpp
engines/sword1/objectman.h
engines/sword1/resman.cpp
engines/sword1/resman.h
engines/sword1/router.cpp
engines/sword1/router.h
engines/sword1/screen.cpp
engines/sword1/screen.h
engines/sword1/sound.cpp
engines/sword1/sound.h
engines/sword1/staticres.cpp
engines/sword1/sword1.cpp
engines/sword1/sword1.h
engines/sword1/sworddefs.h
engines/sword1/text.cpp
engines/sword1/text.h
engines/sword2/controls.cpp
engines/sword2/music.cpp
engines/sword2/render.cpp
engines/sword2/sound.cpp
engines/sword2/sword2.cpp
engines/sword25/detection.cpp
engines/sword25/detection_tables.h
engines/sword25/fmv/theora_decoder.cpp
engines/sword25/gfx/animationtemplateregistry.cpp
engines/sword25/gfx/graphicengine.cpp
engines/sword25/gfx/image/art.cpp
engines/sword25/gfx/image/art.h
engines/sword25/gfx/image/renderedimage.cpp
engines/sword25/gfx/image/vectorimage.cpp
engines/sword25/gfx/image/vectorimagerenderer.cpp
engines/sword25/gfx/staticbitmap.cpp
engines/sword25/kernel/inputpersistenceblock.cpp
engines/sword25/kernel/inputpersistenceblock.h
engines/sword25/kernel/outputpersistenceblock.cpp
engines/sword25/kernel/persistenceblock.h
engines/sword25/kernel/persistenceservice.cpp
engines/sword25/kernel/persistenceservice.h
engines/sword25/math/regionregistry.cpp
engines/sword25/package/packagemanager.h
engines/sword25/sfx/soundengine.cpp
engines/sword25/sfx/soundengine.h
engines/sword25/sword25.cpp
engines/sword25/util/lua/lapi.cpp
engines/sword25/util/lua/lauxlib.cpp
engines/sword25/util/lua/lauxlib.h
engines/sword25/util/lua/lbaselib.cpp
engines/sword25/util/lua/lcode.cpp
engines/sword25/util/lua/ldblib.cpp
engines/sword25/util/lua/ldebug.cpp
engines/sword25/util/lua/ldo.cpp
engines/sword25/util/lua/ldo.h
engines/sword25/util/lua/lfunc.cpp
engines/sword25/util/lua/lgc.cpp
engines/sword25/util/lua/linit.cpp
engines/sword25/util/lua/liolib.cpp
engines/sword25/util/lua/llex.cpp
engines/sword25/util/lua/lmathlib.cpp
engines/sword25/util/lua/lmem.cpp
engines/sword25/util/lua/lmem.h
engines/sword25/util/lua/loadlib.cpp
engines/sword25/util/lua/lobject.h
engines/sword25/util/lua/lopcodes.cpp
engines/sword25/util/lua/loslib.cpp
engines/sword25/util/lua/lstate.cpp
engines/sword25/util/lua/lstate.h
engines/sword25/util/lua/lstring.cpp
engines/sword25/util/lua/lstrlib.cpp
engines/sword25/util/lua/ltablib.cpp
engines/sword25/util/lua/ltm.cpp
engines/sword25/util/lua/luaconf.h
engines/sword25/util/lua/lvm.cpp
engines/sword25/util/lua/lzio.cpp
engines/sword25/util/pluto/CHANGELOG
engines/sword25/util/pluto/FILEFORMAT
engines/sword25/util/pluto/THANKS
engines/sword25/util/pluto/plzio.cpp
engines/teenagent/actor.cpp
engines/teenagent/animation.cpp
engines/teenagent/animation.h
engines/teenagent/callbacks.cpp
engines/teenagent/console.cpp
engines/teenagent/detection.cpp
engines/teenagent/font.h
engines/teenagent/inventory.cpp
engines/teenagent/music.cpp
engines/teenagent/objects.cpp
engines/teenagent/objects.h
engines/teenagent/pack.cpp
engines/teenagent/pack.h
engines/teenagent/resources.cpp
engines/teenagent/scene.cpp
engines/teenagent/scene.h
engines/teenagent/surface.cpp
engines/teenagent/surface.h
engines/teenagent/surface_list.cpp
engines/teenagent/surface_list.h
engines/teenagent/teenagent.cpp
engines/teenagent/teenagent.h
engines/testbed/config-params.cpp
engines/testbed/detection.cpp
engines/testbed/misc.cpp
engines/tinsel/actors.cpp
engines/tinsel/actors.h
engines/tinsel/adpcm.cpp
engines/tinsel/config.cpp
engines/tinsel/coroutine.cpp
engines/tinsel/detection.cpp
engines/tinsel/detection_tables.h
engines/tinsel/pcode.h
engines/tinsel/saveload.cpp
engines/tinsel/savescn.cpp
engines/tinsel/sound.cpp
engines/tinsel/strres.h
engines/tinsel/tinsel.cpp
engines/tinsel/tinsel.h
engines/toon/anim.cpp
engines/toon/anim.h
engines/toon/audio.cpp
engines/toon/character.cpp
engines/toon/detection.cpp
engines/toon/drew.cpp
engines/toon/font.cpp
engines/toon/hotspot.cpp
engines/toon/movie.cpp
engines/toon/path.cpp
engines/toon/path.h
engines/toon/picture.cpp
engines/toon/picture.h
engines/toon/resource.cpp
engines/toon/script.cpp
engines/toon/script.h
engines/toon/script_func.cpp
engines/toon/tools.cpp
engines/toon/toon.cpp
engines/touche/detection.cpp
engines/touche/menu.cpp
engines/touche/resource.cpp
engines/tsage/converse.cpp
engines/tsage/converse.h
engines/tsage/core.cpp
engines/tsage/core.h
engines/tsage/debugger.cpp
engines/tsage/debugger.h
engines/tsage/detection.cpp
engines/tsage/detection_tables.h
engines/tsage/dialogs.cpp
engines/tsage/dialogs.h
engines/tsage/events.cpp
engines/tsage/events.h
engines/tsage/globals.cpp
engines/tsage/globals.h
engines/tsage/graphics.cpp
engines/tsage/graphics.h
engines/tsage/module.mk
engines/tsage/resources.cpp
engines/tsage/resources.h
engines/tsage/saveload.cpp
engines/tsage/saveload.h
engines/tsage/scenes.cpp
engines/tsage/scenes.h
engines/tsage/sound.cpp
engines/tsage/sound.h
engines/tsage/staticres.cpp
engines/tsage/staticres.h
engines/tsage/tsage.cpp
engines/tsage/tsage.h
engines/tucker/detection.cpp
engines/tucker/staticres.cpp
engines/tucker/tucker.h
graphics/cursorman.cpp
graphics/font.cpp
graphics/font.h
graphics/fontman.cpp
graphics/fontman.h
graphics/fonts/consolefont.cpp
graphics/fonts/newfont.cpp
graphics/fonts/newfont_big.cpp
graphics/fonts/winfont.cpp
graphics/imagedec.h
graphics/maccursor.h
graphics/module.mk
graphics/pict.cpp
graphics/pict.h
graphics/png.cpp
graphics/primitives.h
graphics/scaler.cpp
graphics/scaler/aspect.cpp
graphics/scaler/hq2x_i386.asm
graphics/scaler/hq3x_i386.asm
graphics/scaler/scale2x.cpp
graphics/scaler/scale2x.h
graphics/scaler/scale3x.cpp
graphics/scaler/scale3x.h
graphics/scaler/scalebit.cpp
graphics/scaler/scalebit.h
graphics/scaler/thumbnail_intern.cpp
graphics/sjis.cpp
graphics/sjis.h
graphics/surface.cpp
graphics/thumbnail.cpp
graphics/thumbnail.h
graphics/wincursor.cpp
graphics/wincursor.h
graphics/yuv_to_rgb.cpp
graphics/yuv_to_rgb.h
gui/ThemeEngine.cpp
gui/console.cpp
gui/credits.h
gui/debugger.h
gui/gui-manager.cpp
gui/launcher.cpp
gui/options.cpp
gui/options.h
gui/saveload.cpp
gui/themebrowser.cpp
gui/themebrowser.h
gui/themes/fonts/topaz/README.ScummVM
gui/themes/translations.dat
gui/widget.cpp
gui/widget.h
gui/widgets/scrollbar.cpp
icons/scummvm.ico
icons/scummvm.svg
po/POTFILES
po/ca_ES.po
po/cs_CZ.po
po/da_DA.po
po/de_DE.po
po/es_ES.po
po/fr_FR.po
po/hu_HU.po
po/it_IT.po
po/module.mk
po/nb_NO.po
po/nn_NO.po
po/pl_PL.po
po/pt_BR.po
po/ru_RU.po
po/scummvm.pot
po/se_SE.po
po/uk_UA.po
ports.mk
test/README
test/audio/audiostream.h
test/audio/helper.h
test/common/algorithm.h
test/common/array.h
test/common/fixedstack.h
test/common/queue.h
test/common/stack.h
test/common/tokenizer.h
test/cxxtest/COPYING
test/cxxtest/TODO
test/cxxtest/cxxtest.spec
test/cxxtest/cxxtest/Descriptions.h
test/cxxtest/cxxtest/DummyDescriptions.cpp
test/cxxtest/cxxtest/DummyDescriptions.h
test/cxxtest/cxxtest/GlobalFixture.cpp
test/cxxtest/cxxtest/GlobalFixture.h
test/cxxtest/cxxtest/LinkedList.h
test/cxxtest/cxxtest/RealDescriptions.cpp
test/cxxtest/cxxtest/RealDescriptions.h
test/cxxtest/docs/guide.html
test/cxxtest/sample/Construct
test/cxxtest/sample/aborter.tpl
test/cxxtest/sample/file_printer.tpl
test/cxxtest/sample/mock/Dice.cpp
test/cxxtest/sample/mock/Dice.h
test/cxxtest/sample/msvc/CxxTest_Workspace.dsw
test/cxxtest/sample/only.tpl
test/cxxtest/sample/winddk/SOURCES
test/module.mk
video/codecs/cdtoons.cpp
video/codecs/cinepak.cpp
video/module.mk
video/qt_decoder.cpp
video/smk_decoder.cpp
diff --cc engines/neverhood/detection.cpp
index b80379b,0000000..df9eca3
mode 100644,000000..100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@@ -1,285 -1,0 +1,282 @@@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "base/plugins.h"
+
+#include "engines/advancedDetector.h"
+#include "common/file.h"
+
+#include "neverhood/neverhood.h"
+
+
+namespace Neverhood {
+
+struct NeverhoodGameDescription {
+ ADGameDescription desc;
+
+ int gameID;
+ int gameType;
+ uint32 features;
+ uint16 version;
+};
+
+const char *NeverhoodEngine::getGameId() const {
+ return _gameDescription->desc.gameid;
+}
+
+uint32 NeverhoodEngine::getFeatures() const {
+ return _gameDescription->features;
+}
+
+Common::Platform NeverhoodEngine::getPlatform() const {
+ return _gameDescription->desc.platform;
+}
+
+uint16 NeverhoodEngine::getVersion() const {
+ return _gameDescription->version;
+}
+
+}
+
+static const PlainGameDescriptor neverhoodGames[] = {
+ {"neverhood", "The Neverhood Chronicles"},
+ {0, 0}
+};
+
+namespace Neverhood {
+
- using Common::GUIO_NONE;
- using Common::GUIO_NOSPEECH;
-
+static const NeverhoodGameDescription gameDescriptions[] = {
+
+ {
+ // Neverhood English version
+ // TODO: Maybe additional files are needed to properly detect different versions
+ {
+ "neverhood",
+ 0,
+ AD_ENTRY1s("hd.blb", "22958d968458c9ff221aee38577bb2b2", 4279716),
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
- GUIO_NONE
++ GUIO1(GUIO_NONE)
+ },
+ 0,
+ 0,
+ 0,
+ 0,
+ },
+
+ { AD_TABLE_END_MARKER, 0, 0, 0, 0 }
+};
+
+/**
+ * The fallback game descriptor used by the Neverhood engine's fallbackDetector.
+ * Contents of this struct are to be overwritten by the fallbackDetector.
+ */
+static NeverhoodGameDescription g_fallbackDesc = {
+ {
+ "",
+ "",
+ AD_ENTRY1(0, 0), // This should always be AD_ENTRY1(0, 0) in the fallback descriptor
+ Common::UNK_LANG,
+ Common::kPlatformPC,
+ ADGF_NO_FLAGS,
+ GUIO_NONE
+ },
+ 0,
+ 0,
+ 0,
+ 0,
+};
+
+} // End of namespace Neverhood
+
+class NeverhoodMetaEngine : public AdvancedMetaEngine {
+public:
+ NeverhoodMetaEngine() : AdvancedMetaEngine(Neverhood::gameDescriptions, sizeof(Neverhood::NeverhoodGameDescription), neverhoodGames) {
+ _singleid = "neverhood";
+ }
+
+ virtual const char *getName() const {
+ return "Neverhood Engine";
+ }
+
+ virtual const char *getOriginalCopyright() const {
+ return "Neverhood Engine (C) Infogrames";
+ }
+
+ virtual bool hasFeature(MetaEngineFeature f) const;
+ virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
+
+#if 0 // Not used yet but let's keep it for later when it is
+ SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
+ void removeSaveState(const char *target, int slot) const;
+ SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
+#endif
+
+ const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const;
+
+};
+
+bool NeverhoodMetaEngine::hasFeature(MetaEngineFeature f) const {
+ return
+ false; // Nothing yet :(
+// (f == kSupportsListSaves) ||
+// (f == kSupportsLoadingDuringStartup) ||
+// (f == kSupportsDeleteSave) ||
+// (f == kSavesSupportMetaInfo) ||
+// (f == kSavesSupportThumbnail);
+}
+
+bool Neverhood::NeverhoodEngine::hasFeature(EngineFeature f) const {
+ return
+ false; // Nothing yet :(
+// (f == kSupportsRTL) || // TODO: Not yet...
+// (f == kSupportsLoadingDuringRuntime) ||
+// (f == kSupportsSavingDuringRuntime);
+}
+
+bool NeverhoodMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
+ const Neverhood::NeverhoodGameDescription *gd = (const Neverhood::NeverhoodGameDescription *)desc;
+ if (gd) {
+ *engine = new Neverhood::NeverhoodEngine(syst, gd);
+ }
+ return gd != 0;
+}
+
+const ADGameDescription *NeverhoodMetaEngine::fallbackDetect(const Common::FSList &fslist) const {
+ // Set the default values for the fallback descriptor's ADGameDescription part.
+ Neverhood::g_fallbackDesc.desc.language = Common::UNK_LANG;
+ Neverhood::g_fallbackDesc.desc.platform = Common::kPlatformPC;
+ Neverhood::g_fallbackDesc.desc.flags = ADGF_NO_FLAGS;
+
+ // Set default values for the fallback descriptor's NeverhoodGameDescription part.
+ Neverhood::g_fallbackDesc.gameID = 0;
+ Neverhood::g_fallbackDesc.features = 0;
+ Neverhood::g_fallbackDesc.version = 3;
+
+ return NULL;
+}
+
+#if 0 // Not used yet but let's keep it for later when it is
+
+SaveStateList NeverhoodMetaEngine::listSaves(const char *target) const {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Neverhood::NeverhoodEngine::SaveHeader header;
+ Common::String pattern = target;
+ pattern += ".???";
+
+ Common::StringArray filenames;
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+
+ SaveStateList saveList;
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); file++) {
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ if (slotNum >= 0 && slotNum <= 999) {
+ Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
+ if (in) {
+ if (Neverhood::NeverhoodEngine::readSaveHeader(in, false, header) == Neverhood::NeverhoodEngine::kRSHENoError) {
+ saveList.push_back(SaveStateDescriptor(slotNum, header.description));
+ }
+ delete in;
+ }
+ }
+ }
+
+ return saveList;
+}
+
+int NeverhoodMetaEngine::getMaximumSaveSlot() const {
+ return 999;
+}
+
+void NeverhoodMetaEngine::removeSaveState(const char *target, int slot) const {
+ // Slot 0 can't be deleted, it's for restarting the game(s)
+ if (slot == 0)
+ return;
+
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, slot);
+
+ saveFileMan->removeSavefile(filename.c_str());
+
+ Common::StringArray filenames;
+ Common::String pattern = target;
+ pattern += ".???";
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
+ // Obtain the last 3 digits of the filename, since they correspond to the save slot
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+
+ // Rename every slot greater than the deleted slot,
+ // Also do not rename quicksaves.
+ if (slotNum > slot && slotNum < 990) {
+ // FIXME: Our savefile renaming done here is inconsitent with what we do in
+ // GUI_v2::deleteMenu. While here we rename every slot with a greater equal
+ // number of the deleted slot to deleted slot, deleted slot + 1 etc.,
+ // we only rename the following slots in GUI_v2::deleteMenu until a slot
+ // is missing.
+ saveFileMan->renameSavefile(file->c_str(), filename.c_str());
+
+ filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, ++slot);
+ }
+ }
+
+}
+
+SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
+ Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, slot);
+ Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(filename.c_str());
+
+ if (in) {
+ Neverhood::NeverhoodEngine::SaveHeader header;
+ Neverhood::NeverhoodEngine::kReadSaveHeaderError error;
+
+ error = Neverhood::NeverhoodEngine::readSaveHeader(in, true, header);
+ delete in;
+
+ if (error == Neverhood::NeverhoodEngine::kRSHENoError) {
+ SaveStateDescriptor desc(slot, header.description);
+
+ desc.setDeletableFlag(false);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+
+ return desc;
+ }
+ }
+
+ return SaveStateDescriptor();
+}
+
+#endif
+
+#if PLUGIN_ENABLED_DYNAMIC(NEVERHOOD)
+ REGISTER_PLUGIN_DYNAMIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
+#else
+ REGISTER_PLUGIN_STATIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
+#endif
Commit: dac95f3f7361a69dbd5eacfd181f294f9def53d9
https://github.com/scummvm/scummvm/commit/dac95f3f7361a69dbd5eacfd181f294f9def53d9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:03-07:00
Commit Message:
NEVERHOOD: More renaming (mostly in Klayman and AnimatedSprite)
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 4fdc736..94a5323 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -161,8 +161,8 @@ Class494::Class494(NeverhoodEngine *vm)
createSurface1(0x100B90B4, 1200);
_x = 211;
_y = 195;
- setFileHash(0x100B90B4, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x100B90B4, 0, -1);
+ _newStickFrameIndex = 0;
_needRefresh = true;
updatePosition();
_surface->setVisible(false);
@@ -172,7 +172,7 @@ uint32 Class494::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -186,7 +186,7 @@ void Class494::sub43BE00() {
}
void Class494::sub43BE20() {
- setFileHash(0x100B90B4, 0, -1);
+ startAnimation(0x100B90B4, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class494::handleMessage);
NextState(&Class494::sub43BE00);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 567788b..2358df4 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -27,7 +27,7 @@
namespace Neverhood {
-static const KlaymanTableItem klaymanTable1[] = {
+static const KlaymanIdleTableItem klaymanTable1[] = {
{1, &Klayman::stDoIdlePickEar},
{1, &Klayman::sub41FDA0},
{1, &Klayman::sub41FDF0},
@@ -35,7 +35,7 @@ static const KlaymanTableItem klaymanTable1[] = {
{1, &Klayman::sub41FEB0}
};
-static const KlaymanTableItem klaymanTable2[] = {
+static const KlaymanIdleTableItem klaymanTable2[] = {
{1, &Klayman::stDoIdlePickEar},
{1, &Klayman::sub41FDA0},
{1, &Klayman::stDoIdleChest},
@@ -43,13 +43,13 @@ static const KlaymanTableItem klaymanTable2[] = {
};
#if 0
-static const KlaymanTableItem klaymanTable3[] = {
+static const KlaymanIdleTableItem klaymanTable3[] = {
{1, &Klayman::sub421430},
{1, &Klayman::sub421480}
};
#endif
-static const KlaymanTableItem klaymanTable4[] = {
+static const KlaymanIdleTableItem klaymanTable4[] = {
{1, &Klayman::sub41FDA0},
{1, &Klayman::stDoIdleChest},
{1, &Klayman::sub41FEB0},
@@ -60,8 +60,8 @@ static const KlaymanTableItem klaymanTable4[] = {
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
_counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
- _counter2(0), /*_field118(0), */_status2(0), _flagE5(true), _attachedSprite(NULL), _flagE1(false),
- _status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _flagF7(false),
+ _counter2(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _flagE1(false),
+ _status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _isLeverDown(false),
_flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
// TODO DirtySurface
@@ -71,7 +71,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_x4 = x;
_y4 = y;
_flags = 2;
- setKlaymanTable1();
+ setKlaymanIdleTable1();
stTryStandIdle();
SetUpdateHandler(&Klayman::update);
}
@@ -101,25 +101,25 @@ void Klayman::update() {
xUpdate();
}
-void Klayman::setKlaymanTable(const KlaymanTableItem *table, int tableCount) {
- _table = table;
- _tableCount = tableCount;
- _tableMaxValue = 0;
+void Klayman::setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount) {
+ _idleTable = table;
+ _idleTableCount = tableCount;
+ _idleTableMaxValue = 0;
for (int i = 0; i < tableCount; i++) {
- _tableMaxValue += table[i].value;
+ _idleTableMaxValue += table[i].value;
}
}
-void Klayman::setKlaymanTable1() {
- setKlaymanTable(klaymanTable1, ARRAYSIZE(klaymanTable1));
+void Klayman::setKlaymanIdleTable1() {
+ setKlaymanIdleTable(klaymanTable1, ARRAYSIZE(klaymanTable1));
}
-void Klayman::setKlaymanTable2() {
- setKlaymanTable(klaymanTable2, ARRAYSIZE(klaymanTable2));
+void Klayman::setKlaymanIdleTable2() {
+ setKlaymanIdleTable(klaymanTable2, ARRAYSIZE(klaymanTable2));
}
-void Klayman::setKlaymanTable3() {
- // TODO setKlaymanTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
+void Klayman::setKlaymanIdleTable3() {
+ // TODO setKlaymanIdleTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
}
void Klayman::stDoIdlePickEar() {
@@ -128,8 +128,8 @@ void Klayman::stDoIdlePickEar() {
void Klayman::stIdlePickEar() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x5B20C814, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5B20C814, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmIdlePickEar);
SetSpriteCallback(NULL);
@@ -159,8 +159,8 @@ void Klayman::sub41FDA0() {
void Klayman::sub41FDB0() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0xD122C137, 0, -1);
+ _acceptInput = true;
+ startAnimation(0xD122C137, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E980);
SetSpriteCallback(NULL);
@@ -185,8 +185,8 @@ void Klayman::sub41FDF0() {
void Klayman::sub41FE00() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x543CD054, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x543CD054, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E9E0);
SetSpriteCallback(NULL);
@@ -220,8 +220,8 @@ void Klayman::stDoIdleChest() {
void Klayman::stIdleChest() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x40A0C034, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x40A0C034, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmIdleChest);
SetSpriteCallback(NULL);
@@ -246,8 +246,8 @@ void Klayman::sub41FEB0() {
void Klayman::sub41FEC0() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x5120E137, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5120E137, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EFE0);
SetSpriteCallback(NULL);
@@ -274,8 +274,8 @@ uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, E
void Klayman::sub421350() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x582EC138, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x582EC138, 0, -1);
_counter = 0;
SetSpriteCallback(NULL);
SetUpdateHandler(&Klayman::update41D1C0);
@@ -290,15 +290,15 @@ void Klayman::update41D1C0() {
_counter++;
if (_counter >= _counterMax) {
_counter = 0;
- if (_table) {
- int randomValue = _vm->_rnd->getRandomNumber(_tableMaxValue);
- for (int i = 0; i < _tableCount; i++) {
- if (randomValue < _table[_tableCount].value) {
- (this->*(_table[_tableCount].callback))();
+ if (_idleTable) {
+ int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
+ for (int i = 0; i < _idleTableCount; i++) {
+ if (randomValue < _idleTable[_idleTableCount].value) {
+ (this->*(_idleTable[_idleTableCount].callback))();
_counterMax = _vm->_rnd->getRandomNumber(128) + 24;
break;
}
- randomValue -= _table[_tableCount].value;
+ randomValue -= _idleTable[_idleTableCount].value;
}
}
} else {
@@ -313,8 +313,8 @@ void Klayman::update41D1C0() {
void Klayman::stIdleSitBlink() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x5C24C018, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -323,8 +323,8 @@ void Klayman::stIdleSitBlink() {
void Klayman::stIdleSitBlinkSecond() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x5C24C018, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update41D1C0);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(NULL);
@@ -334,8 +334,8 @@ void Klayman::stPickUpNeedle() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klayman::stPickUpNeedle))) {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x1449C169, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x1449C169, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPickUpGeneric);
SetSpriteCallback(NULL);
@@ -346,8 +346,8 @@ void Klayman::sub41FFF0() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klayman::sub41FFF0))) {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x0018C032, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x0018C032, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D640);
SetSpriteCallback(NULL);
@@ -377,19 +377,19 @@ uint32 Klayman::handleMessage41D640(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub4214D0() {
+void Klayman::stTurnToUseInTeleporter() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xD229823D, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xD229823D, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
}
-void Klayman::sub421510() {
+void Klayman::stReturnFromUseInTeleporter() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x9A2801E0, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x9A2801E0, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -398,10 +398,10 @@ void Klayman::sub421510() {
void Klayman::stStepOver() {
if (!stStartAction(AnimationCallback(&Klayman::stStepOver))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x004AA310, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x004AA310, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EC70);
+ SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
}
@@ -409,15 +409,15 @@ void Klayman::stStepOver() {
void Klayman::stSitInTeleporter() {
if (!stStartAction(AnimationCallback(&Klayman::stSitInTeleporter))) {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x392A0330, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x392A0330, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EAB0);
+ SetMessageHandler(&Klayman::hmSitInTeleporter);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
}
-uint32 Klayman::handleMessage41EAB0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -429,10 +429,10 @@ uint32 Klayman::handleMessage41EAB0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421310() {
+void Klayman::stGetUpFromTeleporter() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x913AB120, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x913AB120, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
@@ -473,10 +473,10 @@ void Klayman::update41D2B0() {
bool Klayman::stStartActionFromIdle(AnimationCb callback) {
if (_status2 == 2) {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x9A7020B8, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x9A7020B8, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41F140);
+ SetMessageHandler(&Klayman::hmStartAction);
SetSpriteCallback(NULL);
NextState(callback);
return true;
@@ -516,8 +516,8 @@ void Klayman::sub41C790() {
void Klayman::stTryStandIdle() {
if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTryStandIdle))) {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x5420E254, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
_counter = 0;
_counter3 = 0;
_counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
@@ -529,26 +529,22 @@ void Klayman::stTryStandIdle() {
void Klayman::update41D0F0() {
update();
- _counter++;
- if (_counter >= 720) {
+ if (++_counter >= 720) {
_counter = 0;
- if (_table) {
- int randomValue = _vm->_rnd->getRandomNumber(_tableMaxValue);
- for (int i = 0; i < _tableCount; i++) {
- if (randomValue < _table[_tableCount].value) {
- (this->*(_table[_tableCount].callback))();
+ if (_idleTable) {
+ int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
+ for (int i = 0; i < _idleTableCount; i++) {
+ if (randomValue < _idleTable[_idleTableCount].value) {
+ (this->*(_idleTable[_idleTableCount].callback))();
break;
}
- randomValue -= _table[_tableCount].value;
+ randomValue -= _idleTable[_idleTableCount].value;
}
}
- } else {
- _counter3++;
- if (_counter3 >= _counter3Max) {
- _counter3 = 0;
- _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
- stStand();
- }
+ } else if (++_counter3 >= _counter3Max) {
+ _counter3 = 0;
+ _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ stStand();
}
}
@@ -557,7 +553,7 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
uint32 messageResult = xHandleMessage(messageNum, param);
switch (messageNum) {
case 0x1008:
- messageResult = _flagE5;
+ messageResult = _acceptInput;
break;
case 0x1014:
_attachedSprite = (Sprite*)(param.asEntity());
@@ -591,8 +587,8 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
void Klayman::stStand() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x5900C41E, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5900C41E, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -611,14 +607,14 @@ uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, E
void Klayman::stStandAround() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x5420E254, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update41D0F0);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(NULL);
}
-uint32 Klayman::handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -666,8 +662,8 @@ void Klayman::sub41C930(int16 x, bool flag) {
void Klayman::stWakeUp() {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x527AC970, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x527AC970, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -675,8 +671,8 @@ void Klayman::stWakeUp() {
void Klayman::stSleeping() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x5A38C110, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5A38C110, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmSleeping);
SetSpriteCallback(NULL);
@@ -697,10 +693,10 @@ uint32 Klayman::hmSleeping(int messageNum, const MessageParam ¶m, Entity *se
bool Klayman::stStartAction(AnimationCb callback3) {
if (_status2 == 1) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x5C7080D4, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x5C7080D4, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41F140);
+ SetMessageHandler(&Klayman::hmStartAction);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
NextState(callback3);
return true;
@@ -728,7 +724,7 @@ void Klayman::spriteUpdate41F250() {
}
_deltaY = 0;
- if (_flag) {
+ if (_frameChanged) {
if (xdiff > 6)
_x += 6;
else if (xdiff < -6)
@@ -741,11 +737,11 @@ void Klayman::spriteUpdate41F250() {
}
-void Klayman::spriteUpdate41F5F0() {
+void Klayman::suWalking() {
int16 xdiff = _x4 - _x;
- if (_frameIndex == 9) {
+ if (_currFrameIndex == 9) {
if (xdiff > 26)
_deltaX += xdiff - 26;
else if (xdiff < -26)
@@ -792,20 +788,20 @@ void Klayman::spriteUpdate41F5F0() {
void Klayman::stSneak() {
_status2 = 1;
_flagE2 = true;
- _flagE5 = true;
+ _acceptInput = true;
setDoDeltaX(_x4 < _x ? 1 : 0);
- setFileHash(0x5C48C506, 0, -1);
+ startAnimation(0x5C48C506, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DD80);
- SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
- FinalizeState(&Klayman::stSneakDone);
+ SetMessageHandler(&Klayman::hmWalking);
+ SetSpriteCallback(&Klayman::suWalking);
+ FinalizeState(&Klayman::stWalkingDone);
}
-void Klayman::stSneakDone() {
+void Klayman::stWalkingDone() {
_flagE2 = false;
}
-uint32 Klayman::handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -855,11 +851,11 @@ void Klayman::stStartWalking() {
if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalking))) {
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
+ _acceptInput = true;
setDoDeltaX(_x4 < _x ? 1 : 0);
- setFileHash(0x242C0198, 0, -1);
+ startAnimation(0x242C0198, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EC70);
+ SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteCallback(&Klayman::spriteUpdate41F320);
FinalizeState(&Klayman::stStartWalkingDone);
NextState(&Klayman::stWalking);
@@ -870,7 +866,7 @@ void Klayman::stStartWalkingDone() {
_flagE1 = false;
}
-uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -895,13 +891,13 @@ uint32 Klayman::handleMessage41EC70(int messageNum, const MessageParam ¶m, E
void Klayman::stWalking() {
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
- setFileHash(0x1A249001, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x1A249001, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
FinalizeState(&Klayman::stStartWalkingDone);
- NextState(&Klayman::sub41FA40);
+ NextState(&Klayman::stUpdateWalking);
}
void Klayman::spriteUpdate41F300() {
@@ -931,35 +927,35 @@ uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FA40() {
+void Klayman::stUpdateWalking() {
if (_status3 == 2) {
sub41C7B0();
} else if (_status3 == 3) {
- sub420F20();
+ stWalkingOpenDoor();
} else {
_flagE2 = true;
- _flagE5 = true;
- if (ABS(_x4 - _x) <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
+ _acceptInput = true;
+ if (ABS(_x4 - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
if (_status3 == 0) {
_status2 = 1;
- setFileHash(0xF234EE31, 0, -1);
+ startAnimation(0xF234EE31, 0, -1);
} else {
_status2 = 2;
- setFileHash(0xF135CC21, 0, -1);
+ startAnimation(0xF135CC21, 0, -1);
}
- } else if (ABS(_x4 - _x) <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
+ } else if (ABS(_x4 - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
if (_status3 == 0) {
_status2 = 1;
- setFileHash(0x8604A152, 0, -1);
+ startAnimation(0x8604A152, 0, -1);
} else {
_status2 = 2;
- setFileHash(0xA246A132, 0, -1);
+ startAnimation(0xA246A132, 0, -1);
}
}
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DD80);
- SetSpriteCallback(&Klayman::spriteUpdate41F5F0);
- FinalizeState(&Klayman::stSneakDone);
+ SetMessageHandler(&Klayman::hmWalking);
+ SetSpriteCallback(&Klayman::suWalking);
+ FinalizeState(&Klayman::stWalkingDone);
}
}
@@ -976,13 +972,13 @@ void Klayman::spriteUpdate41F320() {
if (xdiff == 0) {
sendMessage(this, 0x1019, 0);
- } else if (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _frameIndex >= 5 && _frameIndex <= 11) {
+ } else if (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
sendMessage(this, 0x1019, 0);
- } else if (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_frameIndex >= 12 || _frameIndex <= 4)) {
+ } else if (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
sendMessage(this, 0x1019, 0);
} else if (_status3 == 3 && xdiff < 30) {
sendMessage(this, 0x1019, 0);
- } else if (_status3 == 3 && xdiff < 150 && _frameIndex >= 6) {
+ } else if (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6) {
sendMessage(this, 0x1019, 0);
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
@@ -1039,8 +1035,8 @@ void Klayman::stPickUpGeneric() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klayman::stPickUpGeneric))) {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x1C28C178, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x1C28C178, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPickUpGeneric);
SetSpriteCallback(NULL);
@@ -1076,8 +1072,8 @@ uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entit
void Klayman::stTurnPressButton() {
if (!stStartAction(AnimationCallback(&Klayman::stTurnPressButton))) {
_status2 = 2;
- _flagE5 = true;
- setFileHash(0x1C02B03D, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x1C02B03D, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
SetSpriteCallback(NULL);
@@ -1105,8 +1101,8 @@ uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity
void Klayman::stStampFloorButton() {
if (!stStartAction(AnimationCallback(&Klayman::stStampFloorButton))) {
_status2 = 2;
- _flagE5 = true;
- setFileHash(0x1C16B033, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x1C16B033, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
SetSpriteCallback(NULL);
@@ -1116,8 +1112,8 @@ void Klayman::stStampFloorButton() {
void Klayman::stPressButtonSide() {
if (!stStartActionFromIdle(AnimationCallback(&Klayman::stPressButtonSide))) {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x1CD89029, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
@@ -1194,9 +1190,9 @@ void Klayman::sub41CAC0(int16 x) {
void Klayman::stLargeStep() {
_status2 = 2;
_flagE3 = true;
- _flagE5 = true;
+ _acceptInput = true;
setDoDeltaX(_x4 >= _x ? 1 : 0);
- setFileHash(0x08B28116, 0, -1);
+ startAnimation(0x08B28116, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLargeStep);
SetSpriteCallback(&Klayman::suLargeStep);
@@ -1214,7 +1210,7 @@ void Klayman::suLargeStep() {
_deltaX = -_deltaX;
}
- if (_frameIndex == 7) {
+ if (_currFrameIndex == 7) {
_deltaX = xdiff;
}
@@ -1273,8 +1269,8 @@ uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *s
void Klayman::stWonderAboutHalf() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0xD820A114, 0, 10);
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, 10);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -1282,8 +1278,8 @@ void Klayman::stWonderAboutHalf() {
void Klayman::stWonderAboutAfter() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0xD820A114, 30, -1);
+ _acceptInput = true;
+ startAnimation(0xD820A114, 30, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -1291,14 +1287,14 @@ void Klayman::stWonderAboutAfter() {
void Klayman::stTurnToUseHalf() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x9B250AD2, 0, 7);
+ _acceptInput = true;
+ startAnimation(0x9B250AD2, 0, 7);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EEF0);
+ SetMessageHandler(&Klayman::hmTurnToUse);
SetSpriteCallback(NULL);
}
-uint32 Klayman::handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1314,17 +1310,17 @@ uint32 Klayman::handleMessage41EEF0(int messageNum, const MessageParam ¶m, E
void Klayman::stTurnAwayFromUse() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x98F88391, 4, -1);
+ _acceptInput = true;
+ startAnimation(0x98F88391, 4, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EEF0);
+ SetMessageHandler(&Klayman::hmTurnToUse);
SetSpriteCallback(NULL);
}
void Klayman::stWonderAbout() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0xD820A114, 0, -1);
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -1332,8 +1328,8 @@ void Klayman::stWonderAbout() {
void Klayman::stPeekWall() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0xAC20C012, 0, -1);
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPeekWall);
SetSpriteCallback(NULL);
@@ -1344,8 +1340,8 @@ uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_frameIndex < speedUpFrameIndex)
- setFileHash(0xAC20C012, speedUpFrameIndex, -1);
+ if (_currFrameIndex < speedUpFrameIndex)
+ startAnimation(0xAC20C012, speedUpFrameIndex, -1);
return 0;
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -1358,24 +1354,24 @@ uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se
return handleMessage41D480(messageNum, param, sender);
}
-void Klayman::sub420210() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420210))) {
+void Klayman::stJumpToRing1() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing1))) {
_status2 = 0;
- setFileHash(0xD82890BA, 0, -1);
- sub4201C0();
+ startAnimation(0xD82890BA, 0, -1);
+ setupJumpToRing();
}
}
-void Klayman::sub4201C0() {
- _flagE5 = false;
+void Klayman::setupJumpToRing() {
+ _acceptInput = false;
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D790);
+ SetMessageHandler(&Klayman::hmJumpToRing);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
NextState(&Klayman::sub420340);
sendMessage(_attachedSprite, 0x482B, 0);
}
-uint32 Klayman::handleMessage41D790(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1383,7 +1379,7 @@ uint32 Klayman::handleMessage41D790(int messageNum, const MessageParam ¶m, E
if (_attachedSprite) {
sendMessage(_attachedSprite, 0x4806, 0);
}
- _flagE5 = true;
+ _acceptInput = true;
} else if (param.asInteger() == 0x320AC306) {
_soundResource1.play(0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
@@ -1403,35 +1399,35 @@ void Klayman::spriteUpdate41F230() {
void Klayman::sub420340() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x4829E0B8, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x4829E0B8, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(NULL);
}
-void Klayman::sub420250() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420250))) {
+void Klayman::stJumpToRing2() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing2))) {
_status2 = 0;
- setFileHash(0x900980B2, 0, -1);
- sub4201C0();
+ startAnimation(0x900980B2, 0, -1);
+ setupJumpToRing();
}
}
-void Klayman::sub420290() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420290))) {
+void Klayman::stJumpToRing3() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing3))) {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xBA1910B2, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xBA1910B2, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41D880);
- NextState(&Klayman::sub420380);
+ SetMessageHandler(&Klayman::hmJumpToRing3);
+ NextState(&Klayman::stHoldRing);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
-uint32 Klayman::handleMessage41D880(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1451,41 +1447,41 @@ uint32 Klayman::handleMessage41D880(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420380() {
+void Klayman::stHoldRing() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0x4A293FB0, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x4A293FB0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DAA0);
+ SetMessageHandler(&Klayman::hmHoldRing);
SetSpriteCallback(NULL);
}
-uint32 Klayman::handleMessage41DAA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmHoldRing(int messageNum, const MessageParam ¶m, Entity *sender) {
if (messageNum == 0x1008) {
- sub4203C0();
+ stReleaseRing();
return 0;
}
return handleMessage41D360(messageNum, param, sender);
}
-void Klayman::sub4203C0() {
+void Klayman::stReleaseRing() {
_status2 = 1;
- _flagE5 = false;
+ _acceptInput = false;
if (_attachedSprite) {
sendMessage(_attachedSprite, 0x4807, 0);
_attachedSprite = NULL;
}
- setFileHash(0xB869A4B9, 0, -1);
+ startAnimation(0xB869A4B9, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteCallback(NULL);
}
-void Klayman::sub420300() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420300))) {
+void Klayman::stJumpToRing4() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing4))) {
_status2 = 0;
- setFileHash(0xB8699832, 0, -1);
- sub4201C0();
+ startAnimation(0xB8699832, 0, -1);
+ setupJumpToRing();
}
}
@@ -1493,12 +1489,12 @@ void Klayman::sub41CCE0(int16 x) {
sub41CC40(_attachedSprite->getX(), x);
}
-void Klayman::sub420970() {
+void Klayman::stContinueClimbLadderUp() {
_status2 = 0;
- _flagE5 = true;
+ _acceptInput = true;
_statusE0 = 3;
- setFileHash2(0x3A292504, 0x01084280, 0);
- _fileHash4 = 0x01084280;
+ startAnimationByHash(0x3A292504, 0x01084280, 0);
+ _newStickFrameHash = 0x01084280;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(NULL);
@@ -1517,22 +1513,22 @@ void Klayman::sub4209D0() {
}
} else if (_statusE0 == 0) {
_statusE0 = 2;
- _flagE5 = false;
- setFileHash(0x122D1505, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x122D1505, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E0D0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
} else if (_statusE0 == 3) {
_statusE0 = 2;
- _flagE5 = false;
- setFileHash2(0x122D1505, 0x01084280, 0);
+ _acceptInput = false;
+ startAnimationByHash(0x122D1505, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E0D0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
} else if (_statusE0 == 1) {
_statusE0 = 2;
- _flagE5 = true;
- setFileHash(0x122D1505, 29 - _frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x122D1505, 29 - _currFrameIndex, -1);
}
}
}
@@ -1541,15 +1537,15 @@ void Klayman::sub420BC0() {
_status2 = 2;
if (_statusE0 == 1) {
_statusE0 = 0;
- _flagE5 = false;
- setFileHash2(0x3A292504, 0x02421405, 0);
+ _acceptInput = false;
+ startAnimationByHash(0x3A292504, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
} else if (_statusE0 == 1) {
_statusE0 = 0;
- _flagE5 = false;
- setFileHash2(0x122D1505, 0x02421405, 0);
+ _acceptInput = false;
+ startAnimationByHash(0x122D1505, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
@@ -1581,16 +1577,16 @@ uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
- _flagE5 = true;
+ _acceptInput = true;
} else if (param.asInteger() == 0x489B025C) {
_soundResource1.play(0x52C4C2D7);
} else if (param.asInteger() == 0x400A0E64) {
_soundResource1.play(0x50E081D9);
} else if (param.asInteger() == 0x02421405) {
if (_statusE0 == 1) {
- setFileHash2(0x3A292504, 0x01084280, 0);
+ startAnimationByHash(0x3A292504, 0x01084280, 0);
} else {
- setFileHash2(0x122D1505, 0x01084280, 0);
+ startAnimationByHash(0x122D1505, 0x01084280, 0);
}
if (_statusE0 == 1) {
if (_y4 >= _y - 30) {
@@ -1614,36 +1610,36 @@ void Klayman::sub420AD0() {
sub41C7B0();
} else if (_statusE0 == 0) {
_statusE0 = 1;
- _flagE5 = false;
- setFileHash(0x3A292504, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x3A292504, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E0D0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
} else if (_statusE0 == 3) {
_statusE0 = 1;
- _flagE5 = true;
- setFileHash2(0x3A292504, 0x01084280, 0);
+ _acceptInput = true;
+ startAnimationByHash(0x3A292504, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E0D0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
} else if (_statusE0 == 2) {
_statusE0 = 1;
- _flagE5 = true;
- setFileHash(0x3A292504, 29 - _frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x3A292504, 29 - _currFrameIndex, -1);
}
}
}
-void Klayman::sub421030() {
+void Klayman::stWalkToFrontNoStep() {
_status2 = 2;
- _flagE5 = false;
- setFileHash2(0xF229C003, 0x14884392, 0);
+ _acceptInput = false;
+ startAnimationByHash(0xF229C003, 0x14884392, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E490);
+ SetMessageHandler(&Klayman::hmWalkToFront);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
-uint32 Klayman::handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1669,49 +1665,49 @@ uint32 Klayman::handleMessage41E490(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420FE0() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420FE0))) {
+void Klayman::stWalkToFront() {
+ if (!stStartAction(AnimationCallback(&Klayman::stWalkToFront))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0xF229C003, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xF229C003, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E490);
+ SetMessageHandler(&Klayman::hmWalkToFront);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
}
-void Klayman::sub4210C0() {
- if (!stStartAction(AnimationCallback(&Klayman::sub4210C0))) {
+void Klayman::stTurnToFront() {
+ if (!stStartAction(AnimationCallback(&Klayman::stTurnToFront))) {
_status2 = 0;
- _flagE5 = false;
- setFileHash2(0xCA221107, 0x8520108C, 0);
+ _acceptInput = false;
+ startAnimationByHash(0xCA221107, 0x8520108C, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E490);
+ SetMessageHandler(&Klayman::hmWalkToFront);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
}
-void Klayman::sub421070() {
- if (!stStartAction(AnimationCallback(&Klayman::sub421070))) {
+void Klayman::stTurnToBack() {
+ if (!stStartAction(AnimationCallback(&Klayman::stTurnToBack))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0xCA221107, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xCA221107, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E490);
+ SetMessageHandler(&Klayman::hmWalkToFront);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
}
void Klayman::stLandOnFeet() {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x18118554, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x18118554, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E290);
+ SetMessageHandler(&Klayman::hmLandOnFeet);
SetSpriteCallback(NULL);
}
-uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1723,18 +1719,18 @@ uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420ED0() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420ED0))) {
+void Klayman::stTurnToBackToUse() {
+ if (!stStartAction(AnimationCallback(&Klayman::stTurnToBackToUse))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x91540140, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x91540140, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E2F0);
+ SetMessageHandler(&Klayman::hmTurnToBackToUse);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
}
}
-uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1750,47 +1746,61 @@ uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420750() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420750))) {
+void Klayman::stClayDoorOpen() {
+ if (!stStartAction(AnimationCallback(&Klayman::stClayDoorOpen))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x5CCCB330, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x5CCCB330, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41DD20);
+ SetMessageHandler(&Klayman::hmClayDoorOpen);
+ }
+}
+
+uint32 Klayman::hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x040D4186) {
+ if (_attachedSprite) {
+ sendMessage(_attachedSprite, 0x4808, 0);
+ }
+ }
+ break;
}
+ return messageResult;
}
void Klayman::stTurnToUse() {
if (!stStartAction(AnimationCallback(&Klayman::stTurnToUse))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x9B250AD2, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x9B250AD2, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41EEF0);
+ SetMessageHandler(&Klayman::hmTurnToUse);
}
}
-void Klayman::sub4207F0() {
+void Klayman::stReturnFromUse() {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x98F88391, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x98F88391, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41EEF0);
+ SetMessageHandler(&Klayman::hmTurnToUse);
}
-void Klayman::sub420F20() {
+void Klayman::stWalkingOpenDoor() {
_flagF8 = false;
- _flagE5 = false;
- setFileHash(0x11A8E012, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x11A8E012, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F5A0);
- SetMessageHandler(&Klayman::handleMessage41EC70);
+ SetSpriteCallback(&Klayman::suWalkingOpenDoor);
+ SetMessageHandler(&Klayman::hmStartWalking);
}
-void Klayman::spriteUpdate41F5A0() {
+void Klayman::suWalkingOpenDoor() {
if (!_flagF8 && ABS(_x4 - _x) < 80) {
sendMessage(_parentScene, 0x4829, 0);
_flagF8 = true;
@@ -1801,18 +1811,18 @@ void Klayman::spriteUpdate41F5A0() {
void Klayman::stMoveObjectSkipTurnFaceObject() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
_flagE4 = false;
- _flagE5 = true;
- setFileHash2(0x0C1CA072, 0x01084280, 0);
+ _acceptInput = true;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41D970);
+ SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
void Klayman::sub420660() {
sendMessage(_attachedSprite, 0x4807, 0);
}
-uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -1840,11 +1850,11 @@ uint32 Klayman::handleMessage41D970(int messageNum, const MessageParam ¶m, E
void Klayman::stMoveObjectSkipTurn() {
_flagE4 = false;
- _flagE5 = true;
- setFileHash2(0x0C1CA072, 0x01084280, 0);
+ _acceptInput = true;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41D970);
+ SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
void Klayman::stMoveObjectFaceObject() {
@@ -1852,84 +1862,84 @@ void Klayman::stMoveObjectFaceObject() {
if (!stStartAction(AnimationCallback(&Klayman::stMoveObjectFaceObject))) {
_status2 = 2;
_flagE4 = false;
- _flagE5 = true;
- setFileHash(0x0C1CA072, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- SetMessageHandler(&Klayman::handleMessage41D970);
+ SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
}
-void Klayman::sub420C50() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420C50))) {
+void Klayman::stUseLever() {
+ if (!stStartAction(AnimationCallback(&Klayman::stUseLever))) {
_status2 = 0;
- if (_flagF7) {
- stReleaseLeverUp();
+ if (_isLeverDown) {
+ stUseLeverRelease();
} else {
sendMessage(_attachedSprite, 0x482B, 0);
- setFileHash(0x0C303040, 0, -1);
+ startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
NextState(&Klayman::stPullLeverDown);
- _flagE5 = false;
+ _acceptInput = false;
}
}
}
// Exactly the same code as sub420DA0 which was removed
void Klayman::stPullLeverDown() {
- setFileHash(0x0D318140, 0, -1);
+ startAnimation(0x0D318140, 0, -1);
sendMessage(_attachedSprite, 0x480F, 0);
NextState(&Klayman::stHoldLeverDown);
}
void Klayman::stHoldLeverDown() {
- setFileHash(0x4464A440, 0, -1);
+ startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D360);
- _flagF7 = true;
- _flagE5 = true;
+ _isLeverDown = true;
+ _acceptInput = true;
}
-void Klayman::stReleaseLeverUp() {
- setFileHash(0x09018068, 0, -1);
+void Klayman::stUseLeverRelease() {
+ startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stPullLeverDown);
- _flagE5 = false;
+ _acceptInput = false;
}
-void Klayman::sub420E20() {
- if (_flagF7) {
+void Klayman::stReleaseLever() {
+ if (_isLeverDown) {
_status2 = 2;
- setFileHash(0x09018068, 0, -1);
+ startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
- NextState(&Klayman::sub420E90);
- _flagE5 = false;
- _flagF7 = false;
+ NextState(&Klayman::stLetGoOfLever);
+ _acceptInput = false;
+ _isLeverDown = false;
} else {
sub41C7B0();
}
}
-void Klayman::sub420E90() {
- setFileHash(0x0928C048, 0, -1);
- FinalizeState(&Klayman::sub420EB0);
+void Klayman::stLetGoOfLever() {
+ startAnimation(0x0928C048, 0, -1);
+ FinalizeState(&Klayman::cbLeverReleasedEvent);
}
-void Klayman::sub420EB0() {
+void Klayman::cbLeverReleasedEvent() {
sendMessage(_attachedSprite, 0x482A, 0);
}
-void Klayman::sub420680() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::sub420680))) {
+void Klayman::stInsertDisk() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertDisk))) {
_status2 = 2;
_counter2 = 0;
for (uint32 i = 0; i < 20; i++) {
@@ -1943,27 +1953,27 @@ void Klayman::sub420680() {
gotoState(NULL);
sub41C7B0();
} else {
- setFileHash(0xD8C8D100, 0, -1);
+ startAnimation(0xD8C8D100, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
- SetMessageHandler(&Klayman::handleMessage41DB90);
- _flagE5 = false;
+ SetMessageHandler(&Klayman::hmInsertDisk);
+ _acceptInput = false;
_counter2--;
}
}
}
-uint32 Klayman::handleMessage41DB90(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x06040580) {
if (_counter2 == 0) {
// TODO: Calc calcHash value somewhere else
- setFileHash3(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
+ nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
}
} else if (_counter2 != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
_counter2--;
- setFileHash2(0xD8C8D100, 0x01084280, 0);
+ startAnimationByHash(0xD8C8D100, 0x01084280, 0);
} else if (param.asInteger() == 0x062A1510) {
_soundResource1.play(0x41688704);
} else if (param.asInteger() == 0x02B20220) {
@@ -1979,20 +1989,6 @@ uint32 Klayman::handleMessage41DB90(int messageNum, const MessageParam ¶m, E
return handleMessage41D480(messageNum, param, sender);
}
-uint32 Klayman::handleMessage41DD20(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x040D4186) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4808, 0);
- }
- }
- break;
- }
- return messageResult;
-}
-
//##############################################################################
// KmScene1001
@@ -2077,8 +2073,8 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
void KmScene1001::sub44FA50() {
if (!stStartAction(AnimationCallback(&KmScene1001::sub44FA50))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x00648953, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x00648953, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1001::handleMessage44FA00);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
@@ -2103,18 +2099,18 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
: Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _class599(class599), _ssLadderArch(ssLadderArch),
_status(0) {
- setKlaymanTable1();
+ setKlaymanIdleTable1();
}
void KmScene1002::xUpdate() {
if (_x >= 250 && _x <= 435 && _y >= 420) {
if (_status == 0) {
- // TODO setKlaymanTable(stru_4B44C8);
+ // TODO setKlaymanIdleTable(stru_4B44C8);
_status = 1;
}
} else if (_status == 1) {
- setKlaymanTable1();
+ setKlaymanIdleTable1();
_status = 0;
}
}
@@ -2147,16 +2143,16 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4805:
switch (param.asInteger()) {
case 1:
- GotoState(&Klayman::sub420210);
+ GotoState(&Klayman::stJumpToRing1);
break;
case 2:
- GotoState(&Klayman::sub420250);
+ GotoState(&Klayman::stJumpToRing2);
break;
case 3:
- GotoState(&Klayman::sub420290);
+ GotoState(&Klayman::stJumpToRing3);
break;
case 4:
- GotoState(&Klayman::sub420300);
+ GotoState(&Klayman::stJumpToRing4);
break;
}
break;
@@ -2180,7 +2176,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4820:
sendMessage(_parentScene, 0x2005, 0);
- GotoState(&Klayman::sub420970);
+ GotoState(&Klayman::stContinueClimbLadderUp);
break;
case 0x4821:
sendMessage(_parentScene, 0x2005, 0);
@@ -2198,16 +2194,16 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421030);
+ GotoState(&Klayman::stWalkToFrontNoStep);
} else {
- GotoState(&Klayman::sub420FE0);
+ GotoState(&Klayman::stWalkToFront);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub4210C0);
+ GotoState(&Klayman::stTurnToFront);
} else {
- GotoState(&Klayman::sub421070);
+ GotoState(&Klayman::stTurnToBack);
}
break;
case 0x483F:
@@ -2282,12 +2278,12 @@ uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x942D2081) {
- _flagE5 = false;
+ _acceptInput = false;
sendMessage(_attachedSprite, 0x2003, 0);
} else if (param.asInteger() == 0xDA600012) {
stHitByBoxingGlove();
} else if (param.asInteger() == 0x0D01B294) {
- _flagE5 = false;
+ _acceptInput = false;
sendMessage(_attachedSprite, 0x480B, 0);
}
break;
@@ -2353,8 +2349,8 @@ uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_frameIndex < speedUpFrameIndex) {
- setFileHash(0x35AA8059, speedUpFrameIndex, -1);
+ if (_currFrameIndex < speedUpFrameIndex) {
+ startAnimation(0x35AA8059, speedUpFrameIndex, -1);
_y = 435;
}
messageResult = 0;
@@ -2396,8 +2392,8 @@ void KmScene1002::suFallDown() {
void KmScene1002::sub449E20() {
if (!stStartAction(AnimationCallback(&KmScene1002::sub449E20))) {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x584984B4, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1002::handleMessage449800);
@@ -2409,9 +2405,9 @@ void KmScene1002::sub449E20() {
void KmScene1002::sub449E90() {
_soundResource1.play(0x56548280);
_status2 = 0;
- _flagE5 = false;
+ _acceptInput = false;
_surface->setVisible(false);
- setFileHash(0x5420E254, 0, -1);
+ startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1002::handleMessage4498E0);
@@ -2420,8 +2416,8 @@ void KmScene1002::sub449E90() {
void KmScene1002::sub449EF0() {
_counter1 = 1;
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x000BAB02, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x000BAB02, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
// Weird stuff happening
SetMessageHandler(&Klayman::handleMessage41D360);
@@ -2436,9 +2432,9 @@ void KmScene1002::sub449F70() {
sendMessage(_parentScene, 0x1024, 1);
_soundResource1.play(0x41648271);
_status2 = 1;
- _flagE5 = false;
+ _acceptInput = false;
_flagE1 = false;
- setFileHash2(0x000BAB02, 0x88003000, 0);
+ startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1002::handleMessage41D480);
@@ -2453,8 +2449,8 @@ void KmScene1002::sub449F70() {
void KmScene1002::stSpitOutFall() {
_counter1 = 1;
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x9308C132, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x9308C132, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
SetSpriteCallback(&KmScene1002::suFallDown);
SetMessageHandler(&Klayman::handleMessage41D480);
@@ -2466,8 +2462,8 @@ void KmScene1002::stSpitOutFall() {
void KmScene1002::sub44A0D0() {
_counter1 = 1;
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x0013A206, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x0013A206, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(&KmScene1002::suFallDown);
@@ -2480,9 +2476,9 @@ void KmScene1002::sub44A150() {
sendMessage(_parentScene, 0x1024, 1);
_soundResource1.play(0x41648271);
_status2 = 1;
- _flagE5 = false;
+ _acceptInput = false;
_flagE1 = false;
- setFileHash2(0x0013A206, 0x88003000, 0);
+ startAnimationByHash(0x0013A206, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D480);
SetSpriteCallback(NULL);
@@ -2503,8 +2499,8 @@ void KmScene1002::stJumpAndFall() {
if (!stStartAction(AnimationCallback(&KmScene1002::stJumpAndFall))) {
sendMessage(_parentScene, 0x1024, 3);
_status2 = 2;
- _flagE5 = false;
- setFileHash(0xB93AB151, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xB93AB151, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage449D60);
SetSpriteCallback(&KmScene1002::suFallDown);
@@ -2519,8 +2515,8 @@ void KmScene1002::stDropFromRing() {
_attachedSprite = NULL;
}
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x586984B1, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x586984B1, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D360);
SetSpriteCallback(&KmScene1002::suFallDown);
@@ -2529,9 +2525,9 @@ void KmScene1002::stDropFromRing() {
void KmScene1002::stPressDoorButton() {
_status2 = 2;
- _flagE5 = true;
+ _acceptInput = true;
setDoDeltaX(0);
- setFileHash(0x1CD89029, 0, -1);
+ startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::hmPressDoorButton);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
@@ -2539,8 +2535,8 @@ void KmScene1002::stPressDoorButton() {
void KmScene1002::stHitByBoxingGlove() {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x35AA8059, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage449C90);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
@@ -2555,9 +2551,9 @@ void KmScene1002::stMoveVenusFlyTrap() {
if (!stStartAction(AnimationCallback(&KmScene1002::stMoveVenusFlyTrap))) {
_status2 = 2;
_flagE4 = false;
- _flagE5 = true;
+ _acceptInput = true;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- setFileHash(0x5C01A870, 0, -1);
+ startAnimation(0x5C01A870, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
@@ -2567,8 +2563,8 @@ void KmScene1002::stMoveVenusFlyTrap() {
void KmScene1002::stContinueMovingVenusFlyTrap() {
_flagE4 = false;
- _flagE5 = true;
- setFileHash2(0x5C01A870, 0x01084280, 0);
+ _acceptInput = true;
+ startAnimationByHash(0x5C01A870, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
@@ -2608,7 +2604,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4820:
sendMessage(_parentScene, 0x2000, 0);
- GotoState(&Klayman::sub420970);
+ GotoState(&Klayman::stContinueClimbLadderUp);
break;
case 0x4821:
sendMessage(_parentScene, 0x2000, 0);
@@ -2635,7 +2631,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::sub420AD0);
break;
case 0x4828:
- GotoState(&Klayman::sub420ED0);
+ GotoState(&Klayman::stTurnToBackToUse);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -2652,7 +2648,7 @@ uint32 KmScene1004::hmReadNote(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x04684052) {
- _flagE5 = true;
+ _acceptInput = true;
sendMessage(_parentScene, 0x2002, 0);
}
break;
@@ -2662,15 +2658,15 @@ uint32 KmScene1004::hmReadNote(int messageNum, const MessageParam ¶m, Entity
void KmScene1004::stReadNote() {
_status2 = 2;
- _flagE5 = false;
- setFileHash(0x123E9C9F, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x123E9C9F, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1004::hmReadNote);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
}
KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
}
@@ -2678,14 +2674,14 @@ KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2000:
- _flag1 = param.asInteger() != 0;
+ _isSittingInTeleporter = param.asInteger() != 0;
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- if (_flag1)
+ if (_isSittingInTeleporter)
GotoState(&Klayman::sub421350);
else
GotoState(&Klayman::stTryStandIdle);
@@ -2703,25 +2699,25 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x481D:
- if (_flag1)
- GotoState(&Klayman::sub4214D0);
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_flag)
- GotoState(&Klayman::sub421510);
+ if (_isSittingInTeleporter)//CHECKME
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
break;
case 0x4834:
GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
- _flag1 = true;
+ _isSittingInTeleporter = true;
GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
- _flag1 = false;
- GotoState(&Klayman::sub421310);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
sub461F30();
@@ -2749,20 +2745,20 @@ uint32 KmScene1109::handleMessage461EA0(int messageNum, const MessageParam ¶
void KmScene1109::sub461F30() {
_status2 = 0;
- _flagE5 = false;
+ _acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1109::handleMessage461EA0);
- setFileHash(0x2C2A4A1C, 0, -1);
+ startAnimation(0x2C2A4A1C, 0, -1);
}
void KmScene1109::sub461F70() {
_status2 = 0;
- _flagE5 = false;
+ _acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1109::handleMessage461EA0);
- setFileHash(0x3C2E4245, 0, -1);
+ startAnimation(0x3C2E4245, 0, -1);
}
// KmScene1201
@@ -2770,7 +2766,7 @@ void KmScene1109::sub461F70() {
KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
: Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) {
- // TODO setKlaymanTable(dword_4AEF10, 3);
+ // TODO setKlaymanIdleTable(dword_4AEF10, 3);
_flagF6 = true;
}
@@ -2785,7 +2781,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
- GotoState(&KmScene1201::sub40DF00);
+ GotoState(&KmScene1201::stMoveObject);
break;
case 0x4812:
GotoState(&Klayman::stPickUpGeneric);
@@ -2819,7 +2815,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x481F:
GotoState(&Klayman::stWonderAbout);
@@ -2867,9 +2863,9 @@ uint32 KmScene1201::hmMatch(int messageNum, const MessageParam ¶m, Entity *s
void KmScene1201::stFetchMatch() {
if (!stStartAction(AnimationCallback(&KmScene1201::stFetchMatch))) {
_status2 = 0;
- _flagE5 = false;
+ _acceptInput = false;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- setFileHash(0x9CAA0218, 0, -1);
+ startAnimation(0x9CAA0218, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1201::hmMatch);
@@ -2879,15 +2875,15 @@ void KmScene1201::stFetchMatch() {
void KmScene1201::stLightMatch() {
_status2 = 1;
- _flagE5 = false;
+ _acceptInput = false;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- setFileHash(0x1222A513, 0, -1);
+ startAnimation(0x1222A513, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1201::hmMatch);
}
-uint32 KmScene1201::handleMessage40DDF0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1201::hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -2920,33 +2916,33 @@ uint32 KmScene1201::hmTumbleHeadless(int messageNum, const MessageParam ¶m,
return messageResult;
}
-void KmScene1201::sub40DF00() {
- if (!stStartAction(AnimationCallback(&KmScene1201::sub40DF00))) {
+void KmScene1201::stMoveObject() {
+ if (!stStartAction(AnimationCallback(&KmScene1201::stMoveObject))) {
_status2 = 2;
- _flagE5 = false;
+ _acceptInput = false;
_countdown = 8;
setDoDeltaX(0);
- setFileHash(0x0C1CA072, 0, -1);
+ startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&KmScene1201::update40DBE0);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::handleMessage40DDF0);
+ SetMessageHandler(&KmScene1201::hmMoveObject);
}
}
void KmScene1201::stMoveObjectSkipTurn() {
- _flagE5 = false;
- setFileHash2(0x0C1CA072, 0x01084280, 0);
+ _acceptInput = false;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&KmScene1201::update40DBE0);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::handleMessage40DDF0);
+ SetMessageHandler(&KmScene1201::hmMoveObject);
}
void KmScene1201::stTumbleHeadless() {
if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stTumbleHeadless))) {
_status2 = 1;
- _flagE5 = false;
+ _acceptInput = false;
setDoDeltaX(0);
- setFileHash(0x2821C590, 0, -1);
+ startAnimation(0x2821C590, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmTumbleHeadless);
@@ -2959,8 +2955,8 @@ void KmScene1201::stTumbleHeadless() {
void KmScene1201::sub40E040() {
if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::sub40E040))) {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x5420E254, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D360);
@@ -3015,8 +3011,8 @@ void KmScene1303::update4161A0() {
void KmScene1303::stPeekWall1() {
_status2 = 0;
- _flagE5 = true;
- setFileHash(0xAC20C012, 8, 37);
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
@@ -3025,8 +3021,8 @@ void KmScene1303::stPeekWall1() {
void KmScene1303::stPeekWall2() {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0xAC20C012, 43, 49);
+ _acceptInput = false;
+ startAnimation(0xAC20C012, 43, 49);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
@@ -3035,19 +3031,19 @@ void KmScene1303::stPeekWall2() {
void KmScene1303::stPeekWall3() {
_counter3 = 0;
_status2 = 0;
- _flagE5 = true;
+ _acceptInput = true;
_counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
- setFileHash(0xAC20C012, 38, 42);
+ startAnimation(0xAC20C012, 38, 42);
SetUpdateHandler(&KmScene1303::update4161A0);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D360);
- _newHashListIndex = 42;
+ _newStickFrameIndex = 42;
}
void KmScene1303::stPeekWallReturn() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x2426932E, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x2426932E, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1303::hmPeekWallReturn);
@@ -3136,8 +3132,8 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
void KmScene1305::stCrashDown() {
_soundResource1.play(0x41648271);
_status2 = 1;
- _flagE5 = false;
- setFileHash2(0x000BAB02, 0x88003000, 0);
+ _acceptInput = false;
+ startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
@@ -3152,21 +3148,21 @@ void KmScene1305::cbCrashDownEvent() {
KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- _flag1 = false;
+ _isSittingInTeleporter = false;
}
uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
- _flag1 = param.asInteger() != 0;
+ _isSittingInTeleporter = param.asInteger() != 0;
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- if (_flag1)
+ if (_isSittingInTeleporter)
GotoState(&Klayman::sub421350);
else
GotoState(&Klayman::stTryStandIdle);
@@ -3194,7 +3190,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x481A:
- GotoState(&Klayman::sub420680);
+ GotoState(&Klayman::stInsertDisk);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3204,16 +3200,16 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- if (_flag1)
- GotoState(&Klayman::sub4214D0);
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stTurnToUseInTeleporter);
else
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- if (_flag1)
- GotoState(&Klayman::sub421510);
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
else
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x481F:
if (param.asInteger() == 1) {
@@ -3234,16 +3230,16 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421030);
+ GotoState(&Klayman::stWalkToFrontNoStep);
} else {
- GotoState(&Klayman::sub420FE0);
+ GotoState(&Klayman::stWalkToFront);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub4210C0);
+ GotoState(&Klayman::stTurnToFront);
} else {
- GotoState(&Klayman::sub421070);
+ GotoState(&Klayman::stTurnToBack);
}
break;
case 0x4834:
@@ -3251,13 +3247,13 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
- _flag1 = true;
+ _isSittingInTeleporter = true;
GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
- _flag1 = false;
- GotoState(&Klayman::sub421310);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
sub417D40();
@@ -3277,8 +3273,8 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
void KmScene1306::sub417D40() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xEE084A04, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xEE084A04, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1306::handleMessage417CB0);
@@ -3286,8 +3282,8 @@ void KmScene1306::sub417D40() {
void KmScene1306::sub417D80() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xB86A4274, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xB86A4274, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1306::handleMessage417CB0);
@@ -3307,9 +3303,9 @@ uint32 KmScene1306::handleMessage417CB0(int messageNum, const MessageParam ¶
}
KmScene1308::KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _flag1 = false;
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+
+ // Empty
}
uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3329,7 +3325,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x480D:
- GotoState(&KmScene1001::sub420C50);
+ GotoState(&KmScene1001::stUseLever);
break;
case 0x4812:
if (param.asInteger() == 2) {
@@ -3348,7 +3344,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 1) {
GotoState(&KmScene1308::sub456150);
} else {
- GotoState(&Klayman::sub420680);
+ GotoState(&Klayman::stInsertDisk);
}
break;
case 0x481B:
@@ -3362,10 +3358,10 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x4827:
- GotoState(&Klayman::sub420E20);
+ GotoState(&Klayman::stReleaseLever);
break;
case 0x4834:
GotoState(&Klayman::stStepOver);
@@ -3385,10 +3381,10 @@ uint32 KmScene1308::handleMessage(int messageNum, const MessageParam ¶m, Ent
switch (messageNum) {
case 0x100D:
if (!_flag1 && param.asInteger() == 0x06040580) {
- setFileHash3(0xDC409440, 0x46431401, 0);
+ nextAnimationByHash(0xDC409440, 0x46431401, 0);
} else if (_flag1 && param.asInteger() == 0x46431401) {
_flag1 = false;
- setFileHash2(0xDC409440, 0x01084280, 0);
+ startAnimationByHash(0xDC409440, 0x01084280, 0);
} else if (param.asInteger() == 0x062A1510) {
_soundResource1.play(0x41688704);
} else if (param.asInteger() == 0x02B20220) {
@@ -3431,8 +3427,8 @@ void KmScene1308::sub456150() {
gotoState(NULL);
sub41C7B0();
} else {
- _flagE5 = false;
- setFileHash(0xDC409440, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xDC409440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F250);
SetMessageHandler(&KmScene1308::handleMessage);
@@ -3500,16 +3496,16 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421030);
+ GotoState(&Klayman::stWalkToFrontNoStep);
} else {
- GotoState(&Klayman::sub420FE0);
+ GotoState(&Klayman::stWalkToFront);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub4210C0);
+ GotoState(&Klayman::stTurnToFront);
} else {
- GotoState(&Klayman::sub421070);
+ GotoState(&Klayman::stTurnToBack);
}
break;
}
@@ -3555,7 +3551,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
}
return 0;
@@ -3566,7 +3562,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1403::KmScene1403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- setKlaymanTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
+ setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
}
uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3586,7 +3582,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x480D:
- GotoState(&KmScene1001::sub420C50);
+ GotoState(&KmScene1001::stUseLever);
break;
case 0x4812:
if (param.asInteger() == 2) {
@@ -3609,7 +3605,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4827:
- GotoState(&Klayman::sub420E20);
+ GotoState(&Klayman::stReleaseLever);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -3659,7 +3655,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x481A:
- GotoState(&Klayman::sub420680);
+ GotoState(&Klayman::stInsertDisk);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3672,7 +3668,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x481F:
if (param.asInteger() == 1) {
@@ -3702,20 +3698,20 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1608::KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
}
uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2032:
- _flag1 = param.asInteger() != 0;
+ _isSittingInTeleporter = param.asInteger() != 0;
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- if (_flag1)
+ if (_isSittingInTeleporter)
GotoState(&Klayman::sub421350);
else
GotoState(&Klayman::stTryStandIdle);
@@ -3741,12 +3737,12 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- if (_flag1)
- GotoState(&Klayman::sub4214D0);
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_flag)
- GotoState(&Klayman::sub421510);
+ if (_isSittingInTeleporter)//CHECKME
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
break;
case 0x481F:
if (param.asInteger() == 1) {
@@ -3770,13 +3766,13 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4835:
sendMessage(_parentScene, 0x2032, 1);
- _flag1 = true;
+ _isSittingInTeleporter = true;
GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2032, 0);
- _flag1 = false;
- GotoState(&Klayman::sub421310);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483F:
sub41CD00(param.asInteger());
@@ -3791,7 +3787,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1705
KmScene1705::KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _flag(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
}
@@ -3800,7 +3796,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
- _flag = param.asInteger() != 0;
+ _isSittingInTeleporter = param.asInteger() != 0;
messageResult = 1;
break;
case 0x4001:
@@ -3808,7 +3804,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- if (_flag) {
+ if (_isSittingInTeleporter) {
GotoState(&Klayman::sub421350);
} else {
GotoState(&Klayman::stTryStandIdle);
@@ -3838,13 +3834,13 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- if (_flag) {
- GotoState(&Klayman::sub4214D0);
+ if (_isSittingInTeleporter) {
+ GotoState(&Klayman::stTurnToUseInTeleporter);
}
break;
case 0x481E:
- if (_flag) {
- GotoState(&Klayman::sub421510);
+ if (_isSittingInTeleporter) {
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
}
break;
case 0x481F:
@@ -3865,13 +3861,13 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
- _flag = true;
+ _isSittingInTeleporter = true;
GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
- _flag = false;
- GotoState(&Klayman::sub421310);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
sub468AD0();
@@ -3909,8 +3905,8 @@ void KmScene1705::spriteUpdate468A30() {
void KmScene1705::stFallSkipJump() {
_status2 = 2;
- _flagE5 = false;
- setFileHash2(0xB93AB151, 0x40A100F8, 0);
+ _acceptInput = false;
+ startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene1705::spriteUpdate468A30);
SetMessageHandler(&Klayman::handleMessage41D360);
@@ -3919,8 +3915,8 @@ void KmScene1705::stFallSkipJump() {
void KmScene1705::sub468AD0() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x5E0A4905, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x5E0A4905, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1705::handleMessage4689A0);
@@ -3928,8 +3924,8 @@ void KmScene1705::sub468AD0() {
void KmScene1705::sub468B10() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xD86E4477, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xD86E4477, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1705::handleMessage4689A0);
@@ -3958,7 +3954,7 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -3975,7 +3971,7 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _flag(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
}
@@ -3983,14 +3979,14 @@ KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2000:
- _flag = param.asInteger() != 0;
+ _isSittingInTeleporter = param.asInteger() != 0;
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- if (_flag) {
+ if (_isSittingInTeleporter) {
GotoState(&Klayman::sub421350);
} else {
GotoState(&Klayman::stTryStandIdle);
@@ -4009,13 +4005,13 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C7B0();
break;
case 0x481D:
- if (_flag) {
- GotoState(&Klayman::sub4214D0);
+ if (_isSittingInTeleporter) {
+ GotoState(&Klayman::stTurnToUseInTeleporter);
}
break;
case 0x481E:
- if (_flag) {
- GotoState(&Klayman::sub421510);
+ if (_isSittingInTeleporter) {
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
}
break;
case 0x4834:
@@ -4023,13 +4019,13 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
- _flag = true;
+ _isSittingInTeleporter = true;
GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
- _flag = false;
- GotoState(&Klayman::sub421310);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
sub440230();
@@ -4057,8 +4053,8 @@ uint32 KmScene2001::handleMessage4401A0(int messageNum, const MessageParam ¶
void KmScene2001::sub440230() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xBE68CC54, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xBE68CC54, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene2001::handleMessage4401A0);
@@ -4066,15 +4062,15 @@ void KmScene2001::sub440230() {
void KmScene2001::stDoTeleport() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x18AB4ED4, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x18AB4ED4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
}
@@ -4083,7 +4079,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
- _flag1 = param.asInteger() != 0;
+ _isSittingInTeleporter = param.asInteger() != 0;
messageResult = 1;
break;
case 0x4001:
@@ -4091,7 +4087,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
- if (_flag1)
+ if (_isSittingInTeleporter)
GotoState(&Klayman::sub421350);
else
GotoState(&Klayman::stTryStandIdle);
@@ -4129,25 +4125,25 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481D:
- if (_flag1)
- GotoState(&Klayman::sub4214D0);
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_flag)
- GotoState(&Klayman::sub421510);
+ if (_isSittingInTeleporter)//CHECKME
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
break;
case 0x4834:
GotoState(&Klayman::stStepOver);
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
- _flag1 = true;
+ _isSittingInTeleporter = true;
GotoState(&Klayman::stSitInTeleporter);
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
- _flag1 = false;
- GotoState(&Klayman::sub421310);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
sub486320();
@@ -4165,8 +4161,8 @@ uint32 KmScene2101::handleMessage486160(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_frameIndex < speedUpFrameIndex) {
- setFileHash(0x35AA8059, speedUpFrameIndex, -1);
+ if (_currFrameIndex < speedUpFrameIndex) {
+ startAnimation(0x35AA8059, speedUpFrameIndex, -1);
_y = 438;
}
messageResult = 0;
@@ -4198,8 +4194,8 @@ uint32 KmScene2101::handleMessage486230(int messageNum, const MessageParam ¶
void KmScene2101::sub4862C0() {
_status2 = 1;
- _flagE5 = false;
- setFileHash(0x35AA8059, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene2101::handleMessage486160);
@@ -4208,8 +4204,8 @@ void KmScene2101::sub4862C0() {
void KmScene2101::sub486320() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0xFF290E30, 0, -1);
+ _acceptInput = false;
+ startAnimation(0xFF290E30, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene2101::handleMessage486230);
@@ -4217,8 +4213,8 @@ void KmScene2101::sub486320() {
void KmScene2101::sub486360() {
_status2 = 0;
- _flagE5 = false;
- setFileHash(0x9A28CA1C, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x9A28CA1C, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene2101::handleMessage486230);
@@ -4267,7 +4263,7 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4275,16 +4271,16 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421030);
+ GotoState(&Klayman::stWalkToFrontNoStep);
} else {
- GotoState(&Klayman::sub420FE0);
+ GotoState(&Klayman::stWalkToFront);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub4210C0);
+ GotoState(&Klayman::stTurnToFront);
} else {
- GotoState(&Klayman::sub421070);
+ GotoState(&Klayman::stTurnToBack);
}
break;
case 0x483F:
@@ -4337,10 +4333,10 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4819:
- GotoState(&Klayman::sub420750);
+ GotoState(&Klayman::stClayDoorOpen);
break;
case 0x481A:
- GotoState(&Klayman::sub420680);
+ GotoState(&Klayman::stInsertDisk);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4353,7 +4349,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUse);
break;
case 0x481E:
- GotoState(&Klayman::sub4207F0);
+ GotoState(&Klayman::stReturnFromUse);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4375,7 +4371,7 @@ KmScene2205::KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
void KmScene2205::xUpdate() {
- setGlobalVar(0x18288913, _frameIndex);
+ setGlobalVar(0x18288913, _currFrameIndex);
}
uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4423,12 +4419,12 @@ void KmScene2205::sub423980() {
frameIndex = 0;
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
- setFileHash(0x1A249001, frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::sub41FA40);
+ NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4443,7 +4439,7 @@ KmScene2206::~KmScene2206() {
}
void KmScene2206::xUpdate() {
- setGlobalVar(0x18288913, _frameIndex);
+ setGlobalVar(0x18288913, _currFrameIndex);
}
uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4512,16 +4508,16 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482E:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421030);
+ GotoState(&Klayman::stWalkToFrontNoStep);
} else {
- GotoState(&Klayman::sub420FE0);
+ GotoState(&Klayman::stWalkToFront);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub4210C0);
+ GotoState(&Klayman::stTurnToFront);
} else {
- GotoState(&Klayman::sub421070);
+ GotoState(&Klayman::stTurnToBack);
}
break;
case 0x4837:
@@ -4549,9 +4545,9 @@ void KmScene2206::sub482490() {
if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::sub482490))) {
_status2 = 1;
sendMessage(_parentScene, 0x4803, 0);
- _flagE5 = false;
+ _acceptInput = false;
_yDelta = 0;
- setFileHash(0x5420E254, 0, -1);
+ startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(&KmScene2206::spriteUpdate482450);
@@ -4565,12 +4561,12 @@ void KmScene2206::sub482530() {
frameIndex = 0;
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
- setFileHash(0x1A249001, frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::sub41FA40);
+ NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4622,7 +4618,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4827:
- GotoState(&Klayman::sub420E20);
+ GotoState(&Klayman::stReleaseLever);
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4647,8 +4643,8 @@ void KmScene2207::spriteUpdate442430() {
void KmScene2207::sub442460() {
if (!stStartActionFromIdle(AnimationCallback(&KmScene2207::sub442460))) {
_status2 = 1;
- _flagE5 = true;
- setFileHash(0x5420E254, 0, -1);
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate442430);
SetMessageHandler(&Klayman::handleMessage41D360);
@@ -4658,11 +4654,11 @@ void KmScene2207::sub442460() {
void KmScene2207::sub4424B0() {
if (!stStartAction(AnimationCallback(&KmScene2207::sub4424B0))) {
_status2 = 0;
- if (_flagF7) {
- stReleaseLeverUp();
+ if (_isLeverDown) {
+ stUseLeverRelease();
} else {
- _flagE5 = false;
- setFileHash(0x0C303040, 0, -1);
+ _acceptInput = false;
+ startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
@@ -4672,27 +4668,27 @@ void KmScene2207::sub4424B0() {
}
void KmScene2207::sub442520() {
- setFileHash(0x0D318140, 0, -1);
+ startAnimation(0x0D318140, 0, -1);
sendMessage(_attachedSprite, 0x480F, 0);
NextState(&KmScene2207::sub442560);
}
void KmScene2207::sub442560() {
- setFileHash(0x1564A2C0, 0, -1);
+ startAnimation(0x1564A2C0, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
NextState(&KmScene2207::sub4425A0);
- _flagE5 = true;
- _flagF7 = true;
+ _acceptInput = true;
+ _isLeverDown = true;
}
void KmScene2207::sub4425A0() {
- setFileHash(0x4464A440, 0, -1);
+ startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D360);
- _flagE5 = true;
- _flagF7 = true;
+ _acceptInput = true;
+ _isLeverDown = true;
}
KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4701,7 +4697,7 @@ KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
void KmScene2242::xUpdate() {
- setGlobalVar(0x18288913, _frameIndex);
+ setGlobalVar(0x18288913, _currFrameIndex);
}
uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4771,12 +4767,12 @@ void KmScene2242::sub444D20() {
frameIndex = 0;
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
- setFileHash(0x1A249001, frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::sub41FA40);
+ NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4786,7 +4782,7 @@ KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16
}
void KmHallOfRecords::xUpdate() {
- setGlobalVar(0x18288913, _frameIndex);
+ setGlobalVar(0x18288913, _currFrameIndex);
}
uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4840,12 +4836,12 @@ void KmHallOfRecords::sub43B130() {
frameIndex = 0;
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
- setFileHash(0x1A249001, frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::sub41FA40);
+ NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4855,7 +4851,7 @@ KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
void KmScene2247::xUpdate() {
- setGlobalVar(0x18288913, _frameIndex);
+ setGlobalVar(0x18288913, _currFrameIndex);
}
uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4909,12 +4905,12 @@ void KmScene2247::sub453520() {
frameIndex = 0;
_status2 = 0;
_flagE1 = true;
- _flagE5 = true;
- setFileHash(0x1A249001, frameIndex, -1);
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
SetSpriteCallback(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::sub41FA40);
+ NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 645ed74..3b8ee69 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -36,7 +36,7 @@ class Klayman;
const uint32 kKlaymanSpeedUpHash = 0x004A2148;
-struct KlaymanTableItem {
+struct KlaymanIdleTableItem {
int value;
void (Klayman::*callback)();
};
@@ -66,61 +66,61 @@ public:
void stTurnAwayFromUse();
void stWonderAbout();
void stPeekWall();
- void sub420210();
- void sub4201C0();
+ void stJumpToRing1();
+ void setupJumpToRing();
void sub420340();
- void sub420250();
- void sub420290();
- void sub420380();
- void sub4203C0();
- void sub420300();
- void sub420970();
+ void stJumpToRing2();
+ void stJumpToRing3();
+ void stHoldRing();
+ void stReleaseRing();
+ void stJumpToRing4();
+ void stContinueClimbLadderUp();
void sub4209D0();
void sub420BC0();
void sub420AD0();
- void sub421030();
- void sub420FE0();
- void sub4210C0();
- void sub421070();
+ void stWalkToFrontNoStep();
+ void stWalkToFront();
+ void stTurnToFront();
+ void stTurnToBack();
void stLandOnFeet();
- void sub420ED0();
- void sub420750();
+ void stTurnToBackToUse();
+ void stClayDoorOpen();
void stTurnToUse();
- void sub4207F0();
- void sub420F20();
+ void stReturnFromUse();
+ void stWalkingOpenDoor();
void sub421350();
void stIdleSitBlink();
void stIdleSitBlinkSecond();
void stPickUpNeedle();
void sub41FFF0();
- void sub4214D0();
- void sub421510();
+ void stTurnToUseInTeleporter();
+ void stReturnFromUseInTeleporter();
void stStepOver();
void stSitInTeleporter();
- void sub421310();
+ void stGetUpFromTeleporter();
void stMoveObjectSkipTurnFaceObject();
void sub420660();
void stMoveObjectSkipTurn();
void stMoveObjectFaceObject();
- void sub420C50();
+ void stUseLever();
void stPullLeverDown();
void stHoldLeverDown();
- void stReleaseLeverUp();
- void sub420E20();
- void sub420E90();
- void sub420EB0();
- void sub420680();
+ void stUseLeverRelease();
+ void stReleaseLever();
+ void stLetGoOfLever();
+ void cbLeverReleasedEvent();
+ void stInsertDisk();
void stWalking();
- void sub41FA40();
+ void stUpdateWalking();
void stStartWalkingDone();
void sub41CE70();
void spriteUpdate41F250();
- void spriteUpdate41F5F0();
+ void suWalking();
void suLargeStep();
void spriteUpdate41F230();
- void spriteUpdate41F5A0();
+ void suWalkingOpenDoor();
void spriteUpdate41F300();
void spriteUpdate41F320();
@@ -129,10 +129,10 @@ public:
uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
- void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
- void setKlaymanTable1();
- void setKlaymanTable2();
- void setKlaymanTable3();
+ void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
+ void setKlaymanIdleTable1();
+ void setKlaymanIdleTable2();
+ void setKlaymanIdleTable3();
void setSoundFlag(bool value) { _soundFlag = value; }
@@ -144,23 +144,23 @@ protected:
bool _flagE2;
bool _flagE3;
bool _flagE4;
- bool _flagE5;
+ bool _acceptInput;
int16 _x4, _y4;
int16 _counter, _counterMax;
int16 _counter3, _counter3Max;
int16 _counter1;
int16 _counter2;
bool _flagF6;
- bool _flagF7;
+ bool _isLeverDown;
bool _flagF8;
int _status2;
bool _flagFA;
SoundResource _soundResource1;
SoundResource _soundResource2;
int _status3;
- const KlaymanTableItem *_table;
- int _tableCount;
- int _tableMaxValue;
+ const KlaymanIdleTableItem *_idleTable;
+ int _idleTableCount;
+ int _idleTableMaxValue;
uint32 _field114;
/*
00000118 field118 dw ?
@@ -200,7 +200,7 @@ protected:
void stStand();
void stStandAround();
- uint32 handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41C930(int16 x, bool flag);
@@ -209,11 +209,11 @@ protected:
bool stStartAction(AnimationCb callback3);
void stSneak();
- void stSneakDone();
- uint32 handleMessage41DD80(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stWalkingDone();
+ uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
void sub41CD70(int16 x);
void stStartWalking();
- uint32 handleMessage41EC70(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -226,24 +226,24 @@ protected:
void stLargeStepDone();
uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41EEF0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41D790(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41D880(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41DAA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmHoldRing(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D640(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41EAB0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41D970(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41DD20(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender);
void update41D1C0();
- uint32 handleMessage41DB90(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -306,7 +306,7 @@ class KmScene1109 : public Klayman {
public:
KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag1;
+ bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage461EA0(int messageNum, const MessageParam ¶m, Entity *sender);
void sub461F30();
@@ -324,9 +324,9 @@ protected:
uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
void stFetchMatch();
void stLightMatch();
- uint32 handleMessage40DDF0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40DF00();
+ void stMoveObject();
void stMoveObjectSkipTurn();
void stTumbleHeadless();
void sub40E040();
@@ -365,7 +365,7 @@ class KmScene1306 : public Klayman {
public:
KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag1;
+ bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage417CB0(int messageNum, const MessageParam ¶m, Entity *sender);
void sub417D40();
@@ -414,7 +414,7 @@ class KmScene1608 : public Klayman {
public:
KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag1;
+ bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
@@ -422,7 +422,7 @@ class KmScene1705 : public Klayman {
public:
KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag;
+ bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage4689A0(int messageNum, const MessageParam ¶m, Entity *sender);
void spriteUpdate468A30();
@@ -442,7 +442,7 @@ class KmScene2001 : public Klayman {
public:
KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag;
+ bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage4401A0(int messageNum, const MessageParam ¶m, Entity *sender);
void sub440230();
@@ -453,7 +453,7 @@ class KmScene2101 : public Klayman {
public:
KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag1;
+ bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 handleMessage486160(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage486230(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index b60c318..ea1400e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -133,7 +133,7 @@ uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m,
handleMessage2000h();
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return 0;
@@ -144,12 +144,12 @@ void AsScene1001Door::handleMessage2000h() {
case 0:
case 1:
_soundResource1.play(0x65482F03);
- setFileHash(0x624C0498, 1, 3);
+ startAnimation(0x624C0498, 1, 3);
NextState(&AsScene1001Door::callback1);
break;
case 2:
_soundResource2.play();
- setFileHash(0x624C0498, 6, 6);
+ startAnimation(0x624C0498, 6, 6);
NextState(&AsScene1001Door::callback2);
break;
default:
@@ -162,27 +162,27 @@ void AsScene1001Door::handleMessage2000h() {
void AsScene1001Door::callback1() {
switch (getGlobalVar(0x52371C95)) {
case 1:
- setFileHash(0x624C0498, 4, -1);
- _newHashListIndex = 4;
+ startAnimation(0x624C0498, 4, -1);
+ _newStickFrameIndex = 4;
break;
case 2:
- setFileHash(0x624C0498, 1, -1);
- _newHashListIndex = 1;
+ startAnimation(0x624C0498, 1, -1);
+ _newStickFrameIndex = 1;
break;
case 3:
stopAnimation();
setVisible(false);
break;
default:
- setFileHash(0x624C0498, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x624C0498, 0, -1);
+ _newStickFrameIndex = 0;
break;
}
}
void AsScene1001Door::callback2() {
setGlobalVar(0xD217189D, 1);
- setFileHash(0x624C0498, 6, 6);
+ startAnimation(0x624C0498, 6, 6);
NextState(&AsScene1001Door::callback3);
_x = 30;
}
@@ -199,8 +199,8 @@ AsScene1001Hammer::AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor)
_x = 547;
_y = 206;
createSurface(900, 177, 192);
- setFileHash(0x022C90D4, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x022C90D4, -1, -1);
+ _newStickFrameIndex = -2;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1001Hammer::handleMessage);
}
@@ -216,9 +216,9 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
}
break;
case 0x2000:
- setFileHash(0x022C90D4, 1, -1);
+ startAnimation(0x022C90D4, 1, -1);
_soundResource.play(0xE741020A);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
break;
}
return 0;
@@ -230,8 +230,8 @@ AsScene1001Window::AsScene1001Window(NeverhoodEngine *vm)
_x = 320;
_y = 240;
createSurface(100, 66, 129);
- setFileHash(0xC68C2299, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0xC68C2299, 0, -1);
+ _newStickFrameIndex = 0;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1001Window::handleMessage);
}
@@ -245,7 +245,7 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
}
break;
case 0x2001:
- setFileHash(0xC68C2299, 0, -1);
+ startAnimation(0xC68C2299, 0, -1);
break;
case 0x3002:
SetMessageHandler(NULL);
@@ -261,8 +261,8 @@ AsScene1001Lever::AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int1
createSurface(1010, 71, 73);
setDoDeltaX(deltaXType);
- setFileHash(0x04A98C36, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x04A98C36, 0, -1);
+ _newStickFrameIndex = 0;
_x = x;
_y = y;
SetUpdateHandler(&AnimatedSprite::update);
@@ -284,11 +284,11 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
messageResult = 1;
break;
case 0x3002:
- setFileHash(0x04A98C36, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x04A98C36, 0, -1);
+ _newStickFrameIndex = 0;
break;
case 0x480F:
- setFileHash(0x04A98C36, 0, -1);
+ startAnimation(0x04A98C36, 0, -1);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -504,15 +504,15 @@ AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool f
if (flag1) {
createSurface(990, 68, 314);
if (flag2) {
- setFileHash(0x04103090, 0, -1);
+ startAnimation(0x04103090, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447930);
} else {
- setFileHash(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
+ startAnimation(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
}
} else {
createSurface(990, 68, 138);
- setFileHash(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
+ startAnimation(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
}
@@ -538,16 +538,16 @@ uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam &
sendMessage(_parentScene, 0x4806, 0);
SetMessageHandler(&AsScene1002Ring::handleMessage447760);
if (_flag1) {
- setFileHash(0x87502558, 0, -1);
+ startAnimation(0x87502558, 0, -1);
} else {
- setFileHash(0x80DD4010, 0, -1);
+ startAnimation(0x80DD4010, 0, -1);
}
break;
case 0x480F:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
sendMessage(_parentScene, 0x480F, 0);
SetMessageHandler(&AsScene1002Ring::handleMessage447890);
- setFileHash(0x861A2020, 0, -1);
+ startAnimation(0x861A2020, 0, -1);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -564,17 +564,17 @@ uint32 AsScene1002Ring::handleMessage447760(int messageNum, const MessageParam &
switch (messageNum) {
case 0x3002:
if (_flag1) {
- setFileHash(0x78D0A812, 0, -1);
+ startAnimation(0x78D0A812, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447930);
} else {
- setFileHash(0xB85D2A10, 0, -1);
+ startAnimation(0xB85D2A10, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447930);
}
break;
case 0x4807:
sendMessage(_parentScene, 0x4807, 0);
setDoDeltaX(_vm->_rnd->getRandomNumber(1));
- setFileHash(0x8258A030, 0, -1);
+ startAnimation(0x8258A030, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
break;
case 0x482A:
@@ -591,7 +591,7 @@ uint32 AsScene1002Ring::handleMessage447890(int messageNum, const MessageParam &
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- setFileHash(0x04103090, 0, -1);
+ startAnimation(0x04103090, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447930);
break;
case 0x482A:
@@ -610,7 +610,7 @@ uint32 AsScene1002Ring::handleMessage447930(int messageNum, const MessageParam &
case 0x4807:
sendMessage(_parentScene, 0x4807, 0);
setDoDeltaX(_vm->_rnd->getRandomNumber(1));
- setFileHash(0x8258A030, 0, -1);
+ startAnimation(0x8258A030, 0, -1);
SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
break;
case 0x482A:
@@ -632,7 +632,7 @@ uint32 AsScene1002Ring::handleMessage447A00(int messageNum, const MessageParam &
}
break;
case 0x3002:
- setFileHash(0xA85C4011, 0, -1);
+ startAnimation(0xA85C4011, 0, -1);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -730,7 +730,7 @@ uint32 Class505::handleMessage(int messageNum, const MessageParam ¶m, Entity
case 0x2004:
_x = ((Sprite*)sender)->getX() - 98;
_y = ((Sprite*)sender)->getY() - 111;
- setFileHash(0x0422255A, 0, -1);
+ startAnimation(0x0422255A, 0, -1);
setVisible(true);
break;
case 0x3002:
@@ -752,7 +752,7 @@ AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Sce
setClipRect(clipRect);
spriteUpdate448AA0();
_soundResource.load(0xC0C40298);
- setFileHash(0x586C1D48, 0, 0);
+ startAnimation(0x586C1D48, 0, 0);
}
uint32 AsScene1002DoorSpy::handleMessage4489D0(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -776,7 +776,7 @@ uint32 AsScene1002DoorSpy::handleMessage448A60(int messageNum, const MessagePara
uint32 messageResult = handleMessage4489D0(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -790,14 +790,14 @@ void AsScene1002DoorSpy::spriteUpdate448AA0() {
void AsScene1002DoorSpy::sub448AC0() {
setClipRect(_rect);
_parentScene->setSurfacePriority(getSurface(), 800);
- setFileHash(0x586C1D48, 0, 0);
+ startAnimation(0x586C1D48, 0, 0);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
}
void AsScene1002DoorSpy::sub448B10() {
setClipRect(0, 0, 640, 480);
_parentScene->setSurfacePriority(getSurface(), 1200);
- setFileHash(0x586C1D48, 1, -1);
+ startAnimation(0x586C1D48, 1, -1);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage448A60);
NextState(&AsScene1002DoorSpy::sub448AC0);
}
@@ -937,7 +937,7 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
void AsScene1002VenusFlyTrap::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- removeCallbacks();
+ gotoNextState();
}
AnimatedSprite::update();
}
@@ -1025,7 +1025,7 @@ uint32 AsScene1002VenusFlyTrap::handleMessage4482E0(int messageNum, const Messag
uint32 messageResult = handleMessage448000(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -1054,7 +1054,7 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const Messag
}
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 995);
@@ -1068,14 +1068,14 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const Messag
void AsScene1002VenusFlyTrap::sub4484F0() {
setDoDeltaX(2);
- setFileHash(0xC4080034, 0, -1);
+ startAnimation(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
NextState(&AsScene1002VenusFlyTrap::sub448660);
}
void AsScene1002VenusFlyTrap::sub448530() {
- setFileHash(0xC4080034, 0, -1);
+ startAnimation(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
NextState(&AsScene1002VenusFlyTrap::sub448660);
@@ -1083,7 +1083,7 @@ void AsScene1002VenusFlyTrap::sub448530() {
void AsScene1002VenusFlyTrap::sub448560() {
sendMessage(_parentScene, 0x4807, 0);
- setFileHash(0x82292851, 0, -1);
+ startAnimation(0x82292851, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
NextState(&AsScene1002VenusFlyTrap::sub448660);
@@ -1091,20 +1091,20 @@ void AsScene1002VenusFlyTrap::sub448560() {
void AsScene1002VenusFlyTrap::sub4485B0() {
setDoDeltaX(1);
- setFileHash(0x86A82A11, 0, -1);
+ startAnimation(0x86A82A11, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
NextState(&AsScene1002VenusFlyTrap::sub4485F0);
}
void AsScene1002VenusFlyTrap::sub4485F0() {
- setFileHash(0xB5A86034, 0, -1);
+ startAnimation(0xB5A86034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
}
void AsScene1002VenusFlyTrap::sub448620() {
- setFileHash(0x31303094, 0, -1);
+ startAnimation(0x31303094, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(NULL);
NextState(&AsScene1002VenusFlyTrap::sub448720);
@@ -1112,7 +1112,7 @@ void AsScene1002VenusFlyTrap::sub448620() {
}
void AsScene1002VenusFlyTrap::sub448660() {
- setFileHash(0xC8204250, 0, -1);
+ startAnimation(0xC8204250, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update447FB0);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
if (_flag) {
@@ -1133,14 +1133,14 @@ void AsScene1002VenusFlyTrap::sub448660() {
}
void AsScene1002VenusFlyTrap::sub448720() {
- setFileHash(0x152920C4, 0, -1);
+ startAnimation(0x152920C4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
NextState(&AsScene1002VenusFlyTrap::sub448750);
}
void AsScene1002VenusFlyTrap::sub448750() {
- setFileHash(0x84001117, 0, -1);
+ startAnimation(0x84001117, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
NextState(&AsScene1002VenusFlyTrap::sub448660);
@@ -1154,7 +1154,7 @@ void AsScene1002VenusFlyTrap::sub448780() {
setDoDeltaX(_x > 320 ? 1 : 0);
}
sendMessage(_klayman, 0x2001, 0);
- setFileHash(0x8C2C80D4, 0, -1);
+ startAnimation(0x8C2C80D4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
NextState(&AsScene1002VenusFlyTrap::sub448620);
@@ -1168,8 +1168,8 @@ Class506::Class506(NeverhoodEngine *vm)
_x = 320;
_y = 240;
if (getGlobalVar(0x8306F218)) {
- setFileHash(0x004A4495, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x004A4495, -1, -1);
+ _newStickFrameIndex = -2;
} else {
setVisible(false);
}
@@ -1207,21 +1207,21 @@ uint32 Class506::handleMessage449210(int messageNum, const MessageParam ¶m,
uint32 messageResult = handleMessage4491B0(messageNum, param, sender);
switch (messageResult) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
}
void Class506::sub449250() {
- setFileHash(0x004A4495, 0, -1);
+ startAnimation(0x004A4495, 0, -1);
SetMessageHandler(&Class506::handleMessage4491B0);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
setVisible(true);
}
void Class506::sub449280() {
- setFileHash(0x004A4495, -1, -1);
+ startAnimation(0x004A4495, -1, -1);
_playBackwards = true;
SetMessageHandler(&Class506::handleMessage449210);
NextState(&Class506::sub4492C0);
@@ -1244,15 +1244,15 @@ Class478::Class478(NeverhoodEngine *vm, Klayman *klayman)
void Class478::update() {
if (_klayman->getCurrAnimFileHash() == 0x3A292504) {
- setFileHash(0xBA280522, _frameIndex, -1);
- _newHashListIndex = _klayman->getFrameIndex();
+ startAnimation(0xBA280522, _currFrameIndex, -1);
+ _newStickFrameIndex = _klayman->getFrameIndex();
setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
} else if (_klayman->getCurrAnimFileHash() == 0x122D1505) {
- setFileHash(0x1319150C, _frameIndex, -1);
- _newHashListIndex = _klayman->getFrameIndex();
+ startAnimation(0x1319150C, _currFrameIndex, -1);
+ _newStickFrameIndex = _klayman->getFrameIndex();
setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
@@ -1275,8 +1275,8 @@ Class479::Class479(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman)
void Class479::update() {
if (_klayman->getCurrAnimFileHash() == 0xAC20C012 && _klayman->getFrameIndex() < 50) {
- setFileHash(0x9820C913, _klayman->getFrameIndex(), -1);
- _newHashListIndex = _klayman->getFrameIndex();
+ startAnimation(0x9820C913, _klayman->getFrameIndex(), -1);
+ _newStickFrameIndex = _klayman->getFrameIndex();
setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
@@ -1606,7 +1606,7 @@ uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam &pa
}
break;
case 0x2002:
- setFileHash(0xEB312C11, 0, -1);
+ startAnimation(0xEB312C11, 0, -1);
setVisible(true);
break;
case 0x3002:
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 52c9d92..1efd7e3 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -348,8 +348,8 @@ AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentSce
_y = 240;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1105TeddyBear::handleMessage);
- setFileHash(0x65084002, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x65084002, 0, -1);
+ _newStickFrameIndex = 0;
setVisible(false);
_needRefresh = true;
updatePosition();
@@ -362,10 +362,10 @@ uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x2002:
if (getGlobalVar(0x610210B7)) {
- setFileHash(0x6B0C0432, 0, -1);
+ startAnimation(0x6B0C0432, 0, -1);
_soundResource1.play();
} else {
- setFileHash(0x65084002, 0, -1);
+ startAnimation(0x65084002, 0, -1);
_soundResource2.play();
}
break;
@@ -706,10 +706,10 @@ uint32 Scene1109::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (param.asInteger()) {
setRectList(0x004B63A8);
- _klayman->setKlaymanTable3();
+ _klayman->setKlaymanIdleTable3();
} else {
setRectList(0x004B6398);
- _klayman->setKlaymanTable1();
+ _klayman->setKlaymanIdleTable1();
}
break;
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 25abf95..fc28917 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -250,18 +250,18 @@ uint32 Class466::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Class466::sub40D340() {
- setFileHash(0x928F0C10, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x928F0C10, 0, -1);
+ _newStickFrameIndex = 0;
}
void Class466::sub40D360() {
- setFileHash(0x928F0C10, 1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x928F0C10, 1, -1);
+ _newStickFrameIndex = -2;
}
void Class466::sub40D380() {
- setFileHash(0x928F0C10, 15, -1);
- _newHashListIndex = -2;
+ startAnimation(0x928F0C10, 15, -1);
+ _newStickFrameIndex = -2;
}
AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag)
@@ -272,10 +272,10 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
_y = 240;
SetUpdateHandler(&AsScene1201RightDoor::update);
SetMessageHandler(&AsScene1201RightDoor::handleMessage);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
if (flag) {
- setFileHash(0xD088AC30, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0xD088AC30, -1, -1);
+ _newStickFrameIndex = -2;
_countdown = 25;
} else {
stopAnimation();
@@ -294,7 +294,7 @@ uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam &p
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4829:
sub40D7E0();
@@ -304,14 +304,14 @@ uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam &p
}
void AsScene1201RightDoor::sub40D7E0() {
- setFileHash(0xD088AC30, 0, -1);
- _newHashListIndex = -2;
+ startAnimation(0xD088AC30, 0, -1);
+ _newStickFrameIndex = -2;
setVisible(true);
_soundResource.play(calcHash("fxDoorOpen20"));
}
void AsScene1201RightDoor::sub40D830() {
- setFileHash(0xD088AC30, -1, -1);
+ startAnimation(0xD088AC30, -1, -1);
_playBackwards = true;
setVisible(true);
_soundResource.play(calcHash("fxDoorClose20"));
@@ -339,13 +339,13 @@ uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity
case 0x2006:
_x = 436;
_y = 339;
- setFileHash(0xA060C599, 0, -1);
+ startAnimation(0xA060C599, 0, -1);
setVisible(true);
break;
case 0x3002:
stopAnimation();
setVisible(false);
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -402,7 +402,7 @@ uint32 AsScene1201TntMan::handleMessage40CCD0(int messageNum, const MessageParam
uint32 messageResult = AsScene1201TntMan::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -413,13 +413,13 @@ void AsScene1201TntMan::spriteUpdate40CD10() {
}
void AsScene1201TntMan::sub40CD30() {
- setFileHash(0x654913D0, 0, -1);
+ startAnimation(0x654913D0, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
SetSpriteCallback(NULL);
}
void AsScene1201TntMan::sub40CD60() {
- setFileHash(0x356803D0, 0, -1);
+ startAnimation(0x356803D0, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage40CCD0);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
NextState(&AsScene1201TntMan::sub40CD30);
@@ -429,10 +429,10 @@ void AsScene1201TntMan::sub40CD90() {
// TODO Sound1ChList_addSoundResource(0x01D00560, 0x4B044624, true);
// TODO Sound1ChList_playLooping(0x4B044624);
_flag = true;
- setFileHash(0x85084190, 0, -1);
+ startAnimation(0x85084190, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
SetSpriteCallback(&AsScene1201TntMan::spriteUpdate40CD10);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
}
Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
@@ -442,7 +442,7 @@ Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
SetUpdateHandler(&Class465::update);
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(&Class465::spriteUpdate40D150);
- setFileHash(0x828C0411, 0, -1);
+ startAnimation(0x828C0411, 0, -1);
setVisible(false);
}
@@ -499,7 +499,7 @@ AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
void AsScene1201Match::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- removeCallbacks();
+ gotoNextState();
}
updateAnim();
handleSpriteUpdate();
@@ -522,7 +522,7 @@ uint32 AsScene1201Match::handleMessage40C320(int messageNum, const MessageParam
uint32 messageResult = handleMessage40C2D0(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -544,7 +544,7 @@ uint32 AsScene1201Match::handleMessage40C360(int messageNum, const MessageParam
}
void AsScene1201Match::sub40C3E0() {
- setFileHash(0x00842374, 0, -1);
+ startAnimation(0x00842374, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C320);
if (_status == 0) {
NextState(&AsScene1201Match::sub40C420);
@@ -557,15 +557,15 @@ void AsScene1201Match::sub40C420() {
setGlobalVar(0x0112090A, 2);
_x -= 199;
_y += 119;
- setFileHash(0x018D0240, 0, -1);
+ startAnimation(0x018D0240, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C320);
NextState(&AsScene1201Match::sub40C4F0);
}
void AsScene1201Match::sub40C470() {
- setFileHash(0x00842374, 0, -1);
+ startAnimation(0x00842374, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C2D0);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
if (_status != 0) {
_countdown = 36;
_status--;
@@ -574,18 +574,18 @@ void AsScene1201Match::sub40C470() {
}
void AsScene1201Match::sub40C4C0() {
- setFileHash(0x00842374, 0, -1);
+ startAnimation(0x00842374, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C360);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
void AsScene1201Match::sub40C4F0() {
setDoDeltaX(1);
_x = 403;
_y = 337;
- setFileHash(0x00842374, 0, -1);
+ startAnimation(0x00842374, 0, -1);
SetMessageHandler(&AsScene1201Match::handleMessage40C360);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman)
@@ -607,7 +607,7 @@ void AsScene1201Creature::update() {
if (_flag != oldFlag)
sub40C8E0();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
- removeCallbacks();
+ gotoNextState();
}
updateAnim();
handleSpriteUpdate();
@@ -643,7 +643,7 @@ uint32 AsScene1201Creature::handleMessage40C7B0(int messageNum, const MessagePar
}
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -660,7 +660,7 @@ uint32 AsScene1201Creature::handleMessage40C830(int messageNum, const MessagePar
}
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -670,7 +670,7 @@ void AsScene1201Creature::sub40C8E0() {
_countdown3--;
if (_countdown3 == 0)
_countdown3 = 3;
- setFileHash(0x08081513, 0, -1);
+ startAnimation(0x08081513, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
NextState(&AsScene1201Creature::sub40C930);
_countdown1 = 36;
@@ -678,32 +678,32 @@ void AsScene1201Creature::sub40C8E0() {
void AsScene1201Creature::sub40C930() {
if (!_flag) {
- setFileHash(0xCA287133, 0, -1);
+ startAnimation(0xCA287133, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C7B0);
NextState(&AsScene1201Creature::sub40C8E0);
}
}
void AsScene1201Creature::sub40C960() {
- setFileHash(0x08081513, 0, -1);
+ startAnimation(0x08081513, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
NextState(&AsScene1201Creature::sub40C9E0);
_countdown1 = 48;
}
void AsScene1201Creature::sub40C990() {
- setFileHash2(0x0B6E13FB, 0x01084280, 0);
+ startAnimationByHash(0x0B6E13FB, 0x01084280, 0);
}
void AsScene1201Creature::sub40C9B0() {
- setFileHash(0xCA287133, 0, -1);
+ startAnimation(0xCA287133, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C830);
NextState(&AsScene1201Creature::sub40C8E0);
_countdown1 = 0;
}
void AsScene1201Creature::sub40C9E0() {
- setFileHash(0x5A201453, 0, -1);
+ startAnimation(0x5A201453, 0, -1);
SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
_countdown1 = 0;
}
@@ -715,12 +715,12 @@ AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
_y = 240;
createSurface(800, 55, 199);
if (_klayman->getX() < 100) {
- setFileHash(0x508A111B, 0, -1);
- _newHashListIndex = -2;
+ startAnimation(0x508A111B, 0, -1);
+ _newStickFrameIndex = -2;
_soundResource.play(calcHash("fxDoorOpen03"));
} else {
- setFileHash(0x508A111B, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x508A111B, -1, -1);
+ _newStickFrameIndex = -2;
}
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1201LeftDoor::handleMessage);
@@ -737,9 +737,9 @@ uint32 AsScene1201LeftDoor::handleMessage(int messageNum, const MessageParam &pa
}
void AsScene1201LeftDoor::sub40D590() {
- setFileHash(0x508A111B, -1, -1);
+ startAnimation(0x508A111B, -1, -1);
_playBackwards = true;
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1076,20 +1076,20 @@ uint32 AsScene1202TntItem::handleMessage454060(int messageNum, const MessagePara
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
}
void AsScene1202TntItem::sub4540A0() {
- setFileHash(kScene1202FileHashes[_index], 0, -1);
+ startAnimation(kScene1202FileHashes[_index], 0, -1);
SetMessageHandler(&AsScene1202TntItem::handleMessage453FE0);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
void AsScene1202TntItem::sub4540D0() {
- setFileHash(kScene1202FileHashes[_index], 0, -1);
+ startAnimation(kScene1202FileHashes[_index], 0, -1);
SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
NextState(&AsScene1202TntItem::sub454100);
}
@@ -1097,7 +1097,7 @@ void AsScene1202TntItem::sub4540D0() {
void AsScene1202TntItem::sub454100() {
_x = kScene1202Points[_index2].x;
_y = kScene1202Points[_index2].y;
- setFileHash(kScene1202FileHashes[_index], 6, -1);
+ startAnimation(kScene1202FileHashes[_index], 6, -1);
SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
NextState(&AsScene1202TntItem::sub454160);
_playBackwards = true;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index cb5ed15..38dd356 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -296,11 +296,11 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1302Bridge::handleMessage);
if (!getGlobalVar(0x13206309)) {
- setFileHash(0x88148150, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x88148150, 0, -1);
+ _newStickFrameIndex = 0;
} else {
- setFileHash(0x88148150, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x88148150, -1, -1);
+ _newStickFrameIndex = -2;
}
_soundResource1.load(0x68895082);
_soundResource2.load(0x689BD0C1);
@@ -310,7 +310,7 @@ uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
stLowerBridge();
@@ -323,22 +323,22 @@ uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶
}
void AsScene1302Bridge::stLowerBridge() {
- setFileHash(0x88148150, 0, -1);
+ startAnimation(0x88148150, 0, -1);
NextState(&AsScene1302Bridge::cbLowerBridgeEvent);
_soundResource2.play();
}
void AsScene1302Bridge::stRaiseBridge() {
- setFileHash(0x88148150, 7, -1);
+ startAnimation(0x88148150, 7, -1);
_playBackwards = true;
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
_soundResource1.play();
}
void AsScene1302Bridge::cbLowerBridgeEvent() {
sendMessage(_parentScene, 0x2032, 0);
- setFileHash(0x88148150, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x88148150, -1, -1);
+ _newStickFrameIndex = -2;
}
SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
@@ -591,7 +591,7 @@ AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1303Balloon::handleMessage);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
- setFileHash(0x800278D2, 0, -1);
+ startAnimation(0x800278D2, 0, -1);
}
uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -627,7 +627,7 @@ uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam &p
}
void AsScene1303Balloon::stPopBalloon() {
- setFileHash(0xAC004CD0, 0, -1);
+ startAnimation(0xAC004CD0, 0, -1);
SetMessageHandler(&AsScene1303Balloon::hmBalloonPopped);
}
@@ -799,8 +799,8 @@ AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene
_x = 320;
_y = 240;
createSurface1(0x043B0270, 100);
- setFileHash(0x043B0270, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x043B0270, 0, -1);
+ _newStickFrameIndex = 0;
SetMessageHandler(&AsScene1306Elevator::handleMessage);
_soundResource1.load(0x1C100E83);
_soundResource2.load(0x1C08CEC5);
@@ -812,7 +812,7 @@ void AsScene1306Elevator::update() {
stGoingDown();
}
AnimatedSprite::update();
- if (_frameIndex == 7) {
+ if (_currFrameIndex == 7) {
_soundResource3.play();
_asElevatorDoor->setVisible(false);
}
@@ -820,7 +820,7 @@ void AsScene1306Elevator::update() {
void AsScene1306Elevator::upGoingDown() {
AnimatedSprite::update();
- if (_frameIndex == 5) {
+ if (_currFrameIndex == 5) {
_asElevatorDoor->setVisible(true);
}
}
@@ -834,7 +834,7 @@ uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam &pa
messageResult = _isUp ? 1 : 0;
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
if (_isDown)
@@ -848,7 +848,7 @@ void AsScene1306Elevator::stGoingUp() {
setVisible(true);
_isDown = false;
SetUpdateHandler(&AsScene1306Elevator::update);
- setFileHash(0x043B0270, 0, -1);
+ startAnimation(0x043B0270, 0, -1);
NextState(&AsScene1306Elevator::cbGoingUpEvent);
_soundResource1.play();
}
@@ -866,7 +866,7 @@ void AsScene1306Elevator::stGoingDown() {
SetUpdateHandler(&AsScene1306Elevator::upGoingDown);
_isUp = false;
setVisible(true);
- setFileHash(0x043B0270, -1, -1);
+ startAnimation(0x043B0270, -1, -1);
_playBackwards = true;
NextState(&AsScene1306Elevator::cbGoingDownEvent);
_soundResource2.play();
@@ -902,7 +902,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 19, 1100, 359, 445, 0x9148A011);
_asElevatorDoor = insertSprite<AnimatedSprite>(0x043B0270, 90, 320, 240);
- _asElevatorDoor->setFileHash(0x043B0270, 6, -1);
+ _asElevatorDoor->startAnimation(0x043B0270, 6, -1);
_asElevatorDoor->setNewHashListIndex(6);
_asElevator = insertSprite<AsScene1306Elevator>(this, _asElevatorDoor);
@@ -987,10 +987,10 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (param.asInteger() != 0) {
setRectList(0x004AFD28);
- _klayman->setKlaymanTable3();
+ _klayman->setKlaymanIdleTable3();
} else {
setRectList(0x004AFD18);
- _klayman->setKlaymanTable1();
+ _klayman->setKlaymanIdleTable1();
}
break;
case 0x480B:
@@ -1134,7 +1134,7 @@ AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint ind
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1307Key::handleMessage);
- setFileHash(fileHashes[0], 0, -1);
+ startAnimation(fileHashes[0], 0, -1);
_soundResource1.load(0xDC4A1280);
_soundResource2.load(0xCC021233);
@@ -1199,9 +1199,9 @@ void AsScene1307Key::suInsertKey() {
void AsScene1307Key::suMoveKey() {
if (_pointIndex < kAsScene1307KeyFrameIndicesCount) {
- _frameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
- _x = _prevX + (_deltaX * _frameIndex) / kAsScene1307KeyDivValue;
- _y = _prevY + (_deltaY * _frameIndex) / kAsScene1307KeyDivValue;
+ _currFrameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
+ _x = _prevX + (_deltaX * _currFrameIndex) / kAsScene1307KeyDivValue;
+ _y = _prevY + (_deltaY * _currFrameIndex) / kAsScene1307KeyDivValue;
processDelta();
_pointIndex++;
} else {
@@ -1216,7 +1216,7 @@ void AsScene1307Key::stRemoveKey() {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
_pointIndex = 0;
SetSpriteCallback(&AsScene1307Key::suRemoveKey);
- setFileHash(fileHashes[0], 0, -1);
+ startAnimation(fileHashes[0], 0, -1);
_soundResource2.play();
}
@@ -1225,7 +1225,7 @@ void AsScene1307Key::stInsertKey() {
sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4]);
setClipRect(_clipRects[getSubVar(0xA010B810, _index) % 4]);
SetSpriteCallback(&AsScene1307Key::suInsertKey);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
}
void AsScene1307Key::stMoveKey() {
@@ -1241,24 +1241,24 @@ void AsScene1307Key::stMoveKey() {
} else {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
_pointIndex = 0;
- _frameIndex = 0;
+ _currFrameIndex = 0;
_deltaX = newX - _x;
_deltaY = newY - _y;
SetSpriteCallback(&AsScene1307Key::suMoveKey);
- setFileHash(fileHashes[0], 0, -1);
+ startAnimation(fileHashes[0], 0, -1);
}
}
void AsScene1307Key::stUnlock() {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
- setFileHash(fileHashes[1], 0, -1);
- _newHashListIndex = -2;
+ startAnimation(fileHashes[1], 0, -1);
+ _newStickFrameIndex = -2;
}
void AsScene1307Key::stInsert() {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
- setFileHash(fileHashes[2], 0, -1);
- _newHashListIndex = -2;
+ startAnimation(fileHashes[2], 0, -1);
+ _newStickFrameIndex = -2;
}
Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1440,7 +1440,7 @@ uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
sub455470();
@@ -1453,7 +1453,7 @@ uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Class549::sub455470() {
- setFileHash(0xBA0AE050, 0, -1);
+ startAnimation(0xBA0AE050, 0, -1);
setVisible(true);
NextState(&Class549::hide);
_soundResource.play(calcHash("fxDoorOpen38"));
@@ -1466,7 +1466,7 @@ void Class549::hide() {
}
void Class549::sub4554F0() {
- setFileHash(0xBA0AE050, -1, -1);
+ startAnimation(0xBA0AE050, -1, -1);
_playBackwards = true;
setVisible(true);
NextState(&Class549::sub455550);
@@ -1491,14 +1491,14 @@ uint32 Class592::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
}
void Class592::sub455710() {
- setFileHash(0x6238B191, 0, -1);
+ startAnimation(0x6238B191, 0, -1);
NextState(&Class592::sub455740);
_x = 580;
_y = 383;
@@ -1528,20 +1528,20 @@ uint32 Class593::handleMessage(int messageNum, const MessageParam ¶m, Entity
case 0x2003:
sub455920();
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
}
void Class593::sub4558F0() {
- setFileHash(0x80180A10, 0, -1);
+ startAnimation(0x80180A10, 0, -1);
setVisible(false);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
}
void Class593::sub455920() {
- setFileHash(0x80180A10, -1, -1);
+ startAnimation(0x80180A10, -1, -1);
_playBackwards = true;
NextState(&Class593::sub455950);
}
@@ -1568,7 +1568,7 @@ Class513::Class513(NeverhoodEngine *vm)
_x = 286;
_y = 429;
createSurface1(0xA282C472, 100);
- setFileHash(0xA282C472, 0, -1);
+ startAnimation(0xA282C472, 0, -1);
}
uint32 Class513::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 42dfdb3..ecf6326 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -144,7 +144,7 @@ Class525::Class525(NeverhoodEngine *vm)
_y = 217;
SetUpdateHandler(&Class525::update4662A0);
SetMessageHandler(&Class525::handleMessage466320);
- setFileHash(0x4C210500, 0, -1);
+ startAnimation(0x4C210500, 0, -1);
}
Class525::~Class525() {
@@ -206,18 +206,18 @@ uint32 Class525::handleMessage4663C0(int messageNum, const MessageParam ¶m,
}
void Class525::sub466420() {
- setFileHash(0x4C240100, 0, -1);
+ startAnimation(0x4C240100, 0, -1);
_soundResource1.play(0x4A30063F);
}
void Class525::sub466460() {
// TODO Sound1ChList_deleteSoundByHash(0x4A116437);
_soundResource1.play(0x4A120435);
- setFileHash(0x4C210500, 0, -1);
+ startAnimation(0x4C210500, 0, -1);
}
void Class525::sub4664B0() {
- setFileHash(0x6C210810, 0, -1);
+ startAnimation(0x6C210810, 0, -1);
SetMessageHandler(&Class525::handleMessage4663C0);
SetUpdateHandler(&Class525::update466300);
}
@@ -231,7 +231,7 @@ Class526::Class526(NeverhoodEngine *vm, Sprite *class525)
_y = 433;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class526::handleMessage);
- setFileHash(0xA282C472, 0, -1);
+ startAnimation(0xA282C472, 0, -1);
}
uint32 Class526::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -265,7 +265,7 @@ void Class526::spriteUpdate466720() {
}
void Class526::sub466770() {
- setFileHash(0x34880040, 0, -1);
+ startAnimation(0x34880040, 0, -1);
SetSpriteCallback(&Class526::spriteUpdate466720);
}
@@ -278,7 +278,7 @@ Class527::Class527(NeverhoodEngine *vm, Sprite *class526)
_y = 433;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class527::handleMessage);
- setFileHash(0x461A1490, 0, -1);
+ startAnimation(0x461A1490, 0, -1);
}
uint32 Class527::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -303,7 +303,7 @@ void Class527::spriteUpdate466920() {
}
void Class527::sub466970() {
- setFileHash(0x103B8020, 0, -1);
+ startAnimation(0x103B8020, 0, -1);
SetSpriteCallback(&Class527::spriteUpdate466920);
}
@@ -315,10 +315,10 @@ Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
createSurface1(0x04551900, 100);
SetUpdateHandler(&Class528::update);
SetMessageHandler(&Class528::handleMessage);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
if (flag) {
_flag = true;
- setFileHash(0x04551900, -1,- 1);
+ startAnimation(0x04551900, -1,- 1);
_countdown = 48;
} else {
_flag = false;
@@ -344,7 +344,7 @@ uint32 Class528::handleMessage(int messageNum, const MessageParam ¶m, Entity
messageResult = _flag ? 1 : 0;
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
_countdown = 168;
@@ -358,15 +358,15 @@ uint32 Class528::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class528::sub466BF0() {
_flag = true;
setVisible(true);
- setFileHash(0x04551900, 0, -1);
- _newHashListIndex = -2;
+ startAnimation(0x04551900, 0, -1);
+ _newStickFrameIndex = -2;
_soundResource.play(calcHash("fxDoorOpen24"));
}
void Class528::sub466C50() {
_flag = false;
setVisible(true);
- setFileHash(0x04551900, -1, -1);
+ startAnimation(0x04551900, -1, -1);
_soundResource.play(calcHash("fxDoorClose24"));
_playBackwards = true;
NextState(&Class528::sub466CB0);
@@ -392,7 +392,7 @@ Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Spr
_class489Item = &kClass489Items[getGlobalVar(0x04A105B3)];
// TODO createSurface3(990, dword_4B26D8);
createSurface(990, 640, 480); //TODO: Remeove once the line above is done
- setFileHash(0x10E3042B, 0, -1);
+ startAnimation(0x10E3042B, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class489::handleMessage);
_x = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
@@ -504,7 +504,7 @@ uint32 Class489::handleMessage434B20(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -585,12 +585,12 @@ void Class489::sub434D80() {
void Class489::sub434DD0() {
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage);
- setFileHash(0x10E3042B, 0, -1);
+ startAnimation(0x10E3042B, 0, -1);
}
void Class489::sub434DF0() {
_remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
- setFileHash(0x14A10137, 0, -1);
+ startAnimation(0x14A10137, 0, -1);
SetSpriteCallback(&Class489::spriteUpdate434B60);
SetMessageHandler(&Class489::handleMessage);
_soundResource2.play(0xEC008474);
@@ -599,18 +599,18 @@ void Class489::sub434DF0() {
void Class489::sub434E60() {
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage434B20);
- setFileHash(0x80C32213, 0, -1);
+ startAnimation(0x80C32213, 0, -1);
NextState(&Class489::sub434E90);
}
void Class489::sub434E90() {
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage4348E0);
- setFileHash(0xD23B207F, 0, -1);
+ startAnimation(0xD23B207F, 0, -1);
}
void Class489::sub434EC0() {
- setFileHash(0x50A80517, 0, -1);
+ startAnimation(0x50A80517, 0, -1);
SetMessageHandler(&Class489::handleMessage434B20);
SetSpriteCallback(NULL);
NextState(&Class489::sub434F40);
@@ -622,13 +622,13 @@ void Class489::sub434EC0() {
void Class489::sub434F40() {
sendMessage(_parentScene, 0x480F, 0);
- setFileHash(0xD833207F, 0, -1);
+ startAnimation(0xD833207F, 0, -1);
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage4348E0);
}
void Class489::sub434F80() {
- setFileHash(0x50A94417, 0, -1);
+ startAnimation(0x50A94417, 0, -1);
SetSpriteCallback(NULL);
SetMessageHandler(&Class489::handleMessage434B20);
NextState(&Class489::sub434E90);
@@ -639,7 +639,7 @@ void Class489::sub434F80() {
void Class489::sub434FF0() {
_remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
- setFileHash(0x22CB4A33, 0, -1);
+ startAnimation(0x22CB4A33, 0, -1);
SetSpriteCallback(&Class489::spriteUpdate434B60);
SetMessageHandler(&Class489::handleMessage434B20);
NextState(&Class489::sub434DF0);
@@ -650,7 +650,7 @@ void Class489::sub435040() {
setGlobalVar(0x04A10F33, 0);
SetSpriteCallback(&Class489::sub434D80);
SetMessageHandler(&Sprite::handleMessage);
- setFileHash(0x708D4712, 0, -1);
+ startAnimation(0x708D4712, 0, -1);
_soundResource3.play();
}
@@ -825,16 +825,16 @@ Class482::Class482(NeverhoodEngine *vm, Scene *parentScene, int which)
_x = 279;
_y = 270;
if (which == 2) {
- setFileHash(0x20060259, 0, -1);
+ startAnimation(0x20060259, 0, -1);
_soundResource1.play(0x419014AC);
_soundResource2.load(0x61901C29);
} else if (which == 1) {
- setFileHash(0x210A0213, 0, -1);
+ startAnimation(0x210A0213, 0, -1);
_soundResource1.play(0x41809C6C);
} else {
- setFileHash(0x20060259, 0, -1);
+ startAnimation(0x20060259, 0, -1);
_soundResource2.load(0x61901C29);
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
}
}
@@ -843,12 +843,12 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x2002:
_soundResource2.play();
- setFileHash(0x20060259, -1, -1);
+ startAnimation(0x20060259, -1, -1);
_playBackwards = true;
NextState(&Class482::sub428530);
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -1142,7 +1142,7 @@ void AsScene1407Mouse::suWalkTo() {
void AsScene1407Mouse::upGoThroughHole() {
if (_countdown != 0 && (--_countdown == 0)) {
SetUpdateHandler(&AnimatedSprite::update);
- removeCallbacks();
+ gotoNextState();
}
AnimatedSprite::update();
}
@@ -1178,7 +1178,7 @@ uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m
}
break;
case 0x1019:
- removeCallbacks();
+ gotoNextState();
break;
case 0x2001:
{
@@ -1207,7 +1207,7 @@ uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m
void AsScene1407Mouse::stIdleLookAtGoodHole() {
setDoDeltaX(kScene1407MouseHoles[kScene1407MouseSections[_currSectionIndex].goodHoleIndex].x < _x ? 1 : 0);
- setFileHash(0x72215194, 0, -1);
+ startAnimation(0x72215194, 0, -1);
SetSpriteCallback(NULL);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
}
@@ -1215,7 +1215,7 @@ void AsScene1407Mouse::stIdleLookAtGoodHole() {
void AsScene1407Mouse::stWalkToDest() {
if (_walkDestX != _x) {
setDoDeltaX(_walkDestX < _x ? 1 : 0);
- setFileHash(0x22291510, 0, -1);
+ startAnimation(0x22291510, 0, -1);
SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
NextState(&AsScene1407Mouse::stIdleLookAtGoodHole);
@@ -1224,14 +1224,14 @@ void AsScene1407Mouse::stWalkToDest() {
void AsScene1407Mouse::stWalkToHole() {
setDoDeltaX(_walkDestX < _x ? 1 : 0);
- setFileHash(0x22291510, 0, -1);
+ startAnimation(0x22291510, 0, -1);
SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
NextState(&AsScene1407Mouse::stGoThroughHole);
}
void AsScene1407Mouse::stGoThroughHole() {
- setFileHash(0x72215194, 0, -1);
+ startAnimation(0x72215194, 0, -1);
SetSpriteCallback(NULL);
SetMessageHandler(NULL);
SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
@@ -1603,8 +1603,8 @@ AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, ui
debug("getSubVar(0x0C65F80B, _index) = %d", getSubVar(0x0C65F80B, _index));
- setFileHash(0x844B805C, getSubVar(0x0C65F80B, _index), -1);
- _newHashListIndex = (int16)getSubVar(0x0C65F80B, _index);
+ startAnimation(0x844B805C, getSubVar(0x0C65F80B, _index), -1);
+ _newStickFrameIndex = (int16)getSubVar(0x0C65F80B, _index);
}
void AsScene1405Tile::update() {
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index c510601..44c8721 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -200,7 +200,7 @@ Class521::Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
_pathPoints = NULL;
_rectList = NULL;
- setFileHash(0xD4220027, 0, -1);
+ startAnimation(0xD4220027, 0, -1);
setDoDeltaX(getGlobalVar(0x21E60190));
}
@@ -372,11 +372,11 @@ uint32 Class521::handleMessage45CC30(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x100D:
if (_flag10F && param.asInteger() == 0x025424A2) {
- removeCallbacks();
+ gotoNextState();
}
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -408,7 +408,7 @@ void Class521::sub45CD00() {
_rectList = NULL;
SetMessageHandler(&Class521::handleMessage45CC30);
NextState(&Class521::sub45CFE0);
- setFileHash(0x35698F78, 0, -1);
+ startAnimation(0x35698F78, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update45C790);
FinalizeState(&Class521::sub45D040);
@@ -436,17 +436,17 @@ void Class521::sub45CDC0() {
void Class521::sub45CE10() {
if (_flag10E && !_flag113 && !_flag10F) {
- removeCallbacks();
+ gotoNextState();
_flag114 = 0;
_flag113 = 1;
- setFileHash(0x192ADD30, 0, -1);
+ startAnimation(0x192ADD30, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45CFE0);
} else if (!_flag10E && _steps && _flag113) {
- removeCallbacks();
+ gotoNextState();
_flag113 = 0;
- setFileHash(0x9966B138, 0, -1);
+ startAnimation(0x9966B138, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45D100);
@@ -464,10 +464,10 @@ void Class521::sub45CE10() {
_flag11A = index < _rectList->size();
}
if (flag) {
- removeCallbacks();
+ gotoNextState();
sub45D0A0();
} else if (_newMoveDirection != _currMoveDirection && _flag114 && !_flag10F) {
- removeCallbacks();
+ gotoNextState();
_currMoveDirection = _newMoveDirection;
sub45D100();
}
@@ -475,21 +475,21 @@ void Class521::sub45CE10() {
}
void Class521::sub45CF80() {
- setFileHash(0xA86A9538, 0, -1);
+ startAnimation(0xA86A9538, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45CFE0);
}
void Class521::sub45CFB0() {
- setFileHash(0xA86A9538, -1, -1);
+ startAnimation(0xA86A9538, -1, -1);
_playBackwards = true;
SetMessageHandler(&Class521::handleMessage45CCA0);
SetUpdateHandler(&Class521::update);
}
void Class521::sub45CFE0() {
- setFileHash(0x35698F78, 0, -1);
+ startAnimation(0x35698F78, 0, -1);
SetMessageHandler(&Class521::handleMessage);
SetUpdateHandler(&Class521::update45C790);
FinalizeState(&Class521::sub45D040);
@@ -505,7 +505,7 @@ void Class521::sub45D040() {
}
void Class521::sub45D050() {
- setFileHash(0xB579A77C, 0, -1);
+ startAnimation(0xB579A77C, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45CFE0);
@@ -515,8 +515,8 @@ void Class521::sub45D050() {
void Class521::sub45D0A0() {
_flag10F = 1;
- removeCallbacks();
- setFileHash(0x9C220DA4, 0, -1);
+ gotoNextState();
+ startAnimation(0x9C220DA4, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
FinalizeState(&Class521::sub45D0E0);
@@ -531,21 +531,21 @@ void Class521::sub45D0E0() {
void Class521::sub45D100() {
_flag114 = 1;
if (_currMoveDirection == 1) {
- setFileHash(0xD4AA03A4, 0, -1);
+ startAnimation(0xD4AA03A4, 0, -1);
} else if (_currMoveDirection == 3) {
- setFileHash(0xD00A1364, 0, -1);
+ startAnimation(0xD00A1364, 0, -1);
} else if ((_currMoveDirection == 2 && _doDeltaX) || (_currMoveDirection == 4 && !_doDeltaX)) {
sub45D180();
} else {
- setFileHash(0xD4220027, 0, -1);
+ startAnimation(0xD4220027, 0, -1);
}
setGlobalVar(0x21E60190, _doDeltaX ? 1 : 0);
}
void Class521::sub45D180() {
_flag10F = 1;
- removeCallbacks();
- setFileHash(0xF46A0324, 0, -1);
+ gotoNextState();
+ startAnimation(0xF46A0324, 0, -1);
_value112 = 0;
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
@@ -573,9 +573,9 @@ void Class521::moveToNextPoint() {
sub45D350();
} else {
if (_steps == 0) {
- removeCallbacks();
+ gotoNextState();
_flag113 = 0;
- setFileHash(0x9966B138, 0, -1);
+ startAnimation(0x9966B138, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45D100);
@@ -588,19 +588,19 @@ void Class521::moveToNextPoint() {
}
void Class521::sub45D350() {
- removeCallbacks();
+ gotoNextState();
_flag10F = 1;
_flag10E = 1;
- setFileHash(0x192ADD30, 0, -1);
+ startAnimation(0x192ADD30, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45D390);
}
void Class521::sub45D390() {
- removeCallbacks();
+ gotoNextState();
_flag10F = 1;
- setFileHash(0xF46A0324, 0, -1);
+ startAnimation(0xF46A0324, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
FinalizeState(&Class521::sub45D620);
@@ -635,9 +635,9 @@ void Class521::moveToPrevPoint() {
sub45D580();
} else {
if (_steps == 0) {
- removeCallbacks();
+ gotoNextState();
_flag113 = 0;
- setFileHash(0x9966B138, 0, -1);
+ startAnimation(0x9966B138, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45D100);
@@ -653,7 +653,7 @@ void Class521::sub45D580() {
_flag10F = 1;
_flag10E = 1;
FinalizeState(NULL);
- setFileHash(0x192ADD30, 0, -1);
+ startAnimation(0x192ADD30, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
NextState(&Class521::sub45D5D0);
@@ -662,7 +662,7 @@ void Class521::sub45D580() {
void Class521::sub45D5D0() {
_flag10F = 1;
FinalizeState(NULL);
- setFileHash(0xF46A0324, 0, -1);
+ startAnimation(0xF46A0324, 0, -1);
SetMessageHandler(&Class521::handleMessage45CC30);
SetUpdateHandler(&Class521::update);
FinalizeState(&Class521::sub45D620);
@@ -986,7 +986,7 @@ uint32 Class546::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
sub44D710();
@@ -999,7 +999,7 @@ uint32 Class546::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Class546::sub44D710() {
- setFileHash(0x08C80144, 0, -1);
+ startAnimation(0x08C80144, 0, -1);
setVisible(true);
NextState(&Class546::sub44D760);
_soundResource.play(calcHash("fxDoorOpen23"));
@@ -1012,7 +1012,7 @@ void Class546::sub44D760() {
}
void Class546::sub44D790() {
- setFileHash(0x08C80144, -1, -1);
+ startAnimation(0x08C80144, -1, -1);
setVisible(true);
NextState(&Class546::sub44D7F0);
_soundResource.play(calcHash("fxDoorClose23"));
@@ -1027,15 +1027,15 @@ Class547::Class547(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
setDoDeltaX(1);
- setFileHash(0x1209E09F, 1, -1);
- _newHashListIndex = 1;
+ startAnimation(0x1209E09F, 1, -1);
+ _newStickFrameIndex = 1;
}
Class548::Class548(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
setDoDeltaX(1);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
Class518::Class518(NeverhoodEngine *vm, Class521 *class521)
@@ -1043,8 +1043,8 @@ Class518::Class518(NeverhoodEngine *vm, Class521 *class521)
SetUpdateHandler(&Class518::update);
createSurface1(0x60281C10, 150);
- setFileHash(0x60281C10, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x60281C10, -1, -1);
+ _newStickFrameIndex = -2;
}
void Class518::update() {
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index ae7a7fd..f9dc6b7 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -259,10 +259,10 @@ uint32 Scene1705::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (param.asInteger()) {
setRectList(0x004B6B40);
- _klayman->setKlaymanTable3();
+ _klayman->setKlaymanIdleTable3();
} else {
setRectList(0x004B6B30);
- _klayman->setKlaymanTable1();
+ _klayman->setKlaymanIdleTable1();
}
break;
case 0x4826:
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 7bac3ff..e9be86a 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -200,8 +200,8 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
_y = kAsScene1907SymbolPluggedInDownPositions[_currPositionIndex].y;
}
createSurface1(kAsScene1907SymbolFileHashes[_elementIndex], 1000 + _currPositionIndex);
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);
- _newHashListIndex = -2;
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);
+ _newStickFrameIndex = -2;
} else {
_isPluggedIn = false;
_currPositionIndex = positionIndex;
@@ -212,8 +212,8 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
_x = kAsScene1907SymbolGroundPositions[_currPositionIndex].x;
_y = kAsScene1907SymbolGroundPositions[_currPositionIndex].y;
createSurface1(kAsScene1907SymbolFileHashes[_elementIndex], 1000 + _currPositionIndex);
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
- _newHashListIndex = 0;
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
+ _newStickFrameIndex = 0;
}
_deltaRect.set(0, 0, 80, 80);
Sprite::processDelta();
@@ -249,7 +249,7 @@ uint32 AsScene1907Symbol::hmTryToPlugIn(int messageNum, const MessageParam ¶
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -345,7 +345,7 @@ void AsScene1907Symbol::tryToPlugIn() {
_newPositionIndex = _parentScene->getNextPosition();
_parentScene->setPositionFree(_currPositionIndex, true);
sendMessage(_parentScene, 0x1022, 1100 + _newPositionIndex);
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
SetUpdateHandler(&AsScene1907Symbol::update);
SetMessageHandler(&AsScene1907Symbol::hmTryToPlugIn);
SetSpriteCallback(&AsScene1907Symbol::suTryToPlugIn);
@@ -371,9 +371,9 @@ void AsScene1907Symbol::fallOff(int newPositionIndex, int fallOffDelay) {
_y = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].y;
_someX = _x;
_someY = _y;
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, 0);
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, 0);
_playBackwards = true;
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
_currStep = 0;
_yAccel = 1;
SetUpdateHandler(&AsScene1907Symbol::update);
@@ -390,7 +390,7 @@ void AsScene1907Symbol::stFallOffHitGround() {
_vm->_collisionMan->addSprite(this);
SetSpriteCallback(&AsScene1907Symbol::suFallOffHitGround);
NextState(&AsScene1907Symbol::cbFallOffHitGroundEvent);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
_currStep = 0;
_yAccel = 30;
_deltaX = (_x - kAsScene1907SymbolGroundPositions[_newPositionIndex].x) / 15;
@@ -405,8 +405,8 @@ void AsScene1907Symbol::cbFallOffHitGroundEvent() {
_currPositionIndex = _newPositionIndex;
if (_symbolFlag2)
_symbolFlag2--;
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
- _newHashListIndex = 0;
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
+ _newStickFrameIndex = 0;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteCallback(NULL);
@@ -431,7 +431,7 @@ void AsScene1907Symbol::stPlugInFail() {
}
void AsScene1907Symbol::moveUp() {
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteCallback(&AsScene1907Symbol::suMoveUp);
@@ -440,7 +440,7 @@ void AsScene1907Symbol::moveUp() {
}
void AsScene1907Symbol::moveDown() {
- setFileHash(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteCallback(&AsScene1907Symbol::suMoveDown);
@@ -513,8 +513,8 @@ AsScene1907WaterHint::AsScene1907WaterHint(NeverhoodEngine *vm)
createSurface1(0x110A1061, 1500);
_x = 320;
_y = 240;
- setFileHash(0x110A1061, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x110A1061, 0, -1);
+ _newStickFrameIndex = 0;
setVisible(false);
_needRefresh = true;
AnimatedSprite::updatePosition();
@@ -531,7 +531,7 @@ uint32 AsScene1907WaterHint::handleMessage46BA20(int messageNum, const MessagePa
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -539,7 +539,7 @@ uint32 AsScene1907WaterHint::handleMessage46BA20(int messageNum, const MessagePa
void AsScene1907WaterHint::show() {
setVisible(true);
- setFileHash(0x110A1061, 0, -1);
+ startAnimation(0x110A1061, 0, -1);
SetMessageHandler(&AsScene1907WaterHint::handleMessage46BA20);
NextState(&AsScene1907WaterHint::hide);
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 9c0843c..bd22c7b 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -143,10 +143,10 @@ uint32 Scene2001::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (param.asInteger()) {
setRectList(0x004B3680);
- _klayman->setKlaymanTable3();
+ _klayman->setKlaymanIdleTable3();
} else {
setRectList(0x004B3670);
- _klayman->setKlaymanTable1();
+ _klayman->setKlaymanIdleTable1();
}
}
return 0;
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 66f8631..c6de482 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -87,8 +87,8 @@ Class538::Class538(NeverhoodEngine *vm, bool flag)
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class538::handleMessage);
if (flag) {
- setFileHash(0x0C202B9C, -1, -1);
- _newHashListIndex = -2;
+ startAnimation(0x0C202B9C, -1, -1);
+ _newStickFrameIndex = -2;
} else {
setVisible(false);
}
@@ -98,7 +98,7 @@ uint32 Class538::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
openDoor();
@@ -111,15 +111,15 @@ uint32 Class538::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
void Class538::openDoor() {
- setFileHash(0x0C202B9C, 0, -1);
- _newHashListIndex = -2;
+ startAnimation(0x0C202B9C, 0, -1);
+ _newStickFrameIndex = -2;
setVisible(true);
_soundResource.play(calcHash("fxDoorOpen32"));
}
void Class538::closeDoor() {
- setFileHash(0xC222A8D4, 0, -1);
- _newHashListIndex = -2;
+ startAnimation(0xC222A8D4, 0, -1);
+ _newStickFrameIndex = -2;
setVisible(true);
NextState(&Class538::hide);
_soundResource.play(calcHash("fxDoorClose32"));
@@ -145,7 +145,7 @@ uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity
case 0x2001:
_x = _klayman->getX();
_y = _klayman->getY() - 132;
- setFileHash(0x0422255A, 0, -1);
+ startAnimation(0x0422255A, 0, -1);
setVisible(true);
break;
case 0x3002:
@@ -311,10 +311,10 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (param.asInteger() != 0) {
setRectList(0x004B9008);
- _klayman->setKlaymanTable3();
+ _klayman->setKlaymanIdleTable3();
} else {
setRectList(0x004B8FF8);
- _klayman->setKlaymanTable1();
+ _klayman->setKlaymanIdleTable1();
}
break;
case 0x480B:
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index ab1fac8..e886acc 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -407,7 +407,7 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
_x = 403;
_y = 259;
createSurface(100, 233, 96);
- setFileHash(0x8600866, 0, -1);
+ startAnimation(0x8600866, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
}
@@ -421,12 +421,12 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *
SetUpdateHandler(&AsScene2201Door::update);
SetMessageHandler(&AsScene2201Door::handleMessage);
if (_doorOpen) {
- setFileHash(0xE2CB0412, -1, -1);
+ startAnimation(0xE2CB0412, -1, -1);
_countdown = 48;
- _newHashListIndex = -2;
+ _newStickFrameIndex = -2;
} else {
- setFileHash(0xE2CB0412, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0xE2CB0412, 0, -1);
+ _newStickFrameIndex = 0;
_doorLightSprite->setVisible(false);
}
}
@@ -456,7 +456,7 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
messageResult = _doorOpen ? 1 : 0;
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
case 0x4808:
_countdown = 144;
@@ -469,16 +469,16 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
void AsScene2201Door::stOpenDoor() {
_doorOpen = true;
- setFileHash(0xE2CB0412, 0, -1);
- _newHashListIndex = -2;
+ startAnimation(0xE2CB0412, 0, -1);
+ _newStickFrameIndex = -2;
_soundResource.play(calcHash("fxDoorOpen33"));
}
void AsScene2201Door::stCloseDoor() {
_doorOpen = false;
- setFileHash(0xE2CB0412, -1, -1);
+ startAnimation(0xE2CB0412, -1, -1);
_playBackwards = true;
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
_soundResource.play(calcHash("fxDoorClose33"));
}
@@ -1064,11 +1064,11 @@ AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint i
_y = 240;
createSurface1(kAsScene2203DoorFileHashes[_index], 900);
if (getGlobalVar(0x9A500914) == _index) {
- setFileHash(kAsScene2203DoorFileHashes[_index], -1, -1);
- _newHashListIndex = -2;
+ startAnimation(kAsScene2203DoorFileHashes[_index], -1, -1);
+ _newStickFrameIndex = -2;
} else {
- setFileHash(kAsScene2203DoorFileHashes[_index], 0, -1);
- _newHashListIndex = 0;
+ startAnimation(kAsScene2203DoorFileHashes[_index], 0, -1);
+ _newStickFrameIndex = 0;
}
}
@@ -1105,13 +1105,13 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
void AsScene2203Door::openDoor() {
_soundResource.play(0x341014C4);
- setFileHash(kAsScene2203DoorFileHashes[_index], 1, -1);
+ startAnimation(kAsScene2203DoorFileHashes[_index], 1, -1);
}
void AsScene2203Door::closeDoor() {
- setFileHash(kAsScene2203DoorFileHashes[_index], -1, -1);
+ startAnimation(kAsScene2203DoorFileHashes[_index], -1, -1);
_playBackwards = true;
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1592,7 +1592,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
}
_klayman->setSoundFlag(true);
- _klayman->setKlaymanTable2();
+ _klayman->setKlaymanIdleTable2();
}
@@ -1706,11 +1706,11 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
_x = pt.x;
_y = pt.y;
createSurface(1100, 129, 103);
- setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, 0, 0);
+ startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, 0, 0);
SetUpdateHandler(&AsScene2207Elevator::update);
SetSpriteCallback(&AsScene2207Elevator::suSetPosition);
SetMessageHandler(&AsScene2207Elevator::handleMessage);
- _newHashListIndex = 0;
+ _newStickFrameIndex = 0;
}
AsScene2207Elevator::~AsScene2207Elevator() {
@@ -1721,8 +1721,8 @@ void AsScene2207Elevator::update() {
if (_destPointIndex + _destPointIndexDelta > _pointIndex) {
_pointIndex++;
- setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
- _newHashListIndex = _pointIndex;
+ startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
+ _newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
if (_destPointIndexDelta != 0) {
_destPointIndexDelta = 0;
@@ -1737,8 +1737,8 @@ void AsScene2207Elevator::update() {
_pointIndex--;
if (_pointIndex == 0)
sendMessage(_parentScene, 0x2003, 0);
- setFileHash(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
- _newHashListIndex = _pointIndex;
+ startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
+ _newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
if (_destPointIndexDelta != 0) {
_destPointIndexDelta = 0;
@@ -1817,8 +1817,8 @@ AsScene2207Lever::AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int1
SetMessageHandler(&AsScene2207Lever::handleMessage);
createSurface(1010, 71, 73);
setDoDeltaX(doDeltaX);
- setFileHash(0x80880090, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x80880090, 0, -1);
+ _newStickFrameIndex = 0;
_x = x;
_y = y;
}
@@ -1831,7 +1831,7 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
messageResult = 1;
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
stopAnimation();
break;
case 0x4807:
@@ -1851,7 +1851,7 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
}
void AsScene2207Lever::stLeverDown() {
- setFileHash(0x80880090, 1, -1);
+ startAnimation(0x80880090, 1, -1);
FinalizeState(&AsScene2207Lever::stLeverDownEvent);
_soundResource.play(0x40581882);
}
@@ -1861,7 +1861,7 @@ void AsScene2207Lever::stLeverDownEvent() {
}
void AsScene2207Lever::stLeverUp() {
- setFileHash(0x80880090, 6, -1);
+ startAnimation(0x80880090, 6, -1);
FinalizeState(&AsScene2207Lever::stLeverUpEvent);
_playBackwards = true;
_soundResource.play(0x40581882);
@@ -1880,8 +1880,8 @@ AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm
createSurface1(0xCCFD6090, 100);
_x = 309;
_y = 320;
- setFileHash(0xCCFD6090, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0xCCFD6090, 0, -1);
+ _newStickFrameIndex = 0;
_soundResource2.load(0x40330872);
_soundResource3.load(0x72A2914A);
_soundResource4.load(0xD4226080);
@@ -1923,7 +1923,7 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
stStopAnimation();
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -1933,7 +1933,7 @@ void AsScene2207WallRobotAnimation::stStartAnimation() {
if (!_idle) {
NextState(NULL);
} else {
- setFileHash(0xCCFD6090, 0, -1);
+ startAnimation(0xCCFD6090, 0, -1);
_idle = false;
setVisible(true);
}
@@ -1962,8 +1962,8 @@ AsScene2207WallCannonAnimation::AsScene2207WallCannonAnimation(NeverhoodEngine *
createSurface1(0x8CAA0099, 100);
_x = 309;
_y = 320;
- setFileHash(0x8CAA0099, 0, -1);
- _newHashListIndex = 0;
+ startAnimation(0x8CAA0099, 0, -1);
+ _newStickFrameIndex = 0;
}
uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1976,7 +1976,7 @@ uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const Messa
stStopAnimation();
break;
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -1987,7 +1987,7 @@ void AsScene2207WallCannonAnimation::stStartAnimation() {
NextState(NULL);
} else {
setVisible(true);
- setFileHash(0x8CAA0099, 0, -1);
+ startAnimation(0x8CAA0099, 0, -1);
_idle = false;
}
}
@@ -2593,7 +2593,7 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
}
_klayman->setSoundFlag(true);
- _klayman->setKlaymanTable2();
+ _klayman->setKlaymanIdleTable2();
}
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 5823e4d..7975fcb 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -284,7 +284,7 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
// TODO Sound1ChList_stop(0xDC2769B0);
break;
case 0x2002:
- setFileHash(0x9C210C90, 0, -1);
+ startAnimation(0x9C210C90, 0, -1);
setVisible(true);
// TODO Sound1ChList_playLooping(0xDC2769B0);
break;
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 783e616..8c5fd6c 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -639,7 +639,7 @@ AsScene3009VerticalIndicator::AsScene3009VerticalIndicator(NeverhoodEngine *vm,
}
void AsScene3009VerticalIndicator::show() {
- setFileHash(0xC2463913, 0, -1);
+ startAnimation(0xC2463913, 0, -1);
setVisible(true);
updatePosition();
_enabled = true;
@@ -705,7 +705,7 @@ void AsScene3009HorizontalIndicator::suMoveRight() {
}
void AsScene3009HorizontalIndicator::show() {
- setFileHash(0xC0C12954, 0, -1);
+ startAnimation(0xC0C12954, 0, -1);
setVisible(true);
updatePosition();
_enabled = true;
@@ -729,8 +729,8 @@ AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene
_x = kAsScene3009SymbolPoints[_index].x;
_y = kAsScene3009SymbolPoints[_index].y;
createSurface1(kAsScene3009SymbolFileHashes[_index / 3], 1200);
- setFileHash(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
- _newHashListIndex = _symbolIndex;
+ startAnimation(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
+ _newStickFrameIndex = _symbolIndex;
_needRefresh = true;
updatePosition();
SetUpdateHandler(&AnimatedSprite::update);
@@ -756,8 +756,8 @@ uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶
else
_symbolIndex--;
}
- setFileHash(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
- _newHashListIndex = _symbolIndex;
+ startAnimation(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
+ _newStickFrameIndex = _symbolIndex;
setSubVar(0x00000914, _index, _symbolIndex);
if (_index / 3 == 0) {
sendMessage(_parentScene, 0x2001, 0);
@@ -1162,11 +1162,11 @@ AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene
if (getSubVar(0x14800353, kScene3010ButtonNameHashes[_boltIndex])) {
createSurface1(kAsScene3010DeadBoltFileHashes1[_boltIndex], 1200);
- setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
+ startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
_soundResource1.load(0x46005BC4);
} else {
createSurface1(kAsScene3010DeadBoltFileHashes2[_boltIndex], 1200);
- setFileHash(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
+ startAnimation(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
_soundResource1.load(0x420073DC);
_soundResource2.load(0x420073DC);
}
@@ -1193,7 +1193,7 @@ uint32 AsScene3010DeadBolt::hmAnimation(int messageNum, const MessageParam ¶
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- removeCallbacks();
+ gotoNextState();
break;
}
return messageResult;
@@ -1210,10 +1210,10 @@ void AsScene3010DeadBolt::unlock(bool skipAnim) {
if (!_unlocked) {
setVisible(true);
if (skipAnim) {
- setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], -1, 0);
- _newHashListIndex = -2;
+ startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], -1, 0);
+ _newStickFrameIndex = -2;
} else {
- setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
+ startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
FinalizeState(&AsScene3010DeadBolt::stIdleMessage);
NextState(&AsScene3010DeadBolt::stIdle);
@@ -1234,7 +1234,7 @@ void AsScene3010DeadBolt::lock() {
if (!_locked) {
_locked = true;
setVisible(true);
- setFileHash(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
+ startAnimation(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
FinalizeState(&AsScene3010DeadBolt::stDisabledMessage);
NextState(&AsScene3010DeadBolt::stIdle);
@@ -1253,7 +1253,7 @@ void AsScene3010DeadBolt::setCountdown(int count) {
void AsScene3010DeadBolt::stDisabled() {
setVisible(true);
- setFileHash(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
+ startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
FinalizeState(&AsScene3010DeadBolt::stDisabledMessage);
NextState(&AsScene3010DeadBolt::stIdle);
@@ -1483,7 +1483,7 @@ AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
void AsScene3011Symbol::show(bool flag) {
_flag2 = flag;
- setFileHash(kAsScene3011SymbolFileHashes[_index], 0, -1);
+ startAnimation(kAsScene3011SymbolFileHashes[_index], 0, -1);
setVisible(true);
if (flag) {
_soundResource2.play();
@@ -1508,7 +1508,7 @@ void AsScene3011Symbol::stopSound() {
void AsScene3011Symbol::change(int index, bool flag) {
_index = index;
_flag2 = flag;
- setFileHash(kAsScene3011SymbolFileHashes[_index], 0, -1);
+ startAnimation(kAsScene3011SymbolFileHashes[_index], 0, -1);
setVisible(true);
if (flag) {
_soundResource2.play();
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 697bd6e..b68434b 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -223,26 +223,26 @@ AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surface
createSurface1(fileHash, surfacePriority);
_x = x;
_y = y;
- setFileHash(fileHash, 0, -1);
+ startAnimation(fileHash, 0, -1);
}
void AnimatedSprite::init() {
_name = "AnimatedSprite";
- _counter = 0;
- _fileHash1 = 0;
+ _currFrameTicks = 0;
+ _newAnimFileHash = 0;
_deltaX = 0;
_deltaY = 0;
- _fileHash2 = 0;
+ _nextAnimFileHash = 0;
// TODO _callbackList = 0;
- _frameIndex3 = 0;
- _frameIndex = 0;
- _hashListIndex = -1;
+ _plFirstFrameIndex = 0;
+ _currFrameIndex = 0;
+ _currStickFrameIndex = -1;
_finalizeStateCb = NULL;
_currStateCb = NULL;
_nextStateCb = NULL;
- _newHashListIndex = -1;
- _fileHash4 = 0;
- _flag = false;
+ _newStickFrameIndex = -1;
+ _newStickFrameHash = 0;
+ _frameChanged = false;
_replOldColor = 0;
_replNewColor = 0;
_animResource.setReplEnabled(false);
@@ -285,24 +285,22 @@ void AnimatedSprite::clearRepl() {
void AnimatedSprite::updateAnim() {
- _flag = false;
+ _frameChanged = false;
- if (_fileHash1 == 0) {
- if (_newHashListIndex != -1) {
- _hashListIndex = _newHashListIndex == -2 ? _animResource.getFrameCount() - 1 : _newHashListIndex;
- _newHashListIndex = -1;
- } else if (_fileHash4 != 0) {
- _hashListIndex = MAX<int16>(0, _animResource.getFrameIndex(_fileHash4));
- _fileHash4 = 0;
+ if (_newAnimFileHash == 0) {
+ if (_newStickFrameIndex != -1) {
+ _currStickFrameIndex = _newStickFrameIndex == -2 ? _animResource.getFrameCount() - 1 : _newStickFrameIndex;
+ _newStickFrameIndex = -1;
+ } else if (_newStickFrameHash != 0) {
+ _currStickFrameIndex = MAX<int16>(0, _animResource.getFrameIndex(_newStickFrameHash));
+ _newStickFrameHash = 0;
}
- if (_fileHash1 == 0 && _frameIndex != _hashListIndex) {
- if (_counter != 0)
- _counter--;
- if (_counter == 0 && _animResource.getFrameCount() != 0) {
+ if (_newAnimFileHash == 0 && _currFrameIndex != _currStickFrameIndex) {
+ if (_currFrameTicks != 0 && (--_currFrameTicks == 0) && _animResource.getFrameCount() != 0) {
- if (_fileHash2 != 0) {
- if (_animResource.loadInternal(_fileHash2)) {
- _currAnimFileHash = _fileHash2;
+ if (_nextAnimFileHash != 0) {
+ if (_animResource.loadInternal(_nextAnimFileHash)) {
+ _currAnimFileHash = _nextAnimFileHash;
} else {
_animResource.loadInternal(calcHash("sqDefault"));
_currAnimFileHash = 0;
@@ -310,30 +308,30 @@ void AnimatedSprite::updateAnim() {
if (_replOldColor != _replNewColor) {
_animResource.setRepl(_replOldColor, _replNewColor);
}
- _fileHash2 = 0;
+ _nextAnimFileHash = 0;
if (_animStatus != 0) {
- _frameIndex = _fileHash6 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash6)) : 0;
- _frameIndex2 = _fileHash5 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash5)) : _animResource.getFrameCount() - 1;
+ _currFrameIndex = _plFirstFrameHash != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_plFirstFrameHash)) : 0;
+ _lastFrameIndex = _plLastFrameHash != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_plLastFrameHash)) : _animResource.getFrameCount() - 1;
} else {
- _frameIndex = _frameIndex3 != -1 ? _frameIndex3 : _animResource.getFrameCount() - 1;
- _frameIndex2 = _frameIndex4 != -1 ? _frameIndex4 : _animResource.getFrameCount() - 1;
+ _currFrameIndex = _plFirstFrameIndex != -1 ? _plFirstFrameIndex : _animResource.getFrameCount() - 1;
+ _lastFrameIndex = _plLastFrameIndex != -1 ? _plLastFrameIndex : _animResource.getFrameCount() - 1;
}
} else {
updateFrameIndex();
}
- if (_fileHash1 == 0)
+ if (_newAnimFileHash == 0)
updateFrameInfo();
}
}
}
- if (_fileHash1 != 0) {
+ if (_newAnimFileHash != 0) {
if (_animStatus == 2) {
- _hashListIndex = _frameIndex;
+ _currStickFrameIndex = _currFrameIndex;
} else {
if (_animStatus == 1) {
- if (_animResource.loadInternal(_fileHash1)) {
- _currAnimFileHash = _fileHash1;
+ if (_animResource.loadInternal(_newAnimFileHash)) {
+ _currAnimFileHash = _newAnimFileHash;
} else {
_animResource.loadInternal(calcHash("sqDefault"));
_currAnimFileHash = 0;
@@ -341,12 +339,12 @@ void AnimatedSprite::updateAnim() {
if (_replOldColor != _replNewColor) {
_animResource.setRepl(_replOldColor, _replNewColor);
}
- _fileHash1 = 0;
- _frameIndex = _fileHash6 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash6)) : 0;
- _frameIndex2 = _fileHash5 != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_fileHash5)) : _animResource.getFrameCount() - 1;
+ _newAnimFileHash = 0;
+ _currFrameIndex = _plFirstFrameHash != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_plFirstFrameHash)) : 0;
+ _lastFrameIndex = _plLastFrameHash != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_plLastFrameHash)) : _animResource.getFrameCount() - 1;
} else {
- if (_animResource.loadInternal(_fileHash1)) {
- _currAnimFileHash = _fileHash1;
+ if (_animResource.loadInternal(_newAnimFileHash)) {
+ _currAnimFileHash = _newAnimFileHash;
} else {
_animResource.loadInternal(calcHash("sqDefault"));
_currAnimFileHash = 0;
@@ -354,19 +352,19 @@ void AnimatedSprite::updateAnim() {
if (_replOldColor != _replNewColor) {
_animResource.setRepl(_replOldColor, _replNewColor);
}
- _fileHash1 = 0;
- _frameIndex = _frameIndex3 != -1 ? _frameIndex3 : _animResource.getFrameCount() - 1;
- _frameIndex2 = _frameIndex4 != -1 ? _frameIndex4 : _animResource.getFrameCount() - 1;
+ _newAnimFileHash = 0;
+ _currFrameIndex = _plFirstFrameIndex != -1 ? _plFirstFrameIndex : _animResource.getFrameCount() - 1;
+ _lastFrameIndex = _plLastFrameIndex != -1 ? _plLastFrameIndex : _animResource.getFrameCount() - 1;
}
updateFrameInfo();
}
- if (_newHashListIndex != -1) {
- _hashListIndex = _newHashListIndex == -2 ? _animResource.getFrameCount() - 1 : _newHashListIndex;
- _newHashListIndex = -1;
- } else if (_fileHash4 != 0) {
- _hashListIndex = MAX<int16>(0, _animResource.getFrameIndex(_fileHash4));
- _fileHash4 = 0;
+ if (_newStickFrameIndex != -1) {
+ _currStickFrameIndex = _newStickFrameIndex == -2 ? _animResource.getFrameCount() - 1 : _newStickFrameIndex;
+ _newStickFrameIndex = -1;
+ } else if (_newStickFrameHash != 0) {
+ _currStickFrameIndex = MAX<int16>(0, _animResource.getFrameIndex(_newStickFrameHash));
+ _newStickFrameHash = 0;
}
}
@@ -391,7 +389,7 @@ void AnimatedSprite::updatePosition() {
}
if (_needRefresh) {
- _surface->drawAnimResource(_animResource, _frameIndex, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
+ _surface->drawAnimResource(_animResource, _currFrameIndex, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
_needRefresh = false;
}
@@ -399,46 +397,40 @@ void AnimatedSprite::updatePosition() {
void AnimatedSprite::updateFrameIndex() {
if (!_playBackwards) {
- if (_frameIndex < _frameIndex2) {
- _frameIndex++;
+ if (_currFrameIndex < _lastFrameIndex) {
+ _currFrameIndex++;
} else {
// Inform self about end of current animation
// The caller can then e.g. set a new animation fileHash
sendMessage(this, 0x3002, 0);
- if (_fileHash1 == 0)
- _frameIndex = 0;
+ if (_newAnimFileHash == 0)
+ _currFrameIndex = 0;
}
} else {
- if (_frameIndex > 0) {
- _frameIndex--;
+ if (_currFrameIndex > 0) {
+ _currFrameIndex--;
} else {
sendMessage(this, 0x3002, 0);
- if (_fileHash1 == 0)
- _frameIndex = _frameIndex2;
+ if (_newAnimFileHash == 0)
+ _currFrameIndex = _lastFrameIndex;
}
}
}
void AnimatedSprite::updateFrameInfo() {
debug(8, "AnimatedSprite::updateFrameInfo()");
-
- const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_frameIndex);
-
- _flag = true;
+ const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_currFrameIndex);
+ _frameChanged = true;
_drawRect = frameInfo.rect;
_deltaX = frameInfo.deltaX;
_deltaY = frameInfo.deltaY;
_deltaRect = frameInfo.deltaRect;
- _counter = frameInfo.counter;
-
+ _currFrameTicks = frameInfo.counter;
processDelta();
-
_needRefresh = true;
-
if (frameInfo.frameHash != 0) {
sendMessage(this, 0x100D, frameInfo.frameHash);
}
-
}
void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
@@ -446,44 +438,44 @@ void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
_surface = new BaseSurface(_vm, surfacePriority, dimensions.width, dimensions.height);
}
-void AnimatedSprite::setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4) {
- debug(2, "AnimatedSprite::setFileHash(%08X, %d, %d)", fileHash, frameIndex3, frameIndex4);
- _fileHash1 = fileHash;
- _frameIndex3 = frameIndex3;
- _frameIndex4 = frameIndex4;
- _fileHash4 = 0;
+void AnimatedSprite::startAnimation(uint32 fileHash, int16 plFirstFrameIndex, int16 plLastFrameIndex) {
+ debug(2, "AnimatedSprite::startAnimation(%08X, %d, %d)", fileHash, plFirstFrameIndex, plLastFrameIndex);
+ _newAnimFileHash = fileHash;
+ _plFirstFrameIndex = plFirstFrameIndex;
+ _plLastFrameIndex = plLastFrameIndex;
+ _newStickFrameHash = 0;
_animStatus = 0;
_playBackwards = false;
- _newHashListIndex = -1;
- _hashListIndex = -1;
+ _newStickFrameIndex = -1;
+ _currStickFrameIndex = -1;
}
void AnimatedSprite::stopAnimation() {
- _fileHash1 = 1;
+ _newAnimFileHash = 1;
_animStatus = 2;
}
-void AnimatedSprite::setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5) {
- debug(2, "AnimatedSprite::setFileHash2(%08X, %08X, %08X)", fileHash, fileHash6, fileHash5);
- _fileHash1 = fileHash;
- _fileHash6 = fileHash6;
- _fileHash5 = fileHash5;
- _fileHash4 = 0;
+void AnimatedSprite::startAnimationByHash(uint32 fileHash, uint32 plFirstFrameHash, uint32 plLastFrameHash) {
+ debug(2, "AnimatedSprite::startAnimationByHash(%08X, %08X, %08X)", fileHash, plFirstFrameHash, plLastFrameHash);
+ _newAnimFileHash = fileHash;
+ _plFirstFrameHash = plFirstFrameHash;
+ _plLastFrameHash = plLastFrameHash;
+ _newStickFrameHash = 0;
_animStatus = 1;
_playBackwards = false;
- _newHashListIndex = -1;
- _hashListIndex = -1;
+ _newStickFrameIndex = -1;
+ _currStickFrameIndex = -1;
}
-void AnimatedSprite::setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5) {
- _fileHash2 = fileHash2;
- _fileHash6 = fileHash6;
- _fileHash5 = fileHash5;
- _fileHash4 = 0;
+void AnimatedSprite::nextAnimationByHash(uint32 fileHash2, uint32 plFirstFrameHash, uint32 plLastFrameHash) {
+ _nextAnimFileHash = fileHash2;
+ _plFirstFrameHash = plFirstFrameHash;
+ _plLastFrameHash = plLastFrameHash;
+ _newStickFrameHash = 0;
_animStatus = 1;
_playBackwards = false;
- _newHashListIndex = -1;
- _hashListIndex = -1;
+ _newStickFrameIndex = -1;
+ _currStickFrameIndex = -1;
}
void AnimatedSprite::setFinalizeState(AnimationCb finalizeStateCb) {
@@ -505,7 +497,7 @@ void AnimatedSprite::gotoState(AnimationCb currStateCb) {
(this->*_currStateCb)();
}
-void AnimatedSprite::removeCallbacks() {
+void AnimatedSprite::gotoNextState() {
if (_finalizeStateCb) {
AnimationCb cb = _finalizeStateCb;
_finalizeStateCb = NULL;
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index aa22724..b9decef 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -121,32 +121,24 @@ public:
void setRepl(byte oldColor, byte newColor);
void clearRepl();
uint32 getCurrAnimFileHash() const { return _currAnimFileHash; }
- int16 getFrameIndex() const { return _frameIndex; }
+ int16 getFrameIndex() const { return _currFrameIndex; }
int16 getFrameIndex(uint32 frameHash) { return _animResource.getFrameIndex(frameHash); }
- void setNewHashListIndex(int value) { _newHashListIndex = value; }
- void setFileHash(uint32 fileHash, int16 frameIndex3, int16 frameIndex4);
+ void setNewHashListIndex(int value) { _newStickFrameIndex = value; }
+ void startAnimation(uint32 fileHash, int16 plFirstFrameIndex, int16 plLastFrameIndex);
protected:
typedef void (AnimatedSprite::*AnimationCb)();
AnimResource _animResource;
- uint32 _currAnimFileHash;
- uint32 _fileHash1;
- uint32 _fileHash2;
- int16 _frameIndex;
- int16 _frameIndex3;
- int16 _frameIndex2;
- int16 _frameIndex4;
- uint32 _fileHash6;
- uint32 _fileHash5;
+ uint32 _currAnimFileHash, _newAnimFileHash, _nextAnimFileHash;
+ int16 _currFrameIndex, _lastFrameIndex;
+ int16 _plFirstFrameIndex, _plLastFrameIndex;
+ uint32 _plFirstFrameHash, _plLastFrameHash;
int16 _animStatus;
- int16 _counter;
- int _hashListIndex;
- int _newHashListIndex;
- uint32 _fileHash4;
+ int16 _currFrameTicks;
+ int _currStickFrameIndex, _newStickFrameIndex;
+ uint32 _newStickFrameHash;
int16 _deltaX, _deltaY;
- byte _replOldColor;
- byte _replNewColor;
- bool _playBackwards;
- bool _flag;
+ byte _replOldColor, _replNewColor;
+ bool _playBackwards, _frameChanged;
/* TODO
callbackListIndex dw ?
callbackListCount dw ?
@@ -166,11 +158,11 @@ protected:
void updateFrameInfo();
void createSurface1(uint32 fileHash, int surfacePriority);
void stopAnimation();
- void setFileHash2(uint32 fileHash, uint32 fileHash6, uint32 fileHash5);
- void setFileHash3(uint32 fileHash2, uint32 fileHash6, uint32 fileHash5);
+ void startAnimationByHash(uint32 fileHash, uint32 plFirstFrameHash, uint32 plLastFrameHash);
+ void nextAnimationByHash(uint32 fileHash2, uint32 plFirstFrameHash, uint32 plLastFrameHash);
void setFinalizeState(AnimationCb finalizeStateCb);
void gotoState(AnimationCb currStateCb);
- void removeCallbacks();
+ void gotoNextState();
};
} // End of namespace Neverhood
Commit: adb02a9f3800d7ef91d743ef38787f5fcd5ca332
https://github.com/scummvm/scummvm/commit/adb02a9f3800d7ef91d743ef38787f5fcd5ca332
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:03-07:00
Commit Message:
NEVERHOOD: More renaming
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 95fe521..72f15a6 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -275,7 +275,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(1000, -1);
#endif
-#if 0
+#if 1
_vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
@@ -296,7 +296,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 8;
createModule(2600, -1);
#endif
-#if 1
+#if 0
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 2358df4..bdc53d6 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -59,17 +59,17 @@ static const KlaymanIdleTableItem klaymanTable4[] = {
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
- _counterMax(0), _counter(0), _flagE4(false), _counter3Max(0), _flagF8(false), _counter1(0),
- _counter2(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _flagE1(false),
- _status3(1), _parentScene(parentScene), _flagE2(false), _flagE3(false), _flagF6(false), _isLeverDown(false),
- _flagFA(false), _statusE0(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
+ _counterMax(0), _counter(0), _isMoveObjectRequested(false), _counter3Max(0), _isWalkingOpenDoorNotified(false), _counter1(0),
+ _counter2(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
+ _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _flagF6(false), _isLeverDown(false),
+ _flagFA(false), _ladderStatus(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
_x = x;
_y = y;
- _x4 = x;
- _y4 = y;
+ _destX = x;
+ _destY = y;
_flags = 2;
setKlaymanIdleTable1();
stTryStandIdle();
@@ -84,13 +84,13 @@ uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4818:
- sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
}
return 0;
@@ -123,7 +123,7 @@ void Klayman::setKlaymanIdleTable3() {
}
void Klayman::stDoIdlePickEar() {
- sub41D320(0x5B20C814, AnimationCallback(&Klayman::stIdlePickEar));
+ startIdleAnimation(0x5B20C814, AnimationCallback(&Klayman::stIdlePickEar));
}
void Klayman::stIdlePickEar() {
@@ -154,7 +154,7 @@ void Klayman::evIdlePickEarDone() {
}
void Klayman::sub41FDA0() {
- sub41D320(0xD122C137, AnimationCallback(&Klayman::sub41FDB0));
+ startIdleAnimation(0xD122C137, AnimationCallback(&Klayman::sub41FDB0));
}
void Klayman::sub41FDB0() {
@@ -180,7 +180,7 @@ uint32 Klayman::handleMessage41E980(int messageNum, const MessageParam ¶m, E
}
void Klayman::sub41FDF0() {
- sub41D320(0x543CD054, AnimationCallback(&Klayman::sub41FE00));
+ startIdleAnimation(0x543CD054, AnimationCallback(&Klayman::sub41FE00));
}
void Klayman::sub41FE00() {
@@ -215,7 +215,7 @@ uint32 Klayman::handleMessage41E9E0(int messageNum, const MessageParam ¶m, E
}
void Klayman::stDoIdleChest() {
- sub41D320(0x40A0C034, AnimationCallback(&Klayman::stIdleChest));
+ startIdleAnimation(0x40A0C034, AnimationCallback(&Klayman::stIdleChest));
}
void Klayman::stIdleChest() {
@@ -241,7 +241,7 @@ uint32 Klayman::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *s
}
void Klayman::sub41FEB0() {
- sub41D320(0x5120E137, AnimationCallback(&Klayman::sub41FEC0));
+ startIdleAnimation(0x5120E137, AnimationCallback(&Klayman::sub41FEC0));
}
void Klayman::sub41FEC0() {
@@ -441,26 +441,26 @@ void Klayman::stGetUpFromTeleporter() {
/////////////////////////////////////////////////////////////////
void Klayman::sub41CE70() {
- _x4 = _x;
- if (!_flagE1 && !_flagE2 && !_flagE3) {
+ _destX = _x;
+ if (!_isWalking && !_isSneaking && !_isLargeStep) {
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
}
}
-void Klayman::sub41D320(uint32 fileHash, AnimationCb callback) {
+void Klayman::startIdleAnimation(uint32 fileHash, AnimationCb callback) {
_resourceHandle = _vm->_res->useResource(fileHash);
if (_resourceHandle != -1) {
// TODO _vm->_res->moveToFront(_resourceHandle);
NextState(callback);
- SetUpdateHandler(&Klayman::update41D2B0);
+ SetUpdateHandler(&Klayman::upIdleAnimation);
}
}
-void Klayman::update41D2B0() {
+void Klayman::upIdleAnimation() {
// TODO Check if this odd stuff is needed or just some cache optimization
if (_vm->_res->isResourceDataValid(_resourceHandle)) {
- sub41C7B0();
+ gotoNextStateExt();
// TODO _vm->_res->moveToBack(_resourceHandle);
_vm->_res->unuseResource(_resourceHandle);
_resourceHandle = -1;
@@ -484,7 +484,7 @@ bool Klayman::stStartActionFromIdle(AnimationCb callback) {
return false;
}
-void Klayman::sub41C7B0() {
+void Klayman::gotoNextStateExt() {
if (_finalizeStateCb) {
AnimationCb cb = _finalizeStateCb;
_finalizeStateCb = NULL;
@@ -559,7 +559,7 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
_attachedSprite = (Sprite*)(param.asEntity());
break;
case 0x1019:
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x101C:
sub41C770();
@@ -599,7 +599,7 @@ uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, E
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- sub41C7B0();
+ gotoNextStateExt();
break;
}
return messageResult;
@@ -629,33 +629,33 @@ uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity
}
-void Klayman::sub41C930(int16 x, bool flag) {
+void Klayman::startWalkToX(int16 x, bool flag) {
int16 xdiff = ABS(x - _x);
if (x == _x) {
- _x4 = x;
- if (!_flagE1 && !_flagE2 && !_flagE3) {
+ _destX = x;
+ if (!_isWalking && !_isSneaking && !_isLargeStep) {
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
}
- } else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
- _x4 = x;
+ } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) {
+ _destX = x;
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
} else if (xdiff <= 42 && _status3 != 3) {
- if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
- _x4 = x;
+ if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
+ _destX = x;
} else {
- _x4 = x;
+ _destX = x;
GotoState(&Klayman::stSneak);
}
- } else if (_flagE1 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
- _x4 = x;
+ } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _destX = x;
} else if (flag) {
- _x4 = x;
+ _destX = x;
error("// TODO AnimatedSprite_GotoState(&Klayman::sub421550));");
// TODO AnimatedSprite_GotoState(&Klayman::sub421550);
} else {
- _x4 = x;
+ _destX = x;
GotoState(&Klayman::stStartWalking);
}
}
@@ -701,14 +701,14 @@ bool Klayman::stStartAction(AnimationCb callback3) {
NextState(callback3);
return true;
} else {
- _x = _x4;
+ _x = _destX;
return false;
}
}
void Klayman::spriteUpdate41F250() {
- int16 xdiff = _x4 - _x;
+ int16 xdiff = _destX - _x;
if (_doDeltaX) {
_x -= _deltaX;
@@ -730,7 +730,7 @@ void Klayman::spriteUpdate41F250() {
else if (xdiff < -6)
_x -= 6;
else
- _x = _x4;
+ _x = _destX;
}
processDelta();
@@ -739,7 +739,7 @@ void Klayman::spriteUpdate41F250() {
void Klayman::suWalking() {
- int16 xdiff = _x4 - _x;
+ int16 xdiff = _destX - _x;
if (_currFrameIndex == 9) {
if (xdiff > 26)
@@ -754,7 +754,7 @@ void Klayman::suWalking() {
xdiff = -_deltaX;
_deltaX = 0;
- if (_x4 != _x) {
+ if (_destX != _x) {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdiff;
if (_field114) {
@@ -787,9 +787,9 @@ void Klayman::suWalking() {
void Klayman::stSneak() {
_status2 = 1;
- _flagE2 = true;
+ _isSneaking = true;
_acceptInput = true;
- setDoDeltaX(_x4 < _x ? 1 : 0);
+ setDoDeltaX(_destX < _x ? 1 : 0);
startAnimation(0x5C48C506, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
@@ -798,7 +798,7 @@ void Klayman::stSneak() {
}
void Klayman::stWalkingDone() {
- _flagE2 = false;
+ _isSneaking = false;
}
uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -810,60 +810,36 @@ uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sen
} else if (param.asInteger() == 0x0A2A9098) {
_soundResource1.play(0x0A2AA8E0);
} else if (param.asInteger() == 0x32188010) {
- if (_soundFlag) {
- _soundResource1.play(0x48498E46);
- } else {
- _soundResource1.play(0x405002D8);
- }
+ _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x02A2909C) {
- if (_soundFlag) {
- _soundResource1.play(0x50399F64);
- } else {
- _soundResource1.play(0x0460E2FA);
- }
+ _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
case 0x3002:
- _x = _x4;
- sub41C7B0();
+ _x = _destX;
+ gotoNextStateExt();
break;
}
return messageResult;
}
-void Klayman::sub41CD70(int16 x) {
- if (x > _x) {
- if (ABS(x - _x) <= 105) {
- sub41CAC0(x);
- } else {
- sub41C930(x, false);
- }
- } else if (x == _x) {
- _x4 = x;
- gotoState(NULL);
- sub41C7B0();
- } else {
- sub41C930(x, false);
- }
-}
-
void Klayman::stStartWalking() {
if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalking))) {
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
- setDoDeltaX(_x4 < _x ? 1 : 0);
+ setDoDeltaX(_destX < _x ? 1 : 0);
startAnimation(0x242C0198, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteCallback(&Klayman::spriteUpdate41F320);
+ SetSpriteCallback(&Klayman::suWalkingTestExit);
FinalizeState(&Klayman::stStartWalkingDone);
NextState(&Klayman::stWalking);
}
}
void Klayman::stStartWalkingDone() {
- _flagE1 = false;
+ _isWalking = false;
}
uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -871,17 +847,9 @@ uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- if (_soundFlag) {
- _soundResource1.play(0x48498E46);
- } else {
- _soundResource1.play(0x405002D8);
- }
+ _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- if (_soundFlag) {
- _soundResource1.play(0x50399F64);
- } else {
- _soundResource1.play(0x0460E2FA);
- }
+ _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
}
@@ -890,7 +858,7 @@ uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity
void Klayman::stWalking() {
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, 0, -1);
SetUpdateHandler(&Klayman::update);
@@ -901,7 +869,7 @@ void Klayman::stWalking() {
}
void Klayman::spriteUpdate41F300() {
- SetSpriteCallback(&Klayman::spriteUpdate41F320);
+ SetSpriteCallback(&Klayman::suWalkingTestExit);
_deltaX = 0;
}
@@ -910,17 +878,9 @@ uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- if (_soundFlag) {
- _soundResource1.play(0x48498E46);
- } else {
- _soundResource1.play(0x405002D8);
- }
+ _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- if (_soundFlag) {
- _soundResource1.play(0x50399F64);
- } else {
- _soundResource1.play(0x0460E2FA);
- }
+ _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
}
@@ -929,13 +889,13 @@ uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, E
void Klayman::stUpdateWalking() {
if (_status3 == 2) {
- sub41C7B0();
+ gotoNextStateExt();
} else if (_status3 == 3) {
stWalkingOpenDoor();
} else {
- _flagE2 = true;
+ _isSneaking = true;
_acceptInput = true;
- if (ABS(_x4 - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
+ if (ABS(_destX - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
if (_status3 == 0) {
_status2 = 1;
startAnimation(0xF234EE31, 0, -1);
@@ -943,7 +903,7 @@ void Klayman::stUpdateWalking() {
_status2 = 2;
startAnimation(0xF135CC21, 0, -1);
}
- } else if (ABS(_x4 - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
+ } else if (ABS(_destX - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
if (_status3 == 0) {
_status2 = 1;
startAnimation(0x8604A152, 0, -1);
@@ -959,9 +919,9 @@ void Klayman::stUpdateWalking() {
}
}
-void Klayman::spriteUpdate41F320() {
- int16 xdiff = ABS(_x4 - _x);
- int16 xdelta = _x4 - _x;
+void Klayman::suWalkingTestExit() {
+ int16 xdiff = ABS(_destX - _x);
+ int16 xdelta = _destX - _x;
if (xdelta > _deltaX)
xdelta = _deltaX;
@@ -970,15 +930,11 @@ void Klayman::spriteUpdate41F320() {
_deltaX = 0;
- if (xdiff == 0) {
- sendMessage(this, 0x1019, 0);
- } else if (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
- sendMessage(this, 0x1019, 0);
- } else if (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
- sendMessage(this, 0x1019, 0);
- } else if (_status3 == 3 && xdiff < 30) {
- sendMessage(this, 0x1019, 0);
- } else if (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6) {
+ if (xdiff == 0 ||
+ (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) ||
+ (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) ||
+ (_status3 == 3 && xdiff < 30) ||
+ (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) {
sendMessage(this, 0x1019, 0);
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
@@ -993,17 +949,9 @@ void Klayman::spriteUpdate41F320() {
} else if (hitRectNext->type == 0x5003) {
_y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
} else if (hitRectPrev->type == 0x5002) {
- if (xdelta > 0) {
- _y = hitRectPrev->rect.y2;
- } else {
- _y = hitRectPrev->rect.y1;
- }
+ _y = xdelta > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
} else if (hitRectPrev->type == 0x5003) {
- if (xdelta < 0) {
- _y = hitRectPrev->rect.y2;
- } else {
- _y = hitRectPrev->rect.y1;
- }
+ _y = xdelta < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
} else if (_flagF6 && xdelta != 0) {
if (hitRectNext->type == 0x5000) {
_y++;
@@ -1120,42 +1068,54 @@ void Klayman::stPressButtonSide() {
}
}
-void Klayman::sub41CD00(int16 x) {
- if (_x > x) {
- if (_x - x <= 105) {
- sub41CAC0(x);
- } else {
- sub41C930(x, false);
- }
+void Klayman::startSpecialWalkRight(int16 x) {
+ if (_x == x) {
+ _destX = x;
+ gotoState(NULL);
+ gotoNextStateExt();
} else if (_x < x) {
- sub41C930(x, false);
+ startWalkToX(x, false);
+ } else if (_x - x <= 105) {
+ sub41CAC0(x);
} else {
- _x4 = x;
+ startWalkToX(x, false);
+ }
+}
+
+void Klayman::startSpecialWalkLeft(int16 x) {
+ if (x == _x) {
+ _destX = x;
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
+ } else if (x < _x) {
+ startWalkToX(x, false);
+ } else if (x - _x <= 105) {
+ sub41CAC0(x);
+ } else {
+ startWalkToX(x, false);
}
}
void Klayman::sub41CC40(int16 x1, int16 x2) {
if (_x > x1) {
if (_x == x1 + x2) {
- _x4 = x1 + x2;
+ _destX = x1 + x2;
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
} else if (_x < x1 + x2) {
sub41CAC0(x1 + x2);
} else {
- sub41C930(x1 + x2, false);
+ startWalkToX(x1 + x2, false);
}
} else {
if (_x == x1 - x2) {
- _x4 = x1 - x2;
+ _destX = x1 - x2;
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
} else if (_x > x1 - x2) {
sub41CAC0(x1 - x2);
} else {
- sub41C930(x1 - x2, false);
+ startWalkToX(x1 - x2, false);
}
}
}
@@ -1163,35 +1123,35 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
void Klayman::sub41CAC0(int16 x) {
int16 xdiff = ABS(x - _x);
if (x == _x) {
- _x4 = x;
- if (!_flagE1 && !_flagE2 && !_flagE3) {
+ _destX = x;
+ if (!_isWalking && !_isSneaking && !_isLargeStep) {
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
}
- } else if (xdiff <= 36 && !_flagE1 && !_flagE2 && !_flagE3) {
- _x4 = x;
+ } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) {
+ _destX = x;
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
} else if (xdiff <= 42 && _status3 != 3) {
- if (_flagE2 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_x4 - _x) > xdiff) {
- _x4 = x;
+ if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
+ _destX = x;
} else {
- _x4 = x;
+ _destX = x;
GotoState(&Klayman::stSneak);
}
- } else if (_flagE3 && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
- _x4 = x;
+ } else if (_isLargeStep && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _destX = x;
} else {
- _x4 = x;
+ _destX = x;
GotoState(&Klayman::stLargeStep);
}
}
void Klayman::stLargeStep() {
_status2 = 2;
- _flagE3 = true;
+ _isLargeStep = true;
_acceptInput = true;
- setDoDeltaX(_x4 >= _x ? 1 : 0);
+ setDoDeltaX(_destX >= _x ? 1 : 0);
startAnimation(0x08B28116, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLargeStep);
@@ -1200,11 +1160,11 @@ void Klayman::stLargeStep() {
}
void Klayman::stLargeStepDone() {
- _flagE3 = false;
+ _isLargeStep = false;
}
void Klayman::suLargeStep() {
- int16 xdiff = _x4 - _x;
+ int16 xdiff = _destX - _x;
if (_doDeltaX) {
_deltaX = -_deltaX;
@@ -1219,7 +1179,7 @@ void Klayman::suLargeStep() {
_deltaX = 0;
- if (_x != _x4) {
+ if (_x != _destX) {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdiff;
if (_field114) {
@@ -1232,17 +1192,9 @@ void Klayman::suLargeStep() {
} else if (hitRectNext->type == 0x5003) {
_y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
} else if (hitRectPrev->type == 0x5002) {
- if (xdiff > 0) {
- _y = hitRectPrev->rect.y2;
- } else {
- _y = hitRectPrev->rect.y1;
- }
+ _y = xdiff > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
} else if (hitRectPrev->type == 0x5003) {
- if (xdiff < 0) {
- _y = hitRectPrev->rect.y2;
- } else {
- _y = hitRectPrev->rect.y1;
- }
+ _y = xdiff < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
}
}
processDelta();
@@ -1260,8 +1212,8 @@ uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *s
}
break;
case 0x3002:
- _x = _x4;
- sub41C7B0();
+ _x = _destX;
+ gotoNextStateExt();
break;
}
return messageResult;
@@ -1394,7 +1346,7 @@ uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *
void Klayman::spriteUpdate41F230() {
AnimatedSprite::updateDeltaXY();
- _x4 = _x;
+ _destX = _x;
}
void Klayman::sub420340() {
@@ -1492,65 +1444,65 @@ void Klayman::sub41CCE0(int16 x) {
void Klayman::stContinueClimbLadderUp() {
_status2 = 0;
_acceptInput = true;
- _statusE0 = 3;
+ _ladderStatus = 3;
startAnimationByHash(0x3A292504, 0x01084280, 0);
_newStickFrameHash = 0x01084280;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteCallback(NULL);
- sub41C7B0();
+ gotoNextStateExt();
}
-void Klayman::sub4209D0() {
- if (!stStartAction(AnimationCallback(&Klayman::sub4209D0))) {
+void Klayman::stStartClimbLadderDown() {
+ if (!stStartAction(AnimationCallback(&Klayman::stStartClimbLadderDown))) {
_status2 = 0;
- if (_y4 < _y) {
- if (_statusE0 == 1) {
- _statusE0 = 2;
- sub420BC0();
+ if (_destY < _y) {
+ if (_ladderStatus == 1) {
+ _ladderStatus = 2;
+ stClimbLadderHalf();
} else {
- sub41C7B0();
+ gotoNextStateExt();
}
- } else if (_statusE0 == 0) {
- _statusE0 = 2;
+ } else if (_ladderStatus == 0) {
+ _ladderStatus = 2;
_acceptInput = false;
startAnimation(0x122D1505, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetMessageHandler(&Klayman::hmClimbLadderUpDown);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- } else if (_statusE0 == 3) {
- _statusE0 = 2;
- _acceptInput = false;
+ } else if (_ladderStatus == 3) {
+ _ladderStatus = 2;
+ _acceptInput = true;
startAnimationByHash(0x122D1505, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetMessageHandler(&Klayman::hmClimbLadderUpDown);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- } else if (_statusE0 == 1) {
- _statusE0 = 2;
+ } else if (_ladderStatus == 1) {
+ _ladderStatus = 2;
_acceptInput = true;
startAnimation(0x122D1505, 29 - _currFrameIndex, -1);
}
}
}
-void Klayman::sub420BC0() {
+void Klayman::stClimbLadderHalf() {
_status2 = 2;
- if (_statusE0 == 1) {
- _statusE0 = 0;
+ if (_ladderStatus == 1) {
+ _ladderStatus = 0;
_acceptInput = false;
startAnimationByHash(0x3A292504, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- } else if (_statusE0 == 1) {
- _statusE0 = 0;
+ } else if (_ladderStatus == 2) {
+ _ladderStatus = 0;
_acceptInput = false;
startAnimationByHash(0x122D1505, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
} else {
- sub41C7B0();
+ gotoNextStateExt();
}
}
@@ -1572,7 +1524,7 @@ uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1583,19 +1535,14 @@ uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, E
} else if (param.asInteger() == 0x400A0E64) {
_soundResource1.play(0x50E081D9);
} else if (param.asInteger() == 0x02421405) {
- if (_statusE0 == 1) {
+ if (_ladderStatus == 1) {
startAnimationByHash(0x3A292504, 0x01084280, 0);
- } else {
- startAnimationByHash(0x122D1505, 0x01084280, 0);
- }
- if (_statusE0 == 1) {
- if (_y4 >= _y - 30) {
+ if (_destY >= _y - 30)
sendMessage(this, 0x1019, 0);
- }
} else {
- if (_y4 <= _y) {
+ startAnimationByHash(0x122D1505, 0x01084280, 0);
+ if (_destY <= _y)
sendMessage(this, 0x1019, 0);
- }
}
}
break;
@@ -1603,27 +1550,27 @@ uint32 Klayman::handleMessage41E0D0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub420AD0() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420AD0))) {
+void Klayman::stStartClimbLadderUp() {
+ if (!stStartAction(AnimationCallback(&Klayman::stStartClimbLadderUp))) {
_status2 = 0;
- if (_y4 >= _y - 30) {
- sub41C7B0();
- } else if (_statusE0 == 0) {
- _statusE0 = 1;
+ if (_destY >= _y - 30) {
+ gotoNextStateExt();
+ } else if (_ladderStatus == 0) {
+ _ladderStatus = 1;
_acceptInput = false;
startAnimation(0x3A292504, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetMessageHandler(&Klayman::hmClimbLadderUpDown);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- } else if (_statusE0 == 3) {
- _statusE0 = 1;
+ } else if (_ladderStatus == 3) {
+ _ladderStatus = 1;
_acceptInput = true;
startAnimationByHash(0x3A292504, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E0D0);
+ SetMessageHandler(&Klayman::hmClimbLadderUpDown);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
- } else if (_statusE0 == 2) {
- _statusE0 = 1;
+ } else if (_ladderStatus == 2) {
+ _ladderStatus = 1;
_acceptInput = true;
startAnimation(0x3A292504, 29 - _currFrameIndex, -1);
}
@@ -1648,17 +1595,9 @@ uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity
} else if (param.asInteger() == 0x110010D1) {
sendMessage(_parentScene, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
- if (_soundFlag) {
- _soundResource1.play(0x48498E46);
- } else {
- _soundResource1.play(0x405002D8);
- }
+ _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- if (_soundFlag) {
- _soundResource1.play(0x50399F64);
- } else {
- _soundResource1.play(0x0460E2FA);
- }
+ _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
}
@@ -1792,7 +1731,7 @@ void Klayman::stReturnFromUse() {
}
void Klayman::stWalkingOpenDoor() {
- _flagF8 = false;
+ _isWalkingOpenDoorNotified = false;
_acceptInput = false;
startAnimation(0x11A8E012, 0, -1);
SetUpdateHandler(&Klayman::update);
@@ -1801,16 +1740,16 @@ void Klayman::stWalkingOpenDoor() {
}
void Klayman::suWalkingOpenDoor() {
- if (!_flagF8 && ABS(_x4 - _x) < 80) {
+ if (!_isWalkingOpenDoorNotified && ABS(_destX - _x) < 80) {
sendMessage(_parentScene, 0x4829, 0);
- _flagF8 = true;
+ _isWalkingOpenDoorNotified = true;
}
AnimatedSprite::updateDeltaXY();
}
void Klayman::stMoveObjectSkipTurnFaceObject() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- _flagE4 = false;
+ _isMoveObjectRequested = false;
_acceptInput = true;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
@@ -1829,7 +1768,7 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti
if (_attachedSprite)
sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
} else if (param.asInteger() == 0x02421405) {
- if (_flagE4 && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
+ if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
stMoveObjectSkipTurn();
} else {
FinalizeState(&Klayman::sub420660);
@@ -1842,14 +1781,14 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti
}
break;
case 0x480A:
- _flagE4 = true;
+ _isMoveObjectRequested = true;
return 0;
}
return handleMessage41D480(messageNum, param, sender);
}
void Klayman::stMoveObjectSkipTurn() {
- _flagE4 = false;
+ _isMoveObjectRequested = false;
_acceptInput = true;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
@@ -1861,7 +1800,7 @@ void Klayman::stMoveObjectFaceObject() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klayman::stMoveObjectFaceObject))) {
_status2 = 2;
- _flagE4 = false;
+ _isMoveObjectRequested = false;
_acceptInput = true;
startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&Klayman::update);
@@ -1925,7 +1864,7 @@ void Klayman::stReleaseLever() {
_acceptInput = false;
_isLeverDown = false;
} else {
- sub41C7B0();
+ gotoNextStateExt();
}
}
@@ -1951,7 +1890,7 @@ void Klayman::stInsertDisk() {
}
if (_counter2 == 0) {
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
} else {
startAnimation(0xD8C8D100, 0, -1);
SetUpdateHandler(&Klayman::update);
@@ -2001,7 +1940,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -2027,7 +1966,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
// TODO: It's not really a point but an x1/x2 pair
@@ -2052,7 +1991,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4836:
if (param.asInteger() == 1) {
@@ -2061,10 +2000,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -2125,7 +2064,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -2169,7 +2108,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
sub41CCE0(param.asInteger());
@@ -2180,17 +2119,17 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4821:
sendMessage(_parentScene, 0x2005, 0);
- _y4 = param.asInteger();
- GotoState(&Klayman::sub4209D0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
break;
case 0x4822:
sendMessage(_parentScene, 0x2005, 0);
- _y4 = param.asInteger();
- GotoState(&Klayman::sub420AD0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
break;
case 0x4823:
sendMessage(_parentScene, 0x2006, 0);
- GotoState(&Klayman::sub420BC0);
+ GotoState(&Klayman::stClimbLadderHalf);
break;
case 0x482E:
if (param.asInteger() == 1) {
@@ -2207,10 +2146,10 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -2295,18 +2234,13 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x480B, (uint32)_doDeltaX);
- }
+ sendMessage(_attachedSprite, 0x480B, (uint32)_doDeltaX);
} else if (param.asInteger() == 0x02421405) {
- if (_flagE4) {
- if (_attachedSprite) {
- if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0) {
- stContinueMovingVenusFlyTrap();
- }
- }
+ if (_isMoveObjectRequested) {
+ if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0)
+ stContinueMovingVenusFlyTrap();
} else {
- SetMessageHandler(&KmScene1002::handleMessage449BA0);
+ SetMessageHandler(&KmScene1002::hmFirstMoveVenusFlyTrap);
}
} else if (param.asInteger() == 0x4AB28209) {
sendMessage(_attachedSprite, 0x482A, 0);
@@ -2319,13 +2253,13 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m
}
break;
case 0x480A:
- _flagE4 = true;
+ _isMoveObjectRequested = true;
return 0;
}
return handleMessage41D480(messageNum, param, sender);
}
-uint32 KmScene1002::handleMessage449BA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2433,7 +2367,7 @@ void KmScene1002::sub449F70() {
_soundResource1.play(0x41648271);
_status2 = 1;
_acceptInput = false;
- _flagE1 = false;
+ _isWalking = false;
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
@@ -2477,7 +2411,7 @@ void KmScene1002::sub44A150() {
_soundResource1.play(0x41648271);
_status2 = 1;
_acceptInput = false;
- _flagE1 = false;
+ _isWalking = false;
startAnimationByHash(0x0013A206, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D480);
@@ -2550,7 +2484,7 @@ void KmScene1002::stHitByBoxingGloveDone() {
void KmScene1002::stMoveVenusFlyTrap() {
if (!stStartAction(AnimationCallback(&KmScene1002::stMoveVenusFlyTrap))) {
_status2 = 2;
- _flagE4 = false;
+ _isMoveObjectRequested = false;
_acceptInput = true;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x5C01A870, 0, -1);
@@ -2562,7 +2496,7 @@ void KmScene1002::stMoveVenusFlyTrap() {
}
void KmScene1002::stContinueMovingVenusFlyTrap() {
- _flagE4 = false;
+ _isMoveObjectRequested = false;
_acceptInput = true;
startAnimationByHash(0x5C01A870, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
@@ -2587,17 +2521,17 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4818:
- sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x481E:
GotoState(&KmScene1004::stReadNote);
@@ -2608,36 +2542,36 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4821:
sendMessage(_parentScene, 0x2000, 0);
- _y4 = param.asInteger();
- GotoState(&Klayman::sub4209D0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
break;
case 0x4822:
sendMessage(_parentScene, 0x2000, 0);
- _y4 = param.asInteger();
- GotoState(&Klayman::sub420AD0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
break;
case 0x4823:
sendMessage(_parentScene, 0x2001, 0);
- GotoState(&Klayman::sub420BC0);
+ GotoState(&Klayman::stClimbLadderHalf);
break;
case 0x4824:
sendMessage(_parentScene, 0x2000, 0);
- _y4 = _dataResource.getPoint(param.asInteger()).y;
- GotoState(&Klayman::sub4209D0);
+ _destY = _dataResource.getPoint(param.asInteger()).y;
+ GotoState(&Klayman::stStartClimbLadderDown);
break;
case 0x4825:
sendMessage(_parentScene, 0x2000, 0);
- _y4 = _dataResource.getPoint(param.asInteger()).y;
- GotoState(&Klayman::sub420AD0);
+ _destY = _dataResource.getPoint(param.asInteger()).y;
+ GotoState(&Klayman::stStartClimbLadderUp);
break;
case 0x4828:
GotoState(&Klayman::stTurnToBackToUse);
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -2678,7 +2612,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
if (_isSittingInTeleporter)
@@ -2688,7 +2622,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&Klayman::stWalking);
} else {
GotoState(&Klayman::stPeekWall);
@@ -2696,7 +2630,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481D:
if (_isSittingInTeleporter)
@@ -2775,7 +2709,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -2802,7 +2736,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -2822,13 +2756,13 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -2836,7 +2770,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
void KmScene1201::update40DBE0() {
if (_x >= 380)
- sub41C7B0();
+ gotoNextStateExt();
Klayman::update();
}
@@ -3059,7 +2993,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3075,7 +3009,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3094,10 +3028,10 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -3113,7 +3047,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3123,7 +3057,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
}
return 0;
@@ -3159,7 +3093,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
if (_isSittingInTeleporter)
@@ -3187,7 +3121,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481A:
GotoState(&Klayman::stInsertDisk);
@@ -3226,7 +3160,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x482E:
if (param.asInteger() == 1) {
@@ -3262,10 +3196,10 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub417D80();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return messageResult;
@@ -3312,7 +3246,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3338,7 +3272,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481A:
if (param.asInteger() == 1) {
@@ -3367,10 +3301,10 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stStepOver);
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -3425,7 +3359,7 @@ void KmScene1308::sub456150() {
}
if (!_flag1) {
gotoState(NULL);
- sub41C7B0();
+ gotoNextStateExt();
} else {
_acceptInput = false;
startAnimation(0xDC409440, 0, -1);
@@ -3449,7 +3383,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3472,7 +3406,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3492,7 +3426,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x482E:
if (param.asInteger() == 1) {
@@ -3524,7 +3458,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3538,7 +3472,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3569,7 +3503,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3595,7 +3529,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3608,10 +3542,10 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stReleaseLever);
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -3629,7 +3563,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -3652,7 +3586,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481A:
GotoState(&Klayman::stInsertDisk);
@@ -3685,13 +3619,13 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -3708,7 +3642,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
if (_isSittingInTeleporter)
@@ -3727,7 +3661,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3759,7 +3693,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4834:
GotoState(&Klayman::stStepOver);
@@ -3775,10 +3709,10 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -3801,7 +3735,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
if (_isSittingInTeleporter) {
@@ -3824,7 +3758,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -3941,14 +3875,14 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481D:
GotoState(&Klayman::stTurnToUse);
@@ -3958,13 +3892,13 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -3983,7 +3917,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
if (_isSittingInTeleporter) {
@@ -3994,7 +3928,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&Klayman::stWalking);
} else {
GotoState(&Klayman::stPeekWall);
@@ -4002,7 +3936,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481D:
if (_isSittingInTeleporter) {
@@ -4084,7 +4018,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
if (_isSittingInTeleporter)
@@ -4115,7 +4049,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4232,7 +4166,7 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -4247,10 +4181,10 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4818:
- sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4267,7 +4201,7 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x482E:
if (param.asInteger() == 1) {
@@ -4284,10 +4218,10 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -4302,7 +4236,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -4327,10 +4261,10 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4818:
- sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4819:
GotoState(&Klayman::stClayDoorOpen);
@@ -4353,13 +4287,13 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -4378,14 +4312,14 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&KmScene2205::sub423980);
} else {
GotoState(&Klayman::stPeekWall);
@@ -4398,16 +4332,16 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4818:
- sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -4418,7 +4352,7 @@ void KmScene2205::sub423980() {
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
@@ -4446,7 +4380,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -4456,7 +4390,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&KmScene2206::sub482530);
} else {
GotoState(&Klayman::stPeekWall);
@@ -4480,7 +4414,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4504,7 +4438,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x482E:
if (param.asInteger() == 1) {
@@ -4524,10 +4458,10 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41CE70();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -4536,9 +4470,8 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
void KmScene2206::spriteUpdate482450() {
_yDelta++;
_y += _yDelta;
- if (_y > 600) {
+ if (_y > 600)
sendMessage(this, 0x1019, 0);
- }
}
void KmScene2206::sub482490() {
@@ -4560,7 +4493,7 @@ void KmScene2206::sub482530() {
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
@@ -4586,7 +4519,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
@@ -4608,7 +4541,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4622,13 +4555,13 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x483F:
- sub41CD00(param.asInteger());
+ startSpecialWalkRight(param.asInteger());
break;
case 0x4840:
- sub41CD70(param.asInteger());
+ startSpecialWalkLeft(param.asInteger());
break;
}
return 0;
@@ -4704,14 +4637,14 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&KmScene2242::sub444D20);
} else {
GotoState(&Klayman::stPeekWall);
@@ -4728,7 +4661,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481B:
if (param.asPoint().y != 0) {
@@ -4752,7 +4685,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4837:
sub41CE70();
@@ -4766,7 +4699,7 @@ void KmScene2242::sub444D20() {
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
@@ -4789,14 +4722,14 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&KmHallOfRecords::sub43B130);
} else {
GotoState(&Klayman::stPeekWall);
@@ -4804,7 +4737,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481F:
if (param.asInteger() == 0) {
@@ -4821,7 +4754,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4837:
sub41CE70();
@@ -4835,7 +4768,7 @@ void KmHallOfRecords::sub43B130() {
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
@@ -4858,14 +4791,14 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41C930(param.asPoint().x, false);
+ startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
if (param.asInteger() != 0) {
- _x4 = param.asInteger();
+ _destX = param.asInteger();
GotoState(&KmScene2247::sub453520);
} else {
GotoState(&Klayman::stPeekWall);
@@ -4873,7 +4806,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4817:
setDoDeltaX(param.asInteger());
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x481F:
if (param.asInteger() == 0) {
@@ -4890,7 +4823,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- sub41C7B0();
+ gotoNextStateExt();
break;
case 0x4837:
sub41CE70();
@@ -4904,7 +4837,7 @@ void KmScene2247::sub453520() {
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
- _flagE1 = true;
+ _isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3b8ee69..c19e884 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -75,9 +75,9 @@ public:
void stReleaseRing();
void stJumpToRing4();
void stContinueClimbLadderUp();
- void sub4209D0();
- void sub420BC0();
- void sub420AD0();
+ void stStartClimbLadderDown();
+ void stClimbLadderHalf();
+ void stStartClimbLadderUp();
void stWalkToFrontNoStep();
void stWalkToFront();
void stTurnToFront();
@@ -122,7 +122,7 @@ public:
void spriteUpdate41F230();
void suWalkingOpenDoor();
void spriteUpdate41F300();
- void spriteUpdate41F320();
+ void suWalkingTestExit();
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -139,20 +139,20 @@ public:
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
- int _statusE0;
- bool _flagE1;
- bool _flagE2;
- bool _flagE3;
- bool _flagE4;
+ int _ladderStatus;
+ bool _isWalking;
+ bool _isSneaking;
+ bool _isLargeStep;
+ bool _isMoveObjectRequested;
bool _acceptInput;
- int16 _x4, _y4;
+ int16 _destX, _destY;
int16 _counter, _counterMax;
int16 _counter3, _counter3Max;
int16 _counter1;
int16 _counter2;
bool _flagF6;
bool _isLeverDown;
- bool _flagF8;
+ bool _isWalkingOpenDoorNotified;
int _status2;
bool _flagFA;
SoundResource _soundResource1;
@@ -187,11 +187,11 @@ protected:
void sub41FEC0();
uint32 handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41D320(uint32 fileHash, AnimationCb callback);
- void update41D2B0();
+ void startIdleAnimation(uint32 fileHash, AnimationCb callback);
+ void upIdleAnimation();
bool stStartActionFromIdle(AnimationCb callback);
- void sub41C7B0();
+ void gotoNextStateExt();
void sub41C770();
void sub41C790();
@@ -202,7 +202,7 @@ protected:
uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41C930(int16 x, bool flag);
+ void startWalkToX(int16 x, bool flag);
uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -211,7 +211,7 @@ protected:
void stSneak();
void stWalkingDone();
uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41CD70(int16 x);
+ void startSpecialWalkLeft(int16 x);
void stStartWalking();
uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -219,7 +219,7 @@ protected:
uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41CD00(int16 x);
+ void startSpecialWalkRight(int16 x);
void sub41CC40(int16 x1, int16 x2);
void sub41CAC0(int16 x);
void sub41CCE0(int16 x);
@@ -232,7 +232,7 @@ protected:
uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmHoldRing(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -271,7 +271,7 @@ protected:
uint32 handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage449BA0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender);
void suFallDown();
Commit: f43b54827e543aa28701cbb1b2d46643802cbb16
https://github.com/scummvm/scummvm/commit/f43b54827e543aa28701cbb1b2d46643802cbb16
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:03-07:00
Commit Message:
NEVERHOOD: Some renaming in Module1000
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index ea1400e..2ee98ac 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -120,7 +120,7 @@ AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
createSurface(800, 137, 242);
_x = 726;
_y = 440;
- callback1();
+ stShowIdleDoor();
_soundResource2.load(0xED403E03);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1001Door::handleMessage);
@@ -130,7 +130,7 @@ uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m,
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
- handleMessage2000h();
+ hammerHitsDoor();
break;
case 0x3002:
gotoNextState();
@@ -139,18 +139,18 @@ uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m,
return 0;
}
-void AsScene1001Door::handleMessage2000h() {
+void AsScene1001Door::hammerHitsDoor() {
switch (getGlobalVar(0x52371C95)) {
case 0:
case 1:
_soundResource1.play(0x65482F03);
startAnimation(0x624C0498, 1, 3);
- NextState(&AsScene1001Door::callback1);
+ NextState(&AsScene1001Door::stShowIdleDoor);
break;
case 2:
_soundResource2.play();
startAnimation(0x624C0498, 6, 6);
- NextState(&AsScene1001Door::callback2);
+ NextState(&AsScene1001Door::stBustedDoorMove);
break;
default:
// Nothing
@@ -159,7 +159,7 @@ void AsScene1001Door::handleMessage2000h() {
incGlobalVar(0x52371C95, 1);
}
-void AsScene1001Door::callback1() {
+void AsScene1001Door::stShowIdleDoor() {
switch (getGlobalVar(0x52371C95)) {
case 1:
startAnimation(0x624C0498, 4, -1);
@@ -180,14 +180,14 @@ void AsScene1001Door::callback1() {
}
}
-void AsScene1001Door::callback2() {
+void AsScene1001Door::stBustedDoorMove() {
setGlobalVar(0xD217189D, 1);
startAnimation(0x624C0498, 6, 6);
- NextState(&AsScene1001Door::callback3);
+ NextState(&AsScene1001Door::stBustedDoorGone);
_x = 30;
}
-void AsScene1001Door::callback3() {
+void AsScene1001Door::stBustedDoorGone() {
_soundResource1.play();
stopAnimation();
setVisible(false);
@@ -330,7 +330,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
}
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _fieldE4(-1), _fieldE6(-1) {
+ : Scene(vm, parentModule, true) {
_name = "Scene1001";
@@ -505,15 +505,15 @@ AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool f
createSurface(990, 68, 314);
if (flag2) {
startAnimation(0x04103090, 0, -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
} else {
startAnimation(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
+ SetMessageHandler(&AsScene1002Ring::hmRingIdle);
}
} else {
createSurface(990, 68, 138);
startAnimation(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage4475E0);
+ SetMessageHandler(&AsScene1002Ring::hmRingIdle);
}
setClipRect(0, clipY1, 640, 480);
@@ -530,13 +530,13 @@ void AsScene1002Ring::update() {
AnimatedSprite::updatePosition();
}
-uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002Ring::hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4806:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
sendMessage(_parentScene, 0x4806, 0);
- SetMessageHandler(&AsScene1002Ring::handleMessage447760);
+ SetMessageHandler(&AsScene1002Ring::hmRingPulled1);
if (_flag1) {
startAnimation(0x87502558, 0, -1);
} else {
@@ -546,7 +546,7 @@ uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam &
case 0x480F:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
sendMessage(_parentScene, 0x480F, 0);
- SetMessageHandler(&AsScene1002Ring::handleMessage447890);
+ SetMessageHandler(&AsScene1002Ring::hmRingPulled2);
startAnimation(0x861A2020, 0, -1);
break;
case 0x482A:
@@ -559,23 +559,23 @@ uint32 AsScene1002Ring::handleMessage4475E0(int messageNum, const MessageParam &
return messageResult;
}
-uint32 AsScene1002Ring::handleMessage447760(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002Ring::hmRingPulled1(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
if (_flag1) {
startAnimation(0x78D0A812, 0, -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
} else {
startAnimation(0xB85D2A10, 0, -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
}
break;
case 0x4807:
sendMessage(_parentScene, 0x4807, 0);
setDoDeltaX(_vm->_rnd->getRandomNumber(1));
startAnimation(0x8258A030, 0, -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
+ SetMessageHandler(&AsScene1002Ring::hmRingReleased);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -587,12 +587,12 @@ uint32 AsScene1002Ring::handleMessage447760(int messageNum, const MessageParam &
return messageResult;
}
-uint32 AsScene1002Ring::handleMessage447890(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002Ring::hmRingPulled2(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
startAnimation(0x04103090, 0, -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage447930);
+ SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -604,14 +604,14 @@ uint32 AsScene1002Ring::handleMessage447890(int messageNum, const MessageParam &
return messageResult;
}
-uint32 AsScene1002Ring::handleMessage447930(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002Ring::hmRingHangingLow(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4807:
sendMessage(_parentScene, 0x4807, 0);
setDoDeltaX(_vm->_rnd->getRandomNumber(1));
startAnimation(0x8258A030, 0, -1);
- SetMessageHandler(&AsScene1002Ring::handleMessage447A00);
+ SetMessageHandler(&AsScene1002Ring::hmRingReleased);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -623,8 +623,8 @@ uint32 AsScene1002Ring::handleMessage447930(int messageNum, const MessageParam &
return messageResult;
}
-uint32 AsScene1002Ring::handleMessage447A00(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage4475E0(messageNum, param, sender);
+uint32 AsScene1002Ring::hmRingReleased(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmRingIdle(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x05410F72) {
@@ -715,16 +715,16 @@ void AsScene1002Door::suCloseDoor() {
}
}
-Class505::Class505(NeverhoodEngine *vm)
+AsScene1002BoxingGloveHitEffect::AsScene1002BoxingGloveHitEffect(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1400) {
createSurface(1025, 88, 165);
setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class505::handleMessage);
+ SetMessageHandler(&AsScene1002BoxingGloveHitEffect::handleMessage);
}
-uint32 Class505::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002BoxingGloveHitEffect::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2004:
@@ -741,39 +741,39 @@ uint32 Class505::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *class505)
- : AnimatedSprite(vm, 1300), _rect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _class505(class505),
+AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *AsScene1002BoxingGloveHitEffect)
+ : AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(AsScene1002BoxingGloveHitEffect),
_soundResource(vm) {
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
- SetSpriteCallback(&AsScene1002DoorSpy::spriteUpdate448AA0);
+ SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
+ SetSpriteCallback(&AsScene1002DoorSpy::suDoorSpy);
createSurface(800, 136, 147);
setClipRect(clipRect);
- spriteUpdate448AA0();
+ suDoorSpy();
_soundResource.load(0xC0C40298);
startAnimation(0x586C1D48, 0, 0);
}
-uint32 AsScene1002DoorSpy::handleMessage4489D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002DoorSpy::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xA61CA1C2) {
- sendMessage(_class505, 0x2004, 0);
+ sendMessage(_asBoxingGloveHitEffect, 0x2004, 0);
} else if (param.asInteger() == 0x14CE0620) {
_soundResource.play();
}
break;
case 0x2003:
- sub448B10();
+ stDoorSpyBoxingGlove();
break;
}
return messageResult;
}
-uint32 AsScene1002DoorSpy::handleMessage448A60(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage4489D0(messageNum, param, sender);
+uint32 AsScene1002DoorSpy::hmDoorSpyAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextState();
@@ -782,24 +782,24 @@ uint32 AsScene1002DoorSpy::handleMessage448A60(int messageNum, const MessagePara
return messageResult;
}
-void AsScene1002DoorSpy::spriteUpdate448AA0() {
+void AsScene1002DoorSpy::suDoorSpy() {
_x = _asDoor->getX() + 34;
_y = _asDoor->getY() + 175;
}
-void AsScene1002DoorSpy::sub448AC0() {
- setClipRect(_rect);
+void AsScene1002DoorSpy::stDoorSpyIdle() {
+ setClipRect(_clipRect);
_parentScene->setSurfacePriority(getSurface(), 800);
startAnimation(0x586C1D48, 0, 0);
- SetMessageHandler(&AsScene1002DoorSpy::handleMessage4489D0);
+ SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
}
-void AsScene1002DoorSpy::sub448B10() {
+void AsScene1002DoorSpy::stDoorSpyBoxingGlove() {
setClipRect(0, 0, 640, 480);
_parentScene->setSurfacePriority(getSurface(), 1200);
startAnimation(0x586C1D48, 1, -1);
- SetMessageHandler(&AsScene1002DoorSpy::handleMessage448A60);
- NextState(&AsScene1002DoorSpy::sub448AC0);
+ SetMessageHandler(&AsScene1002DoorSpy::hmDoorSpyAnimation);
+ NextState(&AsScene1002DoorSpy::stDoorSpyIdle);
}
Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
@@ -908,7 +908,7 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
createSurface(995, 175, 195);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
if (!_flag) {
@@ -916,19 +916,19 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
setDoDeltaX(1);
_x = 366;
_y = 435;
- sub4485F0();
+ stRingGrabbed();
} else {
_x = 174 + getGlobalVar(0x1B144052) * 32;
_y = 435;
- sub448660();
+ stIdle();
}
} else {
_x = 186 + getGlobalVar(0x86341E88) * 32;
_y = 364;
if (getGlobalVar(0x13206309) || getGlobalVar(0x80101B1E)) {
- sub4485F0();
+ stRingGrabbed();
} else {
- sub448660();
+ stIdle();
}
}
@@ -942,7 +942,7 @@ void AsScene1002VenusFlyTrap::update() {
AnimatedSprite::update();
}
-void AsScene1002VenusFlyTrap::update447FB0() {
+void AsScene1002VenusFlyTrap::upIdle() {
if (_countdown == 0 && _klayman->getX() - 20 > _x) {
setDoDeltaX(1);
} else if (_klayman->getX() + 20 < _x) {
@@ -951,7 +951,7 @@ void AsScene1002VenusFlyTrap::update447FB0() {
update();
}
-uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -978,15 +978,15 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
if (!_flag) {
if (getGlobalVar(0x8306F218)) {
- sub448560();
+ stRelease();
} else {
- sub448530();
+ stWalk();
}
} else {
if (getGlobalVar(0x13206309) || getGlobalVar(0x80101B1E)) {
- sub448560();
+ stRelease();
} else {
- sub448530();
+ stWalk();
}
}
break;
@@ -1005,11 +1005,11 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
break;
case 0x480E:
if (param.asInteger() == 1) {
- sub4485B0();
+ stGrabRing();
}
break;
case 0x4810:
- sub448780();
+ swallowKlayman();
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 995);
@@ -1021,8 +1021,8 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448000(int messageNum, const Messag
return messageResult;
}
-uint32 AsScene1002VenusFlyTrap::handleMessage4482E0(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage448000(messageNum, param, sender);
+uint32 AsScene1002VenusFlyTrap::hmAnimationSimple(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextState();
@@ -1031,7 +1031,7 @@ uint32 AsScene1002VenusFlyTrap::handleMessage4482E0(int messageNum, const Messag
return messageResult;
}
-uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1066,87 +1066,87 @@ uint32 AsScene1002VenusFlyTrap::handleMessage448320(int messageNum, const Messag
return messageResult;
}
-void AsScene1002VenusFlyTrap::sub4484F0() {
+void AsScene1002VenusFlyTrap::stWalkBack() {
setDoDeltaX(2);
startAnimation(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- NextState(&AsScene1002VenusFlyTrap::sub448660);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
+ NextState(&AsScene1002VenusFlyTrap::stIdle);
}
-void AsScene1002VenusFlyTrap::sub448530() {
+void AsScene1002VenusFlyTrap::stWalk() {
startAnimation(0xC4080034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
- NextState(&AsScene1002VenusFlyTrap::sub448660);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationSimple);
+ NextState(&AsScene1002VenusFlyTrap::stIdle);
}
-void AsScene1002VenusFlyTrap::sub448560() {
+void AsScene1002VenusFlyTrap::stRelease() {
sendMessage(_parentScene, 0x4807, 0);
startAnimation(0x82292851, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
- NextState(&AsScene1002VenusFlyTrap::sub448660);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationSimple);
+ NextState(&AsScene1002VenusFlyTrap::stIdle);
}
-void AsScene1002VenusFlyTrap::sub4485B0() {
+void AsScene1002VenusFlyTrap::stGrabRing() {
setDoDeltaX(1);
startAnimation(0x86A82A11, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage4482E0);
- NextState(&AsScene1002VenusFlyTrap::sub4485F0);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationSimple);
+ NextState(&AsScene1002VenusFlyTrap::stRingGrabbed);
}
-void AsScene1002VenusFlyTrap::sub4485F0() {
+void AsScene1002VenusFlyTrap::stRingGrabbed() {
startAnimation(0xB5A86034, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
}
-void AsScene1002VenusFlyTrap::sub448620() {
+void AsScene1002VenusFlyTrap::stKlaymanInside() {
startAnimation(0x31303094, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(NULL);
- NextState(&AsScene1002VenusFlyTrap::sub448720);
+ NextState(&AsScene1002VenusFlyTrap::stKlaymanInsideMoving);
_countdown = 24;
}
-void AsScene1002VenusFlyTrap::sub448660() {
+void AsScene1002VenusFlyTrap::stIdle() {
startAnimation(0xC8204250, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update447FB0);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448000);
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::upIdle);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
if (_flag) {
if (_x >= 154 && _x <= 346) {
setGlobalVar(0x86341E88, (_x - 186) / 32);
} else {
- NextState(&AsScene1002VenusFlyTrap::sub4484F0);
+ NextState(&AsScene1002VenusFlyTrap::stWalkBack);
_countdown = 12;
}
} else {
if (_x >= 174 && _x <= 430) {
setGlobalVar(0x1B144052, (_x - 174) / 32);
} else {
- NextState(&AsScene1002VenusFlyTrap::sub4484F0);
+ NextState(&AsScene1002VenusFlyTrap::stWalkBack);
_countdown = 12;
}
}
}
-void AsScene1002VenusFlyTrap::sub448720() {
+void AsScene1002VenusFlyTrap::stKlaymanInsideMoving() {
startAnimation(0x152920C4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- NextState(&AsScene1002VenusFlyTrap::sub448750);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
+ NextState(&AsScene1002VenusFlyTrap::stSpitOutKlayman);
}
-void AsScene1002VenusFlyTrap::sub448750() {
+void AsScene1002VenusFlyTrap::stSpitOutKlayman() {
startAnimation(0x84001117, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- NextState(&AsScene1002VenusFlyTrap::sub448660);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
+ NextState(&AsScene1002VenusFlyTrap::stIdle);
}
-void AsScene1002VenusFlyTrap::sub448780() {
+void AsScene1002VenusFlyTrap::swallowKlayman() {
if (_x - 15 < _klayman->getX() && _x + 15 > _klayman->getX()) {
if (_flag) {
setDoDeltaX(_x > 265 && _x < 330 ? 1 : 0);
@@ -1156,12 +1156,12 @@ void AsScene1002VenusFlyTrap::sub448780() {
sendMessage(_klayman, 0x2001, 0);
startAnimation(0x8C2C80D4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage448320);
- NextState(&AsScene1002VenusFlyTrap::sub448620);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
+ NextState(&AsScene1002VenusFlyTrap::stKlaymanInside);
}
}
-Class506::Class506(NeverhoodEngine *vm)
+AsScene1002OutsideDoorBackground::AsScene1002OutsideDoorBackground(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200), _countdown(0) {
createSurface(850, 186, 212);
@@ -1173,38 +1173,38 @@ Class506::Class506(NeverhoodEngine *vm)
} else {
setVisible(false);
}
- SetUpdateHandler(&Class506::update);
- SetMessageHandler(&Class506::handleMessage4491B0);
+ SetUpdateHandler(&AsScene1002OutsideDoorBackground::update);
+ SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
}
-void Class506::update() {
+void AsScene1002OutsideDoorBackground::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- if (_flag) {
- sub449280();
+ if (_isDoorClosed) {
+ stCloseDoor();
} else {
- sub449250();
+ stOpenDoor();
}
}
AnimatedSprite::update();
}
-uint32 Class506::handleMessage4491B0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002OutsideDoorBackground::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageResult) {
case 0x4808:
- _flag = false;
+ _isDoorClosed = false;
_countdown = 2;
break;
case 0x4809:
- _flag = true;
+ _isDoorClosed = true;
_countdown = 2;
break;
}
return messageResult;
}
-uint32 Class506::handleMessage449210(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage4491B0(messageNum, param, sender);
+uint32 AsScene1002OutsideDoorBackground::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
switch (messageResult) {
case 0x3002:
gotoNextState();
@@ -1213,45 +1213,45 @@ uint32 Class506::handleMessage449210(int messageNum, const MessageParam ¶m,
return messageResult;
}
-void Class506::sub449250() {
+void AsScene1002OutsideDoorBackground::stOpenDoor() {
startAnimation(0x004A4495, 0, -1);
- SetMessageHandler(&Class506::handleMessage4491B0);
+ SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
_newStickFrameIndex = -2;
setVisible(true);
}
-void Class506::sub449280() {
+void AsScene1002OutsideDoorBackground::stCloseDoor() {
startAnimation(0x004A4495, -1, -1);
_playBackwards = true;
- SetMessageHandler(&Class506::handleMessage449210);
- NextState(&Class506::sub4492C0);
+ SetMessageHandler(&AsScene1002OutsideDoorBackground::hmAnimation);
+ NextState(&AsScene1002OutsideDoorBackground::stDoorClosed);
setVisible(true);
}
-void Class506::sub4492C0() {
+void AsScene1002OutsideDoorBackground::stDoorClosed() {
setVisible(false);
stopAnimation();
}
-Class478::Class478(NeverhoodEngine *vm, Klayman *klayman)
+AsScene1002KlaymanLadderHands::AsScene1002KlaymanLadderHands(NeverhoodEngine *vm, Klayman *klayman)
: AnimatedSprite(vm, 1200), _klayman(klayman) {
createSurface(1200, 40, 163);
- SetUpdateHandler(&Class478::update);
+ SetUpdateHandler(&AsScene1002KlaymanLadderHands::update);
SetMessageHandler(&Sprite::handleMessage);
setVisible(false);
}
-void Class478::update() {
+void AsScene1002KlaymanLadderHands::update() {
if (_klayman->getCurrAnimFileHash() == 0x3A292504) {
- startAnimation(0xBA280522, _currFrameIndex, -1);
+ startAnimation(0xBA280522, _klayman->getFrameIndex(), -1);
_newStickFrameIndex = _klayman->getFrameIndex();
setVisible(true);
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
} else if (_klayman->getCurrAnimFileHash() == 0x122D1505) {
- startAnimation(0x1319150C, _currFrameIndex, -1);
+ startAnimation(0x1319150C, _klayman->getFrameIndex(), -1);
_newStickFrameIndex = _klayman->getFrameIndex();
setVisible(true);
_x = _klayman->getX();
@@ -1263,17 +1263,17 @@ void Class478::update() {
AnimatedSprite::update();
}
-Class479::Class479(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman)
+AsScene1002KlaymanPeekHand::AsScene1002KlaymanPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman)
: AnimatedSprite(vm, 1200), _parentScene(parentScene), _klayman(klayman),
- _flag1(false) {
+ _isClipRectSaved(false) {
- SetUpdateHandler(&Class479::update);
- SetMessageHandler(&Class479::handleMessage);
+ SetUpdateHandler(&AsScene1002KlaymanPeekHand::update);
+ SetMessageHandler(&AsScene1002KlaymanPeekHand::handleMessage);
createSurface(1000, 33, 41);
setVisible(false);
}
-void Class479::update() {
+void AsScene1002KlaymanPeekHand::update() {
if (_klayman->getCurrAnimFileHash() == 0xAC20C012 && _klayman->getFrameIndex() < 50) {
startAnimation(0x9820C913, _klayman->getFrameIndex(), -1);
_newStickFrameIndex = _klayman->getFrameIndex();
@@ -1287,20 +1287,19 @@ void Class479::update() {
AnimatedSprite::update();
}
-uint32 Class479::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1002KlaymanPeekHand::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
sendMessage(_parentScene, 0x1022, 1200);
- _flag1 = true;
+ _isClipRectSaved = true;
_savedClipRect = _surface->getClipRect();
setClipRect(0, 0, 640, 480);
} else if (param.asInteger() == 0x88001184) {
sendMessage(_parentScene, 0x1022, 1000);
- if (_flag1) {
+ if (_isClipRectSaved)
setClipRect(_savedClipRect);
- }
}
break;
}
@@ -1339,41 +1338,41 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
- _class478 = insertSprite<Class478>(_klayman);
+ _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
- _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
+ _asKlaymanLadderHands->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
insertKlayman<KmScene1002>(379, 435, _class599, _ssLadderArch);
- _class478 = insertSprite<Class478>(_klayman);
+ _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _class478->setClipRect(_klayman->getClipRect());
+ _asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
insertKlayman<KmScene1002>(650, 435, _class599, _ssLadderArch);
- _class478 = insertSprite<Class478>(_klayman);
+ _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4478);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _class478->setClipRect(_klayman->getClipRect());
+ _asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
} else if (which == 2) {
insertKlayman<KmScene1002>(68, 645, _class599, _ssLadderArch);
- _class478 = insertSprite<Class478>(_klayman);
+ _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4298);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _class478->setClipRect(_klayman->getClipRect());
+ _asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
- _class478 = insertSprite<Class478>(_klayman);
+ _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4470);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
- _class478->setClipRect(_klayman->getClipRect());
- _class479 = insertSprite<Class479>(this, _klayman);
- _class479->setClipRect(_klayman->getClipRect());
+ _asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
+ _asKlaymanPeekHand = insertSprite<AsScene1002KlaymanPeekHand>(this, _klayman);
+ _asKlaymanPeekHand->setClipRect(_klayman->getClipRect());
_klayman->setRepl(64, 0);
_vm->_gameState.field2 = 0;
}
@@ -1391,7 +1390,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _class599->getDrawRect().y, false);
_asDoor = insertSprite<AsScene1002Door>(tempClipRect);
- tempSprite = insertSprite<Class505>();
+ tempSprite = insertSprite<AsScene1002BoxingGloveHitEffect>();
_asDoorSpy = insertSprite<AsScene1002DoorSpy>(tempClipRect, this, _asDoor, tempSprite);
_class426 = insertSprite<Class426>(this, 0x00412692, 0x140B60BE, 800, 0);
_asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, false);
@@ -1399,7 +1398,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
- _class506 = insertSprite<Class506>();
+ _asOutsideDoorBackground = insertSprite<AsScene1002OutsideDoorBackground>();
setRectList(0x004B43A0);
@@ -1415,7 +1414,7 @@ void Scene1002::update() {
Scene::update();
if (!_flag1B4 && _klayman->getY() > 230) {
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _class478->setClipRect(_klayman->getClipRect());
+ _asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
deleteSprite(&_ssLadderArchPart3);
_klayman->clearRepl();
_flag1B4 = true;
@@ -1430,7 +1429,6 @@ void Scene1002::update() {
}
uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Scene1002::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -1525,7 +1523,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
setGlobalVar(0x4DE80AC0, 0);
_soundResource2.play();
sendMessage(_asDoor, 0x4808, 0);
- sendMessage(_class506, 0x4808, 0);
+ sendMessage(_asOutsideDoorBackground, 0x4808, 0);
} else if (sender == _asRing4) {
setGlobalVar(0x4DE80AC0, 0);
_soundResource1.play(0xE0558848);
@@ -1538,7 +1536,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _asRing3) {
_soundResource3.play();
sendMessage(_asDoor, 0x4809, 0);
- sendMessage(_class506, 0x4809, 0);
+ sendMessage(_asOutsideDoorBackground, 0x4809, 0);
} else if (sender == _asVenusFlyTrap) {
if (getGlobalVar(0x8306F218)) {
sendMessage(_asRing3, 0x4807, 0);
@@ -1552,7 +1550,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
setGlobalVar(0x4DE80AC0, 0);
_soundResource2.play();
sendMessage(_asDoor, 0x4808, 0);
- sendMessage(_class506, 0x4808, 0);
+ sendMessage(_asOutsideDoorBackground, 0x4808, 0);
break;
}
return messageResult;
@@ -1561,7 +1559,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Class152
Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
- : Scene(vm, parentModule, true), _fieldD0(-1), _fieldD2(-1) {
+ : Scene(vm, parentModule, true) {
_surfaceFlag = false;
@@ -1576,9 +1574,8 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
- }
break;
}
return 0;
@@ -1656,7 +1653,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
updatePaletteArea();
- _class478 = insertSprite<Class478>(_klayman);
+ _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
insertStaticSprite(0x800034A0, 1100);
insertStaticSprite(0x64402020, 1100);
@@ -1664,7 +1661,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x0E002004, 1300);
_klayman->setClipRect(0, tempSprite->getDrawRect().y, 640, 480);
- _class478->setClipRect(_klayman->getClipRect());
+ _asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
_asTrashCan = insertSprite<AsScene1004TrashCan>();
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 47b1a91..702f538 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -50,10 +50,10 @@ protected:
SoundResource _soundResource1;
SoundResource _soundResource2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void handleMessage2000h();
- void callback1();
- void callback2();
- void callback3();
+ void hammerHitsDoor();
+ void stShowIdleDoor();
+ void stBustedDoorMove();
+ void stBustedDoorGone();
};
class AsScene1001Hammer : public AnimatedSprite {
@@ -104,8 +104,6 @@ protected:
Sprite *_asWindow;
Sprite *_asLever;
Sprite *_ssButton;
- int16 _fieldE4;
- int16 _fieldE6;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -115,9 +113,6 @@ class Class152 : public Scene {
public:
Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash);
protected:
- // TODO: Are these used?
- int16 _fieldD0;
- int16 _fieldD2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -147,11 +142,11 @@ protected:
bool _flag1;
SoundResource _soundResource;
void update();
- uint32 handleMessage4475E0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage447760(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage447890(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage447930(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage447A00(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRingPulled1(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRingPulled2(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRingHangingLow(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRingReleased(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene1002Door : public StaticSprite {
@@ -164,27 +159,27 @@ protected:
void suCloseDoor();
};
-class Class505 : public AnimatedSprite {
+class AsScene1002BoxingGloveHitEffect : public AnimatedSprite {
public:
- Class505(NeverhoodEngine *vm);
+ AsScene1002BoxingGloveHitEffect(NeverhoodEngine *vm);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene1002DoorSpy : public AnimatedSprite {
public:
- AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *class505);
+ AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *AsScene1002BoxingGloveHitEffect);
protected:
Scene *_parentScene;
Sprite *_asDoor;
- Sprite *_class505;
+ Sprite *_asBoxingGloveHitEffect;
SoundResource _soundResource;
- NRect _rect;
- uint32 handleMessage4489D0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage448A60(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate448AA0();
- void sub448AC0();
- void sub448B10();
+ NRect _clipRect;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmDoorSpyAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suDoorSpy();
+ void stDoorSpyIdle();
+ void stDoorSpyBoxingGlove();
};
class Class426 : public StaticSprite {
@@ -212,51 +207,51 @@ protected:
SoundResource _soundResource;
bool _flag;
void update();
- void update447FB0();
- uint32 handleMessage448000(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage4482E0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage448320(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub4484F0();
- void sub448530();
- void sub448560();
- void sub4485B0();
- void sub4485F0();
- void sub448620();
- void sub448660();
- void sub448720();
- void sub448750();
- void sub448780();
+ void upIdle();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmAnimationSimple(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmAnimationExt(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stWalkBack();
+ void stWalk();
+ void stRelease();
+ void stGrabRing();
+ void stRingGrabbed();
+ void stKlaymanInside();
+ void stIdle();
+ void stKlaymanInsideMoving();
+ void stSpitOutKlayman();
+ void swallowKlayman();
};
-class Class506 : public AnimatedSprite {
+class AsScene1002OutsideDoorBackground : public AnimatedSprite {
public:
- Class506(NeverhoodEngine *vm);
+ AsScene1002OutsideDoorBackground(NeverhoodEngine *vm);
protected:
int _countdown;
- bool _flag;
+ bool _isDoorClosed;
void update();
- uint32 handleMessage4491B0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage449210(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub449250();
- void sub449280();
- void sub4492C0();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stOpenDoor();
+ void stCloseDoor();
+ void stDoorClosed();
};
-class Class478 : public AnimatedSprite {
+class AsScene1002KlaymanLadderHands : public AnimatedSprite {
public:
- Class478(NeverhoodEngine *vm, Klayman *klayman);
+ AsScene1002KlaymanLadderHands(NeverhoodEngine *vm, Klayman *klayman);
protected:
Klayman *_klayman;
void update();
};
-class Class479 : public AnimatedSprite {
+class AsScene1002KlaymanPeekHand : public AnimatedSprite {
public:
- Class479(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman);
+ AsScene1002KlaymanPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman);
protected:
Scene *_parentScene;
Klayman *_klayman;
- bool _flag1;
+ bool _isClipRectSaved;
NRect _savedClipRect;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -280,9 +275,9 @@ protected:
Sprite *_ssLadderArchPart2;
Sprite *_ssLadderArchPart3;
Sprite *_class599;
- Sprite *_class478;
- Sprite *_class479;
- Sprite *_class506;
+ Sprite *_asKlaymanLadderHands;
+ Sprite *_asKlaymanPeekHand;
+ Sprite *_asOutsideDoorBackground;
Sprite *_class426;
SoundResource _soundResource1;
SoundResource _soundResource2;
@@ -308,7 +303,7 @@ class Scene1004 : public Scene {
public:
Scene1004(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_class478;
+ Sprite *_asKlaymanLadderHands;
Sprite *_asTrashCan;
int _paletteAreaStatus;
void update();
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index f1f4bab..7fa6fb0 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -200,7 +200,8 @@ void NeverhoodEngine::dumpAllResources() {
PaletteResource paletteResource(this);
byte *vgaPalette = new byte[768];
- paletteResource.load(0x4086520E);
+ //paletteResource.load(0x4086520E);
+ paletteResource.load(0x12C23307);
byte *srcpalette = paletteResource.palette();
for (int i = 0; i < 256; i++) {
vgaPalette[i * 3 + 2] = srcpalette[i * 4 + 0];
@@ -236,8 +237,6 @@ void NeverhoodEngine::dumpAllResources() {
writeTga(filename.c_str(), pixels, vgaPalette, width, frameInfo.rect.height);
delete[] pixels;
}
- static int n = 0;
- //if (n++ == 25) break;
}
}
Commit: 5465e6fe6429e10e0f6848f6edb48f07a233a22d
https://github.com/scummvm/scummvm/commit/5465e6fe6429e10e0f6848f6edb48f07a233a22d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2013-05-08T11:40:03-07:00
Commit Message:
NEVERHOOD: Pack the KlaymanIdleTableItem struct
Changed paths:
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index c19e884..7b8b42e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -36,11 +36,15 @@ class Klayman;
const uint32 kKlaymanSpeedUpHash = 0x004A2148;
+#include "common/pack-start.h" // START STRUCT PACKING
+
struct KlaymanIdleTableItem {
int value;
void (Klayman::*callback)();
};
+#include "common/pack-end.h" // END STRUCT PACKING
+
class Klayman : public AnimatedSprite {
public:
Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
Commit: 4f35989ac452f0b742e86357fb13f33668df1358
https://github.com/scummvm/scummvm/commit/4f35989ac452f0b742e86357fb13f33668df1358
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2013-05-08T11:40:03-07:00
Commit Message:
NEVERHOOD: Minor renaming, avoid mixing variables with their types
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module1900.cpp
engines/neverhood/module1900.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 2ee98ac..2eb8a67 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -741,8 +741,8 @@ uint32 AsScene1002BoxingGloveHitEffect::handleMessage(int messageNum, const Mess
return messageResult;
}
-AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *AsScene1002BoxingGloveHitEffect)
- : AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(AsScene1002BoxingGloveHitEffect),
+AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *asScene1002BoxingGloveHitEffect)
+ : AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(asScene1002BoxingGloveHitEffect),
_soundResource(vm) {
SetUpdateHandler(&AnimatedSprite::update);
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 702f538..b8fa636 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -168,7 +168,7 @@ protected:
class AsScene1002DoorSpy : public AnimatedSprite {
public:
- AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *AsScene1002BoxingGloveHitEffect);
+ AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *asScene1002BoxingGloveHitEffect);
protected:
Scene *_parentScene;
Sprite *_asDoor;
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index e9be86a..f91513f 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -448,8 +448,8 @@ void AsScene1907Symbol::moveDown() {
_isMoving = true;
}
-SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *AsScene1907Symbol)
- : StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene), _AsScene1907Symbol(AsScene1907Symbol),
+SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *asScene1907Symbol)
+ : StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene), _asScene1907Symbol(asScene1907Symbol),
_countdown1(0) {
_spriteResource.load2(0x64516424);
@@ -484,7 +484,7 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (_countdown1 == 0 && !_AsScene1907Symbol->isMoving() && getGlobalVar(0xA9035F60)) {
+ if (_countdown1 == 0 && !_asScene1907Symbol->isMoving() && getGlobalVar(0xA9035F60)) {
setVisible(true);
_countdown1 = 4;
StaticSprite::update();
diff --git a/engines/neverhood/module1900.h b/engines/neverhood/module1900.h
index 7b41c57..2eadd06 100644
--- a/engines/neverhood/module1900.h
+++ b/engines/neverhood/module1900.h
@@ -107,13 +107,13 @@ protected:
class SsScene1907UpDownButton : public StaticSprite {
public:
- SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *AsScene1907Symbol);
+ SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *asScene1907Symbol);
void setToUpPosition();
void setToDownPosition();
protected:
SoundResource _soundResource;
Scene1907 *_parentScene;
- AsScene1907Symbol *_AsScene1907Symbol;
+ AsScene1907Symbol *_asScene1907Symbol;
int _countdown1;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 13efdceb9eb96c98ce279e78d92ca43772219479
https://github.com/scummvm/scummvm/commit/13efdceb9eb96c98ce279e78d92ca43772219479
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:04-07:00
Commit Message:
NEVERHOOD: Add TODO
Changed paths:
A engines/neverhood/todo.txt
diff --git a/engines/neverhood/todo.txt b/engines/neverhood/todo.txt
new file mode 100644
index 0000000..abf8f27
--- /dev/null
+++ b/engines/neverhood/todo.txt
@@ -0,0 +1,42 @@
+NOTE:
+-------
+Some of the TODOs should be done AFTER the whole game logic is implemented
+else the game disasm and reimplemtation code become even more different
+(unless I decide it's ok to do it :)
+
+TODOs which can be done any time:
+-----------------------------------
+- Give placeholder stuff (e.g. sub?????, _flag??? etc.) better fitting names
+- Use CursorMan for the mouse cursor (instead of using it like a normal sprite)
+ - This whould make it neccessary to call _system->updateScreen more often else
+ the mouse movement would be choppy
+- Cleanup
+- Clean up staticdata structs to look more like the ones in create_neverhood
+ (e.g. by using template classes etc.)
+ - Or use a common base class and manage all stuff in one single table and cast stuff accordingly
+
+TODOs which should be done only after the game logic is finished:
+-------------------------------------------------------------------
+- Implement clever sprite redrawing code (dirty rectangles, microtiles etc.), only redraw what's neccessary
+- Rework sound system (I don't like that SoundResources need to be explicitly initialized in Scene constructors)
+ - Should be just a handle object which initializes itself
+ - Play routine should fill the handle so it can be stopped/queried later
+ - Basically like ScummVM own sound handles
+- Rework the resource system
+ - The current system can be simplified a lot
+ - Also resource purging needs to be implemented
+- RE and implement yet unknown music/sound stuff
+- Implement game menus
+- Maybe rework organization of files (e.g. put ALL Sprites into one separate file, same with Modules and Scenes)
+ - This would solve the problem of how to organize stuff which is used several times, and less headers would have to be included
+ - The move special scenes (SmackerScene) into the scenes file
+- Maybe merge CollisionMan with Scene (since it's so far never used independently)
+
+TODOs which are experimental:
+-------------------------------
+NOTE: Since they affect the whole game, they really should be only implemented once the full game logic is implemented.
+These are nothing more than wild ideas for now, any might never be implemented.
+- Use states instead of separate callback methods
+- Try to move more stuff to neverhood.dat
+- Try to use more template functions instead of manually creating functions
+ (Can be coupled with the above to move parameters to the dat and only use IDs)
Commit: 2e94464a8a1e76507c72903dfafb970a244b6326
https://github.com/scummvm/scummvm/commit/2e94464a8a1e76507c72903dfafb970a244b6326
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:04-07:00
Commit Message:
NEVERHOOD: Start with Module2800 and add Scene2801
Changed paths:
A engines/neverhood/module2800.cpp
A engines/neverhood/module2800.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 72f15a6..781a9c3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -39,6 +39,7 @@
#include "neverhood/module2300.h"
#include "neverhood/module2600.h"
#include "neverhood/module2700.h"
+#include "neverhood/module2800.h"
#include "neverhood/module3000.h"
namespace Neverhood {
@@ -275,7 +276,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(1000, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
@@ -301,6 +302,10 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule(2800, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -372,6 +377,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x42212411);
_childObject = new Module2700(_vm, this, which);
break;
+ case 2800:
+ setGlobalVar(0x91080831, 0x64210814);
+ _childObject = new Module2800(_vm, this, which);
+ break;
case 3000:
setGlobalVar(0x91080831, 0x81293110);
_childObject = new Module3000(_vm, this, which);
@@ -489,6 +498,13 @@ void GameModule::updateModule() {
case 2700:
createModule(1800, 2);
break;
+ case 2800:
+ if (_moduleResult == 1) {
+ createModule(2900, 5);
+ } else {
+ createModule(1800, 0);
+ }
+ break;
case 3000:
if (_moduleResult == 1) {
createModule(1900, 0);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index bdc53d6..6873e50 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -4847,4 +4847,76 @@ void KmScene2247::sub453520() {
FinalizeState(&Klayman::stStartWalkingDone);
}
+KmScene2801::KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4812:
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481D:
+ GotoState(&Klayman::stTurnToUse);
+ break;
+ case 0x481E:
+ GotoState(&Klayman::stReturnFromUse);
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWalkToFrontNoStep);
+ } else {
+ GotoState(&Klayman::stWalkToFront);
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnToFront);
+ } else {
+ GotoState(&Klayman::stTurnToBack);
+ }
+ break;
+ case 0x4837:
+ sub41CE70();
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 7b8b42e..355c6d6 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -542,6 +542,13 @@ protected:
void sub453520();
};
+class KmScene2801 : public Klayman {
+public:
+ KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index adf58b1..780ee76 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -27,6 +27,7 @@ MODULE_OBJS = \
module2300.o \
module2600.o \
module2700.o \
+ module2800.o \
module3000.o \
mouse.o \
navigationscene.o \
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
new file mode 100644
index 0000000..3a86e29
--- /dev/null
+++ b/engines/neverhood/module2800.cpp
@@ -0,0 +1,201 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2800.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/module1000.h"
+#include "neverhood/module1200.h"
+#include "neverhood/module1700.h"
+
+namespace Neverhood {
+
+Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ _fileHash = 0;
+ // TODO music stuff
+ // TODO Music18hList_add(0x64210814, 0xD2FA4D14);
+ setGlobalVar(0x28D8C940, 1);
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, which);
+ } else if (which == 2) {
+ createScene(4, 3);
+ } else if (which == 1) {
+ createScene(4, 1);
+ } else {
+ createScene(0, 0);
+ }
+
+}
+
+Module2800::~Module2800() {
+ // TODO music stuff
+ // TODO Sound1ChList_sub_407A50(0x64210814);
+ // TODO Module2800_sub471DF0();
+}
+
+void Module2800::createScene(int sceneNum, int which) {
+ debug("Module2800::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Music18hList_stop(0xD2FA4D14, 0, 0);
+ _childObject = new Scene2801(_vm, this, which);
+ break;
+ // TODO ...
+ }
+ SetUpdateHandler(&Module2800::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2800::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult != 2) {
+ // TODO music stuff
+ }
+ if (_moduleResult == 1) {
+ createScene(2, 0);
+ } else if (_moduleResult == 2) {
+ createScene(1, 0);
+ } else {
+ leaveModule(0);
+ }
+ break;
+ }
+ } else {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Module2800_sub4731E0(true);
+ break;
+ }
+ }
+}
+
+Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ // TODO _vm->gameModule()->initScene2801Vars();
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2801::handleMessage);
+ SetUpdateHandler(&Scene::update);
+
+ if (getGlobalVar(0x4DE80AC0) == 0) {
+ insertStaticSprite(0x0001264C, 100);
+ }
+
+ if (which < 0) {
+ insertKlayman<KmScene2801>(194, 430);
+ setMessageList(0x004B6BB8);
+ } else if (which == 1) {
+ insertKlayman<KmScene2801>(443, 398);
+ setMessageList(0x004B6BC0);
+ } else if (which == 2) {
+ if (getGlobalVar(0xC0418A02)) {
+ insertKlayman<KmScene2801>(312, 432);
+ _klayman->setDoDeltaX(1);
+ setMessageList(0x004B6C10);
+ } else {
+ insertKlayman<KmScene2801>(194, 432);
+ setMessageList(0x004B6C10);
+ }
+ } else {
+ insertKlayman<KmScene2801>(0, 432);
+ setMessageList(0x004B6BB0);
+ }
+
+ if (getGlobalVar(0x09880D40)) {
+ setRectList(0x004B6CE0);
+ setBackground(0x01400666);
+ setPalette(0x01400666);
+ _paletteHash = 0x15021024;
+ _palette->addBasePalette(0x01400666, 0, 256, 0);
+ _sprite1 = insertStaticSprite(0x100CA0A8, 1100);
+ _sprite2 = insertStaticSprite(0x287C21A4, 1100);
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480);
+ insertMouse433(0x0066201C);
+ _asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else if (getGlobalVar(0x08180ABC)) {
+ setRectList(0x004B6CD0);
+ setBackground(0x11E00684);
+ setPalette(0x11E00684);
+ _paletteHash = 0x15021024;
+ _palette->addBasePalette(0x11E00684, 0, 256, 0);
+ _sprite2 = insertStaticSprite(0x061601C8, 1100);
+ _klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
+ insertMouse433(0x00680116);
+ _asTape = insertSprite<Class606>(this, 8, 1100, 302, 437, 0x01142428);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else {
+ setRectList(0x004B6CF0);
+ setBackground(0x030006E6);
+ setPalette(0x030006E6);
+ _paletteHash = 0x15021024;
+ _palette->addBasePalette(0x030006E6, 0, 256, 0);
+ _sprite2 = insertStaticSprite(0x273801CE, 1100);
+ _klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
+ insertMouse433(0x006E2038);
+ _asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ }
+
+ if (which == 1) {
+ _palette->addPalette(0xB103B604, 0, 65, 0);
+ _palette->addBasePalette(0xB103B604, 0, 65, 0);
+ } else {
+ _palette->addPalette(_paletteHash, 0, 65, 0);
+ _palette->addBasePalette(_paletteHash, 0, 65, 0);
+ }
+
+}
+
+Scene2801::~Scene2801() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ // TODO: case 0x000D:
+ case 0x4826:
+ if (sender == _asTape) {
+ sendEntityMessage(_klayman, 0x1014, _asTape);
+ setMessageList(0x004B6C40);
+ }
+ break;
+ case 0x482A:
+ _palette->addBasePalette(0xB103B604, 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ break;
+ case 0x482B:
+ _palette->addBasePalette(_paletteHash, 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ break;
+ }
+ return messageResult;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
new file mode 100644
index 0000000..cdfcdbe
--- /dev/null
+++ b/engines/neverhood/module2800.h
@@ -0,0 +1,59 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2800_H
+#define NEVERHOOD_MODULE2800_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module2800
+
+class Module2800 : public Module {
+public:
+ Module2800(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2800();
+protected:
+ bool _flag;
+ uint32 _fileHash;
+ void createScene(int sceneNum, int which);
+ void updateScene();
+};
+
+class Scene2801 : public Scene {
+public:
+ Scene2801(NeverhoodEngine *vm, Module *parentModule, int which);
+ ~Scene2801();
+protected:
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_asTape;
+ uint32 _paletteHash;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2800_H */
Commit: 88bfe5d0766e4592cd414c1980eda9287c51035e
https://github.com/scummvm/scummvm/commit/88bfe5d0766e4592cd414c1980eda9287c51035e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2013-05-08T11:40:04-07:00
Commit Message:
NEVERHOOD: Added a FIXME
Changed paths:
engines/neverhood/module1000.cpp
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 2eb8a67..176708b 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1042,6 +1042,8 @@ uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessagePara
if (_x > 330) {
sendMessage(_klayman, 0x4811, 2);
} else if (_x > 265) {
+ // FIXME: This check is the same as the one below.
+ // Perhaps the third parameter should be 1 here?
sendMessage(_klayman, 0x4811, 0);
} else {
sendMessage(_klayman, 0x4811, 0);
Commit: 8613ff3a9dd0ad36c9d695c48ceb16a23e92e346
https://github.com/scummvm/scummvm/commit/8613ff3a9dd0ad36c9d695c48ceb16a23e92e346
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:04-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2801
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 2534bce..514912c 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -112,6 +112,10 @@ static const uint32 rectListOffsets[] = {
// Scene2247
1, 0x004B5588,
1, 0x004B55C8,
+ // Scene2801
+ 1, 0x004B6CE0,
+ 1, 0x004B6CD0,
+ 1, 0x004B6CF0,
0, 0
};
@@ -377,6 +381,12 @@ static const uint32 messageListOffsets[] = {
4, 0x004B54C0,
5, 0x004B54E0,
5, 0x004B5508,
+ // Scene2801
+ 1, 0x004B6BB8,
+ 1, 0x004B6BC0,
+ 1, 0x004B6C10,
+ 1, 0x004B6BB0,
+ 2, 0x004B6C40,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 946b19a..72f35a6 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 8172d679df5148a4a32f46074b20cb6caf91844f
https://github.com/scummvm/scummvm/commit/8172d679df5148a4a32f46074b20cb6caf91844f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:40:44-07:00
Commit Message:
NEVERHOOD: Add scene create/update handling in Module2800
Changed paths:
engines/neverhood/module2800.cpp
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 3a86e29..eded442 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -62,6 +62,20 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_stop(0xD2FA4D14, 0, 0);
_childObject = new Scene2801(_vm, this, which);
break;
+ case 1:
+ // TODO Music18hList_stop(0xD2FA4D14, 0, 0);
+#if 0
+ _flag = true; // DEBUG!
+ if (_flag) {
+ _childObject = new Scene2802(_vm, this, which);
+ } else {
+ _childObject = new Class152(_vm, this, 0x000C6444, 0xC6440008);
+ }
+#endif
+ break;
+ //
+ case 1001:
+ break;
// TODO ...
}
SetUpdateHandler(&Module2800::updateScene);
@@ -83,12 +97,25 @@ void Module2800::updateScene() {
leaveModule(0);
}
break;
+ case 1:
+ if (_moduleResult == 0) {
+ createScene(0, 2);
+ } else {
+ createScene(1001, -1);
+ }
+ break;
+ //
+ case 1001:
+ break;
}
} else {
switch (_vm->gameState().sceneNum) {
case 0:
// TODO Module2800_sub4731E0(true);
break;
+ case 1:
+ // TODO Module2800_sub4731E0(false);
+ break;
}
}
}
Commit: 9c2341678ef4984bf92b3878295250faf980b066
https://github.com/scummvm/scummvm/commit/9c2341678ef4984bf92b3878295250faf980b066
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2013-05-08T11:40:58-07:00
Commit Message:
Merge branch 'master'
Changed paths:
A COPYING.FREEFONT
A audio/softsynth/mt32/AReverbModel.cpp
A audio/softsynth/mt32/AReverbModel.h
A audio/softsynth/mt32/DelayReverb.cpp
A audio/softsynth/mt32/DelayReverb.h
A audio/softsynth/mt32/FreeverbModel.cpp
A audio/softsynth/mt32/FreeverbModel.h
A audio/softsynth/mt32/LA32Ramp.cpp
A audio/softsynth/mt32/LA32Ramp.h
A audio/softsynth/mt32/Part.cpp
A audio/softsynth/mt32/Part.h
A audio/softsynth/mt32/Partial.cpp
A audio/softsynth/mt32/Partial.h
A audio/softsynth/mt32/PartialManager.cpp
A audio/softsynth/mt32/PartialManager.h
A audio/softsynth/mt32/Poly.cpp
A audio/softsynth/mt32/Poly.h
A audio/softsynth/mt32/Structures.h
A audio/softsynth/mt32/Synth.cpp
A audio/softsynth/mt32/Synth.h
A audio/softsynth/mt32/TVA.cpp
A audio/softsynth/mt32/TVA.h
A audio/softsynth/mt32/TVF.cpp
A audio/softsynth/mt32/TVF.h
A audio/softsynth/mt32/TVP.cpp
A audio/softsynth/mt32/TVP.h
A audio/softsynth/mt32/Tables.cpp
A audio/softsynth/mt32/Tables.h
A audio/softsynth/mt32/mmath.h
A backends/graphics/maemosdl/maemosdl-graphics.cpp
A backends/graphics/maemosdl/maemosdl-graphics.h
A backends/keymapper/hardware-input.cpp
A backends/keymapper/hardware-input.h
A backends/keymapper/keymapper-defaults.h
A backends/platform/android/org/scummvm/scummvm/EditableSurfaceView.java
A backends/platform/android/org/scummvm/scummvm/PluginProvider.java
A backends/platform/android/org/scummvm/scummvm/ScummVM.java
A backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
A backends/platform/android/org/scummvm/scummvm/ScummVMApplication.java
A backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java
A backends/platform/android/org/scummvm/scummvm/Unpacker.java
A backends/platform/iphone/iphone_keyboard.mm
A backends/platform/iphone/iphone_main.mm
A backends/platform/iphone/iphone_video.mm
A backends/platform/iphone/osys_video.mm
A backends/saves/windows/windows-saves.cpp
A backends/saves/windows/windows-saves.h
A common/EventMapper.cpp
A common/gui_options.cpp
A common/gui_options.h
A common/language.cpp
A common/language.h
A common/memory.h
A common/platform.cpp
A common/platform.h
A common/rendermode.cpp
A common/rendermode.h
A devtools/convbdf.cpp
A devtools/create_translations/cp_parser.cpp
A devtools/create_translations/cp_parser.h
A dists/debian/changelog
A dists/debian/compat
A dists/debian/control
A dists/debian/copyright
A dists/debian/rules
A dists/debian/scummvm-data.install
A dists/debian/scummvm.dirs
A dists/debian/scummvm.docs
A dists/debian/scummvm.install
A dists/debian/scummvm.manpages
A dists/debian/scummvm.menu
A dists/gph/README-GPH
A dists/gph/README-GPH.in
A dists/gph/caanoo/scummvm-gdb.gpe
A dists/gph/caanoo/scummvm.gpe
A dists/gph/gp2x/mmuhack/Makefile
A dists/gph/gp2x/mmuhack/README
A dists/gph/gp2x/mmuhack/flush_uppermem_cache.h
A dists/gph/gp2x/mmuhack/flush_uppermem_cache.s
A dists/gph/gp2x/mmuhack/mmuhack.c
A dists/gph/gp2x/mmuhack/mmuhack.o
A dists/gph/gp2x/scummvm.gpe
A dists/gph/gp2xwiz/scummvm-gdb.gpe
A dists/gph/gp2xwiz/scummvm.gpe
A dists/gph/scummvm.ini
A dists/gph/scummvm.ini.in
A dists/gph/scummvm.png
A dists/gph/scummvmb.png
A dists/openpandora/PXML.xml
A dists/openpandora/PXML.xml.in
A dists/openpandora/PXML_schema.xsd
A dists/openpandora/README-OPENPANDORA
A dists/openpandora/README-OPENPANDORA.in
A dists/openpandora/README-PND.txt
A dists/openpandora/README-PND.txt.in
A dists/openpandora/icon/preview-pic.png
A dists/openpandora/icon/scummvm.png
A dists/openpandora/index.html
A dists/openpandora/index.html.in
A dists/openpandora/pnd_make.sh
A dists/openpandora/runscummvm.sh
A dists/win32/migration.bat
A dists/win32/migration.txt
A doc/es/InicioRapido
A doc/se/LasMig
A doc/se/Snabbstart
A engines/dreamweb/keypad.cpp
A engines/dreamweb/monitor.cpp
A engines/dreamweb/newplace.cpp
A engines/dreamweb/people.cpp
A engines/dreamweb/rain.cpp
A engines/dreamweb/sound.cpp
A engines/dreamweb/talk.cpp
A engines/dreamweb/titles.cpp
A engines/dreamweb/vgafades.cpp
A engines/gob/cheater.cpp
A engines/gob/cheater.h
A engines/gob/cheater_geisha.cpp
A engines/gob/minigames/geisha/meter.cpp
A engines/gob/minigames/geisha/meter.h
A engines/gob/minigames/geisha/oko.cpp
A engines/gob/minigames/geisha/oko.h
A engines/kyra/chargen.cpp
A engines/kyra/darkmoon.cpp
A engines/kyra/darkmoon.h
A engines/kyra/eob.cpp
A engines/kyra/eob.h
A engines/kyra/eobcommon.cpp
A engines/kyra/eobcommon.h
A engines/kyra/gui_eob.cpp
A engines/kyra/gui_eob.h
A engines/kyra/gui_rpg.cpp
A engines/kyra/gui_v1.cpp
A engines/kyra/gui_v1.h
A engines/kyra/items_eob.cpp
A engines/kyra/kyra_rpg.cpp
A engines/kyra/kyra_rpg.h
A engines/kyra/magic_eob.cpp
A engines/kyra/saveload_eob.cpp
A engines/kyra/saveload_rpg.cpp
A engines/kyra/scene_eob.cpp
A engines/kyra/scene_rpg.cpp
A engines/kyra/screen_eob.cpp
A engines/kyra/screen_eob.h
A engines/kyra/script_eob.cpp
A engines/kyra/script_eob.h
A engines/kyra/sequences_darkmoon.cpp
A engines/kyra/sequences_eob.cpp
A engines/kyra/sprites_eob.cpp
A engines/kyra/sprites_rpg.cpp
A engines/kyra/staticres_eob.cpp
A engines/kyra/staticres_rpg.cpp
A engines/kyra/text_rpg.cpp
A engines/kyra/text_rpg.h
A engines/kyra/timer_eob.cpp
A engines/kyra/timer_rpg.cpp
A engines/mohawk/cstime_graphics.cpp
A engines/mohawk/cstime_graphics.h
A engines/mohawk/livingbooks_graphics.cpp
A engines/mohawk/livingbooks_graphics.h
A engines/mohawk/livingbooks_lbx.cpp
A engines/mohawk/livingbooks_lbx.h
A engines/mohawk/myst_graphics.cpp
A engines/mohawk/myst_graphics.h
A engines/mohawk/riven_graphics.cpp
A engines/mohawk/riven_graphics.h
A engines/sci/graphics/controls16.cpp
A engines/sci/graphics/controls16.h
A engines/sci/graphics/controls32.cpp
A engines/sci/graphics/controls32.h
A engines/sci/sound/drivers/fmtowns.cpp
A engines/scumm/player_apple2.cpp
A engines/scumm/player_apple2.h
A engines/toltecs/animation.cpp
A engines/toltecs/animation.h
A engines/toltecs/detection.cpp
A engines/toltecs/menu.cpp
A engines/toltecs/menu.h
A engines/toltecs/microtiles.cpp
A engines/toltecs/microtiles.h
A engines/toltecs/module.mk
A engines/toltecs/movie.cpp
A engines/toltecs/movie.h
A engines/toltecs/music.cpp
A engines/toltecs/music.h
A engines/toltecs/palette.cpp
A engines/toltecs/palette.h
A engines/toltecs/render.cpp
A engines/toltecs/render.h
A engines/toltecs/resource.cpp
A engines/toltecs/resource.h
A engines/toltecs/saveload.cpp
A engines/toltecs/screen.cpp
A engines/toltecs/screen.h
A engines/toltecs/script.cpp
A engines/toltecs/script.h
A engines/toltecs/segmap.cpp
A engines/toltecs/segmap.h
A engines/toltecs/sound.cpp
A engines/toltecs/sound.h
A engines/toltecs/sprite.cpp
A engines/toltecs/toltecs.cpp
A engines/toltecs/toltecs.h
A engines/tsage/ringworld2/ringworld2_scenes1.cpp
A engines/tsage/ringworld2/ringworld2_scenes1.h
A engines/tsage/ringworld2/ringworld2_scenes2.cpp
A engines/tsage/ringworld2/ringworld2_scenes2.h
A engines/tsage/ringworld2/ringworld2_scenes3.cpp
A engines/tsage/ringworld2/ringworld2_scenes3.h
A engines/tsage/ringworld2/ringworld2_speakers.cpp
A engines/tsage/ringworld2/ringworld2_speakers.h
A graphics/fonts/ttf.cpp
A graphics/fonts/ttf.h
A gui/themes/fonts/FreeMonoBold.ttf
A gui/themes/fonts/FreeSans.ttf
A gui/themes/fonts/FreeSansBold.ttf
A gui/themes/scummmodern/FreeMonoBold.ttf
A gui/themes/scummmodern/FreeSans.ttf
A gui/themes/scummmodern/FreeSansBold.ttf
A gui/themes/scummmodern/eraser.bmp
A po/iso-8859-2.cp
A po/iso-8859-5.cp
A video/psx_decoder.cpp
A video/psx_decoder.h
R audio/softsynth/mt32/i386.cpp
R audio/softsynth/mt32/i386.h
R audio/softsynth/mt32/mt32_file.cpp
R audio/softsynth/mt32/mt32_file.h
R audio/softsynth/mt32/part.cpp
R audio/softsynth/mt32/part.h
R audio/softsynth/mt32/partial.cpp
R audio/softsynth/mt32/partial.h
R audio/softsynth/mt32/partialManager.cpp
R audio/softsynth/mt32/structures.h
R audio/softsynth/mt32/synth.cpp
R audio/softsynth/mt32/synth.h
R audio/softsynth/mt32/tables.cpp
R audio/softsynth/mt32/tables.h
R backends/keymapper/hardware-key.h
R backends/keymapper/types.h
R backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
R backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
R backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
R backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
R backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
R backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
R backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
R backends/platform/iphone/blit_arm.h
R backends/platform/iphone/blit_arm.s
R backends/platform/iphone/iphone_keyboard.m
R backends/platform/iphone/iphone_main.m
R backends/platform/iphone/iphone_video.m
R backends/platform/iphone/osys_video.cpp
R backends/platform/sdl/hardwarekeys.cpp
R backends/platform/iphone/blit.cpp
R devtools/convbdf.c
R devtools/create_mads/main.cpp
R devtools/create_mads/module.mk
R devtools/create_mads/parser.cpp
R devtools/create_mads/scripts/rex_nebular.txt
R audio/softsynth/mt32/partialManager.h
R dists/engine-data/m4.dat
R dists/engine-data/mads.dat
R backends/platform/gph/devices/common/README-GPH
R backends/platform/gph/devices/caanoo/scummvm-gdb.gpe
R backends/platform/gph/devices/caanoo/scummvm.gpe
R backends/platform/gph/devices/gp2x/mmuhack/Makefile
R backends/platform/gph/devices/gp2x/mmuhack/README
R backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
R backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
R backends/platform/gph/devices/gp2x/mmuhack/mmuhack.c
R backends/platform/gph/devices/gp2x/mmuhack/mmuhack.o
R backends/platform/gph/devices/gp2x/scummvm.gpe
R backends/platform/gph/devices/gp2xwiz/scummvm-gdb.gpe
R backends/platform/gph/devices/gp2xwiz/scummvm.gpe
R backends/platform/gph/devices/common/scummvm.ini
R backends/platform/gph/devices/common/scummvm.png
R backends/platform/gph/devices/common/scummvmb.png
R backends/platform/openpandora/build/PXML.xml
R backends/platform/openpandora/build/PXML_schema.xsd
R backends/platform/openpandora/build/README-OPENPANDORA
R backends/platform/openpandora/build/README-PND.txt
R backends/platform/openpandora/build/icon/preview-pic.png
R backends/platform/openpandora/build/icon/scummvm.png
R backends/platform/openpandora/build/index.html
R backends/platform/openpandora/build/pnd_make.sh
R backends/platform/openpandora/build/runscummvm.sh
R doc/es/Inicio rápido
R engines/dreamweb/README
R engines/dreamweb/dreamgen.cpp
R engines/dreamweb/dreamgen.h
R engines/dreamweb/runtime.h
R engines/dreamweb/stubs.h
R devtools/create_mads/parser.h
R engines/m4/actor.cpp
R engines/m4/actor.h
R engines/m4/animation.cpp
R engines/m4/animation.h
R engines/m4/assets.cpp
R engines/m4/assets.h
R engines/m4/burger_data.h
R engines/m4/compression.cpp
R engines/m4/compression.h
R engines/m4/console.cpp
R engines/m4/console.h
R engines/m4/converse.cpp
R engines/m4/converse.h
R engines/m4/detection.cpp
R engines/m4/dialogs.cpp
R engines/m4/dialogs.h
R engines/m4/events.cpp
R engines/m4/events.h
R engines/m4/font.cpp
R engines/m4/font.h
R engines/m4/globals.cpp
R engines/m4/globals.h
R engines/m4/graphics.cpp
R engines/m4/graphics.h
R engines/m4/gui.cpp
R engines/m4/gui.h
R engines/m4/hotspot.cpp
R engines/m4/hotspot.h
R engines/m4/m4.cpp
R engines/m4/m4.h
R engines/m4/m4_menus.cpp
R engines/m4/m4_menus.h
R engines/m4/m4_scene.cpp
R engines/m4/m4_scene.h
R engines/m4/m4_views.cpp
R engines/m4/m4_views.h
R engines/m4/mads_anim.cpp
R engines/m4/mads_anim.h
R engines/m4/mads_logic.cpp
R engines/m4/mads_logic.h
R engines/m4/mads_menus.cpp
R engines/m4/mads_menus.h
R engines/m4/mads_player.cpp
R engines/m4/mads_player.h
R engines/m4/mads_scene.cpp
R engines/m4/mads_scene.h
R engines/m4/mads_views.cpp
R engines/m4/mads_views.h
R engines/m4/midi.cpp
R engines/m4/module.mk
R engines/m4/rails.cpp
R engines/m4/rails.h
R engines/m4/resource.cpp
R engines/m4/resource.h
R engines/m4/saveload.cpp
R engines/m4/scene.cpp
R engines/m4/scene.h
R engines/m4/script.cpp
R engines/m4/script.h
R engines/m4/scripttab.h
R engines/m4/sound.cpp
R engines/m4/sound.h
R engines/m4/sprite.cpp
R engines/m4/sprite.h
R engines/m4/viewmgr.cpp
R engines/m4/viewmgr.h
R engines/m4/woodscript.cpp
R engines/m4/woodscript.h
R engines/m4/ws_machine.cpp
R engines/m4/ws_sequence.cpp
R engines/m4/saveload.h
R engines/sci/graphics/controls.cpp
R engines/sci/graphics/controls.h
R engines/m4/staticres.cpp
R engines/m4/midi.h
R engines/m4/staticres.h
AUTHORS
COPYRIGHT
Makefile.common
NEWS
README
audio/audiostream.h
audio/decoders/aac.h
audio/decoders/adpcm.h
audio/decoders/adpcm_intern.h
audio/decoders/aiff.h
audio/decoders/flac.cpp
audio/decoders/flac.h
audio/decoders/iff_sound.cpp
audio/decoders/iff_sound.h
audio/decoders/mac_snd.h
audio/decoders/mp3.h
audio/decoders/qdm2.cpp
audio/decoders/quicktime.cpp
audio/decoders/raw.cpp
audio/decoders/raw.h
audio/decoders/voc.cpp
audio/decoders/voc.h
audio/decoders/vorbis.h
audio/decoders/wave.cpp
audio/decoders/wave.h
audio/fmopl.h
audio/mididrv.cpp
audio/mididrv.h
audio/midiparser.h
audio/midiplayer.h
audio/mixer.h
audio/mixer_intern.h
audio/mods/infogrames.h
audio/mods/maxtrax.cpp
audio/mods/maxtrax.h
audio/mods/module.h
audio/mods/paula.h
audio/mods/protracker.h
audio/mods/rjp1.h
audio/mods/soundfx.h
audio/mods/tfmx.cpp
audio/mods/tfmx.h
audio/mpu401.h
audio/musicplugin.h
audio/null.h
audio/rate.h
audio/rate_arm_asm.s
audio/softsynth/adlib.cpp
audio/softsynth/cms.cpp
audio/softsynth/cms.h
audio/softsynth/emumidi.h
audio/softsynth/fmtowns_pc98/towns_audio.cpp
audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
audio/softsynth/mt32.cpp
audio/softsynth/mt32/freeverb.cpp
audio/softsynth/mt32/freeverb.h
audio/softsynth/mt32/module.mk
audio/softsynth/mt32/mt32emu.h
audio/softsynth/opl/dbopl.cpp
audio/softsynth/opl/dbopl.h
audio/softsynth/opl/dosbox.h
audio/softsynth/opl/mame.h
audio/softsynth/pcspk.h
audio/softsynth/sid.cpp
audio/softsynth/sid.h
audio/softsynth/wave6581.cpp
audio/timestamp.h
backends/events/default/default-events.cpp
backends/events/default/default-events.h
backends/events/maemosdl/maemosdl-events.cpp
backends/events/maemosdl/maemosdl-events.h
backends/events/webossdl/webossdl-events.cpp
backends/events/webossdl/webossdl-events.h
backends/fs/amigaos4/amigaos4-fs.h
backends/fs/ps2/ps2-fs.h
backends/fs/psp/psp-fs-factory.h
backends/fs/symbian/symbian-fs.cpp
backends/fs/symbian/symbianstream.cpp
backends/fs/windows/windows-fs.cpp
backends/graphics/null/null-graphics.h
backends/graphics/opengl/glerrorcheck.cpp
backends/graphics/opengl/gltexture.cpp
backends/graphics/opengl/gltexture.h
backends/graphics/opengl/opengl-graphics.cpp
backends/graphics/opengl/opengl-graphics.h
backends/graphics/openglsdl/openglsdl-graphics.cpp
backends/keymapper/action.cpp
backends/keymapper/action.h
backends/keymapper/keymap.cpp
backends/keymapper/keymap.h
backends/keymapper/keymapper.cpp
backends/keymapper/keymapper.h
backends/keymapper/remap-dialog.cpp
backends/keymapper/remap-dialog.h
backends/midi/coreaudio.cpp
backends/midi/timidity.cpp
backends/midi/windows.cpp
backends/modular-backend.h
backends/module.mk
backends/mutex/null/null-mutex.h
backends/platform/android/android.cpp
backends/platform/android/android.h
backends/platform/android/android.mk
backends/platform/android/asset-archive.cpp
backends/platform/android/asset-archive.h
backends/platform/android/events.cpp
backends/platform/android/jni.cpp
backends/platform/android/texture.cpp
backends/platform/bada/application.cpp
backends/platform/bada/audio.cpp
backends/platform/bada/fs.cpp
backends/platform/bada/missing.cpp
backends/platform/bada/portdefs.h
backends/platform/dc/audio.cpp
backends/platform/dc/dc-fs.cpp
backends/platform/dc/dc.h
backends/platform/dc/dcloader.cpp
backends/platform/dc/display.cpp
backends/platform/dc/portdefs.h
backends/platform/ds/arm7/source/main.cpp
backends/platform/ds/arm9/source/blitters.cpp
backends/platform/ds/arm9/source/dsmain.cpp
backends/platform/ds/arm9/source/osystem_ds.cpp
backends/platform/ds/arm9/source/osystem_ds.h
backends/platform/ds/arm9/source/portdefs.h
backends/platform/ds/arm9/source/scummhelp.h
backends/platform/gph/caanoo-bundle.mk
backends/platform/gph/gp2x-bundle.mk
backends/platform/gph/gp2xwiz-bundle.mk
backends/platform/iphone/iphone_common.h
backends/platform/iphone/iphone_keyboard.h
backends/platform/iphone/iphone_video.h
backends/platform/iphone/module.mk
backends/platform/iphone/osys_events.cpp
backends/platform/iphone/osys_main.cpp
backends/platform/iphone/osys_main.h
backends/platform/linuxmoto/hardwarekeys.cpp
backends/platform/linuxmoto/linuxmoto-sdl.h
backends/platform/maemo/debian/changelog
backends/platform/maemo/debian/control
backends/platform/maemo/debian/rules
backends/platform/maemo/maemo-common.h
backends/platform/maemo/maemo.cpp
backends/platform/maemo/maemo.h
backends/platform/n64/osys_n64_utilities.cpp
backends/platform/n64/portdefs.h
backends/platform/openpandora/op-bundle.mk
backends/platform/ps2/DmaPipe.cpp
backends/platform/ps2/Gs2dScreen.cpp
backends/platform/ps2/Gs2dScreen.h
backends/platform/ps2/fileio.cpp
backends/platform/ps2/icon.cpp
backends/platform/ps2/ps2mutex.cpp
backends/platform/ps2/ps2pad.cpp
backends/platform/ps2/systemps2.cpp
backends/platform/ps2/systemps2.h
backends/platform/psp/display_manager.cpp
backends/platform/psp/portdefs.h
backends/platform/sdl/macosx/appmenu_osx.mm
backends/platform/sdl/module.mk
backends/platform/sdl/posix/posix.cpp
backends/platform/sdl/sdl.h
backends/platform/sdl/win32/win32.cpp
backends/platform/symbian/README
backends/platform/symbian/S60/ScummVM_S60.mmp.in
backends/platform/symbian/S60/ScummVM_S60_App.mmp
backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
backends/platform/symbian/S80/ScummVM_S80.mmp.in
backends/platform/symbian/S80/ScummVM_S80_App.mmp
backends/platform/symbian/S90/Scummvm_S90.mmp.in
backends/platform/symbian/S90/Scummvm_S90_App.mmp
backends/platform/symbian/UIQ2/ScummVM.rss
backends/platform/symbian/UIQ3/ScummVM.rss
backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
backends/platform/symbian/mmp/scummvm_agi.mmp.in
backends/platform/symbian/mmp/scummvm_agos.mmp.in
backends/platform/symbian/mmp/scummvm_base.mmp.in
backends/platform/symbian/mmp/scummvm_cine.mmp.in
backends/platform/symbian/mmp/scummvm_cruise.mmp.in
backends/platform/symbian/mmp/scummvm_draci.mmp.in
backends/platform/symbian/mmp/scummvm_drascula.mmp.in
backends/platform/symbian/mmp/scummvm_gob.mmp.in
backends/platform/symbian/mmp/scummvm_groovie.mmp.in
backends/platform/symbian/mmp/scummvm_hugo.mmp.in
backends/platform/symbian/mmp/scummvm_kyra.mmp.in
backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
backends/platform/symbian/mmp/scummvm_lure.mmp.in
backends/platform/symbian/mmp/scummvm_m4.mmp.in
backends/platform/symbian/mmp/scummvm_made.mmp.in
backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
backends/platform/symbian/mmp/scummvm_queen.mmp.in
backends/platform/symbian/mmp/scummvm_saga.mmp.in
backends/platform/symbian/mmp/scummvm_sci.mmp.in
backends/platform/symbian/mmp/scummvm_scumm.mmp.in
backends/platform/symbian/mmp/scummvm_sky.mmp.in
backends/platform/symbian/mmp/scummvm_sword1.mmp.in
backends/platform/symbian/mmp/scummvm_sword2.mmp.in
backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
backends/platform/symbian/mmp/scummvm_toon.mmp.in
backends/platform/symbian/mmp/scummvm_touche.mmp.in
backends/platform/symbian/mmp/scummvm_tsage.mmp.in
backends/platform/symbian/mmp/scummvm_tucker.mmp.in
backends/platform/symbian/res/ScummVmAif.rss
backends/platform/symbian/res/scummvm.rss
backends/platform/symbian/res/scummvm_A0000658.rss
backends/platform/symbian/src/ScummVm.hrh
backends/platform/webos/webos.cpp
backends/platform/webos/webos.h
backends/platform/wince/README-WinCE.txt
backends/platform/wince/portdefs.h
backends/platform/wince/wince-sdl.cpp
backends/plugins/elf/elf-loader.cpp
backends/taskbar/win32/win32-taskbar.cpp
backends/timer/bada/timer.cpp
backends/timer/default/default-timer.cpp
backends/vkeybd/image-map.cpp
backends/vkeybd/image-map.h
backends/vkeybd/polygon.cpp
backends/vkeybd/polygon.h
backends/vkeybd/virtual-keyboard-gui.cpp
backends/vkeybd/virtual-keyboard-gui.h
backends/vkeybd/virtual-keyboard-parser.cpp
backends/vkeybd/virtual-keyboard-parser.h
backends/vkeybd/virtual-keyboard.cpp
backends/vkeybd/virtual-keyboard.h
base/commandLine.cpp
base/main.cpp
base/plugins.cpp
base/version.cpp
common/EventDispatcher.cpp
common/algorithm.h
common/archive.cpp
common/archive.h
common/array.h
common/config-file.cpp
common/config-manager.cpp
common/events.h
common/fft.cpp
common/forbidden.h
common/fs.cpp
common/fs.h
common/hash-str.h
common/hashmap.h
common/huffman.h
common/keyboard.h
common/list.h
common/list_intern.h
common/localization.h
common/macresman.cpp
common/macresman.h
common/memorypool.cpp
common/memorypool.h
common/module.mk
common/quicktime.cpp
common/quicktime.h
common/scummsys.h
common/serializer.h
common/singleton.h
common/stack.h
common/str.cpp
common/stream.cpp
common/substream.h
common/system.h
common/translation.cpp
common/translation.h
common/unarj.cpp
common/unzip.cpp
common/util.cpp
common/util.h
common/xmlparser.cpp
common/xmlparser.h
common/zlib.cpp
common/zlib.h
config.guess
config.sub
configure
devtools/create_hugo/enums.h
devtools/create_hugo/staticdata.h
devtools/create_kyradat/create_kyradat.cpp
devtools/create_kyradat/create_kyradat.h
devtools/create_kyradat/extract.cpp
devtools/create_kyradat/extract.h
devtools/create_kyradat/games.cpp
devtools/create_kyradat/module.mk
devtools/create_kyradat/tables.cpp
devtools/create_kyradat/util.cpp
devtools/create_kyradat/util.h
devtools/create_lure/process_actions.cpp
devtools/create_project/create_project.cpp
devtools/create_project/create_project.h
devtools/create_project/xcode.cpp
devtools/create_translations/create_translations.cpp
devtools/create_translations/create_translations.h
devtools/create_translations/module.mk
devtools/credits.pl
devtools/md5table.c
devtools/module.mk
devtools/sci/musicplayer.cpp
devtools/scumm-md5.txt
devtools/skycpt/AsciiCptCompile.cpp
devtools/skycpt/TextFile.cpp
devtools/skycpt/cptcompiler.cpp
devtools/tasmrecover/dreamweb/backdrop.asm
devtools/tasmrecover/dreamweb/debug.asm
devtools/tasmrecover/dreamweb/dreamweb.asm
devtools/tasmrecover/dreamweb/keypad.asm
devtools/tasmrecover/dreamweb/look.asm
devtools/tasmrecover/dreamweb/monitor.asm
devtools/tasmrecover/dreamweb/newplace.asm
devtools/tasmrecover/dreamweb/object.asm
devtools/tasmrecover/dreamweb/print.asm
devtools/tasmrecover/dreamweb/saveload.asm
devtools/tasmrecover/dreamweb/sblaster.asm
devtools/tasmrecover/dreamweb/sprite.asm
devtools/tasmrecover/dreamweb/talk.asm
devtools/tasmrecover/dreamweb/titles.asm
devtools/tasmrecover/dreamweb/use.asm
devtools/tasmrecover/dreamweb/vars.asm
devtools/tasmrecover/dreamweb/vgafades.asm
devtools/tasmrecover/dreamweb/vgagrafx.asm
devtools/tasmrecover/tasm-recover
devtools/tasmrecover/tasm/cpp.py
devtools/tasmrecover/tasm/parser.py
devtools/update-version.pl
dists/android/AndroidManifest.xml
dists/android/AndroidManifest.xml.in
dists/android/mkplugin.sh
dists/android/plugin-manifest.xml
dists/android/plugin-manifest.xml.in
dists/android/res/layout/main.xml
dists/engine-data/kyra.dat
dists/irix/scummvm.idb
dists/macosx/DS_Store
dists/macosx/Info.plist
dists/macosx/Info.plist.in
dists/redhat/scummvm.spec
dists/redhat/scummvm.spec.in
dists/scummvm.rc
dists/scummvm.rc.in
dists/win32/ScummVM.iss
dists/win32/scummvm.nsi
dists/win32/scummvm.nsi.in
doc/cz/PrectiMe
doc/de/Liesmich
doc/de/Neues
engines/advancedDetector.h
engines/agi/agi.cpp
engines/agi/agi.h
engines/agi/checks.cpp
engines/agi/cycle.cpp
engines/agi/detection_tables.h
engines/agi/graphics.cpp
engines/agi/menu.cpp
engines/agi/menu.h
engines/agi/objects.cpp
engines/agi/op_cmd.cpp
engines/agi/opcodes.cpp
engines/agi/picture.h
engines/agi/preagi_mickey.h
engines/agi/preagi_troll.cpp
engines/agi/preagi_winnie.cpp
engines/agi/predictive.cpp
engines/agi/saveload.cpp
engines/agi/sound_2gs.cpp
engines/agi/sound_2gs.h
engines/agi/sound_sarien.cpp
engines/agi/sprite.cpp
engines/agi/sprite.h
engines/agi/text.cpp
engines/agi/wagparser.cpp
engines/agi/words.cpp
engines/agos/agos.h
engines/agos/animation.cpp
engines/agos/charset-fontdata.cpp
engines/agos/charset.cpp
engines/agos/detection_tables.h
engines/agos/draw.cpp
engines/agos/installshield_cab.cpp
engines/agos/midi.cpp
engines/agos/res.cpp
engines/agos/res_snd.cpp
engines/agos/saveload.cpp
engines/agos/script_pn.cpp
engines/agos/sound.cpp
engines/agos/sound.h
engines/agos/string.cpp
engines/agos/string_pn.cpp
engines/agos/subroutine.cpp
engines/cge/bitmap.cpp
engines/cge/bitmap.h
engines/cge/cge.cpp
engines/cge/cge.h
engines/cge/cge_main.cpp
engines/cge/cge_main.h
engines/cge/console.cpp
engines/cge/console.h
engines/cge/detection.cpp
engines/cge/events.cpp
engines/cge/events.h
engines/cge/fileio.cpp
engines/cge/snail.cpp
engines/cge/snail.h
engines/cge/talk.cpp
engines/cge/talk.h
engines/cge/text.cpp
engines/cge/vga13h.cpp
engines/cge/vga13h.h
engines/cge/walk.h
engines/cine/cine.cpp
engines/cine/detection.cpp
engines/cine/detection_tables.h
engines/cine/gfx.cpp
engines/cine/main_loop.cpp
engines/cine/saveload.cpp
engines/cine/sound.cpp
engines/composer/composer.cpp
engines/composer/composer.h
engines/composer/detection.cpp
engines/composer/graphics.cpp
engines/composer/resource.cpp
engines/composer/resource.h
engines/composer/scripting.cpp
engines/cruise/background.cpp
engines/cruise/backgroundIncrust.cpp
engines/cruise/cruise.h
engines/cruise/cruise_main.cpp
engines/cruise/dataLoader.cpp
engines/cruise/detection.cpp
engines/cruise/font.cpp
engines/cruise/function.cpp
engines/cruise/gfxModule.cpp
engines/cruise/mainDraw.cpp
engines/cruise/overlay.cpp
engines/cruise/saveload.cpp
engines/cruise/script.cpp
engines/cruise/volume.cpp
engines/dialogs.cpp
engines/draci/barchive.cpp
engines/draci/detection.cpp
engines/draci/draci.cpp
engines/draci/saveload.cpp
engines/draci/sprite.cpp
engines/draci/walking.cpp
engines/drascula/animation.cpp
engines/drascula/converse.cpp
engines/drascula/detection.cpp
engines/drascula/drascula.cpp
engines/drascula/drascula.h
engines/drascula/graphics.cpp
engines/drascula/interface.cpp
engines/drascula/saveload.cpp
engines/drascula/sound.cpp
engines/drascula/talk.cpp
engines/dreamweb/backdrop.cpp
engines/dreamweb/detection.cpp
engines/dreamweb/detection_tables.h
engines/dreamweb/dreamweb.cpp
engines/dreamweb/dreamweb.h
engines/dreamweb/module.mk
engines/dreamweb/object.cpp
engines/dreamweb/pathfind.cpp
engines/dreamweb/print.cpp
engines/dreamweb/saveload.cpp
engines/dreamweb/sprite.cpp
engines/dreamweb/structs.h
engines/dreamweb/stubs.cpp
engines/dreamweb/use.cpp
engines/dreamweb/vgagrafx.cpp
engines/engine.cpp
engines/engine.h
engines/engines.mk
engines/game.cpp
engines/game.h
engines/gob/aniobject.cpp
engines/gob/aniobject.h
engines/gob/console.cpp
engines/gob/console.h
engines/gob/databases.h
engines/gob/dataio.cpp
engines/gob/detection_tables.h
engines/gob/draw_v1.cpp
engines/gob/draw_v2.cpp
engines/gob/gob.cpp
engines/gob/gob.h
engines/gob/hotspots.cpp
engines/gob/iniconfig.cpp
engines/gob/inter.h
engines/gob/inter_geisha.cpp
engines/gob/inter_playtoons.cpp
engines/gob/inter_v1.cpp
engines/gob/inter_v2.cpp
engines/gob/inter_v7.cpp
engines/gob/map.cpp
engines/gob/minigames/geisha/diving.cpp
engines/gob/minigames/geisha/diving.h
engines/gob/minigames/geisha/evilfish.cpp
engines/gob/minigames/geisha/evilfish.h
engines/gob/module.mk
engines/gob/sound/bgatmosphere.h
engines/groovie/detection.cpp
engines/groovie/roq.cpp
engines/groovie/script.cpp
engines/hugo/detection.cpp
engines/hugo/game.h
engines/hugo/object.h
engines/hugo/object_v1d.cpp
engines/hugo/object_v1w.cpp
engines/hugo/object_v2d.cpp
engines/hugo/object_v3d.cpp
engines/hugo/parser.cpp
engines/hugo/route.cpp
engines/hugo/schedule.cpp
engines/hugo/sound.cpp
engines/hugo/sound.h
engines/hugo/util.cpp
engines/kyra/animator_hof.cpp
engines/kyra/animator_lok.cpp
engines/kyra/animator_mr.cpp
engines/kyra/animator_v2.cpp
engines/kyra/debugger.cpp
engines/kyra/debugger.h
engines/kyra/detection.cpp
engines/kyra/detection_tables.h
engines/kyra/gui.cpp
engines/kyra/gui.h
engines/kyra/gui_hof.cpp
engines/kyra/gui_lok.cpp
engines/kyra/gui_lok.h
engines/kyra/gui_lol.cpp
engines/kyra/gui_lol.h
engines/kyra/gui_mr.cpp
engines/kyra/gui_v2.cpp
engines/kyra/gui_v2.h
engines/kyra/items_lok.cpp
engines/kyra/items_lol.cpp
engines/kyra/kyra_hof.cpp
engines/kyra/kyra_hof.h
engines/kyra/kyra_lok.cpp
engines/kyra/kyra_lok.h
engines/kyra/kyra_mr.cpp
engines/kyra/kyra_mr.h
engines/kyra/kyra_v1.cpp
engines/kyra/kyra_v1.h
engines/kyra/kyra_v2.cpp
engines/kyra/kyra_v2.h
engines/kyra/lol.cpp
engines/kyra/lol.h
engines/kyra/module.mk
engines/kyra/resource.cpp
engines/kyra/resource.h
engines/kyra/resource_intern.cpp
engines/kyra/resource_intern.h
engines/kyra/saveload.cpp
engines/kyra/saveload_lok.cpp
engines/kyra/saveload_lol.cpp
engines/kyra/scene_lok.cpp
engines/kyra/scene_lol.cpp
engines/kyra/scene_mr.cpp
engines/kyra/scene_v1.cpp
engines/kyra/scene_v2.cpp
engines/kyra/screen.cpp
engines/kyra/screen.h
engines/kyra/screen_hof.cpp
engines/kyra/screen_hof.h
engines/kyra/screen_lok.cpp
engines/kyra/screen_lok.h
engines/kyra/screen_lol.cpp
engines/kyra/screen_lol.h
engines/kyra/screen_mr.cpp
engines/kyra/screen_mr.h
engines/kyra/screen_v2.cpp
engines/kyra/screen_v2.h
engines/kyra/script.h
engines/kyra/script_hof.cpp
engines/kyra/script_lok.cpp
engines/kyra/script_lol.cpp
engines/kyra/script_mr.cpp
engines/kyra/script_tim.cpp
engines/kyra/script_tim.h
engines/kyra/script_v1.cpp
engines/kyra/script_v2.cpp
engines/kyra/seqplayer.cpp
engines/kyra/sequences_hof.cpp
engines/kyra/sequences_lok.cpp
engines/kyra/sequences_lol.cpp
engines/kyra/sound.cpp
engines/kyra/sound.h
engines/kyra/sound_adlib.cpp
engines/kyra/sound_adlib.h
engines/kyra/sound_amiga.cpp
engines/kyra/sound_intern.h
engines/kyra/sound_lol.cpp
engines/kyra/sound_midi.cpp
engines/kyra/sound_towns.cpp
engines/kyra/sprites_lol.cpp
engines/kyra/staticres.cpp
engines/kyra/staticres_lol.cpp
engines/kyra/text_lok.cpp
engines/kyra/text_lol.cpp
engines/kyra/text_lol.h
engines/kyra/timer.cpp
engines/kyra/timer_lok.cpp
engines/kyra/timer_lol.cpp
engines/kyra/wsamovie.cpp
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/archive.h
engines/lastexpress/data/scene.h
engines/lastexpress/detection.cpp
engines/lastexpress/entities/abbot.cpp
engines/lastexpress/entities/alexei.cpp
engines/lastexpress/entities/august.cpp
engines/lastexpress/entities/entity_intern.h
engines/lastexpress/entities/francois.cpp
engines/lastexpress/entities/mertens.cpp
engines/lastexpress/game/action.cpp
engines/lastexpress/game/entities.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/resource.cpp
engines/lastexpress/resource.h
engines/lure/decode.cpp
engines/lure/detection.cpp
engines/lure/hotspots.cpp
engines/lure/menu.cpp
engines/lure/res.cpp
engines/lure/room.cpp
engines/lure/scripts.cpp
engines/lure/sound.cpp
engines/made/database.cpp
engines/made/database.h
engines/made/detection.cpp
engines/made/graphics.cpp
engines/made/resource.h
engines/made/screen.cpp
engines/made/screenfx.cpp
engines/made/scriptfuncs.h
engines/metaengine.h
engines/mohawk/bitmap.cpp
engines/mohawk/console.cpp
engines/mohawk/cstime.h
engines/mohawk/detection_tables.h
engines/mohawk/graphics.cpp
engines/mohawk/graphics.h
engines/mohawk/installer_archive.cpp
engines/mohawk/installer_archive.h
engines/mohawk/livingbooks.cpp
engines/mohawk/livingbooks.h
engines/mohawk/livingbooks_code.cpp
engines/mohawk/livingbooks_code.h
engines/mohawk/module.mk
engines/mohawk/myst.cpp
engines/mohawk/myst.h
engines/mohawk/myst_areas.cpp
engines/mohawk/myst_areas.h
engines/mohawk/myst_scripts.cpp
engines/mohawk/myst_scripts.h
engines/mohawk/myst_stacks/channelwood.cpp
engines/mohawk/myst_stacks/credits.cpp
engines/mohawk/myst_stacks/demo.cpp
engines/mohawk/myst_stacks/intro.cpp
engines/mohawk/myst_stacks/mechanical.cpp
engines/mohawk/myst_stacks/myst.cpp
engines/mohawk/myst_stacks/preview.cpp
engines/mohawk/myst_stacks/slides.cpp
engines/mohawk/myst_stacks/stoneship.cpp
engines/mohawk/riven.cpp
engines/mohawk/riven_external.cpp
engines/mohawk/riven_external.h
engines/mohawk/riven_scripts.cpp
engines/mohawk/riven_scripts.h
engines/mohawk/video.cpp
engines/mohawk/video.h
engines/neverhood/blbarchive.cpp
engines/parallaction/balloons.cpp
engines/parallaction/callables_br.cpp
engines/parallaction/callables_ns.cpp
engines/parallaction/debug.cpp
engines/parallaction/dialogue.cpp
engines/parallaction/disk.cpp
engines/parallaction/disk_br.cpp
engines/parallaction/disk_ns.cpp
engines/parallaction/exec.h
engines/parallaction/font.cpp
engines/parallaction/gfxbase.cpp
engines/parallaction/graphics.cpp
engines/parallaction/graphics.h
engines/parallaction/gui.h
engines/parallaction/gui_br.cpp
engines/parallaction/inventory.cpp
engines/parallaction/inventory.h
engines/parallaction/objects.cpp
engines/parallaction/parallaction.cpp
engines/parallaction/parallaction.h
engines/parallaction/parallaction_br.cpp
engines/parallaction/parser.h
engines/parallaction/parser_br.cpp
engines/parallaction/parser_ns.cpp
engines/parallaction/saveload.cpp
engines/parallaction/sound_br.cpp
engines/parallaction/sound_ns.cpp
engines/queen/input.h
engines/queen/logic.cpp
engines/queen/music.cpp
engines/queen/queen.cpp
engines/queen/resource.h
engines/queen/talk.cpp
engines/saga/animation.cpp
engines/saga/detection.cpp
engines/saga/detection_tables.h
engines/saga/gfx.cpp
engines/saga/interface.cpp
engines/saga/isomap.cpp
engines/saga/resource.h
engines/saga/saga.h
engines/saga/saveload.cpp
engines/saga/scene.cpp
engines/saga/script.h
engines/saga/sndres.cpp
engines/saga/sndres.h
engines/saga/sound.cpp
engines/saga/sound.h
engines/sci/console.cpp
engines/sci/detection.cpp
engines/sci/detection_tables.h
engines/sci/engine/features.cpp
engines/sci/engine/kernel.cpp
engines/sci/engine/kernel.h
engines/sci/engine/kernel_tables.h
engines/sci/engine/kfile.cpp
engines/sci/engine/kgraphics.cpp
engines/sci/engine/klists.cpp
engines/sci/engine/kpathing.cpp
engines/sci/engine/kscripts.cpp
engines/sci/engine/ksound.cpp
engines/sci/engine/kstring.cpp
engines/sci/engine/message.cpp
engines/sci/engine/savegame.cpp
engines/sci/engine/script.cpp
engines/sci/engine/script.h
engines/sci/engine/script_patches.cpp
engines/sci/engine/scriptdebug.cpp
engines/sci/engine/seg_manager.cpp
engines/sci/engine/seg_manager.h
engines/sci/engine/segment.cpp
engines/sci/engine/segment.h
engines/sci/engine/selector.cpp
engines/sci/engine/selector.h
engines/sci/engine/state.cpp
engines/sci/engine/vm.cpp
engines/sci/engine/vm.h
engines/sci/engine/vm_types.h
engines/sci/engine/workarounds.cpp
engines/sci/event.cpp
engines/sci/graphics/coordadjuster.cpp
engines/sci/graphics/coordadjuster.h
engines/sci/graphics/cursor.cpp
engines/sci/graphics/cursor.h
engines/sci/graphics/frameout.cpp
engines/sci/graphics/frameout.h
engines/sci/graphics/palette.cpp
engines/sci/graphics/screen.cpp
engines/sci/graphics/text16.cpp
engines/sci/graphics/text32.cpp
engines/sci/graphics/text32.h
engines/sci/graphics/transitions.cpp
engines/sci/graphics/view.cpp
engines/sci/module.mk
engines/sci/parser/said.cpp
engines/sci/parser/vocabulary.cpp
engines/sci/resource.cpp
engines/sci/resource.h
engines/sci/resource_audio.cpp
engines/sci/sci.cpp
engines/sci/sci.h
engines/sci/sound/drivers/adlib.cpp
engines/sci/sound/drivers/amigamac.cpp
engines/sci/sound/drivers/mididriver.h
engines/sci/sound/midiparser_sci.cpp
engines/sci/sound/music.cpp
engines/sci/sound/music.h
engines/sci/sound/soundcmd.cpp
engines/sci/sound/soundcmd.h
engines/scumm/actor.cpp
engines/scumm/actor.h
engines/scumm/boxes.cpp
engines/scumm/boxes.h
engines/scumm/charset-fontdata.cpp
engines/scumm/costume.cpp
engines/scumm/costume.h
engines/scumm/cursor.cpp
engines/scumm/debugger.cpp
engines/scumm/detection.cpp
engines/scumm/detection.h
engines/scumm/detection_tables.h
engines/scumm/dialogs.cpp
engines/scumm/dialogs.h
engines/scumm/gfx.cpp
engines/scumm/gfx.h
engines/scumm/gfxARM.s
engines/scumm/gfx_towns.cpp
engines/scumm/he/script_v80he.cpp
engines/scumm/he/script_v90he.cpp
engines/scumm/he/sound_he.cpp
engines/scumm/he/sprite_he.cpp
engines/scumm/he/wiz_he.cpp
engines/scumm/help.h
engines/scumm/imuse/imuse_player.cpp
engines/scumm/input.cpp
engines/scumm/module.mk
engines/scumm/object.cpp
engines/scumm/object.h
engines/scumm/palette.cpp
engines/scumm/player_nes.cpp
engines/scumm/player_pce.cpp
engines/scumm/player_pce.h
engines/scumm/player_sid.cpp
engines/scumm/player_sid.h
engines/scumm/player_towns.cpp
engines/scumm/player_v1.cpp
engines/scumm/player_v2a.cpp
engines/scumm/player_v2a.h
engines/scumm/resource.cpp
engines/scumm/room.cpp
engines/scumm/saveload.cpp
engines/scumm/saveload.h
engines/scumm/script.cpp
engines/scumm/script_v0.cpp
engines/scumm/script_v2.cpp
engines/scumm/script_v4.cpp
engines/scumm/script_v5.cpp
engines/scumm/script_v8.cpp
engines/scumm/scumm-md5.h
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/scumm_v0.h
engines/scumm/scumm_v2.h
engines/scumm/scumm_v5.h
engines/scumm/smush/smush_player.cpp
engines/scumm/sound.cpp
engines/scumm/sound.h
engines/scumm/string.cpp
engines/scumm/vars.cpp
engines/scumm/verbs.cpp
engines/scumm/verbs.h
engines/sky/autoroute.cpp
engines/sky/compact.cpp
engines/sky/control.cpp
engines/sky/control.h
engines/sky/detection.cpp
engines/sky/disk.cpp
engines/sky/intro.cpp
engines/sky/logic.cpp
engines/sky/mouse.cpp
engines/sky/music/adlibchannel.cpp
engines/sky/music/adlibmusic.cpp
engines/sky/music/adlibmusic.h
engines/sky/music/gmmusic.cpp
engines/sky/music/gmmusic.h
engines/sky/music/mt32music.cpp
engines/sky/music/mt32music.h
engines/sky/music/musicbase.cpp
engines/sky/music/musicbase.h
engines/sky/sky.cpp
engines/sky/text.cpp
engines/sword1/animation.cpp
engines/sword1/animation.h
engines/sword1/detection.cpp
engines/sword1/logic.cpp
engines/sword1/sound.cpp
engines/sword1/sound.h
engines/sword1/staticres.cpp
engines/sword1/sword1.cpp
engines/sword1/sword1.h
engines/sword1/swordres.h
engines/sword2/animation.cpp
engines/sword2/animation.h
engines/sword2/console.cpp
engines/sword2/function.cpp
engines/sword2/music.cpp
engines/sword2/sprite.cpp
engines/sword2/sword2.cpp
engines/sword25/detection_tables.h
engines/sword25/gfx/image/art.cpp
engines/sword25/gfx/image/renderedimage.cpp
engines/sword25/gfx/renderobject.h
engines/sword25/gfx/screenshot.cpp
engines/sword25/util/lua/lbaselib.cpp
engines/sword25/util/lua/llex.cpp
engines/sword25/util/lua/lobject.cpp
engines/sword25/util/lua/lstrlib.cpp
engines/sword25/util/lua/luaconf.h
engines/sword25/util/lua/scummvm_file.cpp
engines/sword25/util/pluto/pluto.cpp
engines/teenagent/callbacks.cpp
engines/teenagent/console.cpp
engines/teenagent/console.h
engines/teenagent/detection.cpp
engines/teenagent/music.cpp
engines/teenagent/music.h
engines/teenagent/surface.h
engines/testbed/detection.cpp
engines/tinsel/background.cpp
engines/tinsel/bg.cpp
engines/tinsel/cursor.cpp
engines/tinsel/detection.cpp
engines/tinsel/detection_tables.h
engines/tinsel/dialogs.cpp
engines/tinsel/drives.cpp
engines/tinsel/events.cpp
engines/tinsel/font.cpp
engines/tinsel/graphics.cpp
engines/tinsel/handle.cpp
engines/tinsel/heapmem.cpp
engines/tinsel/mareels.cpp
engines/tinsel/move.cpp
engines/tinsel/music.cpp
engines/tinsel/palette.cpp
engines/tinsel/pcode.cpp
engines/tinsel/pdisplay.cpp
engines/tinsel/play.cpp
engines/tinsel/rince.cpp
engines/tinsel/saveload.cpp
engines/tinsel/savescn.cpp
engines/tinsel/scene.cpp
engines/tinsel/sched.cpp
engines/tinsel/scroll.cpp
engines/tinsel/scroll.h
engines/tinsel/sound.cpp
engines/tinsel/strres.cpp
engines/tinsel/strres.h
engines/tinsel/sysvar.cpp
engines/tinsel/text.cpp
engines/tinsel/timers.cpp
engines/tinsel/tinlib.cpp
engines/tinsel/tinsel.cpp
engines/tinsel/token.cpp
engines/toon/anim.cpp
engines/toon/anim.h
engines/toon/audio.cpp
engines/toon/audio.h
engines/toon/character.cpp
engines/toon/character.h
engines/toon/detection.cpp
engines/toon/font.cpp
engines/toon/font.h
engines/toon/hotspot.cpp
engines/toon/hotspot.h
engines/toon/movie.cpp
engines/toon/movie.h
engines/toon/path.cpp
engines/toon/picture.cpp
engines/toon/picture.h
engines/toon/resource.cpp
engines/toon/resource.h
engines/toon/script_func.h
engines/toon/text.cpp
engines/toon/text.h
engines/toon/toon.cpp
engines/toon/toon.h
engines/touche/detection.cpp
engines/touche/graphics.h
engines/touche/resource.cpp
engines/touche/saveload.cpp
engines/touche/staticres.cpp
engines/touche/touche.cpp
engines/touche/touche.h
engines/tsage/blue_force/blueforce_dialogs.cpp
engines/tsage/blue_force/blueforce_dialogs.h
engines/tsage/blue_force/blueforce_logic.cpp
engines/tsage/blue_force/blueforce_logic.h
engines/tsage/blue_force/blueforce_scenes0.cpp
engines/tsage/blue_force/blueforce_scenes0.h
engines/tsage/blue_force/blueforce_scenes1.cpp
engines/tsage/blue_force/blueforce_scenes1.h
engines/tsage/blue_force/blueforce_scenes2.cpp
engines/tsage/blue_force/blueforce_scenes3.cpp
engines/tsage/blue_force/blueforce_scenes3.h
engines/tsage/blue_force/blueforce_scenes4.cpp
engines/tsage/blue_force/blueforce_scenes4.h
engines/tsage/blue_force/blueforce_scenes5.cpp
engines/tsage/blue_force/blueforce_scenes5.h
engines/tsage/blue_force/blueforce_scenes6.cpp
engines/tsage/blue_force/blueforce_scenes6.h
engines/tsage/blue_force/blueforce_scenes7.cpp
engines/tsage/blue_force/blueforce_scenes7.h
engines/tsage/blue_force/blueforce_scenes8.cpp
engines/tsage/blue_force/blueforce_scenes9.cpp
engines/tsage/blue_force/blueforce_scenes9.h
engines/tsage/converse.cpp
engines/tsage/converse.h
engines/tsage/core.cpp
engines/tsage/core.h
engines/tsage/debugger.cpp
engines/tsage/debugger.h
engines/tsage/detection.cpp
engines/tsage/detection_tables.h
engines/tsage/dialogs.cpp
engines/tsage/dialogs.h
engines/tsage/events.cpp
engines/tsage/events.h
engines/tsage/globals.cpp
engines/tsage/globals.h
engines/tsage/graphics.cpp
engines/tsage/graphics.h
engines/tsage/module.mk
engines/tsage/resources.cpp
engines/tsage/resources.h
engines/tsage/ringworld/ringworld_dialogs.cpp
engines/tsage/ringworld/ringworld_dialogs.h
engines/tsage/ringworld/ringworld_logic.cpp
engines/tsage/ringworld/ringworld_logic.h
engines/tsage/ringworld/ringworld_scenes10.cpp
engines/tsage/ringworld/ringworld_scenes10.h
engines/tsage/ringworld/ringworld_scenes3.cpp
engines/tsage/ringworld/ringworld_scenes5.cpp
engines/tsage/ringworld/ringworld_scenes5.h
engines/tsage/ringworld/ringworld_scenes6.cpp
engines/tsage/ringworld/ringworld_scenes8.cpp
engines/tsage/ringworld/ringworld_scenes8.h
engines/tsage/ringworld2/ringworld2_dialogs.cpp
engines/tsage/ringworld2/ringworld2_dialogs.h
engines/tsage/ringworld2/ringworld2_logic.cpp
engines/tsage/ringworld2/ringworld2_logic.h
engines/tsage/ringworld2/ringworld2_scenes0.cpp
engines/tsage/ringworld2/ringworld2_scenes0.h
engines/tsage/saveload.cpp
engines/tsage/saveload.h
engines/tsage/scenes.cpp
engines/tsage/sound.cpp
engines/tsage/sound.h
engines/tsage/staticres.cpp
engines/tsage/staticres.h
engines/tsage/tsage.cpp
engines/tsage/tsage.h
engines/tsage/user_interface.cpp
engines/tsage/user_interface.h
engines/tucker/detection.cpp
engines/tucker/locations.cpp
engines/tucker/saveload.cpp
engines/tucker/tucker.h
graphics/VectorRenderer.cpp
graphics/VectorRenderer.h
graphics/VectorRendererSpec.cpp
graphics/VectorRendererSpec.h
graphics/cursorman.cpp
graphics/font.cpp
graphics/font.h
graphics/fontman.cpp
graphics/fontman.h
graphics/fonts/bdf.cpp
graphics/fonts/bdf.h
graphics/fonts/consolefont.cpp
graphics/fonts/newfont.cpp
graphics/fonts/newfont_big.cpp
graphics/iff.cpp
graphics/imagedec.cpp
graphics/jpeg.cpp
graphics/jpeg.h
graphics/module.mk
graphics/pict.cpp
graphics/png.cpp
graphics/png.h
graphics/scaler/scale2x.h
graphics/scaler/scale3x.h
graphics/scaler/scalebit.h
graphics/scaler/thumbnail_intern.cpp
graphics/sjis.h
graphics/surface.cpp
graphics/yuv_to_rgb.h
gui/ThemeEngine.cpp
gui/ThemeEngine.h
gui/ThemeParser.cpp
gui/ThemeParser.h
gui/about.cpp
gui/browser_osx.mm
gui/console.cpp
gui/credits.h
gui/debugger.cpp
gui/dialog.cpp
gui/gui-manager.cpp
gui/gui-manager.h
gui/launcher.cpp
gui/launcher.h
gui/object.cpp
gui/object.h
gui/options.cpp
gui/options.h
gui/saveload.cpp
gui/themes/default.inc
gui/themes/fonts/README
gui/themes/scummclassic.zip
gui/themes/scummclassic/THEMERC
gui/themes/scummclassic/clR6x12-iso-8859-2.fcc
gui/themes/scummclassic/clR6x12-iso-8859-5.fcc
gui/themes/scummclassic/classic_gfx.stx
gui/themes/scummclassic/classic_layout.stx
gui/themes/scummclassic/classic_layout_lowres.stx
gui/themes/scummclassic/fixed5x8-iso-8859-2.fcc
gui/themes/scummclassic/fixed5x8-iso-8859-5.fcc
gui/themes/scummclassic/helvb12-iso-8859-2.fcc
gui/themes/scummclassic/helvb12-iso-8859-5.fcc
gui/themes/scummmodern.zip
gui/themes/scummmodern/THEMERC
gui/themes/scummmodern/clR6x12-iso-8859-2.fcc
gui/themes/scummmodern/clR6x12-iso-8859-5.fcc
gui/themes/scummmodern/fixed5x8-iso-8859-2.fcc
gui/themes/scummmodern/fixed5x8-iso-8859-5.fcc
gui/themes/scummmodern/helvb12-iso-8859-1.fcc
gui/themes/scummmodern/helvb12-iso-8859-2.fcc
gui/themes/scummmodern/helvb12-iso-8859-5.fcc
gui/themes/scummmodern/scummmodern_gfx.stx
gui/themes/scummmodern/scummmodern_layout.stx
gui/themes/scummmodern/scummmodern_layout_lowres.stx
gui/themes/scummmodern/search.bmp
gui/themes/scummtheme.py
gui/themes/translations.dat
gui/widget.cpp
gui/widget.h
gui/widgets/editable.cpp
gui/widgets/edittext.cpp
gui/widgets/list.cpp
gui/widgets/scrollbar.cpp
gui/widgets/scrollbar.h
po/POTFILES
po/ca_ES.po
po/cs_CZ.po
po/da_DA.po
po/de_DE.po
po/es_ES.po
po/fr_FR.po
po/hu_HU.po
po/it_IT.po
po/module.mk
po/nb_NO.po
po/nn_NO.po
po/pl_PL.po
po/pt_BR.po
po/ru_RU.po
po/scummvm.pot
po/se_SE.po
po/uk_UA.po
ports.mk
test/audio/helper.h
test/audio/raw.h
test/common/fixedstack.h
test/common/memoryreadstream.h
test/common/pack.h
test/common/stack.h
test/common/subreadstream.h
test/cxxtest/cxxtest/ValueTraits.h
video/avi_decoder.h
video/bink_decoder.cpp
video/bink_decoder.h
video/codecs/cinepak.h
video/codecs/mjpeg.h
video/coktel_decoder.cpp
video/coktel_decoder.h
video/dxa_decoder.cpp
video/dxa_decoder.h
video/module.mk
video/qt_decoder.cpp
video/qt_decoder.h
diff --cc engines/neverhood/blbarchive.cpp
index 6a047ca,0000000..4e138b0
mode 100644,000000..100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@@ -1,116 -1,0 +1,116 @@@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/dcl.h"
+#include "neverhood/blbarchive.h"
+
+namespace Neverhood {
+
+BlbArchive::BlbArchive() : _extData(NULL) {
+}
+
+BlbArchive::~BlbArchive() {
+ delete[] _extData;
+}
+
+void BlbArchive::open(const Common::String &filename) {
+ BlbHeader header;
+
+ _entries.clear();
+
+ if (!_fd.open(filename))
+ error("BlbArchive::open() Could not open %s", filename.c_str());
+
+ header.id1 = _fd.readUint32LE();
+ header.id2 = _fd.readUint16LE();
+ header.extDataSize = _fd.readUint16LE();
+ header.fileSize = _fd.readUint32LE();
+ header.fileCount = _fd.readUint32LE();
+
+ if (header.id1 != 0x2004940 || header.id2 != 7 || header.fileSize != _fd.size())
+ error("BlbArchive::open() %s seems to be corrupt", filename.c_str());
+
+ debug(2, "fileCount = %d", header.fileCount);
+
+ _entries.reserve(header.fileCount);
+
+ // Load file hashes
+ for (uint i = 0; i < header.fileCount; i++) {
+ BlbArchiveEntry entry;
+ entry.fileHash = _fd.readUint32LE();
+ _entries.push_back(entry);
+ }
+
+ // Load file records
+ for (uint i = 0; i < header.fileCount; i++) {
+ BlbArchiveEntry &entry = _entries[i];
+ entry.type = _fd.readByte();
+ entry.comprType = _fd.readByte();
+ entry.extDataOfs = _fd.readUint16LE();
+ entry.timeStamp = _fd.readUint32LE();
+ entry.offset = _fd.readUint32LE();
+ entry.diskSize = _fd.readUint32LE();
+ entry.size = _fd.readUint32LE();
+ debug(2, "%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
+ entry.fileHash, entry.type, entry.comprType, entry.extDataOfs, entry.timeStamp,
+ entry.offset, entry.diskSize, entry.size);
+ }
+
+ // Load ext data
+ if (header.extDataSize > 0) {
+ _extData = new byte[header.extDataSize];
+ _fd.read(_extData, header.extDataSize);
+ }
+
+}
+
+void BlbArchive::load(uint index, byte *buffer, uint32 size) {
+ BlbArchiveEntry &entry = _entries[index];
+
+ _fd.seek(entry.offset);
+
+ switch (entry.comprType) {
+ case 1: // Uncompressed
+ if (size == 0)
+ size = entry.diskSize;
+ _fd.read(buffer, size);
+ break;
+ case 3: // DCL-compressed
+ Common::decompressDCL(&_fd, buffer, entry.diskSize, entry.size);
+ break;
+ default:
+ ;
+ }
+
+}
+
+byte *BlbArchive::getEntryExtData(uint index) {
+ BlbArchiveEntry &entry = _entries[index];
+ return (_extData && entry.extDataOfs != 0) ? &_extData[entry.extDataOfs - 1] : NULL;
+}
+
+Common::SeekableReadStream *BlbArchive::createStream(uint index) {
+ const BlbArchiveEntry &entry = _entries[index];
- return new Common::SafeSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
++ return new Common::SafeSeekableSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
+}
+
+} // End of namespace Neverhood
Commit: 0683ed9eee35a465b7b3fd5b36f55011123aee65
https://github.com/scummvm/scummvm/commit/0683ed9eee35a465b7b3fd5b36f55011123aee65
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:38-07:00
Commit Message:
NEVERHOOD: Rename SetSpriteCallback to SetSpriteUpdate
- Started replace message numbers with constants
- Add NRect::contains
- Some cleanup
Changed paths:
A engines/neverhood/messages.h
engines/neverhood/blbarchive.cpp
engines/neverhood/collisionman.cpp
engines/neverhood/graphics.h
engines/neverhood/klayman.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module3000.cpp
engines/neverhood/neverhood.h
engines/neverhood/scene.cpp
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
engines/neverhood/smackerscene.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 4e138b0..f003728 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -98,7 +98,7 @@ void BlbArchive::load(uint index, byte *buffer, uint32 size) {
Common::decompressDCL(&_fd, buffer, entry.diskSize, entry.size);
break;
default:
- ;
+ error("BlbArchive::load() Unknown compression type %d", entry.comprType);
}
}
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index a1314bf..bacf18b 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -56,13 +56,10 @@ void CollisionMan::clearHitRects() {
}
HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
- if (_hitRects) {
- for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++) {
- HitRect *hitRect = &(*it);
- if (x >= hitRect->rect.x1 && x <= hitRect->rect.x2 && y >= hitRect->rect.y1 && y <= hitRect->rect.y2)
- return hitRect;
- }
- }
+ if (_hitRects)
+ for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++)
+ if ((*it).rect.contains(x, y))
+ return &(*it);
return &defaultHitRect;
}
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index c2adb11..7725e73 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -42,14 +42,22 @@ struct NDimensions {
struct NRect {
int16 x1, y1, x2, y2;
+
NRect() : x1(0), y1(0), x2(0), y2(0) {}
+
NRect(int16 x01, int16 y01, int16 x02, int16 y02) : x1(x01), y1(y01), x2(x02), y2(y02) {}
+
void set(int16 x01, int16 y01, int16 x02, int16 y02) {
x1 = x01;
y1 = y01;
x2 = x02;
y2 = y02;
}
+
+ bool contains(int16 x, int16 y) const {
+ return x >= x1 && x <= x2 && y >= y1 && y <= y2;
+ }
+
};
typedef Common::Array<NRect> NRectArray;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 6873e50..303e3fe 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -132,7 +132,7 @@ void Klayman::stIdlePickEar() {
startAnimation(0x5B20C814, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmIdlePickEar);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
FinalizeState(&Klayman::evIdlePickEarDone);
}
@@ -163,7 +163,7 @@ void Klayman::sub41FDB0() {
startAnimation(0xD122C137, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E980);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
@@ -189,7 +189,7 @@ void Klayman::sub41FE00() {
startAnimation(0x543CD054, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41E9E0);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
FinalizeState(&Klayman::sub41FE50);
}
@@ -224,7 +224,7 @@ void Klayman::stIdleChest() {
startAnimation(0x40A0C034, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmIdleChest);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
@@ -250,7 +250,7 @@ void Klayman::sub41FEC0() {
startAnimation(0x5120E137, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EFE0);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
@@ -277,7 +277,7 @@ void Klayman::sub421350() {
_acceptInput = true;
startAnimation(0x582EC138, 0, -1);
_counter = 0;
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetUpdateHandler(&Klayman::update41D1C0);
SetMessageHandler(&Klayman::handleMessage41D360);
_counter3 = 0;
@@ -317,7 +317,7 @@ void Klayman::stIdleSitBlink() {
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -327,7 +327,7 @@ void Klayman::stIdleSitBlinkSecond() {
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update41D1C0);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stPickUpNeedle() {
@@ -338,7 +338,7 @@ void Klayman::stPickUpNeedle() {
startAnimation(0x1449C169, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPickUpGeneric);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -350,7 +350,7 @@ void Klayman::sub41FFF0() {
startAnimation(0x0018C032, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D640);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -383,7 +383,7 @@ void Klayman::stTurnToUseInTeleporter() {
startAnimation(0xD229823D, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stReturnFromUseInTeleporter() {
@@ -392,7 +392,7 @@ void Klayman::stReturnFromUseInTeleporter() {
startAnimation(0x9A2801E0, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stStepOver() {
@@ -402,7 +402,7 @@ void Klayman::stStepOver() {
startAnimation(0x004AA310, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
}
@@ -413,7 +413,7 @@ void Klayman::stSitInTeleporter() {
startAnimation(0x392A0330, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmSitInTeleporter);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
}
@@ -435,7 +435,7 @@ void Klayman::stGetUpFromTeleporter() {
startAnimation(0x913AB120, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
/////////////////////////////////////////////////////////////////
@@ -477,7 +477,7 @@ bool Klayman::stStartActionFromIdle(AnimationCb callback) {
startAnimation(0x9A7020B8, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartAction);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(callback);
return true;
}
@@ -523,7 +523,7 @@ void Klayman::stTryStandIdle() {
_counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
SetUpdateHandler(&Klayman::update41D0F0);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -591,7 +591,7 @@ void Klayman::stStand() {
startAnimation(0x5900C41E, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
@@ -611,7 +611,7 @@ void Klayman::stStandAround() {
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update41D0F0);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -666,7 +666,7 @@ void Klayman::stWakeUp() {
startAnimation(0x527AC970, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stSleeping() {
@@ -675,7 +675,7 @@ void Klayman::stSleeping() {
startAnimation(0x5A38C110, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmSleeping);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -697,7 +697,7 @@ bool Klayman::stStartAction(AnimationCb callback3) {
startAnimation(0x5C7080D4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartAction);
- SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F250);
NextState(callback3);
return true;
} else {
@@ -793,7 +793,7 @@ void Klayman::stSneak() {
startAnimation(0x5C48C506, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
- SetSpriteCallback(&Klayman::suWalking);
+ SetSpriteUpdate(&Klayman::suWalking);
FinalizeState(&Klayman::stWalkingDone);
}
@@ -832,7 +832,7 @@ void Klayman::stStartWalking() {
startAnimation(0x242C0198, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteCallback(&Klayman::suWalkingTestExit);
+ SetSpriteUpdate(&Klayman::suWalkingTestExit);
FinalizeState(&Klayman::stStartWalkingDone);
NextState(&Klayman::stWalking);
}
@@ -863,13 +863,13 @@ void Klayman::stWalking() {
startAnimation(0x1A249001, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
- SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
FinalizeState(&Klayman::stStartWalkingDone);
NextState(&Klayman::stUpdateWalking);
}
void Klayman::spriteUpdate41F300() {
- SetSpriteCallback(&Klayman::suWalkingTestExit);
+ SetSpriteUpdate(&Klayman::suWalkingTestExit);
_deltaX = 0;
}
@@ -914,7 +914,7 @@ void Klayman::stUpdateWalking() {
}
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
- SetSpriteCallback(&Klayman::suWalking);
+ SetSpriteUpdate(&Klayman::suWalking);
FinalizeState(&Klayman::stWalkingDone);
}
}
@@ -987,7 +987,7 @@ void Klayman::stPickUpGeneric() {
startAnimation(0x1C28C178, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPickUpGeneric);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -1024,7 +1024,7 @@ void Klayman::stTurnPressButton() {
startAnimation(0x1C02B03D, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -1053,7 +1053,7 @@ void Klayman::stStampFloorButton() {
startAnimation(0x1C16B033, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -1064,7 +1064,7 @@ void Klayman::stPressButtonSide() {
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F250);
}
}
@@ -1155,7 +1155,7 @@ void Klayman::stLargeStep() {
startAnimation(0x08B28116, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLargeStep);
- SetSpriteCallback(&Klayman::suLargeStep);
+ SetSpriteUpdate(&Klayman::suLargeStep);
FinalizeState(&Klayman::stLargeStepDone);
}
@@ -1225,7 +1225,7 @@ void Klayman::stWonderAboutHalf() {
startAnimation(0xD820A114, 0, 10);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stWonderAboutAfter() {
@@ -1234,7 +1234,7 @@ void Klayman::stWonderAboutAfter() {
startAnimation(0xD820A114, 30, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stTurnToUseHalf() {
@@ -1243,7 +1243,7 @@ void Klayman::stTurnToUseHalf() {
startAnimation(0x9B250AD2, 0, 7);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1266,7 +1266,7 @@ void Klayman::stTurnAwayFromUse() {
startAnimation(0x98F88391, 4, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stWonderAbout() {
@@ -1275,7 +1275,7 @@ void Klayman::stWonderAbout() {
startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stPeekWall() {
@@ -1284,7 +1284,7 @@ void Klayman::stPeekWall() {
startAnimation(0xAC20C012, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPeekWall);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1318,7 +1318,7 @@ void Klayman::setupJumpToRing() {
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmJumpToRing);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
NextState(&Klayman::sub420340);
sendMessage(_attachedSprite, 0x482B, 0);
}
@@ -1355,7 +1355,7 @@ void Klayman::sub420340() {
startAnimation(0x4829E0B8, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stJumpToRing2() {
@@ -1372,7 +1372,7 @@ void Klayman::stJumpToRing3() {
_acceptInput = false;
startAnimation(0xBA1910B2, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmJumpToRing3);
NextState(&Klayman::stHoldRing);
sendMessage(_attachedSprite, 0x482B, 0);
@@ -1405,7 +1405,7 @@ void Klayman::stHoldRing() {
startAnimation(0x4A293FB0, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmHoldRing);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmHoldRing(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1426,7 +1426,7 @@ void Klayman::stReleaseRing() {
startAnimation(0xB869A4B9, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Klayman::stJumpToRing4() {
@@ -1449,7 +1449,7 @@ void Klayman::stContinueClimbLadderUp() {
_newStickFrameHash = 0x01084280;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
gotoNextStateExt();
}
@@ -1469,14 +1469,14 @@ void Klayman::stStartClimbLadderDown() {
startAnimation(0x122D1505, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
} else if (_ladderStatus == 3) {
_ladderStatus = 2;
_acceptInput = true;
startAnimationByHash(0x122D1505, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
} else if (_ladderStatus == 1) {
_ladderStatus = 2;
_acceptInput = true;
@@ -1493,14 +1493,14 @@ void Klayman::stClimbLadderHalf() {
startAnimationByHash(0x3A292504, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
} else if (_ladderStatus == 2) {
_ladderStatus = 0;
_acceptInput = false;
startAnimationByHash(0x122D1505, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
} else {
gotoNextStateExt();
}
@@ -1561,14 +1561,14 @@ void Klayman::stStartClimbLadderUp() {
startAnimation(0x3A292504, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
} else if (_ladderStatus == 3) {
_ladderStatus = 1;
_acceptInput = true;
startAnimationByHash(0x3A292504, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
} else if (_ladderStatus == 2) {
_ladderStatus = 1;
_acceptInput = true;
@@ -1583,7 +1583,7 @@ void Klayman::stWalkToFrontNoStep() {
startAnimationByHash(0xF229C003, 0x14884392, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1611,7 +1611,7 @@ void Klayman::stWalkToFront() {
startAnimation(0xF229C003, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
}
@@ -1622,7 +1622,7 @@ void Klayman::stTurnToFront() {
startAnimationByHash(0xCA221107, 0x8520108C, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
}
@@ -1633,7 +1633,7 @@ void Klayman::stTurnToBack() {
startAnimation(0xCA221107, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
}
@@ -1643,7 +1643,7 @@ void Klayman::stLandOnFeet() {
startAnimation(0x18118554, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLandOnFeet);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1665,7 +1665,7 @@ void Klayman::stTurnToBackToUse() {
startAnimation(0x91540140, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmTurnToBackToUse);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
}
@@ -1691,7 +1691,7 @@ void Klayman::stClayDoorOpen() {
_acceptInput = false;
startAnimation(0x5CCCB330, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmClayDoorOpen);
}
}
@@ -1716,7 +1716,7 @@ void Klayman::stTurnToUse() {
_acceptInput = false;
startAnimation(0x9B250AD2, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmTurnToUse);
}
}
@@ -1726,7 +1726,7 @@ void Klayman::stReturnFromUse() {
_acceptInput = false;
startAnimation(0x98F88391, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmTurnToUse);
}
@@ -1735,7 +1735,7 @@ void Klayman::stWalkingOpenDoor() {
_acceptInput = false;
startAnimation(0x11A8E012, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::suWalkingOpenDoor);
+ SetSpriteUpdate(&Klayman::suWalkingOpenDoor);
SetMessageHandler(&Klayman::hmStartWalking);
}
@@ -1753,7 +1753,7 @@ void Klayman::stMoveObjectSkipTurnFaceObject() {
_acceptInput = true;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
@@ -1792,7 +1792,7 @@ void Klayman::stMoveObjectSkipTurn() {
_acceptInput = true;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
@@ -1804,7 +1804,7 @@ void Klayman::stMoveObjectFaceObject() {
_acceptInput = true;
startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
}
@@ -1818,7 +1818,7 @@ void Klayman::stUseLever() {
sendMessage(_attachedSprite, 0x482B, 0);
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
@@ -1836,7 +1836,7 @@ void Klayman::stPullLeverDown() {
void Klayman::stHoldLeverDown() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D360);
_isLeverDown = true;
_acceptInput = true;
@@ -1845,7 +1845,7 @@ void Klayman::stHoldLeverDown() {
void Klayman::stUseLeverRelease() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stPullLeverDown);
@@ -1857,7 +1857,7 @@ void Klayman::stReleaseLever() {
_status2 = 2;
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stLetGoOfLever);
@@ -1894,7 +1894,7 @@ void Klayman::stInsertDisk() {
} else {
startAnimation(0xD8C8D100, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F250);
SetMessageHandler(&Klayman::hmInsertDisk);
_acceptInput = false;
_counter2--;
@@ -1952,10 +1952,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&KmScene1001::sub44FA50);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -2016,7 +2016,7 @@ void KmScene1001::sub44FA50() {
startAnimation(0x00648953, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1001::handleMessage44FA00);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
}
@@ -2101,7 +2101,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&KmScene1002::sub449E20);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
GotoState(&KmScene1002::stPressDoorButton);
}
@@ -2329,7 +2329,7 @@ void KmScene1002::sub449E20() {
_acceptInput = false;
startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1002::handleMessage449800);
NextState(&Klayman::stLandOnFeet);
sendMessage(_attachedSprite, 0x482B, 0);
@@ -2343,7 +2343,7 @@ void KmScene1002::sub449E90() {
_surface->setVisible(false);
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1002::handleMessage4498E0);
}
@@ -2356,7 +2356,7 @@ void KmScene1002::sub449EF0() {
// Weird stuff happening
SetMessageHandler(&Klayman::handleMessage41D360);
//SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteCallback(&KmScene1002::suFallDown);
+ SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&KmScene1002::sub449F70);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
@@ -2370,7 +2370,7 @@ void KmScene1002::sub449F70() {
_isWalking = false;
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1002::handleMessage41D480);
NextState(&KmScene1002::sub44A230);
sendMessage(_parentScene, 0x2002, 0);
@@ -2386,7 +2386,7 @@ void KmScene1002::stSpitOutFall() {
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
- SetSpriteCallback(&KmScene1002::suFallDown);
+ SetSpriteUpdate(&KmScene1002::suFallDown);
SetMessageHandler(&Klayman::handleMessage41D480);
NextState(&KmScene1002::sub449F70);
sendMessage(_class599, 0x482A, 0);
@@ -2400,7 +2400,7 @@ void KmScene1002::sub44A0D0() {
startAnimation(0x0013A206, 0, -1);
SetUpdateHandler(&KmScene1002::update4497D0);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(&KmScene1002::suFallDown);
+ SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&KmScene1002::sub44A150);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
@@ -2415,7 +2415,7 @@ void KmScene1002::sub44A150() {
startAnimationByHash(0x0013A206, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D480);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&KmScene1002::sub44A230);
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
@@ -2437,7 +2437,7 @@ void KmScene1002::stJumpAndFall() {
startAnimation(0xB93AB151, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage449D60);
- SetSpriteCallback(&KmScene1002::suFallDown);
+ SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
}
@@ -2453,7 +2453,7 @@ void KmScene1002::stDropFromRing() {
startAnimation(0x586984B1, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage41D360);
- SetSpriteCallback(&KmScene1002::suFallDown);
+ SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
@@ -2464,7 +2464,7 @@ void KmScene1002::stPressDoorButton() {
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::hmPressDoorButton);
- SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F250);
}
void KmScene1002::stHitByBoxingGlove() {
@@ -2473,7 +2473,7 @@ void KmScene1002::stHitByBoxingGlove() {
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::handleMessage449C90);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
FinalizeState(&KmScene1002::stHitByBoxingGloveDone);
}
@@ -2490,7 +2490,7 @@ void KmScene1002::stMoveVenusFlyTrap() {
startAnimation(0x5C01A870, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
}
}
@@ -2501,7 +2501,7 @@ void KmScene1002::stContinueMovingVenusFlyTrap() {
startAnimationByHash(0x5C01A870, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
}
@@ -2596,7 +2596,7 @@ void KmScene1004::stReadNote() {
startAnimation(0x123E9C9F, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene1004::hmReadNote);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -2681,7 +2681,7 @@ void KmScene1109::sub461F30() {
_status2 = 0;
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1109::handleMessage461EA0);
startAnimation(0x2C2A4A1C, 0, -1);
}
@@ -2690,7 +2690,7 @@ void KmScene1109::sub461F70() {
_status2 = 0;
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1109::handleMessage461EA0);
startAnimation(0x3C2E4245, 0, -1);
}
@@ -2717,7 +2717,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480A:
GotoState(&KmScene1201::stMoveObject);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4813:
@@ -2729,7 +2729,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4815:
GotoState(&KmScene1201::sub40E040);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
GotoState(&Klayman::stPressButtonSide);
}
@@ -2801,7 +2801,7 @@ void KmScene1201::stFetchMatch() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x9CAA0218, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1201::hmMatch);
NextState(&KmScene1201::stLightMatch);
}
@@ -2813,7 +2813,7 @@ void KmScene1201::stLightMatch() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x1222A513, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1201::hmMatch);
}
@@ -2858,7 +2858,7 @@ void KmScene1201::stMoveObject() {
setDoDeltaX(0);
startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&KmScene1201::update40DBE0);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmMoveObject);
}
}
@@ -2867,7 +2867,7 @@ void KmScene1201::stMoveObjectSkipTurn() {
_acceptInput = false;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&KmScene1201::update40DBE0);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmMoveObject);
}
@@ -2878,7 +2878,7 @@ void KmScene1201::stTumbleHeadless() {
setDoDeltaX(0);
startAnimation(0x2821C590, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmTumbleHeadless);
NextState(&Klayman::stTryStandIdle);
sendMessage(_class464, 0x2006, 0);
@@ -2892,7 +2892,7 @@ void KmScene1201::sub40E040() {
_acceptInput = false;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D360);
}
}
@@ -2948,7 +2948,7 @@ void KmScene1303::stPeekWall1() {
_acceptInput = true;
startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
NextState(&KmScene1303::stPeekWall3);
}
@@ -2958,7 +2958,7 @@ void KmScene1303::stPeekWall2() {
_acceptInput = false;
startAnimation(0xAC20C012, 43, 49);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
}
@@ -2969,7 +2969,7 @@ void KmScene1303::stPeekWall3() {
_counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
startAnimation(0xAC20C012, 38, 42);
SetUpdateHandler(&KmScene1303::update4161A0);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D360);
_newStickFrameIndex = 42;
}
@@ -2979,7 +2979,7 @@ void KmScene1303::stPeekWallReturn() {
_acceptInput = false;
startAnimation(0x2426932E, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1303::hmPeekWallReturn);
}
@@ -2998,7 +2998,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3069,7 +3069,7 @@ void KmScene1305::stCrashDown() {
_acceptInput = false;
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
NextState(&KmScene1305::cbCrashDownEvent);
}
@@ -3101,7 +3101,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
else
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3110,7 +3110,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPickUpGeneric);
}
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -3123,7 +3123,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
- case 0x481A:
+ case NM_KLAYMAN_INSERT_DISK:
GotoState(&Klayman::stInsertDisk);
break;
case 0x481B:
@@ -3210,7 +3210,7 @@ void KmScene1306::sub417D40() {
_acceptInput = false;
startAnimation(0xEE084A04, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1306::handleMessage417CB0);
}
@@ -3219,7 +3219,7 @@ void KmScene1306::sub417D80() {
_acceptInput = false;
startAnimation(0xB86A4274, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1306::handleMessage417CB0);
}
@@ -3261,7 +3261,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&KmScene1001::stUseLever);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3274,7 +3274,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
- case 0x481A:
+ case NM_KLAYMAN_INSERT_DISK:
if (param.asInteger() == 1) {
GotoState(&KmScene1308::sub456150);
} else {
@@ -3294,7 +3294,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x481E:
GotoState(&Klayman::stReturnFromUse);
break;
- case 0x4827:
+ case NM_KLAYMAN_RELEASE_LEVER:
GotoState(&Klayman::stReleaseLever);
break;
case 0x4834:
@@ -3364,7 +3364,7 @@ void KmScene1308::sub456150() {
_acceptInput = false;
startAnimation(0xDC409440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F250);
SetMessageHandler(&KmScene1308::handleMessage);
_flag1 = false;
}
@@ -3395,7 +3395,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -3518,7 +3518,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&KmScene1001::stUseLever);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3538,7 +3538,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41CCE0(param.asPoint().x);
}
break;
- case 0x4827:
+ case NM_KLAYMAN_RELEASE_LEVER:
GotoState(&Klayman::stReleaseLever);
break;
case 0x483F:
@@ -3575,7 +3575,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stMoveObjectFaceObject);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3588,7 +3588,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
- case 0x481A:
+ case NM_KLAYMAN_INSERT_DISK:
GotoState(&Klayman::stInsertDisk);
break;
case 0x481B:
@@ -3650,7 +3650,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
else
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3747,7 +3747,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4803:
GotoState(&KmScene1705::stFallSkipJump);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3842,7 +3842,7 @@ void KmScene1705::stFallSkipJump() {
_acceptInput = false;
startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&KmScene1705::spriteUpdate468A30);
+ SetSpriteUpdate(&KmScene1705::spriteUpdate468A30);
SetMessageHandler(&Klayman::handleMessage41D360);
NextState(&Klayman::stLandOnFeet);
}
@@ -3852,7 +3852,7 @@ void KmScene1705::sub468AD0() {
_acceptInput = false;
startAnimation(0x5E0A4905, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1705::handleMessage4689A0);
}
@@ -3861,7 +3861,7 @@ void KmScene1705::sub468B10() {
_acceptInput = false;
startAnimation(0xD86E4477, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1705::handleMessage4689A0);
}
@@ -3922,26 +3922,23 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
if (_isSittingInTeleporter) {
GotoState(&Klayman::sub421350);
- } else {
+ } else
GotoState(&Klayman::stTryStandIdle);
- }
break;
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klayman::stWalking);
- } else {
+ } else
GotoState(&Klayman::stPeekWall);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481D:
- if (_isSittingInTeleporter) {
+ if (_isSittingInTeleporter)
GotoState(&Klayman::stTurnToUseInTeleporter);
- }
break;
case 0x481E:
if (_isSittingInTeleporter) {
@@ -3990,7 +3987,7 @@ void KmScene2001::sub440230() {
_acceptInput = false;
startAnimation(0xBE68CC54, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
@@ -3999,7 +3996,7 @@ void KmScene2001::stDoTeleport() {
_acceptInput = false;
startAnimation(0x18AB4ED4, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
@@ -4029,7 +4026,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4811:
GotoState(&KmScene2101::sub4862C0);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4038,7 +4035,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPickUpGeneric);
}
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -4131,7 +4128,7 @@ void KmScene2101::sub4862C0() {
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene2101::handleMessage486160);
_soundResource1.play(0x402E82D4);
}
@@ -4141,7 +4138,7 @@ void KmScene2101::sub486320() {
_acceptInput = false;
startAnimation(0xFF290E30, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene2101::handleMessage486230);
}
@@ -4150,7 +4147,7 @@ void KmScene2101::sub486360() {
_acceptInput = false;
startAnimation(0x9A28CA1C, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene2101::handleMessage486230);
}
@@ -4171,10 +4168,10 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4241,7 +4238,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4250,7 +4247,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPickUpGeneric);
}
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -4269,7 +4266,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4819:
GotoState(&Klayman::stClayDoorOpen);
break;
- case 0x481A:
+ case NM_KLAYMAN_INSERT_DISK:
GotoState(&Klayman::stInsertDisk);
break;
case 0x481B:
@@ -4325,7 +4322,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4357,7 +4354,7 @@ void KmScene2205::sub423980() {
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
- SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4396,14 +4393,14 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 1) {
GotoState(&Klayman::sub41FFF0);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -4483,7 +4480,7 @@ void KmScene2206::sub482490() {
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteCallback(&KmScene2206::spriteUpdate482450);
+ SetSpriteUpdate(&KmScene2206::spriteUpdate482450);
// TODO Sound1ChList_playLooping(0xD3B02847);
}
}
@@ -4498,7 +4495,7 @@ void KmScene2206::sub482530() {
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
- SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4527,10 +4524,10 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&KmScene2207::sub4424B0);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -4550,7 +4547,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41CCE0(param.asPoint().x);
}
break;
- case 0x4827:
+ case NM_KLAYMAN_RELEASE_LEVER:
GotoState(&Klayman::stReleaseLever);
break;
case 0x482D:
@@ -4579,7 +4576,7 @@ void KmScene2207::sub442460() {
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&KmScene2207::spriteUpdate442430);
+ SetSpriteUpdate(&KmScene2207::spriteUpdate442430);
SetMessageHandler(&Klayman::handleMessage41D360);
}
}
@@ -4593,7 +4590,7 @@ void KmScene2207::sub4424B0() {
_acceptInput = false;
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
+ SetSpriteUpdate(&KmScene2207::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
NextState(&KmScene2207::sub442520);
}
@@ -4609,7 +4606,7 @@ void KmScene2207::sub442520() {
void KmScene2207::sub442560() {
startAnimation(0x1564A2C0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
NextState(&KmScene2207::sub4425A0);
_acceptInput = true;
_isLeverDown = true;
@@ -4618,7 +4615,7 @@ void KmScene2207::sub442560() {
void KmScene2207::sub4425A0() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteCallback(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D360);
_acceptInput = true;
_isLeverDown = true;
@@ -4650,7 +4647,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4704,7 +4701,7 @@ void KmScene2242::sub444D20() {
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
- SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4773,7 +4770,7 @@ void KmHallOfRecords::sub43B130() {
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
- SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4842,7 +4839,7 @@ void KmScene2247::sub453520() {
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41EB70);
- SetSpriteCallback(&Klayman::spriteUpdate41F300);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
}
@@ -4861,7 +4858,7 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4817:
diff --git a/engines/neverhood/messages.h b/engines/neverhood/messages.h
new file mode 100644
index 0000000..5a2139d
--- /dev/null
+++ b/engines/neverhood/messages.h
@@ -0,0 +1,37 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MESSAGES_H
+#define NEVERHOOD_MESSAGES_H
+
+namespace Neverhood {
+
+enum NeverhoodMessage {
+ NM_KLAYMAN_PICKUP = 0x4812,
+ NM_KLAYMAN_PRESS_BUTTON = 0x4816,
+ NM_KLAYMAN_INSERT_DISK = 0x481A,
+ NM_KLAYMAN_RELEASE_LEVER = 0x4827
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MESSAGES_H */
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 176708b..edd9860 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -668,7 +668,7 @@ AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
SetUpdateHandler(&AsScene1002Door::update);
SetMessageHandler(&AsScene1002Door::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
StaticSprite::update();
}
@@ -683,11 +683,11 @@ uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x4808:
setGlobalVar(0x8306F218, 1);
- SetSpriteCallback(&AsScene1002Door::suOpenDoor);
+ SetSpriteUpdate(&AsScene1002Door::suOpenDoor);
break;
case 0x4809:
setGlobalVar(0x8306F218, 0);
- SetSpriteCallback(&AsScene1002Door::suCloseDoor);
+ SetSpriteUpdate(&AsScene1002Door::suCloseDoor);
break;
}
return messageResult;
@@ -697,7 +697,7 @@ void AsScene1002Door::suOpenDoor() {
if (_y > 49) {
_y -= 8;
if (_y < 49) {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_y = 49;
}
_needRefresh = true;
@@ -708,7 +708,7 @@ void AsScene1002Door::suCloseDoor() {
if (_y < 239) {
_y += 8;
if (_y > 239) {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_y = 239;
}
_needRefresh = true;
@@ -747,7 +747,7 @@ AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Sce
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
- SetSpriteCallback(&AsScene1002DoorSpy::suDoorSpy);
+ SetSpriteUpdate(&AsScene1002DoorSpy::suDoorSpy);
createSurface(800, 136, 147);
setClipRect(clipRect);
suDoorSpy();
@@ -909,7 +909,7 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
if (!_flag) {
if (getGlobalVar(0x8306F218)) {
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index fc28917..96ed46f 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -329,7 +329,7 @@ Class464::Class464(NeverhoodEngine *vm)
createSurface(1200, 69, 98);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class464::handleMessage);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
setVisible(false);
}
@@ -415,13 +415,13 @@ void AsScene1201TntMan::spriteUpdate40CD10() {
void AsScene1201TntMan::sub40CD30() {
startAnimation(0x654913D0, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void AsScene1201TntMan::sub40CD60() {
startAnimation(0x356803D0, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage40CCD0);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
NextState(&AsScene1201TntMan::sub40CD30);
}
@@ -431,7 +431,7 @@ void AsScene1201TntMan::sub40CD90() {
_flag = true;
startAnimation(0x85084190, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
- SetSpriteCallback(&AsScene1201TntMan::spriteUpdate40CD10);
+ SetSpriteUpdate(&AsScene1201TntMan::spriteUpdate40CD10);
_newStickFrameIndex = -2;
}
@@ -441,7 +441,7 @@ Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
createSurface1(0x828C0411, 995);
SetUpdateHandler(&Class465::update);
SetMessageHandler(&Sprite::handleMessage);
- SetSpriteCallback(&Class465::spriteUpdate40D150);
+ SetSpriteUpdate(&Class465::spriteUpdate40D150);
startAnimation(0x828C0411, 0, -1);
setVisible(false);
}
@@ -471,7 +471,7 @@ AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
createSurface(1100, 57, 60);
SetUpdateHandler(&AsScene1201Match::update);
SetMessageHandler(&AsScene1201Match::handleMessage40C2D0);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
switch (getGlobalVar(0x0112090A)) {
case 0:
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 38dd356..2c7a5c8 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -346,7 +346,7 @@ SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
SetUpdateHandler(&SsScene1302Fence::update);
SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_firstY = _y;
if (getGlobalVar(0x80101B1E))
_y += 152;
@@ -364,12 +364,12 @@ uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m
switch (messageNum) {
case 0x4808:
_soundResource1.play();
- SetSpriteCallback(&SsScene1302Fence::suMoveDown);
+ SetSpriteUpdate(&SsScene1302Fence::suMoveDown);
SetMessageHandler(NULL);
break;
case 0x4809:
_soundResource2.play();
- SetSpriteCallback(&SsScene1302Fence::suMoveUp);
+ SetSpriteUpdate(&SsScene1302Fence::suMoveUp);
SetMessageHandler(NULL);
break;
}
@@ -381,7 +381,7 @@ void SsScene1302Fence::suMoveDown() {
_y += 8;
else {
SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -390,7 +390,7 @@ void SsScene1302Fence::suMoveUp() {
_y -= 8;
else {
SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -590,7 +590,7 @@ AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
_y = 390;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1303Balloon::handleMessage);
- SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
startAnimation(0x800278D2, 0, -1);
}
@@ -1179,7 +1179,7 @@ void AsScene1307Key::suRemoveKey() {
processDelta();
_pointIndex++;
} else {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -1192,7 +1192,7 @@ void AsScene1307Key::suInsertKey() {
if (_pointIndex == 7)
_soundResource1.play();
} else {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
sendMessage(_parentScene, 0x2002, 0);
}
}
@@ -1215,7 +1215,7 @@ void AsScene1307Key::suMoveKey() {
void AsScene1307Key::stRemoveKey() {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
_pointIndex = 0;
- SetSpriteCallback(&AsScene1307Key::suRemoveKey);
+ SetSpriteUpdate(&AsScene1307Key::suRemoveKey);
startAnimation(fileHashes[0], 0, -1);
_soundResource2.play();
}
@@ -1224,7 +1224,7 @@ void AsScene1307Key::stInsertKey() {
_pointIndex = 0;
sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4]);
setClipRect(_clipRects[getSubVar(0xA010B810, _index) % 4]);
- SetSpriteCallback(&AsScene1307Key::suInsertKey);
+ SetSpriteUpdate(&AsScene1307Key::suInsertKey);
_newStickFrameIndex = -2;
}
@@ -1244,7 +1244,7 @@ void AsScene1307Key::stMoveKey() {
_currFrameIndex = 0;
_deltaX = newX - _x;
_deltaY = newY - _y;
- SetSpriteCallback(&AsScene1307Key::suMoveKey);
+ SetSpriteUpdate(&AsScene1307Key::suMoveKey);
startAnimation(fileHashes[0], 0, -1);
}
}
@@ -1778,12 +1778,12 @@ Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08284011);
showMouse(false);
_smackerFileHash = 0;
- _smackerFlag1 = false;
+ _keepLastSmackerFrame = false;
}
void Scene1317::update() {
if (_smackerFileHash) {
- _smackerPlayer->open(_smackerFileHash, _smackerFlag1);
+ _smackerPlayer->open(_smackerFileHash, _keepLastSmackerFrame);
_smackerFileHash = 0;
}
Scene::update();
@@ -1805,7 +1805,7 @@ void Scene1317::upChooseKing() {
stNoDecisionYet();
if (_smackerFileHash) {
- _smackerPlayer->open(_smackerFileHash, _smackerFlag1);
+ _smackerPlayer->open(_smackerFileHash, _keepLastSmackerFrame);
_smackerFileHash = 0;
}
@@ -1887,7 +1887,7 @@ void Scene1317::stChooseKing() {
SetMessageHandler(&Scene1317::hmChooseKing);
SetUpdateHandler(&Scene1317::upChooseKing);
_smackerFileHash = 0x10982841;
- _smackerFlag1 = true;
+ _keepLastSmackerFrame = true;
_decisionCountdown = 450;
_klaymanBlinks = false;
_klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15;
@@ -1898,7 +1898,7 @@ void Scene1317::stNoDecisionYet() {
SetMessageHandler(&Scene1317::hmNoDecisionYet);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x20982841;
- _smackerFlag1 = false;
+ _keepLastSmackerFrame = false;
}
void Scene1317::stHoborgAsKing() {
@@ -1906,7 +1906,7 @@ void Scene1317::stHoborgAsKing() {
SetMessageHandler(&Scene1317::hmHoborgAsKing);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x40982841;
- _smackerFlag1 = false;
+ _keepLastSmackerFrame = false;
}
void Scene1317::stKlaymanAsKing() {
@@ -1914,7 +1914,7 @@ void Scene1317::stKlaymanAsKing() {
SetMessageHandler(&Scene1317::hmKlaymanAsKing);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x80982841;
- _smackerFlag1 = false;
+ _keepLastSmackerFrame = false;
}
void Scene1317::stEndMovie() {
@@ -1922,7 +1922,7 @@ void Scene1317::stEndMovie() {
SetMessageHandler(&Scene1317::hmEndMovie);
SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x40800711;
- _smackerFlag1 = false;
+ _keepLastSmackerFrame = false;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 27e2540..e404127 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -300,7 +300,7 @@ protected:
int _klaymanBlinkCountdown;
int _decisionCountdown;
uint32 _smackerFileHash;
- bool _smackerFlag1;
+ bool _keepLastSmackerFrame;
void update();
void upChooseKing();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index ecf6326..76bf41b 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -258,7 +258,7 @@ void Class526::spriteUpdate466720() {
if (_rect.y1 <= 150) {
_soundResource.play(0x0E32247F);
stopAnimation();
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(NULL);
setVisible(false);
}
@@ -266,7 +266,7 @@ void Class526::spriteUpdate466720() {
void Class526::sub466770() {
startAnimation(0x34880040, 0, -1);
- SetSpriteCallback(&Class526::spriteUpdate466720);
+ SetSpriteUpdate(&Class526::spriteUpdate466720);
}
Class527::Class527(NeverhoodEngine *vm, Sprite *class526)
@@ -296,7 +296,7 @@ void Class527::spriteUpdate466920() {
if (_rect.y1 <= 150) {
_soundResource.play(0x18020439);
stopAnimation();
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(NULL);
setVisible(false);
}
@@ -304,7 +304,7 @@ void Class527::spriteUpdate466920() {
void Class527::sub466970() {
startAnimation(0x103B8020, 0, -1);
- SetSpriteCallback(&Class527::spriteUpdate466920);
+ SetSpriteUpdate(&Class527::spriteUpdate466920);
}
Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
@@ -577,13 +577,13 @@ void Class489::sub434D80() {
sendMessage(_class525, 0x483A, 0);
stopAnimation();
SetMessageHandler(&Sprite::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
setVisible(false);
}
}
void Class489::sub434DD0() {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Class489::handleMessage);
startAnimation(0x10E3042B, 0, -1);
}
@@ -591,20 +591,20 @@ void Class489::sub434DD0() {
void Class489::sub434DF0() {
_remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
startAnimation(0x14A10137, 0, -1);
- SetSpriteCallback(&Class489::spriteUpdate434B60);
+ SetSpriteUpdate(&Class489::spriteUpdate434B60);
SetMessageHandler(&Class489::handleMessage);
_soundResource2.play(0xEC008474);
}
void Class489::sub434E60() {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Class489::handleMessage434B20);
startAnimation(0x80C32213, 0, -1);
NextState(&Class489::sub434E90);
}
void Class489::sub434E90() {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Class489::handleMessage4348E0);
startAnimation(0xD23B207F, 0, -1);
}
@@ -612,7 +612,7 @@ void Class489::sub434E90() {
void Class489::sub434EC0() {
startAnimation(0x50A80517, 0, -1);
SetMessageHandler(&Class489::handleMessage434B20);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
NextState(&Class489::sub434F40);
setGlobalVar(0x12A10DB3, 1);
_soundResource1.play(0xCC4A8456);
@@ -623,13 +623,13 @@ void Class489::sub434EC0() {
void Class489::sub434F40() {
sendMessage(_parentScene, 0x480F, 0);
startAnimation(0xD833207F, 0, -1);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Class489::handleMessage4348E0);
}
void Class489::sub434F80() {
startAnimation(0x50A94417, 0, -1);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&Class489::handleMessage434B20);
NextState(&Class489::sub434E90);
setGlobalVar(0x12A10DB3, 0);
@@ -640,7 +640,7 @@ void Class489::sub434F80() {
void Class489::sub434FF0() {
_remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
startAnimation(0x22CB4A33, 0, -1);
- SetSpriteCallback(&Class489::spriteUpdate434B60);
+ SetSpriteUpdate(&Class489::spriteUpdate434B60);
SetMessageHandler(&Class489::handleMessage434B20);
NextState(&Class489::sub434DF0);
}
@@ -648,7 +648,7 @@ void Class489::sub434FF0() {
void Class489::sub435040() {
setGlobalVar(0x04A105B3, 4);
setGlobalVar(0x04A10F33, 0);
- SetSpriteCallback(&Class489::sub434D80);
+ SetSpriteUpdate(&Class489::sub434D80);
SetMessageHandler(&Sprite::handleMessage);
startAnimation(0x708D4712, 0, -1);
_soundResource3.play();
@@ -1208,7 +1208,7 @@ uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m
void AsScene1407Mouse::stIdleLookAtGoodHole() {
setDoDeltaX(kScene1407MouseHoles[kScene1407MouseSections[_currSectionIndex].goodHoleIndex].x < _x ? 1 : 0);
startAnimation(0x72215194, 0, -1);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
}
@@ -1216,7 +1216,7 @@ void AsScene1407Mouse::stWalkToDest() {
if (_walkDestX != _x) {
setDoDeltaX(_walkDestX < _x ? 1 : 0);
startAnimation(0x22291510, 0, -1);
- SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
+ SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
NextState(&AsScene1407Mouse::stIdleLookAtGoodHole);
}
@@ -1225,14 +1225,14 @@ void AsScene1407Mouse::stWalkToDest() {
void AsScene1407Mouse::stWalkToHole() {
setDoDeltaX(_walkDestX < _x ? 1 : 0);
startAnimation(0x22291510, 0, -1);
- SetSpriteCallback(&AsScene1407Mouse::suWalkTo);
+ SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
NextState(&AsScene1407Mouse::stGoThroughHole);
}
void AsScene1407Mouse::stGoThroughHole() {
startAnimation(0x72215194, 0, -1);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
SetMessageHandler(NULL);
SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
NextState(&AsScene1407Mouse::stArriveAtHole);
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 44c8721..6519efa 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -175,7 +175,7 @@ Class521::Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
SetUpdateHandler(&Class521::update);
SetMessageHandler(&Class521::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
// TODO createSurface2(200, dword_4AF4C0);
createSurface(200, 640, 480); //TODO: Remove once the line above is done
@@ -244,7 +244,7 @@ uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1019:
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
break;
/* NOTE: Implemented in setPathPoints
case 0x2000:
@@ -317,7 +317,7 @@ uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity
if (_currPointIndex == 0) {
moveToPrevPoint();
} else {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
} else {
if (minMatchIndex > _currPointIndex) {
@@ -336,14 +336,14 @@ uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity
_moreY = param.asInteger();
_steps = 0;
_flag10E = 0;
- SetSpriteCallback(&Class521::suMoveToPrevPoint);
+ SetSpriteUpdate(&Class521::suMoveToPrevPoint);
_lastDistance = 640;
break;
case 0x2008:
_moreY = param.asInteger();
_steps = 0;
_flag10E = 0;
- SetSpriteCallback(&Class521::suMoveToNextPoint);
+ SetSpriteUpdate(&Class521::suMoveToNextPoint);
_lastDistance = 640;
break;
case 0x2009:
@@ -397,7 +397,7 @@ uint32 Class521::handleMessage45CCA0(int messageNum, const MessageParam ¶m,
void Class521::sub45CD00() {
bool doDeltaX = _doDeltaX;
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_againDestPtFlag = 0;
_againDestPointFlag = 0;
_flag10E = 0;
@@ -425,12 +425,12 @@ void Class521::sub45CDC0() {
_lastDistance = 640;
_flag113 = 0;
_flag10E = 0;
- SetSpriteCallback(&Class521::suMoveToNextPoint);
+ SetSpriteUpdate(&Class521::suMoveToNextPoint);
} else if (_value112 == 2) {
_lastDistance = 640;
_flag113 = 0;
_flag10E = 0;
- SetSpriteCallback(&Class521::suMoveToPrevPoint);
+ SetSpriteUpdate(&Class521::suMoveToPrevPoint);
}
}
@@ -581,7 +581,7 @@ void Class521::moveToNextPoint() {
NextState(&Class521::sub45D100);
}
_flag10E = 0;
- SetSpriteCallback(&Class521::suMoveToNextPoint);
+ SetSpriteUpdate(&Class521::suMoveToNextPoint);
_lastDistance = 640;
}
}
@@ -643,7 +643,7 @@ void Class521::moveToPrevPoint() {
NextState(&Class521::sub45D100);
}
_flag10E = 0;
- SetSpriteCallback(&Class521::suMoveToPrevPoint);
+ SetSpriteUpdate(&Class521::suMoveToPrevPoint);
_lastDistance = 640;
}
}
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index f91513f..45d3b83 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -262,7 +262,7 @@ void AsScene1907Symbol::suTryToPlugIn() {
if (_currStep == 16) {
_x -= _smallDeltaX;
_y -= _smallDeltaY;
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -313,7 +313,7 @@ void AsScene1907Symbol::suMoveDown() {
if (_y >= kAsScene1907SymbolPluggedInDownPositions[_elementIndex].y) {
_y = kAsScene1907SymbolPluggedInDownPositions[_elementIndex].y;
_isMoving = false;
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -335,7 +335,7 @@ void AsScene1907Symbol::suMoveUp() {
if (_y < kAsScene1907SymbolPluggedInPositions[_elementIndex].y) {
_y = kAsScene1907SymbolPluggedInPositions[_elementIndex].y;
_isMoving = false;
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -348,7 +348,7 @@ void AsScene1907Symbol::tryToPlugIn() {
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
SetUpdateHandler(&AsScene1907Symbol::update);
SetMessageHandler(&AsScene1907Symbol::hmTryToPlugIn);
- SetSpriteCallback(&AsScene1907Symbol::suTryToPlugIn);
+ SetSpriteUpdate(&AsScene1907Symbol::suTryToPlugIn);
_currStep = 0;
_deltaX = (_x - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].x) / 16;
_smallDeltaX = _x - _deltaX * 16 - kAsScene1907SymbolPluggedInPositions[_newPositionIndex].x;
@@ -378,7 +378,7 @@ void AsScene1907Symbol::fallOff(int newPositionIndex, int fallOffDelay) {
_yAccel = 1;
SetUpdateHandler(&AsScene1907Symbol::update);
SetMessageHandler(&AsScene1907Symbol::handleMessage);
- SetSpriteCallback(&AsScene1907Symbol::suFallOff);
+ SetSpriteUpdate(&AsScene1907Symbol::suFallOff);
}
void AsScene1907Symbol::stFallOffHitGround() {
@@ -388,7 +388,7 @@ void AsScene1907Symbol::stFallOffHitGround() {
Entity::_priority = 1000 - _newPositionIndex;
_vm->_collisionMan->removeSprite(this);
_vm->_collisionMan->addSprite(this);
- SetSpriteCallback(&AsScene1907Symbol::suFallOffHitGround);
+ SetSpriteUpdate(&AsScene1907Symbol::suFallOffHitGround);
NextState(&AsScene1907Symbol::cbFallOffHitGroundEvent);
_newStickFrameIndex = 0;
_currStep = 0;
@@ -409,7 +409,7 @@ void AsScene1907Symbol::cbFallOffHitGroundEvent() {
_newStickFrameIndex = 0;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1907Symbol::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
processDelta();
_soundResource3.play();
}
@@ -419,7 +419,7 @@ void AsScene1907Symbol::stPlugIn() {
_currPositionIndex = _newPositionIndex;
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
if (_elementIndex == 8)
sendMessage(_parentScene, 0x2001, 0);
}
@@ -434,7 +434,7 @@ void AsScene1907Symbol::moveUp() {
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
- SetSpriteCallback(&AsScene1907Symbol::suMoveUp);
+ SetSpriteUpdate(&AsScene1907Symbol::suMoveUp);
_yIncr = 1;
_isMoving = true;
}
@@ -443,7 +443,7 @@ void AsScene1907Symbol::moveDown() {
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
- SetSpriteCallback(&AsScene1907Symbol::suMoveDown);
+ SetSpriteUpdate(&AsScene1907Symbol::suMoveDown);
_yIncr = 4;
_isMoving = true;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index e886acc..9846bc5 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -841,7 +841,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
if (_xDelta > _yDelta) {
- SetSpriteCallback(&SsScene2202PuzzleTile::suMoveTileX);
+ SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileX);
if (_xIncr > 0) {
if (_newX - _x >= 180)
_xFlagPos = _newX - 90;
@@ -855,7 +855,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
_soundResource1.play();
} else {
- SetSpriteCallback(&SsScene2202PuzzleTile::suMoveTileY);
+ SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileY);
if (_yIncr > 0) {
if (_newY - _y >= 180)
_xFlagPos = _newY - 90;
@@ -879,7 +879,7 @@ void SsScene2202PuzzleTile::stopMoving() {
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
_needRefresh = true;
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_isMoving = false;
sendMessage(_parentScene, 0x2002, _tileIndex);
}
@@ -1413,7 +1413,7 @@ Class603::Class603(NeverhoodEngine *vm, uint32 fileHash)
_x -= 63;
SetUpdateHandler(&Class603::update);
SetMessageHandler(&Class603::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Class603::update() {
@@ -1427,13 +1427,13 @@ uint32 Class603::handleMessage(int messageNum, const MessageParam ¶m, Entity
case 0x4808:
_index = 0;
SetMessageHandler(NULL);
- SetSpriteCallback(&Class603::spriteUpdate481E60);
+ SetSpriteUpdate(&Class603::spriteUpdate481E60);
_soundResource.play(0x032746E0);
break;
case 0x4809:
_index = 0;
SetMessageHandler(NULL);
- SetSpriteCallback(&Class603::spriteUpdate481E90);
+ SetSpriteUpdate(&Class603::spriteUpdate481E90);
_soundResource.play(0x002642C0);
break;
}
@@ -1446,7 +1446,7 @@ void Class603::spriteUpdate481E60() {
_index++;
} else {
SetMessageHandler(&Class603::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -1456,7 +1456,7 @@ void Class603::spriteUpdate481E90() {
_index++;
} else {
SetMessageHandler(&Class603::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -1465,7 +1465,7 @@ Class604::Class604(NeverhoodEngine *vm, uint32 fileHash)
SetUpdateHandler(&Class604::update);
SetMessageHandler(&Class604::handleMessage);
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
}
void Class604::update() {
@@ -1478,7 +1478,7 @@ uint32 Class604::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x4803:
SetMessageHandler(NULL);
- SetSpriteCallback(&Class604::spriteUpdate482020);
+ SetSpriteUpdate(&Class604::spriteUpdate482020);
_yDelta = 0;
break;
}
@@ -1708,7 +1708,7 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
createSurface(1100, 129, 103);
startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, 0, 0);
SetUpdateHandler(&AsScene2207Elevator::update);
- SetSpriteCallback(&AsScene2207Elevator::suSetPosition);
+ SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);
SetMessageHandler(&AsScene2207Elevator::handleMessage);
_newStickFrameIndex = 0;
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 8c5fd6c..8c797f3 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -670,7 +670,7 @@ AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009HorizontalIndicator::handleMessage);
if (varValue == 8 || varValue == 9 || varValue == 10) {
- SetSpriteCallback(&AsScene3009HorizontalIndicator::suMoveRight);
+ SetSpriteUpdate(&AsScene3009HorizontalIndicator::suMoveRight);
_x = 280;
}
}
@@ -691,7 +691,7 @@ uint32 AsScene3009HorizontalIndicator::handleMessage(int messageNum, const Messa
void AsScene3009HorizontalIndicator::suMoveLeft() {
_x -= 6;
if (_x < 92) {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_x = 92;
}
}
@@ -699,7 +699,7 @@ void AsScene3009HorizontalIndicator::suMoveLeft() {
void AsScene3009HorizontalIndicator::suMoveRight() {
_x += 6;
if (_x > 533) {
- SetSpriteCallback(NULL);
+ SetSpriteUpdate(NULL);
_x = 533;
}
}
@@ -713,12 +713,12 @@ void AsScene3009HorizontalIndicator::show() {
void AsScene3009HorizontalIndicator::stMoveLeft() {
_x = 533;
- SetSpriteCallback(&AsScene3009HorizontalIndicator::suMoveLeft);
+ SetSpriteUpdate(&AsScene3009HorizontalIndicator::suMoveLeft);
}
void AsScene3009HorizontalIndicator::stMoveRight() {
_x = 330;
- SetSpriteCallback(&AsScene3009HorizontalIndicator::suMoveRight);
+ SetSpriteUpdate(&AsScene3009HorizontalIndicator::suMoveRight);
}
AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index adc4619..b7c276e 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -31,6 +31,7 @@
#include "common/system.h"
#include "audio/mixer.h"
#include "engines/engine.h"
+#include "neverhood/messages.h"
namespace Neverhood {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 9a588f2..457d586 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -387,13 +387,11 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
if (_rectType == 1) {
RectList &rectList = *_rectList;
for (uint i = 0; i < rectList.size(); i++) {
- debug("(%d, %d) ? (%d, %d, %d, %d)", klaymanX, klaymanY, rectList[i].rect.x1, rectList[i].rect.y1, rectList[i].rect.x2, rectList[i].rect.y2);
- if (klaymanX >= rectList[i].rect.x1 && klaymanX <= rectList[i].rect.x2 &&
- klaymanY >= rectList[i].rect.y1 && klaymanY <= rectList[i].rect.y2) {
+ debug(2, "(%d, %d) ? (%d, %d, %d, %d)", klaymanX, klaymanY, rectList[i].rect.x1, rectList[i].rect.y1, rectList[i].rect.x2, rectList[i].rect.y2);
+ if (rectList[i].rect.contains(klaymanX, klaymanY)) {
for (uint j = 0; j < rectList[i].subRects.size(); j++) {
- debug(" (%d, %d) ? (%d, %d, %d, %d)", mouseX, mouseY, rectList[i].subRects[j].rect.x1, rectList[i].subRects[j].rect.y1, rectList[i].subRects[j].rect.x2, rectList[i].subRects[j].rect.y2);
- if (mouseX >= rectList[i].subRects[j].rect.x1 && mouseX <= rectList[i].subRects[j].rect.x2 &&
- mouseY >= rectList[i].subRects[j].rect.y1 && mouseY <= rectList[i].subRects[j].rect.y2) {
+ debug(2, " (%d, %d) ? (%d, %d, %d, %d)", mouseX, mouseY, rectList[i].subRects[j].rect.x1, rectList[i].subRects[j].rect.y1, rectList[i].subRects[j].rect.x2, rectList[i].subRects[j].rect.y2);
+ if (rectList[i].subRects[j].rect.contains(mouseX, mouseY)) {
debug("Scene::queryPositionRectList() -> %08X", rectList[i].subRects[j].messageListId);
return setMessageList2(rectList[i].subRects[j].messageListId);
}
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 9ae7e14..1b40c8f 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -35,9 +35,8 @@ SmackerSurface::SmackerSurface(NeverhoodEngine *vm)
}
void SmackerSurface::draw() {
- if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
+ if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0)
_vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect, false);
- }
}
void SmackerSurface::setSmackerFrame(const Graphics::Surface *smackerFrame) {
@@ -60,15 +59,14 @@ SmackerDoubleSurface::SmackerDoubleSurface(NeverhoodEngine *vm)
}
void SmackerDoubleSurface::draw() {
- if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
+ if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0)
_vm->_screen->drawDoubleSurface2(_smackerFrame, _drawRect);
- }
}
// SmackerPlayer
SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag)
- : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _flag2(false),
+ : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _videoDone(false),
_palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true),
_drawX(-1), _drawY(-1) {
@@ -146,6 +144,8 @@ void SmackerPlayer::setDrawPos(int16 x, int16 y) {
void SmackerPlayer::rewind() {
+ // TODO Quite dirty, try to implement this in the decoder
+
delete _smackerDecoder;
_smackerDecoder = NULL;
_stream = NULL;
@@ -170,37 +170,17 @@ void SmackerPlayer::update() {
_dirtyFlag = false;
}
-#if 0
- if (!_smackerDecoder->endOfVideo()) {
- updateFrame();
- if (_smackerDecoder->endOfVideo() && !_keepLastFrame) {
- // Inform the scene about the end of the video playback
- if (_scene) {
- sendMessage(_scene, 0x3002, 0);
- }
- _flag2 = true;
- } else {
- if (_smackerDecoder->endOfVideo()) {
- rewind();
- updateFrame();
- }
- _flag2 = false;
- }
- }
-#endif
-
if (!_smackerDecoder->endOfVideo()) {
updateFrame();
} else if (!_keepLastFrame) {
// Inform the scene about the end of the video playback
- if (_scene) {
+ if (_scene)
sendMessage(_scene, 0x3002, 0);
- }
- _flag2 = true;
+ _videoDone = true;
} else {
rewind();
updateFrame();
- _flag2 = false;
+ _videoDone = false;
}
}
@@ -231,9 +211,9 @@ void SmackerPlayer::updateFrame() {
// TODO _vm->_screen->_skipUpdate = true;
_dirtyFlag = true;
- if (_smackerDecoder->hasDirtyPalette()) {
+ if (_smackerDecoder->hasDirtyPalette())
updatePalette();
- }
+
}
void SmackerPlayer::updatePalette() {
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index 883cb52..65c0c84 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -70,7 +70,7 @@ protected:
bool _doubleSurface;
Common::SeekableReadStream *_stream;
bool _keepLastFrame;
- bool _flag2;
+ bool _videoDone;
bool _dirtyFlag;
int _drawX, _drawY;
void update();
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index fe78e50..9982043 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -82,7 +82,6 @@ void SmackerScene::nextVideo() {
}
if (_fileHashListIndex == 0) {
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false));
- // TODO? Screen.hSmack = _smackerPlayer;
} else {
_smackerPlayer->open(smackerFileHash, false);
}
@@ -108,9 +107,8 @@ uint32 SmackerScene::handleMessage(int messageNum, const MessageParam ¶m, En
_playNextVideoFlag = true;
break;
case 0x000C:
- if (_canAbort) {
+ if (_canAbort)
sendMessage(_parentModule, 0x1009, 0);
- }
break;
case 0x3002:
_playNextVideoFlag = true;
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index b9decef..bc7c0a5 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -30,7 +30,7 @@
namespace Neverhood {
-#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug(2, "SetSpriteCallback(" #callback ")"); _spriteUpdateCbName = #callback
+#define SetSpriteUpdate(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug(2, "SetSpriteUpdate(" #callback ")"); _spriteUpdateCbName = #callback
#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug(2, "SetFilterX(" #callback ")")
#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug(2, "SetFilterY(" #callback ")")
Commit: 9de3cf56756579e63aa6381cb2a9b30495d7d046
https://github.com/scummvm/scummvm/commit/9de3cf56756579e63aa6381cb2a9b30495d7d046
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:38-07:00
Commit Message:
NEVERHOOD: Some minor cleanup, add a TODO about some palette issues (I couldn't find any apparent causes yet)
Changed paths:
engines/neverhood/module2800.cpp
engines/neverhood/palette.cpp
engines/neverhood/resource.cpp
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index eded442..6643d5a 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -123,6 +123,8 @@ void Module2800::updateScene() {
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
+ // TODO Weird palette glitches in the mouse cursor and sprite, check this later
+
// TODO _vm->gameModule()->initScene2801Vars();
_surfaceFlag = true;
@@ -143,11 +145,10 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene2801>(312, 432);
_klayman->setDoDeltaX(1);
- setMessageList(0x004B6C10);
} else {
insertKlayman<KmScene2801>(194, 432);
- setMessageList(0x004B6C10);
}
+ setMessageList(0x004B6C10);
} else {
insertKlayman<KmScene2801>(0, 432);
setMessageList(0x004B6BB0);
@@ -188,6 +189,8 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
}
+
+ addEntity(_palette);
if (which == 1) {
_palette->addPalette(0xB103B604, 0, 65, 0);
@@ -196,7 +199,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(_paletteHash, 0, 65, 0);
_palette->addBasePalette(_paletteHash, 0, 65, 0);
}
-
+
}
Scene2801::~Scene2801() {
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index 481e0e5..936ca39 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -143,9 +143,8 @@ void Palette::update() {
debug(2, "Palette::update() _status = %d", _status);
if (_status == 1) {
if (_palCounter > 1) {
- for (int i = 0; i < 256; i++) {
+ for (int i = 0; i < 256; i++)
fadeColor(_palette + i * 4, _fadeToR, _fadeToG, _fadeToB);
- }
_vm->_screen->testPalette(_palette);
_palCounter--;
} else {
@@ -154,9 +153,8 @@ void Palette::update() {
}
} else if (_status == 2) {
if (_palCounter > 1) {
- for (int i = 0; i < 256; i++) {
+ for (int i = 0; i < 256; i++)
fadeColor(_palette + i * 4, _basePalette[i * 4 + 0], _basePalette[i * 4 + 1], _basePalette[i * 4 + 2]);
- }
_vm->_screen->testPalette(_palette);
_palCounter--;
} else {
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 9678031..65f98a8 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -119,7 +119,7 @@ bool PaletteResource::load(uint32 fileHash) {
case 3:
// _palette already points to the correct data
break;
- default:
+ default:
_vm->_res->unuseResource(_resourceHandle);
_resourceHandle = -1;
break;
Commit: 0abba004fe4a6b172269f09cfe55d7d683736867
https://github.com/scummvm/scummvm/commit/0abba004fe4a6b172269f09cfe55d7d683736867
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:38-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2805
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 514912c..70402d4 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -116,6 +116,9 @@ static const uint32 rectListOffsets[] = {
1, 0x004B6CE0,
1, 0x004B6CD0,
1, 0x004B6CF0,
+ // Scene2805
+ 1, 0x004AE318,
+ 1, 0x004AE308,
0, 0
};
@@ -387,6 +390,12 @@ static const uint32 messageListOffsets[] = {
1, 0x004B6C10,
1, 0x004B6BB0,
2, 0x004B6C40,
+ // Scene2805
+ 1, 0x004AE1C8,
+ 2, 0x004AE1D0,
+ 4, 0x004AE288,
+ 2, 0x004AE1E0,
+ 1, 0x004AE1C0,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 72f35a6..14f72dd 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 646790489886aa8adb9a5bfc6e6ec6c57e5aa62b
https://github.com/scummvm/scummvm/commit/646790489886aa8adb9a5bfc6e6ec6c57e5aa62b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:38-07:00
Commit Message:
NEVERHOOD: Implement Scene2805
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 781a9c3..37e8743 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -303,7 +303,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 0;
+ _vm->gameState().sceneNum = 4;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 303e3fe..247c946 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -4916,4 +4916,90 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene2805::KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ // Empty
+}
+
+uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x2000:
+ _isSittingInTeleporter = param.asInteger() != 0;
+ break;
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::sub421350);
+ else
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481D:
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stTurnToUseInTeleporter);
+ break;
+ case 0x481E:
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
+ break;
+ case 0x4834:
+ GotoState(&Klayman::stStepOver);
+ break;
+ case 0x4835:
+ sendMessage(_parentScene, 0x2000, 1);
+ _isSittingInTeleporter = true;
+ GotoState(&Klayman::stSitInTeleporter);
+ break;
+ case 0x4836:
+ sendMessage(_parentScene, 0x2000, 0);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
+ break;
+ case 0x483D:
+ sub404890();
+ break;
+ case 0x483E:
+ sub4048D0();
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene2805::handleMessage404800(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24)
+ _soundResource1.play(0x85B10BB8);
+ else if (param.asInteger() == 0x4E6A0CA0)
+ _soundResource1.play(0xC5B709B0);
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2805::sub404890() {
+ _status2 = 0;
+ _acceptInput = false;
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&KmScene2805::handleMessage404800);
+ startAnimation(0xDE284B74, 0, -1);
+}
+
+void KmScene2805::sub4048D0() {
+ _status2 = 0;
+ _acceptInput = false;
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&KmScene2805::handleMessage404800);
+ startAnimation(0xD82A4094, 0, -1);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 355c6d6..5f4076e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -549,6 +549,17 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2805 : public Klayman {
+public:
+ KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _isSittingInTeleporter;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage404800(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub404890();
+ void sub4048D0();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 6643d5a..c1e7048 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -73,6 +73,10 @@ void Module2800::createScene(int sceneNum, int which) {
}
#endif
break;
+ case 4:
+ // TODO Music18hList_stop(0xD2FA4D14, 0, 2);
+ _childObject = new Scene2805(_vm, this, which);
+ break;
//
case 1001:
break;
@@ -104,6 +108,13 @@ void Module2800::updateScene() {
createScene(1001, -1);
}
break;
+ case 4:
+ if (_moduleResult == 1) {
+ leaveModule(1);
+ } else {
+ createScene(11, 1);
+ }
+ break;
//
case 1001:
break;
@@ -228,4 +239,63 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2805::handleMessage);
+
+ setBackground(0x08021E04);
+ setPalette(0x08021E04);
+ _palette->addPalette(0x8A6B1F91, 0, 65, 0);
+ insertMouse433(0x21E00088);
+
+ _sprite1 = insertStaticSprite(0x008261E7, 1100);
+ _sprite2 = insertStaticSprite(0x020CE421, 1100);
+
+ if (which < 0) {
+ insertKlayman<KmScene2805>(380, 338);
+ setMessageList(0x004AE1C8);
+ sendMessage(this, 0x2000, 0);
+ } else if (which == 1) {
+ insertKlayman<KmScene2805>(493, 338);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004AE1D0);
+ sendMessage(this, 0x2000, 1);
+ } else if (which == 2) {
+ insertKlayman<KmScene2805>(493, 338);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004AE288);
+ sendMessage(this, 0x2000, 1);
+ } else if (which == 3) {
+ insertKlayman<KmScene2805>(493, 338);
+ sendMessage(_klayman, 0x2000, 1);
+ setMessageList(0x004AE1E0);
+ sendMessage(this, 0x2000, 1);
+ } else {
+ insertKlayman<KmScene2805>(340, 338);
+ setMessageList(0x004AE1C0);
+ sendMessage(this, 0x2000, 0);
+ }
+
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480);
+
+}
+
+uint32 Scene2805::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ if (param.asInteger()) {
+ setRectList(0x004AE318);
+ _klayman->setKlaymanIdleTable3();
+ } else {
+ setRectList(0x004AE308);
+ _klayman->setKlaymanIdleTable1();
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index cdfcdbe..06d818c 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -54,6 +54,15 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2805 : public Scene {
+public:
+ Scene2805(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2800_H */
Commit: ee7bd2fc6c228d3088cb236c54614b656af17636
https://github.com/scummvm/scummvm/commit/ee7bd2fc6c228d3088cb236c54614b656af17636
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:38-07:00
Commit Message:
NEVERHOOD: Implement Scene2803b
- Also some more Klayman stuff used by that scene
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 37e8743..a424d53 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -303,7 +303,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 4;
+ _vm->gameState().sceneNum = 2;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 247c946..010c2e4 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -62,7 +62,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_counterMax(0), _counter(0), _isMoveObjectRequested(false), _counter3Max(0), _isWalkingOpenDoorNotified(false), _counter1(0),
_counter2(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
_status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _flagF6(false), _isLeverDown(false),
- _flagFA(false), _ladderStatus(0), _field114(0), _resourceHandle(-1), _soundFlag(false) {
+ _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _resourceHandle(-1), _soundFlag(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -574,11 +574,9 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
break;
case 0x482C:
if (param.asInteger() != 0) {
- debug("#################################################");
- // TODO _rectResource.getRectangle2(param.asInteger(), &_field118, &_field114,);
+ _pathPoints = _dataResource.getPointArray(param.asInteger());
} else {
- debug("#################################################");
- // TODO _field114 = 0;
+ _pathPoints = NULL;
}
break;
}
@@ -757,9 +755,8 @@ void Klayman::suWalking() {
if (_destX != _x) {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdiff;
- if (_field114) {
- error("// TODO Klayman_sub_41CF70");
- // TODO Klayman_sub_41CF70
+ if (_pathPoints) {
+ walkAlongPathPoints();
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
@@ -939,9 +936,8 @@ void Klayman::suWalkingTestExit() {
} else {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdelta;
- if (_field114) {
- error("_field114");
- // TODO Klayman_sub_41CF70
+ if (_pathPoints) {
+ walkAlongPathPoints();
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
@@ -1096,6 +1092,153 @@ void Klayman::startSpecialWalkLeft(int16 x) {
}
}
+void Klayman::sub41CDE0(int16 x) {
+ _status3 = 2;
+ if (_x == x) {
+ _destX = x;
+ if (_isWalking) {
+ GotoState(NULL);
+ gotoNextStateExt();
+ }
+ } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _destX = x;
+ } else {
+ _destX = x;
+ GotoState(&Klayman::sub421680);
+ }
+}
+
+void Klayman::sub421680() {
+ _isWalking = true;
+ _acceptInput = true;
+ _status3 = 2;
+ setDoDeltaX(_destX < _x ? 1 : 0);
+ startAnimation(0x3A4CD934, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41ED70);
+ SetSpriteUpdate(&Klayman::suWalkingTestExit);
+ FinalizeState(&Klayman::stStartWalkingDone);
+}
+
+uint32 Klayman::handleMessage41ED70(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101)
+ _soundResource1.play(0x4924AAC4);
+ else if (param.asInteger() == 0x0A2A9098)
+ _soundResource1.play(0x0A2AA8E0);
+ }
+ return messageResult;
+}
+
+void Klayman::sub421640() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x90D0D1D0, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::sub421740() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x11C8D156, 30, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::sub421780() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x11C8D156, 0, 10);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::sub421700() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x11C8D156, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::sub421840() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x3F9CC394, 0x14884392, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EE00);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+}
+
+uint32 Klayman::handleMessage41EE00(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5)
+ sendMessage(_parentScene, 0x482A, 0);
+ else if (param.asInteger() == 0x110010D1)
+ sendMessage(_parentScene, 0x482B, 0);
+ else if (param.asInteger() == 0x32180101)
+ _soundResource1.play(0x4924AAC4);
+ else if (param.asInteger() == 0x0A2A9098)
+ _soundResource1.play(0x0A2AA8E0);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub421800() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2F1C4694, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EE00);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+}
+
+void Klayman::sub4217C0() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x3F9CC394, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EE00);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+}
+
+void Klayman::sub421900() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x37ECD436, 0, 0x8520108C);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EE00);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+}
+
+void Klayman::sub4218C0() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x16EDDE36, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EE00);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+}
+
+void Klayman::sub421880() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x37ECD436, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EE00);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+}
+
void Klayman::sub41CC40(int16 x1, int16 x2) {
if (_x > x1) {
if (_x == x1 + x2) {
@@ -1182,9 +1325,8 @@ void Klayman::suLargeStep() {
if (_x != _destX) {
HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
_x += xdiff;
- if (_field114) {
- error("// TODO Klayman_sub_41CF70();");
- // TODO Klayman_sub_41CF70();
+ if (_pathPoints) {
+ walkAlongPathPoints();
} else {
HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
@@ -1928,6 +2070,39 @@ uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *
return handleMessage41D480(messageNum, param, sender);
}
+void Klayman::walkAlongPathPoints() {
+ if (_x <= (*_pathPoints)[0].x)
+ _y = (*_pathPoints)[0].y;
+ else if (_x >= (*_pathPoints)[_pathPoints->size() - 1].x)
+ _y = (*_pathPoints)[_pathPoints->size() - 1].y;
+ else {
+ int16 deltaX = _x - (*_pathPoints)[0].x, deltaXIncr = 0;
+ uint index = 0;
+ while (deltaX > 0) {
+ NPoint pt2 = (*_pathPoints)[index];
+ NPoint pt1 = index + 1 >= _pathPoints->size() ? (*_pathPoints)[0] : (*_pathPoints)[index + 1];
+ int16 xd = ABS(pt1.x - pt2.x);
+ int16 yd = ABS(pt1.y - pt2.y);
+ if (deltaX + deltaXIncr >= xd) {
+ deltaX -= xd;
+ deltaX += deltaXIncr;
+ ++index;
+ if (index >= _pathPoints->size())
+ index = 0;
+ _y = (*_pathPoints)[index].y;
+ } else {
+ deltaXIncr += deltaX;
+ if (pt1.y >= pt2.y) {
+ _y = pt2.y + (yd * deltaXIncr) / xd;
+ } else {
+ _y = pt2.y - (yd * deltaXIncr) / xd;
+ }
+ deltaX = 0;
+ }
+ }
+ }
+}
+
//##############################################################################
// KmScene1001
@@ -4916,6 +5091,83 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene2803b::KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _soundResource(vm) {
+
+ _dataResource.load(0x81120132);
+ _soundResource.load(0x10688664);
+}
+
+uint32 KmScene2803b::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41CDE0(param.asPoint().x);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::sub421640);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x4818:
+ sub41CDE0(_dataResource.getPoint(param.asInteger()).x);
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1)
+ GotoState(&Klayman::sub421740);
+ else if (param.asInteger() == 0)
+ GotoState(&Klayman::sub421780);
+ else
+ GotoState(&Klayman::sub421700);
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1)
+ GotoState(&Klayman::sub421840);
+ else if (param.asInteger() == 2)
+ GotoState(&Klayman::sub421800);
+ else
+ GotoState(&Klayman::sub4217C0);
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1)
+ GotoState(&Klayman::sub421900);
+ else if (param.asInteger() == 2)
+ GotoState(&Klayman::sub4218C0);
+ else
+ GotoState(&Klayman::sub421880);
+ break;
+ case 0x4830:
+ GotoState(&KmScene2803b::sub460670);
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene2803b::handleMessage460600(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5)
+ sendMessage(_parentScene, 0x482A, 0);
+ else if (param.asInteger() == 0x33288344)
+ _soundResource.play();
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2803b::sub460670() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x1AE88904, 0, -1);
+ _soundResource1.play(0x4C69EA53);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene2803b::handleMessage460600);
+}
+
KmScene2805::KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 5f4076e..ab7ccb6 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -140,6 +140,17 @@ public:
void setSoundFlag(bool value) { _soundFlag = value; }
+ void sub421640();
+ void sub421740();
+ void sub421780();
+ void sub421700();
+ void sub421840();
+ void sub421800();
+ void sub4217C0();
+ void sub421900();
+ void sub4218C0();
+ void sub421880();
+
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
@@ -165,10 +176,7 @@ protected:
const KlaymanIdleTableItem *_idleTable;
int _idleTableCount;
int _idleTableMaxValue;
- uint32 _field114;
- /*
- 00000118 field118 dw ?
- */
+ NPointArray *_pathPoints;
bool _soundFlag;
int _resourceHandle;
virtual void xUpdate();
@@ -249,6 +257,13 @@ protected:
uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub41CDE0(int16 x);
+ void sub421680();
+ uint32 handleMessage41ED70(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage41EE00(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void walkAlongPathPoints();
+
};
class KmScene1001 : public Klayman {
@@ -549,6 +564,16 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2803b : public Klayman {
+public:
+ KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ SoundResource _soundResource;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage460600(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub460670();
+};
+
class KmScene2805 : public Klayman {
public:
KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index c1e7048..c6ce179 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -73,6 +73,15 @@ void Module2800::createScene(int sceneNum, int which) {
}
#endif
break;
+ case 2:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ setGlobalVar(0x1860C990,1);//DEBUG
+ if (getGlobalVar(0x1860C990))
+ _childObject = new Scene2803b(_vm, this, which);
+ else {
+ // TODO _childObject = new Scene2803(_vm, this, which);
+ }
+ break;
case 4:
// TODO Music18hList_stop(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
@@ -108,6 +117,20 @@ void Module2800::updateScene() {
createScene(1001, -1);
}
break;
+ case 2:
+ if (_moduleResult == 1)
+ createScene(3, 0);
+ else if (_moduleResult == 2)
+ createScene(5, 0);
+ else if (_moduleResult == 3)
+ createScene(6, 0);
+ else if (_moduleResult == 4)
+ createScene(9, 0);
+ else if (_moduleResult == 5)
+ createScene(25, 0);
+ else
+ createScene(0, 1);
+ break;
case 4:
if (_moduleResult == 1) {
leaveModule(1);
@@ -239,6 +262,270 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _palStatus(0) {
+
+ static const uint32 kScene2803bFileHashes1[] = {
+ 0, 0x081000F1, 0x08100171, 0x08100271
+ };
+
+ static const uint32 kScene2803bFileHashes2[] = {
+ 0, 0x286800D4, 0x286806D4, 0x28680AD4
+ };
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2803b::handleMessage);
+
+ loadDataResource(0x81120132);
+ insertMouse433(0x00A05290);
+
+ // TODO insertSprite<Class488>(this, 0xAFAD591A, 0x276E321D, 578, 200);
+
+ if (getGlobalVar(0x190A1D18)) {
+ setBackground(0x412A423E);
+ setPalette(0x412A423E);
+ _palette->addBasePalette(0x412A423E, 0, 256, 0);
+ addEntity(_palette);
+ _sprite1 = insertStaticSprite(0x0C03AA23, 1100);
+ _sprite2 = insertStaticSprite(0x24320220, 1100);
+ _sprite3 = insertStaticSprite(0x1A032204, 1100);
+ _sprite4 = insertStaticSprite(0x18032204, 1100);
+ _sprite5 = insertStaticSprite(0x34422912, 1100);
+ _sprite6 = insertStaticSprite(0x3C42022F, 1100);
+ _sprite7 = insertStaticSprite(0x341A0237, 1100);
+
+ if (getSubVar(0x0C601058, 0) == 0)
+ insertStaticSprite(0x66121222, 100);
+ else
+ insertSprite<AnimatedSprite>(kScene2803bFileHashes1[getSubVar(0x0C601058, 0)], 100, 529, 326);
+
+ if (getSubVar(0x0C601058, 1) == 3)
+ insertStaticSprite(0x64330236, 100);
+
+ if (getSubVar(0x0C601058, 2) == 3)
+ insertStaticSprite(0x2E4A22A2, 100);
+
+ } else {
+ setBackground(0x29800A01);
+ setPalette(0x29800A01);
+ _palette->addBasePalette(0x29800A01, 0, 256, 0);
+ addEntity(_palette);
+ _sprite1 = insertStaticSprite(0x16202200, 1100);
+ _sprite2 = insertStaticSprite(0xD0802EA0, 1100);
+ _sprite3 = insertStaticSprite(0x780C2E30, 1100);
+ _sprite4 = insertStaticSprite(0x700C2E30, 1100);
+ _sprite5 = insertStaticSprite(0x102CE6E1, 900);
+ _sprite6 = insertStaticSprite(0x108012C1, 1100);
+ _sprite7 = insertStaticSprite(0x708072E0, 1100);
+ insertStaticSprite(0x90582EA4, 100);
+
+ setSubVar(0x0C601058, 0, 1);//DEBUG, FIXME crashes when not done?!
+ if (getSubVar(0x0C601058, 0) == 0)
+ insertStaticSprite(0x50C027A8, 100);
+ else
+ insertSprite<AnimatedSprite>(kScene2803bFileHashes2[getSubVar(0x0C601058, 0)], 100, 529, 326);
+
+ if (getSubVar(0x0C601058, 1) == 3)
+ insertStaticSprite(0xD48077A0, 100);
+
+ if (getSubVar(0x0C601058, 2) == 3)
+ insertStaticSprite(0x30022689, 100);
+
+ }
+
+ _sprite6->setVisible(false);
+ _sprite7->setVisible(false);
+
+ if (which < 0) {
+ insertKlayman<KmScene2803b>(479, 435);
+ sub460110();
+ setMessageList(0x004B60D8);
+ } else if (which == 3) {
+ NPoint pt = _dataResource.getPoint(0x096520ED);
+ insertKlayman<KmScene2803b>(pt.x, pt.y);
+ sub460090();
+ setMessageList(0x004B6100);
+ _klayman->setRepl(64, 0);
+ } else if (which == 4) {
+ NPoint pt = _dataResource.getPoint(0x20C6238D);
+ insertKlayman<KmScene2803b>(pt.x, pt.y);
+ sub460090();
+ setMessageList(0x004B60F8);
+ _klayman->setRepl(64, 0);
+ } else if (which == 5) {
+ NPoint pt = _dataResource.getPoint(0x2146690D);
+ insertKlayman<KmScene2803b>(pt.x, pt.y);
+ sub460090();
+ setMessageList(0x004B6100);
+ _klayman->setRepl(64, 0);
+ } else if (which == 2) {
+ NPoint pt = _dataResource.getPoint(0x104C03ED);
+ insertKlayman<KmScene2803b>(pt.x, pt.y);
+ sub460110();
+ setMessageList(0x004B6138);
+ } else {
+ insertKlayman<KmScene2803b>(135, 444);
+ sub460110();
+ setMessageList(0x004B60E0);
+ _sprite6->setVisible(true);
+ _sprite7->setVisible(true);
+ }
+
+}
+
+uint32 Scene2803b::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xB4E4884C) {
+ setMessageList(0x004B6180);
+ } else if (param.asInteger() == 0xB1FDAB2E) {
+ NPoint pt = _dataResource.getPoint(0x0D84A1AD);
+ _klayman->setX(pt.x);
+ _klayman->setY(pt.y);
+ _klayman->processDelta();
+ sub460110();
+ _klayman->setClipRect(517, 401, 536, 480);
+ setMessageList(0x004B6198);
+ } else if (param.asInteger() == 0xB00C7C48) {
+ setMessageList(0x004B6108);
+ } else if (param.asInteger() == 0x61F64346) {
+ setMessageList(0x004B6150);
+ } else if (param.asInteger() == 0xAC69A28D) {
+ setMessageList(0x004B6168);
+ } else if (param.asInteger() == 0x00086212) {
+ _klayman->setClipRect(0, 0, 560, 315);
+ _klayman->setX(560);
+ _klayman->setY(315);
+ _klayman->processDelta();
+ sub460090();
+ setMessageList(0x004B61A0);
+ } else if (param.asInteger() == 0x002CAA68) {
+ setMessageList(0x004B61A8);
+ }
+ break;
+ case 0x482A:
+ if (_klayman->getX() < 200) {
+ sub4601D0();
+ } else if (_klayman->getX() < 500) {
+ setSurfacePriority(_sprite5->getSurface(), 1100);
+ sendMessage(_klayman, 0x482C, 0);
+ sub4601B0();
+ } else {
+ _klayman->setClipRect(517, 401, 536, 480);
+ sub4601B0();
+ }
+ break;
+ case 0x482B:
+ _sprite6->setVisible(false);
+ _sprite7->setVisible(false);
+ _klayman->setClipRect(0, 0, 640, 480);
+ setSurfacePriority(_sprite5->getSurface(), 900);
+ sendMessage(_klayman, 0x482C, 0x2086222D);
+ break;
+ }
+ return 0;
+}
+
+void Scene2803b::update45FCB0() {
+ if (_klayman->getX() < 388) {
+ _klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
+ sub460170();
+ } else if (_klayman->getX() < 500) {
+ _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2());
+ sub460190();
+ }
+ Scene::update();
+}
+
+void Scene2803b::update45FD50() {
+ if (_klayman->getX() > 194 && _klayman->getX() < 273)
+ sub4601B0();
+ else if (_klayman->getX() > 155 && _klayman->getX() < 300)
+ sub460170();
+ Scene::update();
+}
+
+void Scene2803b::sub460090() {
+ SetUpdateHandler(&Scene2803b::update45FCB0);
+ sendMessage(_klayman, 0x482C, 0x23C630D9);
+ _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2());
+ _klayman->setRepl(64, 0);
+ _sprite1->setVisible(true);
+}
+
+void Scene2803b::sub460110() {
+ SetUpdateHandler(&Scene2803b::update45FD50);
+ sendMessage(_klayman, 0x482C, 0x2086222D);
+ _klayman->setClipRect(0, 0, 640, 480);
+ _klayman->clearRepl();
+ _sprite1->setVisible(false);
+}
+
+void Scene2803b::sub460170() {
+ if (_palStatus != 0) {
+ _palStatus = 0;
+ sub4601F0(false);
+ }
+}
+
+void Scene2803b::sub460190() {
+ if (_palStatus != 1) {
+ _palStatus = 1;
+ sub4601F0(false);
+ }
+}
+
+void Scene2803b::sub4601B0() {
+ if (_palStatus != 2) {
+ _palStatus = 2;
+ sub4601F0(false);
+ }
+}
+
+void Scene2803b::sub4601D0() {
+ if (_palStatus != 3) {
+ _palStatus = 3;
+ sub4601F0(true);
+ }
+}
+
+void Scene2803b::sub4601F0(bool flag) {
+ if (getGlobalVar(0x190A1D18)) {
+ switch (_palStatus) {
+ case 1:
+ _palette->addBasePalette(0x0A938204, 0, 64, 0);
+ break;
+ case 2:
+ _palette->addBasePalette(0xB103B604, 0, 64, 0);
+ break;
+ case 3:
+ // TODO _palette->sub_47BFB0(0, 64);
+ break;
+ default:
+ _palette->addBasePalette(0x412A423E, 0, 64, 0);
+ break;
+ }
+ } else {
+ switch (_palStatus) {
+ case 2:
+ _palette->addBasePalette(0x0263D144, 0, 64, 0);
+ break;
+ case 3:
+ // TODO _palette->sub_47BFB0(0, 64);
+ break;
+ default:
+ _palette->addBasePalette(0x29800A01, 0, 64, 0);
+ break;
+ }
+ }
+ if (flag) {
+ _palette->startFadeToPalette(0);
+ } else {
+ _palette->startFadeToPalette(12);
+ }
+}
+
Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 06d818c..54b893b 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -54,6 +54,30 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2803b : public Scene {
+public:
+ Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ int _palStatus;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_sprite4;
+ Sprite *_sprite5;
+ Sprite *_sprite6;
+ Sprite *_sprite7;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void update45FCB0();
+ void update45FD50();
+ void sub460090();
+ void sub460110();
+ void sub460170();
+ void sub460190();
+ void sub4601B0();
+ void sub4601D0();
+ void sub4601F0(bool flag);
+};
+
class Scene2805 : public Scene {
public:
Scene2805(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: f3d98e62757fb7b3de2c2ebae87ef6f885967556
https://github.com/scummvm/scummvm/commit/f3d98e62757fb7b3de2c2ebae87ef6f885967556
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:38-07:00
Commit Message:
NEVERHOOD: Add scene 28/05
Changed paths:
engines/neverhood/module2800.cpp
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index c6ce179..417e3f5 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -86,6 +86,13 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_stop(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
break;
+ case 25:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ if (getGlobalVar(0x190A1D18))
+ _childObject = new Class152(_vm, this, 0x01600204, 0x0020001E);
+ else
+ _childObject = new Class152(_vm, this, 0x08611204, 0x1120008E);
+ break;
//
case 1001:
break;
@@ -138,6 +145,9 @@ void Module2800::updateScene() {
createScene(11, 1);
}
break;
+ case 25:
+ createScene(2, 5);
+ break;
//
case 1001:
break;
Commit: 3cee21ac9391f98f1ed372ad0a99f9e81974ef2b
https://github.com/scummvm/scummvm/commit/3cee21ac9391f98f1ed372ad0a99f9e81974ef2b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2803b (forgot them before) and Scene2806
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 70402d4..fe6644e 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -390,12 +390,33 @@ static const uint32 messageListOffsets[] = {
1, 0x004B6C10,
1, 0x004B6BB0,
2, 0x004B6C40,
+ // Scene2803b
+ 1, 0x004B60D8,
+ 1, 0x004B6100,
+ 1, 0x004B60F8,
+ 1, 0x004B6100,
+ 3, 0x004B6138,
+ 3, 0x004B60E0,
+ 3, 0x004B6180,
+ 1, 0x004B6198,
+ 6, 0x004B6108,
+ 3, 0x004B6150,
+ 3, 0x004B6168,
+ 1, 0x004B61A0,
+ 5, 0x004B61A8,
// Scene2805
1, 0x004AE1C8,
2, 0x004AE1D0,
4, 0x004AE288,
2, 0x004AE1E0,
1, 0x004AE1C0,
+ // Scene2806
+ 1, 0x004AF098,
+ 1, 0x004AF098,
+ 3, 0x004AF0C8,
+ 5, 0x004AF0A0,
+ 1, 0x004AF090,
+ 2, 0x004AF0E0,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 14f72dd..58190d0 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: c2f91e39ba8e7654d5f0da3f789a9eaf9136afe5
https://github.com/scummvm/scummvm/commit/c2f91e39ba8e7654d5f0da3f789a9eaf9136afe5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Scene2806 (Class469 TODO)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index a424d53..62fe2ad 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -303,7 +303,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 2;
+ _vm->gameState().sceneNum = 5;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 010c2e4..4178bec 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -650,8 +650,7 @@ void Klayman::startWalkToX(int16 x, bool flag) {
_destX = x;
} else if (flag) {
_destX = x;
- error("// TODO AnimatedSprite_GotoState(&Klayman::sub421550));");
- // TODO AnimatedSprite_GotoState(&Klayman::sub421550);
+ GotoState(&Klayman::sub421550);
} else {
_destX = x;
GotoState(&Klayman::stStartWalking);
@@ -1239,6 +1238,104 @@ void Klayman::sub421880() {
SetSpriteUpdate(&Klayman::spriteUpdate41F230);
}
+void Klayman::sub420F60() {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420F60))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x3F28E094, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E6C0);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::sub420FB0);
+ }
+}
+
+void Klayman::sub420FB0() {
+ _acceptInput = false;
+ startAnimation(0x3A28C094, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E6C0);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klayman::handleMessage41E6C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ sendMessage(_attachedSprite, 0x480F, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub421110() {
+ if (!stStartAction(AnimationCallback(&Klayman::sub421110))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x1A38A814, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E750);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+uint32 Klayman::handleMessage41E750(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02B20220)
+ _soundResource1.play(0xC5408620);
+ else if (param.asInteger() == 0x0A720138)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0x03020231)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0xB613A180)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x67221A03)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x038A010B)
+ _soundResource1.play(0x00018040);
+ else if (param.asInteger() == 0x422B0280)
+ _soundResource1.play(0x166FC6E0);
+ else if (param.asInteger() == 0x925A0C1E)
+ _soundResource1.play(0x40E5884D);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub4215E0() {
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
+ NextState(&Klayman::stUpdateWalking);
+ FinalizeState(&Klayman::stStartWalkingDone);
+ startAnimation(0x5A2CBC00, 0, -1);
+}
+
+void Klayman::sub421550() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::sub421550))) {
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ setDoDeltaX(_destX < _x ? 1 : 0);
+ startAnimation(0x272C1199, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmStartWalking);
+ SetSpriteUpdate(&Klayman::suWalkingTestExit);
+ FinalizeState(&Klayman::stStartWalkingDone);
+ NextState(&Klayman::sub4215E0);
+ }
+}
+
void Klayman::sub41CC40(int16 x1, int16 x2) {
if (_x > x1) {
if (_x == x1 + x2) {
@@ -5254,4 +5351,167 @@ void KmScene2805::sub4048D0() {
startAnimation(0xD82A4094, 0, -1);
}
+KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ bool flag, NRect *clipRects, uint clipRectsCount)
+ : Klayman(vm, parentScene, x, y, 1000, 1000),
+ _soundRes1(vm), _soundRes2(vm), _soundRes3(vm), _soundRes4(vm), _soundRes5(vm) {
+ // Empty
+
+ if (flag) {
+ // TODO Maybe? Don't know. Set Klayman clip rects
+ _soundRes1.load(0x58E0C341);
+ _soundRes2.load(0x40A00342);
+ _soundRes3.load(0xD0A1C348);
+ _soundRes4.load(0x166FC6E0);
+ _soundRes5.load(0x00018040);
+ }
+
+ _dataResource.load(0x98182003);
+
+}
+
+uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4804:
+ startWalkToX(440, true);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::sub420F60);
+ break;
+ case 0x4816:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x4818:
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x4831:
+ GotoState(&KmScene2806::sub40F780);
+ break;
+ case 0x4832:
+ if (param.asInteger() == 1) {
+ GotoState(&KmScene2806::sub40F7C0);
+ } else {
+ GotoState(&Klayman::sub421110);
+ }
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene2806::handleMessage40F1F0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1008:
+ if (_flag1) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ } else
+ _flag2 = true;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x0002418E)
+ sendMessage(_parentScene, 0x2000, 0);
+ else if (param.asInteger() == 0x924090C2) {
+ _flag1 = true;
+ if (_flag2) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ }
+ } else if (param.asInteger() == 0x004A2148)
+ _flag1 = false;
+ else if (param.asInteger() == 0x02B20220)
+ _soundResource1.play(0xC5408620);
+ else if (param.asInteger() == 0x0A720138)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0x03020231)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0xB613A180)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x67221A03)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x038A010B)
+ _soundResource1.play(0x00018040);
+ else if (param.asInteger() == 0x422B0280)
+ _soundResource1.play(0x166FC6E0);
+ else if (param.asInteger() == 0x925A0C1E)
+ _soundResource1.play(0x40E5884D);
+ else if (param.asInteger() == 0x00020814)
+ _soundResource1.play(0x786CC6D0);
+ else if (param.asInteger() == 0x06020500)
+ _soundResource1.play(0x1069C0E1);
+ else if (param.asInteger() == 0x02128C00)
+ _soundResource1.play(0x5068C4C3);
+ else if (param.asInteger() == 0x82022030)
+ _soundResource1.play(0x5C48C0E8);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene2806::handleMessage40F570(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101)
+ _soundResource1.play(0x405002D8);
+ else if (param.asInteger() == 0x0A2A9098)
+ _soundResource1.play(0x0460E2FA);
+ else if (param.asInteger() == 0xD00A0C0C)
+ _soundRes1.play();
+ else if (param.asInteger() == 0x04121920)
+ _soundRes2.play();
+ else if (param.asInteger() == 0x030B4480)
+ _soundRes3.play();
+ else if (param.asInteger() == 0x422B0280)
+ _soundRes4.play();
+ else if (param.asInteger() == 0x038A010B)
+ _soundRes5.play();
+ else if (param.asInteger() == 0x67221A03)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x02B20220)
+ _soundResource1.play(0xC5408620);
+ else if (param.asInteger() == 0x925A0C1E)
+ _soundResource1.play(0x40E5884D);
+ else if (param.asInteger() == 0x03020231)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0x08040840)
+ setDoDeltaX(2);
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2806::sub40F780() {
+ _status2 = 0;
+ _acceptInput = false;
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene2806::handleMessage40F570);
+ startAnimation(0x2838C010, 0, -1);
+}
+
+void KmScene2806::sub40F7C0() {
+ _status2 = 1;
+ _acceptInput = false;
+ _flag1 = false;
+ _flag2 = false;
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&KmScene2806::handleMessage40F1F0);
+ startAnimation(0x1C388C04, 0, -1);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index ab7ccb6..27d9298 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -30,7 +30,8 @@
namespace Neverhood {
-// TODO: This code is horrible and weird and a lot of stuff needs renaming once a better name is found
+// TODO This code is horrible and weird and a lot of stuff needs renaming once a better name is found
+// TODO Also the methods should probably rearranged and be grouped together more consistently
class Klayman;
@@ -150,6 +151,13 @@ public:
void sub421900();
void sub4218C0();
void sub421880();
+ void sub420F60();
+ void sub420FB0();
+ uint32 handleMessage41E6C0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub421110();
+ uint32 handleMessage41E750(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub4215E0();
+ void sub421550();
protected:
Entity *_parentScene;
@@ -585,6 +593,25 @@ protected:
void sub4048D0();
};
+class KmScene2806 : public Klayman {
+public:
+ KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ bool flag, NRect *clipRects, uint clipRectsCount);
+protected:
+ SoundResource _soundRes1;
+ SoundResource _soundRes2;
+ SoundResource _soundRes3;
+ SoundResource _soundRes4;
+ SoundResource _soundRes5;
+ bool _flag1;
+ bool _flag2;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage40F1F0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage40F570(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub40F780();
+ void sub40F7C0();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 417e3f5..793fc74 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -86,6 +86,10 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_stop(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
break;
+ case 5:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2806(_vm, this, which);
+ break;
case 25:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
if (getGlobalVar(0x190A1D18))
@@ -145,6 +149,13 @@ void Module2800::updateScene() {
createScene(11, 1);
}
break;
+ case 5:
+ if (_moduleResult == 1) {
+ createScene(27, 0);
+ } else {
+ createScene(2, 2);
+ }
+ break;
case 25:
createScene(2, 5);
break;
@@ -595,4 +606,126 @@ uint32 Scene2805::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *tempSprite;
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2806::handleMessage);
+ SetUpdateHandler(&Scene2806::update);
+
+ loadDataResource(0x98182003);
+ loadHitRectList();
+
+ _pointList = _dataResource.getPointArray(0x3606A422);
+
+ insertMouse433(0x22114C13);
+ setBackground(0xC1B22110);
+ setPalette(0xC1B22110);
+
+ _sprite1 = insertStaticSprite(0xA21F82CB, 1100);
+ _clipRects[0].x1 = _sprite1->getDrawRect().x;
+ _clipRects[0].y1 = _sprite1->getDrawRect().y;
+ _clipRects[0].x2 = _sprite1->getDrawRect().x2();
+ _clipRects[0].y2 = _sprite1->getDrawRect().y2();
+
+ _sprite2 = insertStaticSprite(0x92035301, 1100);
+ _clipRects[1].y2 = _sprite2->getDrawRect().y2();
+
+ _sprite3 = insertStaticSprite(0x3182220E, 1100);
+
+ _sprite4 = insertStaticSprite(0x72090342, 1100);
+ _clipRects[1].x1 = _sprite4->getDrawRect().x;
+ _clipRects[1].y1 = _sprite4->getDrawRect().y;
+
+ _fieldEC = true;
+
+ tempSprite = insertStaticSprite(0xD2012C02, 1100);
+ _clipRects[2].x1 = tempSprite->getDrawRect().x;
+ _clipRects[2].y2 = tempSprite->getDrawRect().y2();
+ _clipRects[3].y1 = tempSprite->getDrawRect().y2();
+ _clipRects[1].x2 = tempSprite->getDrawRect().x2();
+
+ tempSprite = insertStaticSprite(0x72875F42, 1100);
+ _clipRects[3].x1 = tempSprite->getDrawRect().x;
+
+ insertStaticSprite(0x0201410A, 1100);
+ insertStaticSprite(0x72875F42, 1100);
+
+ // TODO _class469 = insertSprite<Class469>();
+
+ _clipRects[2].y1 = 0;
+ _clipRects[3].y2 = 480;
+ _clipRects[2].x2 = 640;
+ _clipRects[3].x2 = 640;
+
+ if (which < 0) {
+ insertKlayman<KmScene2806>(441, 423, false, _clipRects, 4);
+ setMessageList(0x004AF098);
+ } else if (which == 1) {
+ insertKlayman<KmScene2806>(378, 423, false, _clipRects, 4);
+ setMessageList(0x004AF098);
+ } else if (which == 2) {
+ insertKlayman<KmScene2806>(378, 423, false, _clipRects, 4);
+ setMessageList(0x004AF0C8);
+ } else if (which == 3) {
+ insertKlayman<KmScene2806>(378, 423, true, _clipRects, 4);
+ setMessageList(0x004AF0A0);
+ setGlobalVar(0x1860C990, 0);
+ } else {
+ insertKlayman<KmScene2806>(670, 423, false, _clipRects, 4);
+ setMessageList(0x004AF090);
+ }
+
+ _pointIndex = -1;
+ findClosestPoint();
+
+}
+
+uint32 Scene2806::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x44262B12) {
+ setMessageList(0x004AF0E0);
+ }
+ break;
+ case 0x2000:
+ // TODO sendMessage(_class469, 0x2000, 0);
+ break;
+ }
+ return 0;
+}
+
+void Scene2806::update() {
+ Scene::update();
+ findClosestPoint();
+}
+
+void Scene2806::findClosestPoint() {
+
+ static const uint32 kScene2806PaletteFileHashes[] = {
+ 0x48052508,
+ 0x01139404,
+ 0x01138C04,
+ 0x01138004,
+ 0x01138604,
+ 0x086B8890
+ };
+
+ int16 x = MIN<int16>(_klayman->getX(), 639);
+ int index = 1;
+
+ while (index < (int)_pointList->size() && (*_pointList)[index].x < x)
+ ++index;
+ --index;
+
+ if (_pointIndex != index) {
+ _pointIndex = index;
+ _palette->addPalette(kScene2806PaletteFileHashes[index], 0, 64, 0);
+ }
+
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 54b893b..b672866 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -87,6 +87,24 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2806 : public Scene {
+public:
+ Scene2806(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ NPointArray *_pointList;
+ int _pointIndex;
+ NRect _clipRects[4];
+ bool _fieldEC;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_sprite4;
+ // TODO class469
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void update();
+ void findClosestPoint();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2800_H */
Commit: 404aaaad941efe6496223e4c0263b181be406a71
https://github.com/scummvm/scummvm/commit/404aaaad941efe6496223e4c0263b181be406a71
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Class469
Changed paths:
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 793fc74..27234eb 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -151,7 +151,7 @@ void Module2800::updateScene() {
break;
case 5:
if (_moduleResult == 1) {
- createScene(27, 0);
+ createScene(7, 0);
} else {
createScene(2, 2);
}
@@ -606,6 +606,34 @@ uint32 Scene2805::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
+Class469::Class469(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _soundResource(vm) {
+
+ createSurface1(0x04211490, 1200);
+ _x = 378;
+ _y = 423;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Class469::handleMessage);
+ setDoDeltaX(1);
+ setVisible(false);
+}
+
+uint32 Class469::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ _soundResource.play(0x48640244);
+ startAnimation(0x04211490, 0, -1);
+ setVisible(true);
+ break;
+ case 0x3002:
+ stopAnimation();
+ setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -653,7 +681,7 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x0201410A, 1100);
insertStaticSprite(0x72875F42, 1100);
- // TODO _class469 = insertSprite<Class469>();
+ _class469 = insertSprite<Class469>();
_clipRects[2].y1 = 0;
_clipRects[3].y2 = 480;
@@ -692,7 +720,7 @@ uint32 Scene2806::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- // TODO sendMessage(_class469, 0x2000, 0);
+ sendMessage(_class469, 0x2000, 0);
break;
}
return 0;
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index b672866..765873d 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -87,6 +87,14 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Class469 : public AnimatedSprite {
+public:
+ Class469(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene2806 : public Scene {
public:
Scene2806(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -99,7 +107,7 @@ protected:
Sprite *_sprite2;
Sprite *_sprite3;
Sprite *_sprite4;
- // TODO class469
+ Sprite *_class469;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void update();
void findClosestPoint();
Commit: 12bb3f23f35491cdef20cb11cb013426618cf97f
https://github.com/scummvm/scummvm/commit/12bb3f23f35491cdef20cb11cb013426618cf97f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Scene2808
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 62fe2ad..248c873 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -220,6 +220,31 @@ void GameModule::initScene1405Vars() {
}
+void GameModule::initScene2808Vars1() {
+
+ // Exit if it's already initialized
+ if (getSubVar(0x40050052, 0x20479010))
+ return;
+
+ for (uint i = 0; i < 3; i++)
+ setSubVar(0x0C601058, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
+
+ setSubVar(0x40050052, 0x20479010, 1);
+
+}
+
+void GameModule::initScene2808Vars2() {
+
+ // Exit if it's already initialized
+ if (getSubVar(0x40050052, 0x66059818))
+ return;
+
+ for (uint i = 0; i < 3; i++)
+ setSubVar(0x40005834, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
+
+ setSubVar(0x40050052, 0x66059818, 1);
+}
+
void GameModule::initScene3009Vars() {
if (!getSubVar(0x40050052, 0x8C9819C2)) {
for (int i = 0; i < 3; i++) {
@@ -303,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 7;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 6da7123..f453feb 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -39,6 +39,8 @@ public:
void handleMouseDown(int16 x, int16 y);
void initScene1307Vars();
void initScene1405Vars();
+ void initScene2808Vars1();
+ void initScene2808Vars2();
void initScene3009Vars();
protected:
Entity *_prevChildObject;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 27234eb..353bb76 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -90,6 +90,10 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2806(_vm, this, which);
break;
+ case 7:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2808(_vm, this, 0);
+ break;
case 25:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
if (getGlobalVar(0x190A1D18))
@@ -156,6 +160,9 @@ void Module2800::updateScene() {
createScene(2, 2);
}
break;
+ case 7:
+ createScene(5, _moduleResult);
+ break;
case 25:
createScene(2, 5);
break;
@@ -756,4 +763,449 @@ void Scene2806::findClosestPoint() {
}
+static const uint32 kScene2808FileHashes1[] = {
+ 0x90B0392,
+ 0x90B0192
+};
+
+static const uint32 kScene2808FileHashes2[] = {
+ 0xB0396098,
+ 0xB0196098
+};
+
+static const uint32 kClass428FileHashes[] = {
+ 0x140022CA,
+ 0x4C30A602,
+ 0xB1633402,
+ 0x12982135,
+ 0x0540B728,
+ 0x002A81E3,
+ 0x08982841,
+ 0x10982841,
+ 0x20982841,
+ 0x40982841,
+ 0x80982841,
+ 0x40800711
+};
+
+static const int kClass428Countdowns1[] = {
+ 18, 16, 10, 0
+};
+
+static const int kClass428Countdowns2[] = {
+ 9, 9, 8, 8, 5, 5, 0, 0
+};
+
+static const uint32 kClass490FileHashes[] = {
+ 0x08100071,
+ 0x24084215,
+ 0x18980A10
+};
+
+static const int16 kClass490FrameIndices1[] = {
+ 0, 8, 15, 19
+};
+
+static const int16 kClass490FrameIndices2[] = {
+ 0, 4, 8, 11, 15, 17, 19, 0
+};
+
+AsScene2808Dispenser::AsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _testTubeSetNum(testTubeSetNum),
+ _testTubeIndex(testTubeIndex) {
+
+ _spriteResource.load2(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex]);
+ createSurface(1500, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+
+ _surface->getDrawRect().x = 0;
+ _surface->getDrawRect().y = 0;
+ _surface->getDrawRect().width = _spriteResource.getDimensions().width;
+ _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _deltaRect = _drawRect;
+ processDelta();
+
+ SetUpdateHandler(&AsScene2808Dispenser::update);
+ SetMessageHandler(&AsScene2808Dispenser::handleMessage);
+
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+
+}
+
+void AsScene2808Dispenser::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown) == 0) {
+ setVisible(false);
+ }
+}
+
+uint32 AsScene2808Dispenser::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ sendMessage(_parentScene, 0x2000, _testTubeIndex);
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2808Dispenser::startCountdown(int index) {
+ setVisible(true);
+ StaticSprite::update();
+ if (_testTubeSetNum == 0) {
+ _countdown = kClass428Countdowns1[index];
+ } else {
+ _countdown = kClass428Countdowns2[index];
+ }
+}
+
+AsScene2808TestTube::AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, AsScene2808Dispenser *dispenser)
+ : AnimatedSprite(vm, 1100), _testTubeSetNum(testTubeSetNum), _testTubeIndex(testTubeIndex), _dispenser(dispenser),
+ _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
+ _soundResource4(vm), _soundResource5(vm), _soundResource6(vm),
+ _soundResource7(vm), _soundResource8(vm), _soundResource9(vm), _fillLevel(0) {
+
+ if (testTubeSetNum == 0) {
+ _x = 504;
+ _y = 278;
+ } else {
+ setDoDeltaX(1);
+ _x = 136;
+ _y = 278;
+ }
+
+ createSurface1(kClass490FileHashes[testTubeIndex], 1100);
+
+ if (testTubeSetNum == 0) {
+ _soundResource1.load(0x30809E2D);
+ _soundResource2.load(0x72811E2D);
+ _soundResource3.load(0x78B01625);
+ } else {
+ _soundResource4.load(0x70A41E0C);
+ _soundResource5.load(0x50205E2D);
+ _soundResource6.load(0xF8621E2D);
+ _soundResource7.load(0xF1A03C2D);
+ _soundResource8.load(0x70A43D2D);
+ _soundResource9.load(0xF0601E2D);
+ }
+
+ startAnimation(kClass490FileHashes[testTubeIndex], 0, -1);
+ _newStickFrameIndex = 0;
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2808TestTube::handleMessage);
+
+ if (_fillLevel == 0)
+ setVisible(false);
+
+}
+
+uint32 AsScene2808TestTube::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ fill();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2808TestTube::fill() {
+
+
+ if ((int)_fillLevel >= _testTubeSetNum * 3 + 3)
+ return;
+
+ if (_testTubeSetNum == 0) {
+ switch (_fillLevel) {
+ case 0:
+ _soundResource1.play();
+ break;
+ case 1:
+ _soundResource2.play();
+ break;
+ case 2:
+ _soundResource3.play();
+ break;
+ }
+ setVisible(true);
+ startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices1[_fillLevel], kClass490FrameIndices1[_fillLevel + 1]);
+ _newStickFrameIndex = kClass490FrameIndices1[_fillLevel + 1];
+ } else {
+ switch (_fillLevel) {
+ case 0:
+ _soundResource4.play();
+ break;
+ case 1:
+ _soundResource5.play();
+ break;
+ case 2:
+ _soundResource6.play();
+ break;
+ case 3:
+ _soundResource7.play();
+ break;
+ case 4:
+ _soundResource8.play();
+ break;
+ case 5:
+ _soundResource9.play();
+ break;
+ }
+ setVisible(true);
+ startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices2[_fillLevel], kClass490FrameIndices2[_fillLevel + 1]);
+ _newStickFrameIndex = kClass490FrameIndices2[_fillLevel + 1];
+ }
+ _dispenser->startCountdown(_fillLevel);
+ _fillLevel++;
+}
+
+void AsScene2808TestTube::flush() {
+ if (_fillLevel != 0) {
+ if (_testTubeSetNum == 0) {
+ startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices1[_fillLevel], -1);
+ } else {
+ startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices2[_fillLevel], -1);
+ }
+ _newStickFrameIndex = 0;
+ _playBackwards = true;
+ setVisible(true);
+ }
+}
+
+AsScene2808Handle::AsScene2808Handle(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum)
+ : AnimatedSprite(vm, 1300), _parentScene(parentScene), _testTubeSetNum(testTubeSetNum), _isActivated(false),
+ _soundResource(vm) {
+
+ _soundResource.load(0xE18D1F30);
+ _x = 320;
+ _y = 240;
+ if (_testTubeSetNum == 1)
+ setDoDeltaX(1);
+ createSurface1(0x040900D0, 1300);
+ startAnimation(0x040900D0, 0, -1);
+ _needRefresh = true;
+ _newStickFrameIndex = 0;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2808Handle::handleMessage);
+ AnimatedSprite::updatePosition();
+}
+
+uint32 AsScene2808Handle::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (!_isActivated) {
+ sendMessage(_parentScene, 0x2001, 0);
+ _soundResource.play();
+ activate();
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene2808Handle::hmActivating(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2808Handle::activate() {
+ startAnimation(0x040900D0, 0, -1);
+ SetMessageHandler(&AsScene2808Handle::hmActivating);
+ NextState(&AsScene2808Handle::stActivated);
+ _isActivated = true;
+ _newStickFrameIndex = -1;
+}
+
+void AsScene2808Handle::stActivated() {
+ stopAnimation();
+ sendMessage(_parentScene, 0x2002, 0);
+}
+
+AsScene2808Flow::AsScene2808Flow(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _testTubeSetNum(testTubeSetNum),
+ _soundResource(vm) {
+
+ if (testTubeSetNum == 0) {
+ _x = 312;
+ _y = 444;
+ } else {
+ _x = 328;
+ _y = 444;
+ }
+ createSurface1(0xB8414818, 1200);
+ startAnimation(0xB8414818, 0, -1);
+ setVisible(false);
+ _newStickFrameIndex = 0;
+ _needRefresh = true;
+ _soundResource.load(0x6389B652);
+ SetUpdateHandler(&AnimatedSprite::update);
+ AnimatedSprite::updatePosition();
+}
+
+uint32 AsScene2808Flow::hmFlowing(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2808Flow::start() {
+ startAnimation(0xB8414818, 0, -1);
+ setVisible(true);
+ SetMessageHandler(&AsScene2808Flow::hmFlowing);
+ NextState(&AsScene2808Flow::stKeepFlowing);
+ _soundResource.play();
+}
+
+void AsScene2808Flow::stKeepFlowing() {
+ startAnimation(0xB8414818, 1, -1);
+ NextState(&AsScene2808Flow::stKeepFlowing);
+}
+
+AsScene2808LightEffect::AsScene2808LightEffect(NeverhoodEngine *vm, int testTubeSetNum)
+ : AnimatedSprite(vm, 800), _countdown(1) {
+
+ _x = 320;
+ _y = 240;
+ if (testTubeSetNum == 1)
+ setDoDeltaX(1);
+ createSurface1(0x804C2404, 800);
+ SetUpdateHandler(&AsScene2808LightEffect::update);
+ _needRefresh = true;
+ AnimatedSprite::updatePosition();
+}
+
+void AsScene2808LightEffect::update() {
+ if (_countdown != 0 && (--_countdown) == 0) {
+ int16 frameIndex = _vm->_rnd->getRandomNumber(3 - 1);
+ startAnimation(0x804C2404, frameIndex, frameIndex);
+ updateAnim();
+ updatePosition();
+ _countdown = _vm->_rnd->getRandomNumber(3 - 1) + 1;
+ }
+}
+
+Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _countdown(0), _testTubeSetNum(which), _leaveResult(0), _isFlowing(false) {
+
+ Sprite *tempSprite;
+
+ if (which == 0) {
+ _vm->gameModule()->initScene2808Vars1();
+ } else {
+ _vm->gameModule()->initScene2808Vars2();
+ }
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2808::handleMessage);
+ SetUpdateHandler(&Scene2808::update);
+
+ setBackground(kScene2808FileHashes1[which]);
+ setPalette(kScene2808FileHashes1[which]);
+
+ tempSprite = insertSprite<AsScene2808Handle>(this, which);
+ _vm->_collisionMan->addSprite(tempSprite);
+
+ _asFlow = insertSprite<AsScene2808Flow>(this, which);
+ insertSprite<AsScene2808LightEffect>(which);
+
+ for (int testTubeIndex = 0; testTubeIndex < 3; testTubeIndex++) {
+ AsScene2808Dispenser *dispenser = insertSprite<AsScene2808Dispenser>(this, which, testTubeIndex);
+ _vm->_collisionMan->addSprite(dispenser);
+ _asTestTubes[testTubeIndex] = insertSprite<AsScene2808TestTube>(which, testTubeIndex, dispenser);
+ _vm->_collisionMan->addSprite(_asTestTubes[testTubeIndex]);
+ }
+
+ insertMouse433(kScene2808FileHashes2[which]);
+
+}
+
+uint32 Scene2808::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO DEBUG Stuff
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !isAnyTestTubeFilled()) {
+ leaveScene(1);
+ }
+ break;
+ case 0x000D:
+ // TODO DEBUG Stuff
+ break;
+ case 0x2000:
+ if (!_isFlowing)
+ _asTestTubes[param.asInteger()]->fill();
+ break;
+ case 0x2001:
+ _isFlowing = true;
+ break;
+ case 0x2002:
+ if (isAnyTestTubeFilled()) {
+ _leaveResult = 3;
+ if (!isMixtureGood())
+ _leaveResult = 2;
+ _asFlow->start();
+ for (int i = 0; i < 3; i++)
+ _asTestTubes[i]->flush();
+ _mouseCursor->setVisible(false);
+ _countdown = 16;
+ } else {
+ leaveScene(1);
+ }
+ break;
+ }
+ return 0;
+}
+
+void Scene2808::update() {
+
+ // DEBUG: Show correct values
+ debug("---------------");
+ debug("%03d %03d %03d", getSubVar(0x0C601058, 0), getSubVar(0x0C601058, 1), getSubVar(0x0C601058, 2));
+ debug("%03d %03d %03d", _asTestTubes[0]->getFillLevel(), _asTestTubes[1]->getFillLevel(), _asTestTubes[2]->getFillLevel());
+
+ Scene::update();
+ if (_countdown != 0 && (--_countdown) == 0) {
+ leaveScene(_leaveResult);
+ }
+}
+
+bool Scene2808::isMixtureGood() {
+ if (_testTubeSetNum == 0) {
+ return
+ _asTestTubes[0]->getFillLevel() == getSubVar(0x0C601058, 0) &&
+ _asTestTubes[1]->getFillLevel() == getSubVar(0x0C601058, 1) &&
+ _asTestTubes[2]->getFillLevel() == getSubVar(0x0C601058, 2);
+ } else {
+ return
+ _asTestTubes[0]->getFillLevel() == getSubVar(0x40005834, 0) &&
+ _asTestTubes[1]->getFillLevel() == getSubVar(0x40005834, 1) &&
+ _asTestTubes[2]->getFillLevel() == getSubVar(0x40005834, 2);
+ }
+}
+
+bool Scene2808::isAnyTestTubeFilled() {
+ return
+ _asTestTubes[0]->getFillLevel() > 0 ||
+ _asTestTubes[1]->getFillLevel() > 0 ||
+ _asTestTubes[2]->getFillLevel() > 0;
+}
+
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 765873d..ed93c9f 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -113,6 +113,91 @@ protected:
void findClosestPoint();
};
+class AsScene2808Dispenser : public StaticSprite {
+public:
+ AsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex);
+ void startCountdown(int index);
+protected:
+ Scene *_parentScene;
+ int _countdown;
+ int _testTubeSetNum, _testTubeIndex;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2808TestTube : public AnimatedSprite {
+public:
+ AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, AsScene2808Dispenser *dispenser);
+ void fill();
+ void flush();
+ uint32 getFillLevel() const { return _fillLevel; }
+protected:
+ AsScene2808Dispenser *_dispenser;
+ int _testTubeSetNum;
+ uint32 _fillLevel;
+ int _testTubeIndex;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ SoundResource _soundResource5;
+ SoundResource _soundResource6;
+ SoundResource _soundResource7;
+ SoundResource _soundResource8;
+ SoundResource _soundResource9;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2808Handle : public AnimatedSprite {
+public:
+ AsScene2808Handle(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum);
+ void activate();
+ void stActivated();
+protected:
+ Scene *_parentScene;
+ int _testTubeSetNum;
+ bool _isActivated;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmActivating(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2808Flow : public AnimatedSprite {
+public:
+ AsScene2808Flow(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum);
+ void start();
+ void stKeepFlowing();
+protected:
+ Scene *_parentScene;
+ int _testTubeSetNum;
+ SoundResource _soundResource;
+ uint32 hmFlowing(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2808LightEffect : public AnimatedSprite {
+public:
+ AsScene2808LightEffect(NeverhoodEngine *vm, int which);
+protected:
+ int _countdown;
+ void update();
+};
+
+class Scene2808 : public Scene {
+public:
+ Scene2808(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ int _countdown;
+ int _testTubeSetNum;
+ AsScene2808Flow *_asFlow;
+ int _leaveResult;
+ bool _isFlowing;
+ AsScene2808TestTube *_asTestTubes[3];
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void update();
+ bool isMixtureGood();
+ bool isAnyTestTubeFilled();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2800_H */
Commit: 1cb1e66c101612d9400cca090c3fdc2d18dcaf96
https://github.com/scummvm/scummvm/commit/1cb1e66c101612d9400cca090c3fdc2d18dcaf96
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Class488 (renaming TODO)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 248c873..7ea115c 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 2;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 353bb76..3a787ee 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -290,6 +290,75 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+Class488::Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
+ _flag1(false), _flag2(false), _soundResource(vm) {
+
+ createSurface(1010, 640, 480); // TODO Use correct size from the two hashes
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ _x = x;
+ _y = y;
+ sub4343C0();
+}
+
+uint32 Class488::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (!_flag2 && param.asInteger() == calcHash("ClickSwitch")) {
+ sendMessage(_parentScene, 0x480F, 0);
+ _soundResource.play(0x4E1CA4A0);
+ }
+ break;
+ case 0x480F:
+ sub434380();
+ break;
+ case 0x482A:
+ sendMessage(_parentScene, 0x1022, 990);
+ break;
+ case 0x482B:
+ sendMessage(_parentScene, 0x1022, 1010);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class488::handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+void Class488::sub434380() {
+ _flag2 = false;
+ _flag1 = true;
+ startAnimation(_fileHash2, 0, -1);
+ SetMessageHandler(&Class488::handleMessage434340);
+ NextState(&Class488::sub4343C0);
+}
+
+void Class488::sub4343C0() {
+ _flag1 = false;
+ startAnimation(_fileHash1, 0, -1);
+ SetMessageHandler(&Class488::handleMessage);
+}
+
+void Class488::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
+ _fileHash1 = fileHash1;
+ _fileHash2 = fileHash2;
+ if (_flag1) {
+ startAnimation(_fileHash2, _currFrameIndex, -1);
+ _flag2 = true;
+ } else {
+ startAnimation(_fileHash1, 0, -1);
+ }
+}
+
Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _palStatus(0) {
@@ -307,7 +376,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x81120132);
insertMouse433(0x00A05290);
- // TODO insertSprite<Class488>(this, 0xAFAD591A, 0x276E321D, 578, 200);
+ insertSprite<Class488>(this, 0xAFAD591A, 0x276E321D, 578, 200);
if (getGlobalVar(0x190A1D18)) {
setBackground(0x412A423E);
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index ed93c9f..4026093 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -54,6 +54,21 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Class488 : public AnimatedSprite {
+public:
+ Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y);
+ void sub434380();
+ void sub4343C0();
+ void setFileHashes(uint32 fileHash1, uint32 fileHash2);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 _fileHash1, _fileHash2;
+ bool _flag1, _flag2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene2803b : public Scene {
public:
Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: 5688047fe353276806bc491e324dbb3a9c9df22f
https://github.com/scummvm/scummvm/commit/5688047fe353276806bc491e324dbb3a9c9df22f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2809
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index fe6644e..1c9c76a 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -417,6 +417,12 @@ static const uint32 messageListOffsets[] = {
5, 0x004AF0A0,
1, 0x004AF090,
2, 0x004AF0E0,
+ // Scene2809
+ 1, 0x004B5B90,
+ 3, 0x004B5BD0,
+ 5, 0x004B5BA8,
+ 1, 0x004B5B88,
+ 2, 0x004B5B98,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 58190d0..7bc4609 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 2aa6e6b89cc968854e84b1e752e36287251b898e
https://github.com/scummvm/scummvm/commit/2aa6e6b89cc968854e84b1e752e36287251b898e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Scene2809
- Fix some setMessageList parameters
- Add scene 10 in Module2800
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7ea115c..384f419 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 2;
+ _vm->gameState().sceneNum = 5;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 4178bec..de3844e 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5514,4 +5514,168 @@ void KmScene2806::sub40F7C0() {
startAnimation(0x1C388C04, 0, -1);
}
+KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ bool flag, NRect *clipRects, uint clipRectsCount)
+ : Klayman(vm, parentScene, x, y, 1000, 1000),
+ _soundRes1(vm), _soundRes2(vm), _soundRes3(vm), _soundRes4(vm), _soundRes5(vm) {
+
+ if (flag) {
+ // TODO Maybe? Don't know. Set Klayman clip rects
+ _soundRes1.load(0x58E0C341);
+ _soundRes2.load(0x40A00342);
+ _soundRes3.load(0xD0A1C348);
+ _soundRes4.load(0x166FC6E0);
+ _soundRes5.load(0x00018040);
+ }
+
+ _dataResource.load(0x1830009A);
+
+}
+
+uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4804:
+ startWalkToX(226, true);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::sub420F60);
+ break;
+ case 0x4816:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x4818:
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x4831:
+ GotoState(&KmScene2809::sub458550);
+ break;
+ case 0x4832:
+ if (param.asInteger() == 1) {
+ GotoState(&KmScene2809::sub458590);
+ } else {
+ GotoState(&Klayman::sub421110);
+ }
+ break;
+ }
+ return 0;
+}
+
+uint32 KmScene2809::handleMessage457FC0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1008:
+ if (_flag1) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ } else
+ _flag2 = true;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x0002418E)
+ sendMessage(_parentScene, 0x2000, 0);
+ else if (param.asInteger() == 0x924090C2) {
+ _flag1 = true;
+ if (_flag2) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ }
+ } else if (param.asInteger() == 0x004A2148)
+ _flag1 = false;
+ else if (param.asInteger() == 0x02B20220)
+ _soundResource1.play(0xC5408620);
+ else if (param.asInteger() == 0x0A720138)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0x03020231)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0xB613A180)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x67221A03)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x038A010B)
+ _soundResource1.play(0x00018040);
+ else if (param.asInteger() == 0x422B0280)
+ _soundResource1.play(0x166FC6E0);
+ else if (param.asInteger() == 0x925A0C1E)
+ _soundResource1.play(0x40E5884D);
+ else if (param.asInteger() == 0x000F0082)
+ _soundResource1.play(0x546CDCC1);
+ else if (param.asInteger() == 0x00020814)
+ _soundResource1.play(0x786CC6D0);
+ else if (param.asInteger() == 0x06020500)
+ _soundResource1.play(0x1069C0E1);
+ else if (param.asInteger() == 0x02128C00)
+ _soundResource1.play(0x5068C4C3);
+ else if (param.asInteger() == 0x82022030)
+ _soundResource1.play(0x5C48C0E8);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene2809::handleMessage458340(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101)
+ _soundResource1.play(0x405002D8);
+ else if (param.asInteger() == 0x0A2A9098)
+ _soundResource1.play(0x0460E2FA);
+ else if (param.asInteger() == 0xD00A0C0C)
+ _soundRes1.play();
+ else if (param.asInteger() == 0x04121920)
+ _soundRes2.play();
+ else if (param.asInteger() == 0x030B4480)
+ _soundRes3.play();
+ else if (param.asInteger() == 0x422B0280)
+ _soundRes4.play();
+ else if (param.asInteger() == 0x038A010B)
+ _soundRes5.play();
+ else if (param.asInteger() == 0x67221A03)
+ _soundResource1.play(0x44051000);
+ else if (param.asInteger() == 0x02B20220)
+ _soundResource1.play(0xC5408620);
+ else if (param.asInteger() == 0x925A0C1E)
+ _soundResource1.play(0x40E5884D);
+ else if (param.asInteger() == 0x03020231)
+ _soundResource1.play(0xD4C08010);
+ else if (param.asInteger() == 0x08040840)
+ setDoDeltaX(2);
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2809::sub458550() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2838C010, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene2809::handleMessage458340);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+void KmScene2809::sub458590() {
+ _status2 = 1;
+ _acceptInput = false;
+ _flag1 = false;
+ _flag2 = false;
+ startAnimation(0x1C388C04, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene2809::handleMessage457FC0);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 27d9298..d508f6c 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -612,6 +612,25 @@ protected:
void sub40F7C0();
};
+class KmScene2809 : public Klayman {
+public:
+ KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ bool flag, NRect *clipRects, uint clipRectsCount);
+protected:
+ SoundResource _soundRes1;
+ SoundResource _soundRes2;
+ SoundResource _soundRes3;
+ SoundResource _soundRes4;
+ SoundResource _soundRes5;
+ bool _flag1;
+ bool _flag2;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage457FC0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage458340(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub458550();
+ void sub458590();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 3a787ee..0862205 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -94,6 +94,14 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 0);
break;
+ case 8:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2809(_vm, this, which);
+ break;
+ case 10:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2808(_vm, this, 1);
+ break;
case 25:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
if (getGlobalVar(0x190A1D18))
@@ -163,6 +171,16 @@ void Module2800::updateScene() {
case 7:
createScene(5, _moduleResult);
break;
+ case 8:
+ if (_moduleResult == 1) {
+ createScene(10, 0);
+ } else {
+ createScene(9, 4);
+ }
+ break;
+ case 10:
+ createScene(8, _moduleResult);
+ break;
case 25:
createScene(2, 5);
break;
@@ -463,7 +481,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
insertKlayman<KmScene2803b>(135, 444);
sub460110();
- setMessageList(0x004B60E0);
+ setMessageList(0x004B60E0, false);
_sprite6->setVisible(true);
_sprite7->setVisible(true);
}
@@ -644,17 +662,17 @@ Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 1) {
insertKlayman<KmScene2805>(493, 338);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004AE1D0);
+ setMessageList(0x004AE1D0, false);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
insertKlayman<KmScene2805>(493, 338);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004AE288);
+ setMessageList(0x004AE288, false);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
insertKlayman<KmScene2805>(493, 338);
sendMessage(_klayman, 0x2000, 1);
- setMessageList(0x004AE1E0);
+ setMessageList(0x004AE1E0, false);
sendMessage(this, 0x2000, 1);
} else {
insertKlayman<KmScene2805>(340, 338);
@@ -682,19 +700,19 @@ uint32 Scene2805::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-Class469::Class469(NeverhoodEngine *vm)
+AsScene2806Spew::AsScene2806Spew(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200), _soundResource(vm) {
createSurface1(0x04211490, 1200);
_x = 378;
_y = 423;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class469::handleMessage);
+ SetMessageHandler(&AsScene2806Spew::handleMessage);
setDoDeltaX(1);
setVisible(false);
}
-uint32 Class469::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2806Spew::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
@@ -757,7 +775,7 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x0201410A, 1100);
insertStaticSprite(0x72875F42, 1100);
- _class469 = insertSprite<Class469>();
+ _asSpew = insertSprite<AsScene2806Spew>();
_clipRects[2].y1 = 0;
_clipRects[3].y2 = 480;
@@ -772,10 +790,10 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AF098);
} else if (which == 2) {
insertKlayman<KmScene2806>(378, 423, false, _clipRects, 4);
- setMessageList(0x004AF0C8);
+ setMessageList(0x004AF0C8, false);
} else if (which == 3) {
insertKlayman<KmScene2806>(378, 423, true, _clipRects, 4);
- setMessageList(0x004AF0A0);
+ setMessageList(0x004AF0A0, false);
setGlobalVar(0x1860C990, 0);
} else {
insertKlayman<KmScene2806>(670, 423, false, _clipRects, 4);
@@ -796,7 +814,7 @@ uint32 Scene2806::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- sendMessage(_class469, 0x2000, 0);
+ sendMessage(_asSpew, 0x2000, 0);
break;
}
return 0;
@@ -1276,5 +1294,152 @@ bool Scene2808::isAnyTestTubeFilled() {
_asTestTubes[2]->getFillLevel() > 0;
}
+AsScene2809Spew::AsScene2809Spew(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _soundResource(vm) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2809Spew::handleMessage);
+ createSurface1(0x04211490, 1200);
+ _x = 262;
+ _y = 423;
+ setDoDeltaX(0);
+ setVisible(false);
+}
+
+uint32 AsScene2809Spew::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ _soundResource.play(0x48640244);
+ startAnimation(0x04211490, 0, -1);
+ setVisible(true);
+ break;
+ case 0x3002:
+ stopAnimation();
+ setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+Scene2809::Scene2809(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *tempSprite;
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2809::handleMessage);
+ SetUpdateHandler(&Scene2809::update);
+
+ loadDataResource(0x1830009A);
+ loadHitRectList();
+
+ _pointList = _dataResource.getPointArray(0x064A310E);
+
+ setBackground(0xB22116C5);
+ setPalette(0xB22116C5);
+ insertMouse433(0x116C1B2A);
+
+ _sprite1 = insertStaticSprite(0x1FA2EB82, 1100);
+
+ _clipRects[0].x1 = _sprite1->getDrawRect().x;
+ _clipRects[0].y1 = _sprite1->getDrawRect().y;
+ _clipRects[0].x2 = _sprite1->getDrawRect().x2();
+ _clipRects[0].y2 = _sprite1->getDrawRect().y2();
+
+ _sprite2 = insertStaticSprite(0x037321B2, 1100);
+ _clipRects[1].y2 = _sprite2->getDrawRect().y2();
+
+ _sprite3 = insertStaticSprite(0x82022E11, 1100);
+
+ _sprite4 = insertStaticSprite(0x09236252, 1100);
+ _clipRects[1].x2 = _sprite4->getDrawRect().x2();
+ _clipRects[1].y1 = _sprite4->getDrawRect().y;
+
+ tempSprite = insertStaticSprite(0x010C22F2, 1100);
+ _clipRects[2].x2 = tempSprite->getDrawRect().x2();
+ _clipRects[2].y2 = tempSprite->getDrawRect().y2();
+ _clipRects[3].y1 = tempSprite->getDrawRect().y2();
+ _clipRects[1].x1 = tempSprite->getDrawRect().x2();
+
+ tempSprite = insertStaticSprite(0x877F6252, 1100);
+ _clipRects[3].x2 = tempSprite->getDrawRect().x2();
+
+ insertStaticSprite(0x01612A22, 1100);
+ insertStaticSprite(0x877F6252, 1100);
+
+ _asSpew = insertSprite<AsScene2809Spew>();
+ _clipRects[2].y1 = 0;
+ _clipRects[3].y2 = 480;
+ _clipRects[2].x1 = 0;
+ _clipRects[3].x1 = 0;
+
+ if (which < 0) {
+ insertKlayman<KmScene2809>(226, 423, false, _clipRects, 4);
+ setMessageList(0x004B5B90);
+ } else if (which == 1) {
+ insertKlayman<KmScene2809>(262, 423, false, _clipRects, 4);
+ setMessageList(0x004B5B90);
+ } else if (which == 2) {
+ insertKlayman<KmScene2809>(262, 423, false, _clipRects, 4);
+ setMessageList(0x004B5BD0);
+ } else if (which == 3) {
+ insertKlayman<KmScene2809>(262, 423, true, _clipRects, 4);
+ setMessageList(0x004B5BA8, false);
+ setGlobalVar(0x1860C990, 0);
+ } else {
+ insertKlayman<KmScene2809>(-30, 423, false, _clipRects, 4);
+ setMessageList(0x004B5B88);
+ }
+
+ _pointIndex = -1;
+ findClosestPoint();
+
+}
+
+void Scene2809::update() {
+ Scene::update();
+ findClosestPoint();
+}
+
+uint32 Scene2809::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x160DA937) {
+ setMessageList(0x004B5B98);
+ }
+ break;
+ case 0x2000:
+ sendMessage(_asSpew, 0x2000, 0);
+ break;
+ }
+ return 0;
+}
+
+void Scene2809::findClosestPoint() {
+
+ static const uint32 kScene2809PaletteFileHashes[] = {
+ 0x04260848,
+ 0x12970401,
+ 0x128F0401,
+ 0x12830401,
+ 0x12850401,
+ 0x6A8B9008
+ };
+
+ int16 x = MAX<int16>(_klayman->getX(), 2);
+ int index = 1;
+
+ while (index < (int)_pointList->size() && (*_pointList)[index].x >= x)
+ ++index;
+ --index;
+
+ if (_pointIndex != index) {
+ _pointIndex = index;
+ _palette->addPalette(kScene2809PaletteFileHashes[index], 0, 64, 0);
+ }
+
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 4026093..404f9ac 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -102,9 +102,9 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class469 : public AnimatedSprite {
+class AsScene2806Spew : public AnimatedSprite {
public:
- Class469(NeverhoodEngine *vm);
+ AsScene2806Spew(NeverhoodEngine *vm);
protected:
SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -122,7 +122,7 @@ protected:
Sprite *_sprite2;
Sprite *_sprite3;
Sprite *_sprite4;
- Sprite *_class469;
+ Sprite *_asSpew;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void update();
void findClosestPoint();
@@ -213,6 +213,31 @@ protected:
bool isAnyTestTubeFilled();
};
+class AsScene2809Spew : public AnimatedSprite {
+public:
+ AsScene2809Spew(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2809 : public Scene {
+public:
+ Scene2809(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ NPointArray *_pointList;
+ int _pointIndex;
+ NRect _clipRects[4];
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_sprite4;
+ Sprite *_asSpew;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void findClosestPoint();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2800_H */
Commit: 4f1e8b2070a64ff1f03b01fcdfea2229244f1bb1
https://github.com/scummvm/scummvm/commit/4f1e8b2070a64ff1f03b01fcdfea2229244f1bb1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Scene2804
- Fix dispenser in Scene2808 (wasn't clickable)
- Add Palette::fillBaseWhite
- Minor renaming in Module2800
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
engines/neverhood/palette.cpp
engines/neverhood/palette.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 384f419..813222c 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 3;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 0862205..4757b4f 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -82,6 +82,9 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO _childObject = new Scene2803(_vm, this, which);
}
break;
+ case 3:
+ _childObject = new Scene2804(_vm, this, which);
+ break;
case 4:
// TODO Music18hList_stop(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
@@ -154,6 +157,9 @@ void Module2800::updateScene() {
else
createScene(0, 1);
break;
+ case 3:
+ createScene(2, 1);
+ break;
case 4:
if (_moduleResult == 1) {
leaveModule(1);
@@ -641,6 +647,601 @@ void Scene2803b::sub4601F0(bool flag) {
}
}
+SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene)
+ : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene),
+ _soundResource(vm) {
+
+ if (getGlobalVar(0x190A1D18))
+ _spriteResource.load2(0x51A10202);
+ else
+ _spriteResource.load2(0x11814A21);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _deltaRect = _drawRect;
+ processDelta();
+ setVisible(false);
+ _needRefresh = true;
+ SetUpdateHandler(&SsScene2804RedButton::update);
+ SetMessageHandler(&SsScene2804RedButton::handleMessage);
+ _soundResource.load(0x44241240);
+}
+
+void SsScene2804RedButton::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown) == 0) {
+ setVisible(false);
+ }
+}
+
+uint32 SsScene2804RedButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0 && !_parentScene->isWorking()) {
+ _soundResource.play();
+ setVisible(true);
+ _countdown = 4;
+ sendMessage(_parentScene, 0x2000, 0);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+SsScene2808LightCoil::SsScene2808LightCoil(NeverhoodEngine *vm)
+ : StaticSprite(vm, 900) {
+
+ _spriteResource.load2(0x8889B008);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+ SetMessageHandler(&SsScene2808LightCoil::handleMessage);
+}
+
+uint32 SsScene2808LightCoil::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2002:
+ setVisible(true);
+ StaticSprite::update();
+ messageResult = 1;
+ break;
+ case 0x2003:
+ setVisible(false);
+ StaticSprite::update();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+SsScene2808LightTarget::SsScene2808LightTarget(NeverhoodEngine *vm)
+ : StaticSprite(vm, 900) {
+
+ _spriteResource.load2(0x06092132);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+ SetMessageHandler(&SsScene2808LightTarget::handleMessage);
+}
+
+uint32 SsScene2808LightTarget::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2004:
+ setVisible(true);
+ StaticSprite::update();
+ messageResult = 1;
+ break;
+ case 0x2005:
+ setVisible(false);
+ StaticSprite::update();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+SsScene2808Flash::SsScene2808Flash(NeverhoodEngine *vm)
+ : StaticSprite(vm, 900), _soundResource(vm) {
+
+ _spriteResource.load2(0x211003A0);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+ _soundResource.load(0xCB36BA54);
+}
+
+void SsScene2808Flash::show() {
+ setVisible(true);
+ StaticSprite::update();
+ _soundResource.play();
+}
+
+SsScene2808BeamCoilBody::SsScene2808BeamCoilBody(NeverhoodEngine *vm)
+ : StaticSprite(vm, 900) {
+
+ _spriteResource.load2(0x9A816000);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ setVisible(false);
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+AsScene2804CrystalWaves::AsScene2804CrystalWaves(NeverhoodEngine *vm, uint crystalIndex)
+ : AnimatedSprite(vm, 1100), _crystalIndex(crystalIndex) {
+
+ static const NPoint kAsScene2804CrystalWavesPoints[] = {
+ {323, 245},
+ {387, 76},
+ {454, 260},
+ {527, 70}
+ };
+
+ _x = kAsScene2804CrystalWavesPoints[crystalIndex].x;
+ _y = kAsScene2804CrystalWavesPoints[crystalIndex].y;
+ createSurface1(0x840C41F0, 1200);
+ if (crystalIndex & 1)
+ setDoDeltaX(1);
+ setVisible(false);
+ _needRefresh = true;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&Sprite::handleMessage);
+}
+
+void AsScene2804CrystalWaves::show() {
+ setVisible(true);
+ startAnimation(0x840C41F0, 0, -1);
+}
+
+void AsScene2804CrystalWaves::hide() {
+ setVisible(false);
+ stopAnimation();
+}
+
+static const int16 kAsScene2804CrystalFrameNums[] = {
+ 0, 6, 2, 8, 1, 10, 0, 0
+};
+
+static const uint32 kAsScene2804CrystalFileHashes[] = {
+ 0x000540B0,
+ 0x001280D0,
+ 0x003D0010,
+ 0x00620190,
+ 0x00DC0290
+};
+
+AsScene2804Crystal::AsScene2804Crystal(NeverhoodEngine *vm, AsScene2804CrystalWaves *asCrystalWaves, uint crystalIndex)
+ : AnimatedSprite(vm, 1100), _asCrystalWaves(asCrystalWaves), _crystalIndex(crystalIndex),
+ _isShowing(false), _soundResource(vm) {
+
+ static const NPoint kAsScene2804CrystalPoints[] = {
+ {204, 196},
+ {272, 316},
+ {334, 206},
+ {410, 334},
+ {470, 180}
+ };
+
+ _colorNum = (int16)getSubVar(0xE11A1929, crystalIndex);
+ _isLightOn = getGlobalVar(0x190A1D18) != 0;
+ if (_isLightOn) {
+ _x = kAsScene2804CrystalPoints[crystalIndex].x;
+ _y = kAsScene2804CrystalPoints[crystalIndex].y;
+ createSurface1(0x108DFB12, 1200);
+ startAnimation(0x108DFB12, kAsScene2804CrystalFrameNums[_colorNum], -1);
+ _needRefresh = true;
+ _newStickFrameIndex = kAsScene2804CrystalFrameNums[_colorNum];
+ } else {
+ _x = 320;
+ _y = 240;
+ createSurface1(kAsScene2804CrystalFileHashes[crystalIndex], 1200);
+ startAnimation(kAsScene2804CrystalFileHashes[crystalIndex], _colorNum, -1);
+ setVisible(false);
+ _needRefresh = true;
+ _newStickFrameIndex = _colorNum;
+ }
+ _soundResource.load(0x725294D4);
+ SetUpdateHandler(&AnimatedSprite::update);
+}
+
+void AsScene2804Crystal::show() {
+ if (!_isLightOn) {
+ setVisible(true);
+ _isShowing = true;
+ if (_asCrystalWaves)
+ _asCrystalWaves->show();
+ _soundResource.play();
+ }
+}
+
+void AsScene2804Crystal::hide() {
+ if (!_isLightOn) {
+ setVisible(false);
+ _isShowing = false;
+ if (_asCrystalWaves)
+ _asCrystalWaves->hide();
+ }
+}
+
+void AsScene2804Crystal::activate() {
+ if (!_isShowing) {
+ int16 frameNum = kAsScene2804CrystalFrameNums[_colorNum];
+ _colorNum++;
+ if (_colorNum >= 6)
+ _colorNum = 0;
+ if (_isLightOn) {
+ startAnimation(0x108DFB12, frameNum, kAsScene2804CrystalFrameNums[_colorNum]);
+ _playBackwards = kAsScene2804CrystalFrameNums[_colorNum] < _colorNum;
+ _newStickFrameIndex = kAsScene2804CrystalFrameNums[_colorNum];
+ } else {
+ startAnimation(kAsScene2804CrystalFileHashes[_crystalIndex], _colorNum, -1);
+ _newStickFrameIndex = _colorNum;
+ }
+ setSubVar(0xE11A1929, _crystalIndex, _colorNum);
+ }
+}
+
+SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene2804 *parentScene, AsScene2804Crystal *asCrystal, uint crystalIndex)
+ : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene), _asCrystal(asCrystal),
+ _crystalIndex(crystalIndex), _soundResource(vm) {
+
+ static const uint32 kSsScene2804CrystalButtonFileHashes1[] = {
+ 0x911101B0,
+ 0x22226001,
+ 0x4444A362,
+ 0x888925A4,
+ 0x11122829
+ };
+
+ static const uint32 kSsScene2804CrystalButtonFileHashes2[] = {
+ 0xB500A1A0,
+ 0x6A012021,
+ 0xD4022322,
+ 0xA8042525,
+ 0x5008292B
+ };
+
+ if (getGlobalVar(0x190A1D18))
+ _spriteResource.load2(kSsScene2804CrystalButtonFileHashes1[crystalIndex]);
+ else
+ _spriteResource.load2(kSsScene2804CrystalButtonFileHashes2[crystalIndex]);
+
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _deltaRect = _drawRect;
+ processDelta();
+ setVisible(false);
+ _soundResource.load(0x44045140);
+ _needRefresh = true;
+ SetUpdateHandler(&SsScene2804CrystalButton::update);
+ SetMessageHandler(&SsScene2804CrystalButton::handleMessage);
+}
+
+void SsScene2804CrystalButton::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown) == 0) {
+ setVisible(false);
+ }
+}
+
+uint32 SsScene2804CrystalButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0 && !_parentScene->isWorking()) {
+ _soundResource.play();
+ setVisible(true);
+ _countdown = 4;
+ _asCrystal->activate();
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2808BeamCoilBody *ssBeamCoilBody)
+ : AnimatedSprite(vm, 1400), _parentScene(parentScene), _ssBeamCoilBody(ssBeamCoilBody),
+ _countdown(0), _soundResource(vm) {
+
+ createSurface1(0x00494891, 1000);
+ _x = 125;
+ _y = 184;
+ setVisible(false);
+ _needRefresh = true;
+ AnimatedSprite::updatePosition();
+ _soundResource.load(0x6352F051);
+ // TODO Sound1ChList_addSoundResource(0xC5EA0B28, 0xEF56B094, true);
+ SetUpdateHandler(&AsScene2804BeamCoil::update);
+ SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
+}
+
+void AsScene2804BeamCoil::update() {
+ updateAnim();
+ updatePosition();
+ if (_countdown != 0 && (--_countdown) == 0) {
+ sendMessage(_parentScene, 0x2001, 0);
+ }
+}
+
+uint32 AsScene2804BeamCoil::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2002:
+ show();
+ _countdown = 92;
+ messageResult = 1;
+ break;
+ case 0x2003:
+ hide();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2804BeamCoil::show() {
+ _ssBeamCoilBody->setVisible(true);
+ // TODO _ssBeamCoilBody->update(); -> show()
+ setVisible(true);
+ startAnimation(0x00494891, 0, -1);
+ _soundResource.play();
+ SetMessageHandler(&AsScene2804BeamCoil::hmBeaming);
+ NextState(&AsScene2804BeamCoil::stBeaming);
+}
+
+void AsScene2804BeamCoil::hide() {
+ stopAnimation();
+ SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
+ setVisible(false);
+ _ssBeamCoilBody->setVisible(false);
+ // TODO _ssBeamCoilBody->update(); -> hide()
+ // TODO Sound1ChList_stop(0xEF56B094);
+}
+
+void AsScene2804BeamCoil::stBeaming() {
+ startAnimation(0x00494891, 93, -1);
+ NextState(&AsScene2804BeamCoil::stBeaming);
+ // TODO Sound1ChList_playLooping(0xEF56B094);
+}
+
+uint32 AsScene2804BeamCoil::hmBeaming(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2804BeamTarget::AsScene2804BeamTarget(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1400) {
+
+ createSurface1(0x03842000, 1000);
+ _x = 475;
+ _y = 278;
+ setVisible(false);
+ _needRefresh = true;
+ updatePosition();
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2804BeamTarget::handleMessage);
+}
+
+uint32 AsScene2804BeamTarget::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2004:
+ setVisible(true);
+ startAnimation(0x03842000, 0, -1);
+ messageResult = 1;
+ break;
+ case 0x2005:
+ setVisible(false);
+ stopAnimation();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _countdown3(0),
+ _beamStatus(0), _isSolved(false), _isWorking(false) {
+
+ initCrystalColors();
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2804::handleMessage);
+ SetUpdateHandler(&Scene2804::update);
+
+ //setGlobalVar(0x190A1D18, 1); // DEBUG Set lights on
+
+ if (getGlobalVar(0x190A1D18)) {
+ setBackground(0xA1D03005);
+ setPalette(0xA1D03005);
+ addEntity(_palette);
+ insertMouse435(0x03001A15, 20, 620);
+ _asCoil = insertSprite<SsScene2808LightCoil>();
+ _asTarget = insertSprite<SsScene2808LightTarget>();
+ } else {
+ SsScene2808BeamCoilBody *ssBeamCoilBody;
+ setBackground(0x01C01414);
+ setPalette(0x01C01414);
+ addEntity(_palette);
+ insertMouse435(0x01410014, 20, 620);
+ ssBeamCoilBody = insertSprite<SsScene2808BeamCoilBody>();
+ _asCoil = insertSprite<AsScene2804BeamCoil>(this, ssBeamCoilBody);
+ _asTarget = insertSprite<AsScene2804BeamTarget>();
+ _ssFlash = insertSprite<SsScene2808Flash>();
+ }
+
+ _ssRedButton = insertSprite<SsScene2804RedButton>(this);
+ _vm->_collisionMan->addSprite(_ssRedButton);
+
+ for (uint crystalIndex = 0; crystalIndex < 5; crystalIndex++) {
+ AsScene2804CrystalWaves *asCrystalWaves = NULL;
+ if (crystalIndex < 4 && getGlobalVar(0x190A1D18) == 0)
+ asCrystalWaves = insertSprite<AsScene2804CrystalWaves>(crystalIndex);
+ _asCrystals[crystalIndex] = insertSprite<AsScene2804Crystal>(asCrystalWaves, crystalIndex);
+ _ssCrystalButtons[crystalIndex] = insertSprite<SsScene2804CrystalButton>(this, _asCrystals[crystalIndex], crystalIndex);
+ _vm->_collisionMan->addSprite(_ssCrystalButtons[crystalIndex]);
+ }
+
+}
+
+uint32 Scene2804::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO DEBUG
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ leaveScene(0);
+ }
+ break;
+ case 0x000D:
+ // TODO DEBUG
+ break;
+ case 0x2000:
+ _isWorking = true;
+ sendMessage(_asCoil, 0x2002, 0);
+ if (getGlobalVar(0x190A1D18)) {
+ sendMessage(_asTarget, 0x2004, 0);
+ _countdown2 = 48;
+ }
+ break;
+ case 0x2001:
+ _countdown3 = 2;
+ _isSolved = true;
+ _beamStatus = 0;
+ for (uint index = 0; index < 5; index++)
+ if (_asCrystals[index]->getColorNum() != (int16)getSubVar(0xD4B2089C, index))
+ _isSolved = false;
+ _countdown2 = 48;
+ break;
+ }
+ return 0;
+}
+
+void Scene2804::update() {
+
+ Scene::update();
+
+ if (_countdown1 != 0 && (--_countdown1) == 0) {
+ leaveScene(0);
+ }
+
+ if (_countdown2 != 0 && (--_countdown2) == 0) {
+ _isWorking = false;
+ sendMessage(_asCoil, 0x2003, 0);
+ sendMessage(_asTarget, 0x2005, 0);
+ for (uint index = 0; index < 5; index++)
+ _asCrystals[index]->hide();
+ }
+
+ if (_countdown3 != 0 && (--_countdown3) == 0) {
+ if (_beamStatus == 5) {
+ sendMessage(_asTarget, 0x2004, 0);
+ if (_isSolved) {
+ _palette->fillBaseWhite(0, 256);
+ _palette->startFadeToPalette(18);
+ setGlobalVar(0x1860C990, 1);
+ _countdown1 = 48;
+ }
+ } else if (_beamStatus == 6) {
+ if (_isSolved)
+ _ssFlash->show();
+ } else {
+ _asCrystals[_beamStatus]->show();
+ }
+ _beamStatus++;
+ if (_beamStatus < 6)
+ _countdown3 = 2;
+ else if (_beamStatus < 7)
+ _countdown3 = 4;
+ }
+
+}
+
+void Scene2804::initCrystalColors() {
+ // TODO Maybe move this into the GameModule so all puzzle init code is together
+ if (getGlobalVar(0xDE2EC914) == 0) {
+ TextResource textResource(_vm);
+ const char *textStart, *textEnd;
+ textResource.load(0x46691611);
+ textStart = textResource.getString(0, textEnd);
+ for (uint index = 0; index < 5; index++) {
+ char colorLetter = (byte)textStart[index];
+ byte correctColorNum = 0, misalignedColorNum;
+ switch (colorLetter) {
+ case 'B':
+ correctColorNum = 4;
+ break;
+ case 'G':
+ correctColorNum = 3;
+ break;
+ case 'O':
+ correctColorNum = 1;
+ break;
+ case 'R':
+ correctColorNum = 0;
+ break;
+ case 'V':
+ correctColorNum = 5;
+ break;
+ case 'Y':
+ correctColorNum = 2;
+ break;
+ }
+ do {
+ misalignedColorNum = _vm->_rnd->getRandomNumber(6 - 1);
+ } while (misalignedColorNum == correctColorNum);
+ setSubVar(0xD4B2089C, index, correctColorNum);
+ setSubVar(0xE11A1929, index, misalignedColorNum);
+ }
+ setGlobalVar(0xDE2EC914, 1);
+ }
+}
+
Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -897,39 +1498,35 @@ static const int16 kClass490FrameIndices2[] = {
0, 4, 8, 11, 15, 17, 19, 0
};
-AsScene2808Dispenser::AsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex)
+SsScene2808Dispenser::SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex)
: StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _testTubeSetNum(testTubeSetNum),
_testTubeIndex(testTubeIndex) {
_spriteResource.load2(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex]);
createSurface(1500, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
-
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_deltaRect = _drawRect;
processDelta();
-
- SetUpdateHandler(&AsScene2808Dispenser::update);
- SetMessageHandler(&AsScene2808Dispenser::handleMessage);
-
+ SetUpdateHandler(&SsScene2808Dispenser::update);
+ SetMessageHandler(&SsScene2808Dispenser::handleMessage);
setVisible(false);
_needRefresh = true;
StaticSprite::update();
-
}
-void AsScene2808Dispenser::update() {
+void SsScene2808Dispenser::update() {
StaticSprite::update();
if (_countdown != 0 && (--_countdown) == 0) {
setVisible(false);
}
}
-uint32 AsScene2808Dispenser::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene2808Dispenser::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -940,7 +1537,7 @@ uint32 AsScene2808Dispenser::handleMessage(int messageNum, const MessageParam &p
return messageResult;
}
-void AsScene2808Dispenser::startCountdown(int index) {
+void SsScene2808Dispenser::startCountdown(int index) {
setVisible(true);
StaticSprite::update();
if (_testTubeSetNum == 0) {
@@ -950,8 +1547,8 @@ void AsScene2808Dispenser::startCountdown(int index) {
}
}
-AsScene2808TestTube::AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, AsScene2808Dispenser *dispenser)
- : AnimatedSprite(vm, 1100), _testTubeSetNum(testTubeSetNum), _testTubeIndex(testTubeIndex), _dispenser(dispenser),
+AsScene2808TestTube::AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, SsScene2808Dispenser *ssDispenser)
+ : AnimatedSprite(vm, 1100), _testTubeSetNum(testTubeSetNum), _testTubeIndex(testTubeIndex), _ssDispenser(ssDispenser),
_soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
_soundResource4(vm), _soundResource5(vm), _soundResource6(vm),
_soundResource7(vm), _soundResource8(vm), _soundResource9(vm), _fillLevel(0) {
@@ -1048,7 +1645,7 @@ void AsScene2808TestTube::fill() {
startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices2[_fillLevel], kClass490FrameIndices2[_fillLevel + 1]);
_newStickFrameIndex = kClass490FrameIndices2[_fillLevel + 1];
}
- _dispenser->startCountdown(_fillLevel);
+ _ssDispenser->startCountdown(_fillLevel);
_fillLevel++;
}
@@ -1213,9 +1810,9 @@ Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
insertSprite<AsScene2808LightEffect>(which);
for (int testTubeIndex = 0; testTubeIndex < 3; testTubeIndex++) {
- AsScene2808Dispenser *dispenser = insertSprite<AsScene2808Dispenser>(this, which, testTubeIndex);
- _vm->_collisionMan->addSprite(dispenser);
- _asTestTubes[testTubeIndex] = insertSprite<AsScene2808TestTube>(which, testTubeIndex, dispenser);
+ SsScene2808Dispenser *ssDispenser = insertSprite<SsScene2808Dispenser>(this, which, testTubeIndex);
+ _vm->_collisionMan->addSprite(ssDispenser);
+ _asTestTubes[testTubeIndex] = insertSprite<AsScene2808TestTube>(which, testTubeIndex, ssDispenser);
_vm->_collisionMan->addSprite(_asTestTubes[testTubeIndex]);
}
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 404f9ac..03e272f 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -93,6 +93,129 @@ protected:
void sub4601F0(bool flag);
};
+class Scene2804;
+
+class SsScene2804RedButton : public StaticSprite {
+public:
+ SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene);
+protected:
+ SoundResource _soundResource;
+ Scene2804 *_parentScene;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class SsScene2808LightCoil : public StaticSprite {
+public:
+ SsScene2808LightCoil(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class SsScene2808BeamCoilBody : public StaticSprite {
+public:
+ SsScene2808BeamCoilBody(NeverhoodEngine *vm);
+};
+
+class SsScene2808LightTarget : public StaticSprite {
+public:
+ SsScene2808LightTarget(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class SsScene2808Flash : public StaticSprite {
+public:
+ SsScene2808Flash(NeverhoodEngine *vm);
+ void show();
+protected:
+ SoundResource _soundResource;
+};
+
+class AsScene2804CrystalWaves : public AnimatedSprite {
+public:
+ AsScene2804CrystalWaves(NeverhoodEngine *vm, uint crystalIndex);
+ void show();
+ void hide();
+protected:
+ uint _crystalIndex;
+};
+
+class AsScene2804Crystal : public AnimatedSprite {
+public:
+ AsScene2804Crystal(NeverhoodEngine *vm, AsScene2804CrystalWaves *asCrystalWaves, uint crystalIndex);
+ void show();
+ void hide();
+ void activate();
+ int16 getColorNum() const { return _colorNum; }
+protected:
+ AsScene2804CrystalWaves *_asCrystalWaves;
+ uint _crystalIndex;
+ int16 _colorNum;
+ bool _isLightOn;
+ bool _isShowing;
+ SoundResource _soundResource;
+};
+
+class SsScene2804CrystalButton : public StaticSprite {
+public:
+ SsScene2804CrystalButton(NeverhoodEngine *vm, Scene2804 *parentScene, AsScene2804Crystal *asCrystal, uint crystalIndex);
+protected:
+ SoundResource _soundResource;
+ Scene2804 *_parentScene;
+ AsScene2804Crystal *_asCrystal;
+ uint _crystalIndex;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2804BeamCoil : public AnimatedSprite {
+public:
+ AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2808BeamCoilBody *ssBeamCoilBody);
+protected:
+ SoundResource _soundResource;
+ Scene *_parentScene;
+ SsScene2808BeamCoilBody *_ssBeamCoilBody;
+ int _countdown;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void show();
+ void hide();
+ void stBeaming();
+ uint32 hmBeaming(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2804BeamTarget : public AnimatedSprite {
+public:
+ AsScene2804BeamTarget(NeverhoodEngine *vm);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2804 : public Scene {
+public:
+ Scene2804(NeverhoodEngine *vm, Module *parentModule, int which);
+ bool isWorking() const { return _isWorking; }
+protected:
+ int _countdown1;
+ int _countdown2;
+ int _countdown3;
+ int _beamStatus;
+ bool _isSolved;
+ bool _isWorking;
+ Sprite *_ssRedButton;
+ Sprite *_asCoil;
+ Sprite *_asTarget;
+ SsScene2808Flash *_ssFlash;
+ AsScene2804Crystal *_asCrystals[5];
+ Sprite *_ssCrystalButtons[5];
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void initCrystalColors();
+};
+
class Scene2805 : public Scene {
public:
Scene2805(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -128,9 +251,9 @@ protected:
void findClosestPoint();
};
-class AsScene2808Dispenser : public StaticSprite {
+class SsScene2808Dispenser : public StaticSprite {
public:
- AsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex);
+ SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex);
void startCountdown(int index);
protected:
Scene *_parentScene;
@@ -142,12 +265,12 @@ protected:
class AsScene2808TestTube : public AnimatedSprite {
public:
- AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, AsScene2808Dispenser *dispenser);
+ AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, SsScene2808Dispenser *ssDispenser);
void fill();
void flush();
uint32 getFillLevel() const { return _fillLevel; }
protected:
- AsScene2808Dispenser *_dispenser;
+ SsScene2808Dispenser *_ssDispenser;
int _testTubeSetNum;
uint32 _fillLevel;
int _testTubeIndex;
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index 936ca39..c27bd86 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -139,6 +139,17 @@ void Palette::startFadeToPalette(int counter) {
_status = 2;
}
+void Palette::fillBaseWhite(int index, int count) {
+ if (index + count > 256)
+ count = 256 - index;
+ for (int i = 0; i < count; i++) {
+ _basePalette[(i + index) * 4 + 0] = 0xFF;
+ _basePalette[(i + index) * 4 + 1] = 0xFF;
+ _basePalette[(i + index) * 4 + 2] = 0xFF;
+ _basePalette[(i + index) * 4 + 3] = 0;
+ }
+}
+
void Palette::update() {
debug(2, "Palette::update() _status = %d", _status);
if (_status == 1) {
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 7966013..27f4816 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -49,6 +49,7 @@ public:
void startFadeToBlack(int counter);
void startFadeToWhite(int counter);
void startFadeToPalette(int counter);
+ void fillBaseWhite(int index, int count);
protected:
int _status;
byte *_palette;
Commit: 0962c594bd7edb2d232cdd9ff1f10c23f5c6944a
https://github.com/scummvm/scummvm/commit/0962c594bd7edb2d232cdd9ff1f10c23f5c6944a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Rename wrongly named stuff
Changed paths:
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 4757b4f..9cdc942 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -694,7 +694,7 @@ uint32 SsScene2804RedButton::handleMessage(int messageNum, const MessageParam &p
return messageResult;
}
-SsScene2808LightCoil::SsScene2808LightCoil(NeverhoodEngine *vm)
+SsScene2804LightCoil::SsScene2804LightCoil(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
_spriteResource.load2(0x8889B008);
@@ -708,10 +708,10 @@ SsScene2808LightCoil::SsScene2808LightCoil(NeverhoodEngine *vm)
setVisible(false);
_needRefresh = true;
StaticSprite::update();
- SetMessageHandler(&SsScene2808LightCoil::handleMessage);
+ SetMessageHandler(&SsScene2804LightCoil::handleMessage);
}
-uint32 SsScene2808LightCoil::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene2804LightCoil::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2002:
@@ -728,7 +728,7 @@ uint32 SsScene2808LightCoil::handleMessage(int messageNum, const MessageParam &p
return messageResult;
}
-SsScene2808LightTarget::SsScene2808LightTarget(NeverhoodEngine *vm)
+SsScene2804LightTarget::SsScene2804LightTarget(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
_spriteResource.load2(0x06092132);
@@ -742,10 +742,10 @@ SsScene2808LightTarget::SsScene2808LightTarget(NeverhoodEngine *vm)
setVisible(false);
_needRefresh = true;
StaticSprite::update();
- SetMessageHandler(&SsScene2808LightTarget::handleMessage);
+ SetMessageHandler(&SsScene2804LightTarget::handleMessage);
}
-uint32 SsScene2808LightTarget::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene2804LightTarget::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2004:
@@ -762,7 +762,7 @@ uint32 SsScene2808LightTarget::handleMessage(int messageNum, const MessageParam
return messageResult;
}
-SsScene2808Flash::SsScene2808Flash(NeverhoodEngine *vm)
+SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm)
: StaticSprite(vm, 900), _soundResource(vm) {
_spriteResource.load2(0x211003A0);
@@ -779,13 +779,13 @@ SsScene2808Flash::SsScene2808Flash(NeverhoodEngine *vm)
_soundResource.load(0xCB36BA54);
}
-void SsScene2808Flash::show() {
+void SsScene2804Flash::show() {
setVisible(true);
StaticSprite::update();
_soundResource.play();
}
-SsScene2808BeamCoilBody::SsScene2808BeamCoilBody(NeverhoodEngine *vm)
+SsScene2804BeamCoilBody::SsScene2804BeamCoilBody(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
_spriteResource.load2(0x9A816000);
@@ -979,7 +979,7 @@ uint32 SsScene2804CrystalButton::handleMessage(int messageNum, const MessagePara
return messageResult;
}
-AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2808BeamCoilBody *ssBeamCoilBody)
+AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2804BeamCoilBody *ssBeamCoilBody)
: AnimatedSprite(vm, 1400), _parentScene(parentScene), _ssBeamCoilBody(ssBeamCoilBody),
_countdown(0), _soundResource(vm) {
@@ -1101,18 +1101,18 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0xA1D03005);
addEntity(_palette);
insertMouse435(0x03001A15, 20, 620);
- _asCoil = insertSprite<SsScene2808LightCoil>();
- _asTarget = insertSprite<SsScene2808LightTarget>();
+ _asCoil = insertSprite<SsScene2804LightCoil>();
+ _asTarget = insertSprite<SsScene2804LightTarget>();
} else {
- SsScene2808BeamCoilBody *ssBeamCoilBody;
+ SsScene2804BeamCoilBody *ssBeamCoilBody;
setBackground(0x01C01414);
setPalette(0x01C01414);
addEntity(_palette);
insertMouse435(0x01410014, 20, 620);
- ssBeamCoilBody = insertSprite<SsScene2808BeamCoilBody>();
+ ssBeamCoilBody = insertSprite<SsScene2804BeamCoilBody>();
_asCoil = insertSprite<AsScene2804BeamCoil>(this, ssBeamCoilBody);
_asTarget = insertSprite<AsScene2804BeamTarget>();
- _ssFlash = insertSprite<SsScene2808Flash>();
+ _ssFlash = insertSprite<SsScene2804Flash>();
}
_ssRedButton = insertSprite<SsScene2804RedButton>(this);
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 03e272f..20bc4b4 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -106,28 +106,28 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class SsScene2808LightCoil : public StaticSprite {
+class SsScene2804LightCoil : public StaticSprite {
public:
- SsScene2808LightCoil(NeverhoodEngine *vm);
+ SsScene2804LightCoil(NeverhoodEngine *vm);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class SsScene2808BeamCoilBody : public StaticSprite {
+class SsScene2804BeamCoilBody : public StaticSprite {
public:
- SsScene2808BeamCoilBody(NeverhoodEngine *vm);
+ SsScene2804BeamCoilBody(NeverhoodEngine *vm);
};
-class SsScene2808LightTarget : public StaticSprite {
+class SsScene2804LightTarget : public StaticSprite {
public:
- SsScene2808LightTarget(NeverhoodEngine *vm);
+ SsScene2804LightTarget(NeverhoodEngine *vm);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class SsScene2808Flash : public StaticSprite {
+class SsScene2804Flash : public StaticSprite {
public:
- SsScene2808Flash(NeverhoodEngine *vm);
+ SsScene2804Flash(NeverhoodEngine *vm);
void show();
protected:
SoundResource _soundResource;
@@ -173,11 +173,11 @@ protected:
class AsScene2804BeamCoil : public AnimatedSprite {
public:
- AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2808BeamCoilBody *ssBeamCoilBody);
+ AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2804BeamCoilBody *ssBeamCoilBody);
protected:
SoundResource _soundResource;
Scene *_parentScene;
- SsScene2808BeamCoilBody *_ssBeamCoilBody;
+ SsScene2804BeamCoilBody *_ssBeamCoilBody;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -208,7 +208,7 @@ protected:
Sprite *_ssRedButton;
Sprite *_asCoil;
Sprite *_asTarget;
- SsScene2808Flash *_ssFlash;
+ SsScene2804Flash *_ssFlash;
AsScene2804Crystal *_asCrystals[5];
Sprite *_ssCrystalButtons[5];
void update();
Commit: 6f003399c85a38245b1e9f376f94625fad1ca581
https://github.com/scummvm/scummvm/commit/6f003399c85a38245b1e9f376f94625fad1ca581
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Implement Scene2807
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 813222c..18d7881 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 3;
+ _vm->gameState().sceneNum = 6;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 9cdc942..7367530 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -93,6 +93,10 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2806(_vm, this, which);
break;
+ case 6:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2807(_vm, this, which);
+ break;
case 7:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 0);
@@ -174,6 +178,9 @@ void Module2800::updateScene() {
createScene(2, 2);
}
break;
+ case 6:
+ createScene(2, 3);
+ break;
case 7:
createScene(5, _moduleResult);
break;
@@ -1451,6 +1458,55 @@ void Scene2806::findClosestPoint() {
}
+Scene2807::Scene2807(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2807::handleMessage);
+
+ if (getSubVar(0x0C601058, 0) == 1) {
+ insertStaticSprite(0x103021E2, 300);
+ } else if (getSubVar(0x0C601058, 0) == 2) {
+ insertStaticSprite(0x103022E2, 300);
+ } else if (getSubVar(0x0C601058, 0) == 3) {
+ insertStaticSprite(0x103024E2, 300);
+ }
+
+ if (getSubVar(0x0C601058, 1) == 1) {
+ insertStaticSprite(0x4800A52A, 200);
+ } else if (getSubVar(0x0C601058, 1) == 2) {
+ insertStaticSprite(0x4800A62A, 200);
+ } else if (getSubVar(0x0C601058, 1) == 3) {
+ insertStaticSprite(0x4800A02A, 200);
+ }
+
+ if (getSubVar(0x0C601058, 2) == 1) {
+ insertStaticSprite(0x31203430, 100);
+ } else if (getSubVar(0x0C601058, 2) == 2) {
+ insertStaticSprite(0x31203400, 100);
+ } else if (getSubVar(0x0C601058, 2) == 3) {
+ insertStaticSprite(0x31203460, 100);
+ }
+
+ _surfaceFlag = true;
+ setBackground(0x3E049A95);
+ setPalette(0x3E049A95);
+ insertMouse435(0x49A913E8, 20, 620);
+
+}
+
+uint32 Scene2807::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ leaveScene(0);
+ }
+ break;
+ }
+ return 0;
+}
+
static const uint32 kScene2808FileHashes1[] = {
0x90B0392,
0x90B0192
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 20bc4b4..720f011 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -251,6 +251,13 @@ protected:
void findClosestPoint();
};
+class Scene2807 : public Scene {
+public:
+ Scene2807(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class SsScene2808Dispenser : public StaticSprite {
public:
SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum, int testTubeIndex);
Commit: 745e46279ec4b3ccacd996d73a9df9dc19271e75
https://github.com/scummvm/scummvm/commit/745e46279ec4b3ccacd996d73a9df9dc19271e75
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:39-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2810
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 1c9c76a..a458ded 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -119,6 +119,9 @@ static const uint32 rectListOffsets[] = {
// Scene2805
1, 0x004AE318,
1, 0x004AE308,
+ // Scene2810
+ 1, 0x004AE810,
+ 1, 0x004AE800,
0, 0
};
@@ -423,6 +426,30 @@ static const uint32 messageListOffsets[] = {
5, 0x004B5BA8,
1, 0x004B5B88,
2, 0x004B5B98,
+ 1, 0x004AE438,
+ 3, 0x004AE440,
+ 3, 0x004AE738,
+ 1, 0x004AE6D8,
+ 2, 0x004AE6E8,
+ 1, 0x004AE6E0,
+ 2, 0x004AE428,
+ 2, 0x004AE418,
+ 1, 0x004AE410,
+ 4, 0x004AE458,
+ 5, 0x004AE4A8,
+ 5, 0x004AE4D0,
+ 5, 0x004AE4F8,
+ 5, 0x004AE520,
+ 5, 0x004AE548,
+ 5, 0x004AE570,
+ 5, 0x004AE598,
+ 5, 0x004AE5C0,
+ 5, 0x004AE5E8,
+ 5, 0x004AE610,
+ 5, 0x004AE638,
+ 5, 0x004AE660,
+ 5, 0x004AE688,
+ 2, 0x004AE750,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 7bc4609..f47b01d 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 99ebd0eca3b7b5ac808a43c356a47f37ebe0cadc
https://github.com/scummvm/scummvm/commit/99ebd0eca3b7b5ac808a43c356a47f37ebe0cadc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Implement Scene2810
- Also add globalvars.txt, a (currently almost empty) list of global game variables with descriptions
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 18d7881..2944428 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,8 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 6;
+ _vm->gameState().which = 11;
+ _vm->gameState().sceneNum = 9;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index de3844e..5ca5354 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2200,6 +2200,72 @@ void Klayman::walkAlongPathPoints() {
}
}
+void Klayman::sub4204C0() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x00AB8C10, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F920);
+ SetMessageHandler(&Klayman::handleMessage41E5F0);
+}
+
+void Klayman::spriteUpdate41F920() {
+ updateDeltaXY();
+ if (_y >= _destY) {
+ _y = _destY;
+ processDelta();
+ gotoNextStateExt();
+ }
+}
+
+uint32 Klayman::handleMessage41E5F0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0)
+ sendMessage(_attachedSprite, 0x4806, 0);
+ else if (param.asInteger() == 0x320AC306)
+ startAnimationByHash(0x00AB8C10, 0x01084280, 0);
+ else if (param.asInteger() == 0x4AB28209)
+ sendMessage(_attachedSprite, 0x482A, 0);
+ else if (param.asInteger() == 0x88001184)
+ sendMessage(_attachedSprite, 0x482B, 0);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub421230() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimationByHash(0x38445000, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::handleMessage41F1D0);
+}
+
+uint32 Klayman::handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x040C4C01)
+ _soundResource1.play(0x01E11140);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::sub421270() {
+ if (!stStartAction(AnimationCallback(&Klayman::sub421270))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x1B3D8216, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmTurnToUse);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ }
+}
+
//##############################################################################
// KmScene1001
@@ -5678,4 +5744,151 @@ void KmScene2809::sub458590() {
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
+
+KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ sub41CDE0(param.asPoint().x);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::sub421640);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x4818:
+ sub41CDE0(_dataResource.getPoint(param.asInteger()).x);
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1)
+ GotoState(&Klayman::sub421740);
+ else if (param.asInteger() == 0)
+ GotoState(&Klayman::sub421780);
+ else
+ GotoState(&Klayman::sub421700);
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::sub421840);
+ } else {
+ GotoState(&Klayman::sub4217C0);
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::sub421900);
+ } else {
+ GotoState(&Klayman::sub421880);
+ }
+ break;
+ case 0x4837:
+ sub41CE70();
+ break;
+ }
+ return 0;
+}
+
+KmScene2810::KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ NRect *clipRects, uint clipRectsCount)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // TODO ClipRects stuff
+
+}
+
+uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4803:
+ _destY = param.asInteger();
+ GotoState(&Klayman::sub4204C0);
+ break;
+ case 0x4804:
+ if (param.asInteger() == 3)
+ GotoState(&Klayman::sub421230);
+ break;
+ case 0x4812:
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x4818:
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else if (param.asInteger() == 5) {
+ GotoState(&Klayman::sub421270);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x4820:
+ sendMessage(_parentScene, 0x2000, 0);
+ GotoState(&Klayman::stContinueClimbLadderUp);
+ break;
+ case 0x4821:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4822:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x4823:
+ sendMessage(_parentScene, 0x2001, 0);
+ GotoState(&Klayman::stClimbLadderHalf);
+ break;
+ case 0x4824:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = _dataResource.getPoint(param.asInteger()).y;
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4825:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = _dataResource.getPoint(param.asInteger()).y;
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x4837:
+ sub41CE70();
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index d508f6c..f36e27a 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -158,6 +158,15 @@ public:
uint32 handleMessage41E750(int messageNum, const MessageParam ¶m, Entity *sender);
void sub4215E0();
void sub421550();
+
+ void sub4204C0();
+ void spriteUpdate41F920();
+ uint32 handleMessage41E5F0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub421230();
+ uint32 handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub421270();
protected:
Entity *_parentScene;
@@ -631,6 +640,21 @@ protected:
void sub458590();
};
+class KmScene2810Small : public Klayman {
+public:
+ KmScene2810Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
+class KmScene2810 : public Klayman {
+public:
+ KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ NRect *clipRects, uint clipRectsCount);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 7367530..9b514e7 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -36,6 +36,9 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Music18hList_add(0x64210814, 0xD2FA4D14);
setGlobalVar(0x28D8C940, 1);
+ createScene(9, 5);
+ return;
+
if (which < 0) {
createScene(_vm->gameState().sceneNum, which);
} else if (which == 2) {
@@ -105,6 +108,10 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2809(_vm, this, which);
break;
+ case 9:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2810(_vm, this, which);
+ break;
case 10:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 1);
@@ -185,11 +192,49 @@ void Module2800::updateScene() {
createScene(5, _moduleResult);
break;
case 8:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(10, 0);
- } else {
+ else
createScene(9, 4);
- }
+ break;
+ case 9:
+ debug("scene 9 _moduleResult = %d", _moduleResult);
+ if (_moduleResult == 1)
+ createScene(11, 0);
+ else if (_moduleResult == 2)
+ createScene(2, 0);
+ else if (_moduleResult == 3)
+ createScene(24, 0);
+ else if (_moduleResult == 4)
+ createScene(8, 0);
+ else if (_moduleResult == 6)
+ createScene(2, 6);
+ else if (_moduleResult == 11)
+ createScene(12, 0);
+ else if (_moduleResult == 12)
+ createScene(13, 0);
+ else if (_moduleResult == 13)
+ createScene(14, 0);
+ else if (_moduleResult == 14)
+ createScene(15, 0);
+ else if (_moduleResult == 15)
+ createScene(16, 0);
+ else if (_moduleResult == 16)
+ createScene(17, 0);
+ else if (_moduleResult == 17)
+ createScene(18, 0);
+ else if (_moduleResult == 18)
+ createScene(19, 0);
+ else if (_moduleResult == 19)
+ createScene(20, 0);
+ else if (_moduleResult == 20)
+ createScene(21, 0);
+ else if (_moduleResult == 21)
+ createScene(22, 0);
+ else if (_moduleResult == 22)
+ createScene(23, 0);
+ else
+ createScene(2, 4);
break;
case 10:
createScene(8, _moduleResult);
@@ -2095,4 +2140,248 @@ void Scene2809::findClosestPoint() {
}
+AsScene2810Rope::AsScene2810Rope(NeverhoodEngine *vm, Scene *parentScene, int16 x)
+ : AnimatedSprite(vm, 1100) {
+
+ createSurface(990, 68, 476);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2810Rope::handleMessage);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ _x = x;
+ _y = -276;
+ startAnimation(0x9D098C23, 35, 53);
+}
+
+uint32 AsScene2810Rope::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ startAnimation(0x9D098C23, 35, 53);
+ break;
+ case 0x482A:
+ sendMessage(_parentScene, 0x1022, 990);
+ break;
+ case 0x482B:
+ sendMessage(_parentScene, 0x1022, 1010);
+ break;
+ }
+ return messageResult;
+}
+
+Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *tempSprite;
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2810::handleMessage);
+
+ setBackground(0x26508804);
+ setPalette(0x26508804);
+ insertMouse433(0x0880026D);
+
+ _sprite6 = insertStaticSprite(0x03615227, 1100);
+ _sprite5 = insertStaticSprite(0xE059A224, 1100);
+
+ _clipRects[0].x1 = 0;
+ _clipRects[0].y1 = 0;
+ _clipRects[0].x2 = 640;
+ _clipRects[0].y2 = 400;
+ _clipRects[1].x1 = _sprite5->getDrawRect().x;
+ _clipRects[1].y1 = 400;
+ _clipRects[1].x2 = _sprite6->getDrawRect().x2();
+ _clipRects[1].y2 = 480;
+
+ if (getGlobalVar(0x1860C990)) {
+ _asTape = insertSprite<AsScene1201Tape>(this, 0, 900, 245, 429, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ } else {
+ _asTape = insertSprite<AsScene1201Tape>(this, 0, 1100, 245, 429, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ }
+
+ _sprite1 = insertStaticSprite(0x430001C4, 1200);
+
+ if (getGlobalVar(0x0018CA22)) {
+ setGlobalVar(0xCB45DE03, 1);
+ if (getGlobalVar(0x1860C990)) {
+ _sprite4 = insertStaticSprite(0x82653808, 100);
+ } else {
+ _sprite4 = insertStaticSprite(0x82653808, 1100);
+ }
+ _sprite4->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
+ }
+
+ if (which < 0) {
+ if (getGlobalVar(0x1860C990)) {
+ insertKlayman<KmScene2810Small>(240, 448);
+ _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
+ setMessageList(0x004AE438);
+ setRectList(0x004AE810);
+ _flag1 = false;
+ _vm->_collisionMan->removeSprite(_asTape);
+ } else {
+ insertKlayman<KmScene2810>(300, 424, _clipRects, 2);
+ setMessageList(0x004AE438);
+ if (getGlobalVar(0x0018CA22))
+ loadDataResource(0x84130112);
+ else
+ loadDataResource(0x84500132);
+ tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
+ _clipRects[0].y1 = _sprite1->getDrawRect().y;
+ _flag1 = false;
+ }
+ } else if (which == 1) {
+ insertKlayman<KmScene2810>(186, 64, _clipRects, 2);
+ setMessageList(0x004AE440);
+ loadDataResource(0x84130112);
+ tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
+ _flag1 = true;
+ _clipRects[0].y1 = _sprite1->getDrawRect().y;
+ } else if (which == 5) {
+ insertStaticSprite(0xC3007EA0, 100);
+ _sprite2 = insertStaticSprite(0x02780936, 1100);
+ _sprite3 = insertStaticSprite(0x1CA02160, 1100);
+ _asRope = insertSprite<AsScene2810Rope>(this, 384);
+ insertKlayman<KmScene2810>(384, 0, _clipRects, 0);
+ sendEntityMessage(_klayman, 0x1014, _asRope);
+ setMessageList(0x004AE738);
+ _klayman->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
+ _asRope->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
+ // TODO Sound1ChList_addSoundResource(0x84400112, 0xC874EE6C, true);
+ // TODO Sound1ChList_playLooping(0xC874EE6C);
+ // TODO Sound1ChList_setVolume(0xC874EE6C, 50);
+ _flag1 = false;
+ } else if ((which >= 11 && which <= 14) || (which >= 19 && which <= 22) || which == 3) {
+ if (getGlobalVar(0x1860C990)) {
+ insertKlayman<KmScene2810Small>((int16)getGlobalVar(0x00D30138), 448);
+ if (getGlobalVar(0xC0418A02))
+ _klayman->setDoDeltaX(1);
+ _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
+ setMessageList(0x004AE6D8);
+ setRectList(0x004AE810);
+ _flag1 = false;
+ _vm->_collisionMan->removeSprite(_asTape);
+ } else {
+ sub406650();
+ if (getGlobalVar(0x00188211)) {
+ setMessageList(0x004AE6E8);
+ setGlobalVar(0x00188211, 0);
+ _flag1 = false;
+ } else {
+ setMessageList(0x004AE6D8);
+ _flag1 = false;
+ }
+ }
+ } else if (which >= 15 && which <= 18) {
+ sub406650();
+ setMessageList(0x004AE6E0);
+ _flag1 = false;
+ } else if (which == 4) {
+ if (getGlobalVar(0x1860C990)) {
+ insertKlayman<KmScene2810Small>(473, 448);
+ _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
+ setMessageList(0x004AE428);
+ setRectList(0x004AE810);
+ _flag1 = false;
+ _vm->_collisionMan->removeSprite(_asTape);
+ } else {
+ insertKlayman<KmScene2810>(450, 424, _clipRects, 2);
+ setMessageList(0x004AE418);
+ if (getGlobalVar(0x0018CA22))
+ loadDataResource(0x84130112);
+ else
+ loadDataResource(0x84500132);
+ tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
+ _clipRects[0].y1 = _sprite1->getDrawRect().y;
+ _flag1 = false;
+ }
+ } else {
+ insertKlayman<KmScene2810Small>(120, 448);
+ _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
+ setMessageList(0x004AE410);
+ setRectList(0x004AE810);
+ _flag1 = false;
+ _vm->_collisionMan->removeSprite(_asTape);
+ }
+
+}
+
+void Scene2810::sub406650() {
+ Sprite *tempSprite;
+
+ if (getGlobalVar(0x00188211)) {
+ insertKlayman<KmScene2810>(430, 424, _clipRects, 2);
+ _klayman->setDoDeltaX(1);
+ } else {
+ insertKlayman<KmScene2810>((int16)getGlobalVar(0x00D30138), 424, _clipRects, 2);
+ if (getGlobalVar(0xC0418A02))
+ _klayman->setDoDeltaX(1);
+ }
+ if (getGlobalVar(0x0018CA22))
+ loadDataResource(0x84130112);
+ else
+ loadDataResource(0x84500132);
+ tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
+ _clipRects[0].y1 = _sprite1->getDrawRect().y;
+}
+
+uint32 Scene2810::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xE574F14C)
+ setMessageList(0x004AE458);
+ else if (param.asInteger() == 0x7214A05C || param.asInteger() == 0x2905E574)
+ setMessageList(0x004AE4A8);
+ else if (param.asInteger() == 0x7274E24C || param.asInteger() == 0x2D24E572)
+ setMessageList(0x004AE4D0);
+ else if (param.asInteger() == 0x4A07A040 || param.asInteger() == 0x190426F5)
+ setMessageList(0x004AE4F8);
+ else if (param.asInteger() == 0x6604200C || param.asInteger() == 0x2100E435)
+ setMessageList(0x004AE520);
+ else if (param.asInteger() == 0xE216A05C || param.asInteger() == 0x0905EC74)
+ setMessageList(0x004AE548);
+ else if (param.asInteger() == 0x721DA05C || param.asInteger() == 0xB905E574)
+ setMessageList(0x004AE570);
+ else if (param.asInteger() == 0x6214E09C || param.asInteger() == 0x2D09E474)
+ setMessageList(0x004AE598);
+ else if (param.asInteger() == 0x6276A04C || param.asInteger() == 0x0904E472)
+ setMessageList(0x004AE5C0);
+ else if (param.asInteger() == 0x6E14A00C || param.asInteger() == 0x2900E4B4)
+ setMessageList(0x004AE5E8);
+ else if (param.asInteger() == 0x6014A04D || param.asInteger() == 0x2904F454)
+ setMessageList(0x004AE610);
+ else if (param.asInteger() == 0x6215A3C4 || param.asInteger() == 0x393C6474)
+ setMessageList(0x004AE638);
+ else if (param.asInteger() == 0x6A54E24D || param.asInteger() == 0x2D24F4F0)
+ setMessageList(0x004AE660);
+ else if (param.asInteger() == 0x2064294C || param.asInteger() == 0x2194E053)
+ setMessageList(0x004AE688);
+ break;
+ case 0x2000:
+ setRectList(0x004AE800);
+ _flag1 = true;
+ break;
+ case 0x2001:
+ if (getGlobalVar(0x0018CA22))
+ loadDataResource(0x84130112);
+ else
+ loadDataResource(0x84500132);
+ _flag1 = false;
+ break;
+ case 0x4826:
+ if (sender == _asTape && getGlobalVar(0x1860C990) == 0 && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _asTape);
+ setMessageList(0x004AE750);
+ }
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 720f011..f4acda3 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -368,6 +368,32 @@ protected:
void findClosestPoint();
};
+class AsScene2810Rope : public AnimatedSprite {
+public:
+ AsScene2810Rope(NeverhoodEngine *vm, Scene *parentScene, int16 x);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2810 : public Scene {
+public:
+ Scene2810(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
+ Sprite *_asRope;
+ Sprite *_sprite4;
+ Sprite *_asTape;
+ Sprite *_sprite5;
+ Sprite *_sprite6;
+ bool _flag1;
+ NRect _clipRects[2];
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub406650();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2800_H */
Commit: 0388fb496d507afc2262c32c9e6f9be1f384443b
https://github.com/scummvm/scummvm/commit/0388fb496d507afc2262c32c9e6f9be1f384443b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Implement Scene2822
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 2944428..e9a5838 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,8 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().which = 11;
- _vm->gameState().sceneNum = 9;
+ _vm->gameState().sceneNum = 21;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 9b514e7..b28babe 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -25,6 +25,7 @@
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
#include "neverhood/module1700.h"
+#include "neverhood/diskplayerscene.h"
namespace Neverhood {
@@ -36,9 +37,6 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Music18hList_add(0x64210814, 0xD2FA4D14);
setGlobalVar(0x28D8C940, 1);
- createScene(9, 5);
- return;
-
if (which < 0) {
createScene(_vm->gameState().sceneNum, which);
} else if (which == 2) {
@@ -116,6 +114,58 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 1);
break;
+ case 12:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x0000A245, 0x0A241008);
+ break;
+ case 13:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x81C60635, 0x60631814);
+ break;
+ case 14:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0xCA811204, 0x11200CA0);
+ break;
+ case 15:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x2D438A00, 0x38A042DC);
+ break;
+ case 16:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x0A806204, 0x062000A0);
+ break;
+ case 17:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x010F9284, 0xF9280018);
+ break;
+ case 18:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x0100022B, 0x0022F018);
+ break;
+ case 19:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x10866205, 0x66201100);
+ break;
+ case 20:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x01C58000, 0x58004014);
+ break;
+ case 21:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2822(_vm, this, which);
+ break;
+ case 22:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x9408121E, 0x8121A948);
+ break;
+ case 23:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x048C0600, 0xC0604040);
+ break;
+ case 24:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Class152(_vm, this, 0x04270A94, 0x70A9004A);
+ break;
case 25:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
if (getGlobalVar(0x190A1D18))
@@ -123,6 +173,10 @@ void Module2800::createScene(int sceneNum, int which) {
else
_childObject = new Class152(_vm, this, 0x08611204, 0x1120008E);
break;
+ case 26:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new DiskplayerScene(_vm, this, 4);
+ break;
//
case 1001:
break;
@@ -239,9 +293,51 @@ void Module2800::updateScene() {
case 10:
createScene(8, _moduleResult);
break;
+ case 12:
+ createScene(9, 11);
+ break;
+ case 13:
+ createScene(9, 12);
+ break;
+ case 14:
+ createScene(9, 13);
+ break;
+ case 15:
+ createScene(9, 14);
+ break;
+ case 16:
+ createScene(9, 15);
+ break;
+ case 17:
+ createScene(9, 16);
+ break;
+ case 18:
+ createScene(9, 17);
+ break;
+ case 19:
+ createScene(9, 18);
+ break;
+ case 20:
+ createScene(9, 19);
+ break;
+ case 21:
+ createScene(9, 20);
+ break;
+ case 22:
+ createScene(9, 21);
+ break;
+ case 23:
+ createScene(9, 22);
+ break;
+ case 24:
+ createScene(9, 3);
+ break;
case 25:
createScene(2, 5);
break;
+ case 26:
+ createScene(11, 2);
+ break;
//
case 1001:
break;
@@ -2310,6 +2406,12 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
}
+Scene2810::~Scene2810() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(0x00D30138, _klayman->getX());
+ // TODO Sound1ChList_sub_407AF0(0x84400112);
+}
+
void Scene2810::sub406650() {
Sprite *tempSprite;
@@ -2384,4 +2486,78 @@ uint32 Scene2810::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _countdown(0), _scrollIndex(0),
+ _soundResource1(vm), _soundResource2(vm), _soundResource3(vm) {
+
+ SetMessageHandler(&Scene2822::handleMessage);
+ SetUpdateHandler(&Scene2822::update);
+ _background = new Background(_vm, 0xD542022E, 0, 0);
+ addBackground(_background);
+ _background->getSurface()->getDrawRect().y = -10;
+ setPalette(0xD542022E);
+ insertMouse435(0x0028D089, 20, 620);
+ _ssButton = insertStaticSprite(0x1A4D4120, 1100);
+ _ssButton->setVisible(false);
+ _soundResource3.load(0x19044E72);
+}
+
+void Scene2822::update() {
+
+ static const int16 kScene2822BackgroundYPositions[] = {
+ 0, -20, -5, -15, -8, -12, -9, -11, -10, 0
+ };
+
+ Scene::update();
+
+ if (_countdown != 0) {
+ if ((--_countdown) == 0) {
+ if (_countdownStatus == 0) {
+ _ssButton->setVisible(false);
+ _countdownStatus = 1;
+ _countdown = 48;
+ } else if (_countdownStatus == 1) {
+ _soundResource1.play(0x1384CB60);
+ _countdownStatus = 2;
+ _countdown = 12;
+ } else if (_countdownStatus == 2 && getGlobalVar(0x00188211)) {
+ leaveScene(0);
+ }
+ } else if (_countdownStatus == 2 && getGlobalVar(0x00188211)) {
+ if (_scrollIndex < 9) {
+ _background->getSurface()->getDrawRect().y = kScene2822BackgroundYPositions[_scrollIndex];
+ _scrollIndex++;
+ } else {
+ _background->getSurface()->getDrawRect().y = -10;
+ }
+ }
+ }
+
+}
+
+uint32 Scene2822::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ leaveScene(0);
+ } else if (param.asPoint().x >= 257 && param.asPoint().y >= 235 &&
+ param.asPoint().x <= 293 && param.asPoint().y <= 273) {
+ _ssButton->setVisible(true);
+ _countdownStatus = 0;
+ _countdown = 12;
+ _soundResource2.play(0x44061000);
+ if (getGlobalVar(0x0018CA22) == 0) {
+ setGlobalVar(0x0018CA22, 1);
+ setGlobalVar(0x00188211, 1);
+ SetMessageHandler(NULL);
+ _soundResource3.play();
+ _mouseCursor->setVisible(false);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index f4acda3..4a7224d 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -379,6 +379,7 @@ protected:
class Scene2810 : public Scene {
public:
Scene2810(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene2810();
protected:
Sprite *_sprite1;
Sprite *_sprite2;
@@ -394,6 +395,21 @@ protected:
void sub406650();
};
+class Scene2822 : public Scene {
+public:
+ Scene2822(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_ssButton;
+ int _scrollIndex;
+ int _countdown;
+ int _countdownStatus;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2800_H */
Commit: 93a074e9ad4da61265ce7692d2785958fceaae68
https://github.com/scummvm/scummvm/commit/93a074e9ad4da61265ce7692d2785958fceaae68
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Implement Scene2812
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e9a5838..3208283 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 21;
+ _vm->gameState().sceneNum = 11;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 5ca5354..3e8c007 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2266,6 +2266,18 @@ void Klayman::sub421270() {
}
}
+void Klayman::sub420460() {
+ if (!stStartAction(AnimationCallback(&Klayman::sub420460))) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x00AB8C10, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41E5F0);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F920);
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+}
+
//##############################################################################
// KmScene1001
@@ -5891,4 +5903,96 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene2812::KmScene2812(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4805:
+ _destY = param.asInteger();
+ debug("_destY = %d", _destY);
+ GotoState(&Klayman::sub420460);
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2)
+ GotoState(&Klayman::stPickUpNeedle);
+ else if (param.asInteger() == 1)
+ GotoState(&Klayman::sub41FFF0);
+ else
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481A:
+ GotoState(&Klayman::stInsertDisk);
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0)
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ else
+ sub41CCE0(param.asPoint().x);
+ break;
+ case 0x481D:
+ GotoState(&Klayman::stTurnToUse);
+ break;
+ case 0x481E:
+ GotoState(&Klayman::stReturnFromUse);
+ break;
+ case 0x4820:
+ sendMessage(_parentScene, 0x2001, 0);
+ GotoState(&Klayman::stContinueClimbLadderUp);
+ break;
+ case 0x4821:
+ sendMessage(_parentScene, 0x2001, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4822:
+ sendMessage(_parentScene, 0x2001, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x4823:
+ sendMessage(_parentScene, 0x2002, 0);
+ GotoState(&Klayman::stClimbLadderHalf);
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWalkToFrontNoStep);
+ } else {
+ GotoState(&Klayman::stWalkToFront);
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnToFront);
+ } else {
+ GotoState(&Klayman::stTurnToBack);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index f36e27a..18791ff 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -167,6 +167,7 @@ public:
uint32 handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender);
void sub421270();
+ void sub420460();
protected:
Entity *_parentScene;
@@ -655,6 +656,13 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2812 : public Klayman {
+public:
+ KmScene2812(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index b28babe..2bf023c 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -25,6 +25,7 @@
#include "neverhood/module1000.h"
#include "neverhood/module1200.h"
#include "neverhood/module1700.h"
+#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
namespace Neverhood {
@@ -114,6 +115,10 @@ void Module2800::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 1);
break;
+ case 11:
+ // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ _childObject = new Scene2812(_vm, this, which);
+ break;
case 12:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x0000A245, 0x0A241008);
@@ -293,6 +298,16 @@ void Module2800::updateScene() {
case 10:
createScene(8, _moduleResult);
break;
+ case 11:
+ if (_moduleResult == 1)
+ createScene(4, 0);
+ else if (_moduleResult == 2)
+ createScene(26, 0);
+ else if (_moduleResult == 3)
+ createScene(9, 5);
+ else
+ createScene(9, 1);
+ break;
case 12:
createScene(9, 11);
break;
@@ -2486,6 +2501,260 @@ uint32 Scene2810::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+AsScene2812Winch::AsScene2812Winch(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100) {
+
+ createSurface1(0x20DA08A0, 1200);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2812Winch::handleMessage);
+ setVisible(false);
+ _x = 280;
+ _y = 184;
+}
+
+AsScene2812Winch::~AsScene2812Winch() {
+ // TODO Sound1ChList_sub_407AF0(0x00B000E2);
+}
+
+uint32 AsScene2812Winch::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ startAnimation(0x20DA08A0, 0, -1);
+ setVisible(true);
+ // TODO Sound1ChList_addSoundResource(0x00B000E2, 0xC874EE6C, true);
+ // TODO Sound1ChList_playLooping(0xC874EE6C);
+ break;
+ case 0x3002:
+ startAnimation(0x20DA08A0, 7, -1);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2812Rope::AsScene2812Rope(NeverhoodEngine *vm, Scene *parentScene)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
+
+ createSurface(990, 68, 476);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2812Rope::handleMessage);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ startAnimation(0xAE080551, 0, -1);
+ _x = 334;
+ _y = 201;
+}
+
+uint32 AsScene2812Rope::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x4806:
+ setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
+ sub413E00();
+ break;
+ case 0x482A:
+ sendMessage(_parentScene, 0x1022, 990);
+ break;
+ case 0x482B:
+ sendMessage(_parentScene, 0x1022, 1010);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene2812Rope::handleMessage413DC0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2812Rope::sub413E00() {
+ sendMessage(_parentScene, 0x4806, 0);
+ startAnimation(0x9D098C23, 0, -1);
+ SetMessageHandler(&AsScene2812Rope::handleMessage413DC0);
+}
+
+AsScene2812TrapDoor::AsScene2812TrapDoor(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 0x805D0029, 100, 320, 240), _soundResource(vm) {
+
+ SetMessageHandler(&AsScene2812TrapDoor::handleMessage);
+ _newStickFrameIndex = 0;
+}
+
+uint32 AsScene2812TrapDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ startAnimation(0x805D0029, 0, -1);
+ _soundResource.play(0xEA005F40);
+ _newStickFrameIndex = -2;
+ break;
+ }
+ return messageResult;
+}
+
+Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _palStatus(0) {
+
+ if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
+ setGlobalVar(0x13382860, 3);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2812::handleMessage);
+ SetUpdateHandler(&Scene2812::update);
+
+ setRectList(0x004AF700);
+
+ setBackground(0x03600606);
+ setPalette(0x03600606);
+ addEntity(_palette);
+ _palette->addBasePalette(0x03600606, 0, 256, 0);
+
+ _sprite1 = insertStaticSprite(0x0C06C860, 1100);
+ insertMouse433(0x0060203E);
+
+ if (getGlobalVar(0x13382860) == 3) {
+ _class545 = insertSprite<Class545>(this, 2, 1100, 474, 437);
+ _vm->_collisionMan->addSprite(_class545);
+ }
+
+ _class606 = insertSprite<Class606>(this, 6, 1100, 513, 437, 0xA1361863);
+ _vm->_collisionMan->addSprite(_class606);
+
+ _asWinch = insertSprite<AsScene2812Winch>();
+ _asTrapDoor = insertSprite<AsScene2812TrapDoor>();
+ _asRope = insertSprite<AsScene2812Rope>(this);
+
+ _sprite2 = insertStaticSprite(0x08478078, 1100);
+ _sprite3 = insertStaticSprite(0x2203B821, 1100);
+ _sprite4 = insertStaticSprite(0x08592134, 1100);
+
+ if (which < 0) {
+ _flag1 = false;
+ insertKlayman<KmScene2812>(272, 432);
+ setMessageList(0x004AF560);
+ _sprite1->setVisible(false);
+ _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
+ } else if (which == 1) {
+ _flag1 = false;
+ insertKlayman<KmScene2812>(338, 398);
+ setMessageList(0x004AF588);
+ setPalStatus1(1);
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2());
+ } else if (which == 2) {
+ _flag1 = false;
+ if (getGlobalVar(0xC0418A02)) {
+ insertKlayman<KmScene2812>(554, 432);
+ _klayman->setDoDeltaX(1);
+ } else {
+ insertKlayman<KmScene2812>(394, 432);
+ }
+ setMessageList(0x004AF5F0);
+ _sprite1->setVisible(false);
+ _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
+ } else {
+ _flag1 = true;
+ insertKlayman<KmScene2812>(150, 582);
+ setMessageList(0x004AF568);
+ setPalStatus2(1);
+ _sprite1->setVisible(false);
+ _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
+ }
+
+ _asRope->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
+
+}
+
+void Scene2812::update() {
+ if (_klayman->getX() < 220)
+ setPalStatus2(0);
+ else if (_klayman->getX() < 240)
+ setPalStatus0(0);
+ Scene::update();
+}
+
+uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x0004269B)
+ sendEntityMessage(_klayman, 0x1014, _asRope);
+ break;
+ case 0x2001:
+ _flag1 = true;
+ setRectList(0x004AF710);
+ _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite4->getDrawRect().y2());
+ break;
+ case 0x2002:
+ _flag1 = false;
+ setRectList(0x004AF700);
+ _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
+ break;
+ case 0x4806:
+ sendMessage(_asWinch, 0x2000, 0);
+ sendMessage(_asTrapDoor, 0x2000, 0);
+ break;
+ case 0x4826:
+ if (sender == _class606 && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _class606);
+ setMessageList(0x004AF658);
+ } else if (sender == _class545 && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _class545);
+ setMessageList(0x004AF668);
+ }
+ break;
+ case 0x482A:
+ setPalStatus1(0);
+ _sprite1->setVisible(true);
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2());
+ break;
+ case 0x482B:
+ setPalStatus0(false);
+ _sprite1->setVisible(false);
+ _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2812::setPalStatus0(int fadeTime) {
+ if (_palStatus != 0) {
+ _palStatus = 0;
+ setPalStatus(fadeTime);
+ }
+}
+
+void Scene2812::setPalStatus1(int fadeTime) {
+ if (_palStatus != 1) {
+ _palStatus = 1;
+ setPalStatus(fadeTime);
+ }
+}
+
+void Scene2812::setPalStatus2(int fadeTime) {
+ if (_palStatus != 2) {
+ _palStatus = 2;
+ setPalStatus(fadeTime);
+ }
+}
+
+void Scene2812::setPalStatus(int fadeTime) {
+ if (_palStatus == 0)
+ _palette->addBasePalette(0x05D30F11, 0, 64, 0);
+ else if (_palStatus == 1)
+ _palette->addBasePalette(0x92CA2C9B, 0, 64, 0);
+ else if (_palStatus == 2)
+ _palette->addBasePalette(0x381F92C5, 0, 64, 0);
+ if (fadeTime > 0) {
+ _palette->startFadeToPalette(0);
+ } else {
+ _palette->startFadeToPalette(12);
+ }
+}
+
Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown(0), _scrollIndex(0),
_soundResource1(vm), _soundResource2(vm), _soundResource3(vm) {
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 4a7224d..9daf820 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -395,6 +395,55 @@ protected:
void sub406650();
};
+class AsScene2812Winch : public AnimatedSprite {
+public:
+ AsScene2812Winch(NeverhoodEngine *vm);
+ virtual ~AsScene2812Winch();
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2812Rope : public AnimatedSprite {
+public:
+ AsScene2812Rope(NeverhoodEngine *vm, Scene *parentScene);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage413DC0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub413E00();
+};
+
+class AsScene2812TrapDoor : public AnimatedSprite {
+public:
+ AsScene2812TrapDoor(NeverhoodEngine *vm);
+protected:
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2812 : public Scene {
+public:
+ Scene2812(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_asWinch;
+ Sprite *_asTrapDoor;
+ Sprite *_asRope;
+ Sprite *_sprite3;
+ Sprite *_sprite2;
+ Sprite *_sprite4;
+ Sprite *_class606;
+ Sprite *_class545;
+ Sprite *_sprite1;
+ bool _flag1;
+ int _palStatus;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void setPalStatus0(int fadeTime);
+ void setPalStatus1(int fadeTime);
+ void setPalStatus2(int fadeTime);
+ void setPalStatus(int fadeTime);
+};
+
class Scene2822 : public Scene {
public:
Scene2822(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: c27e930861cea513f3d966e610c336dbdb34ea6d
https://github.com/scummvm/scummvm/commit/c27e930861cea513f3d966e610c336dbdb34ea6d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2812
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index a458ded..f8a4497 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -122,6 +122,9 @@ static const uint32 rectListOffsets[] = {
// Scene2810
1, 0x004AE810,
1, 0x004AE800,
+ // Scene2812
+ 1, 0x004AF700,
+ 1, 0x004AF710,
0, 0
};
@@ -450,6 +453,13 @@ static const uint32 messageListOffsets[] = {
5, 0x004AE660,
5, 0x004AE688,
2, 0x004AE750,
+ // Scene2812
+ 1, 0x004AF560,
+ 1, 0x004AF588,
+ 1, 0x004AF5F0,
+ 4, 0x004AF568,
+ 2, 0x004AF658,
+ 2, 0x004AF668,
0, 0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index f47b01d..9fbfcfa 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 43362dfbd1354220ffdf1fba8a04286a7037c45f
https://github.com/scummvm/scummvm/commit/43362dfbd1354220ffdf1fba8a04286a7037c45f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Implement Scene2803
- Also add "empty" constructor to DirtyBackground (used by that scene)
Changed paths:
engines/neverhood/background.cpp
engines/neverhood/background.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/background.cpp b/engines/neverhood/background.cpp
index e235eaa..03c531f 100644
--- a/engines/neverhood/background.cpp
+++ b/engines/neverhood/background.cpp
@@ -59,6 +59,11 @@ void Background::load(uint32 fileHash) {
// DirtyBackground
+DirtyBackground::DirtyBackground(NeverhoodEngine *vm, int objectPriority)
+ : Background(vm, objectPriority) {
+ // Empty
+}
+
DirtyBackground::DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority)
: Background(vm, objectPriority) {
diff --git a/engines/neverhood/background.h b/engines/neverhood/background.h
index 8ac3581..d8f624b 100644
--- a/engines/neverhood/background.h
+++ b/engines/neverhood/background.h
@@ -46,6 +46,7 @@ protected:
class DirtyBackground : public Background {
public:
+ DirtyBackground(NeverhoodEngine *vm, int objectPriority);
DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority);
DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority);
void createSurface(int surfacePriority, int16 width, int16 height);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 3e8c007..f69686a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2278,6 +2278,27 @@ void Klayman::sub420460() {
}
}
+void Klayman::sub420500() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimationByHash(0x00AB8C10, 0x320AC306, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::handleMessage41F0E0);
+ NextState(&Klayman::stReleaseRing);
+}
+
+uint32 Klayman::handleMessage41F0E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x320AC306)
+ _soundResource1.play(0x5860C640);
+ break;
+ }
+ return messageResult;
+}
+
//##############################################################################
// KmScene1001
@@ -5266,6 +5287,69 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
+KmScene2803::KmScene2803(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ // TODO ClipRects stuff
+ _dataResource.load(0x00900849);
+}
+
+uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4803:
+ _destY = param.asInteger();
+ GotoState(&Klayman::sub4204C0);
+ break;
+ case 0x4804:
+ if (param.asInteger() == 3)
+ GotoState(&Klayman::sub421230);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::sub420F60);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x4818:
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ case 0x481D:
+ GotoState(&Klayman::stTurnToUse);
+ break;
+ case 0x481E:
+ GotoState(&Klayman::stReturnFromUse);
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else {
+ GotoState(&Klayman::stWonderAboutHalf);
+ }
+ break;
+ case 0x482E:
+ GotoState(&Klayman::stWalkToFront);
+ break;
+ case 0x482F:
+ GotoState(&Klayman::stTurnToBack);
+ break;
+ case 0x4834:
+ GotoState(&Klayman::stStepOver);
+ break;
+ case 0x4838:
+ GotoState(&Klayman::sub420500);
+ break;
+ }
+ return 0;
+}
+
KmScene2803b::KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _soundResource(vm) {
@@ -5807,8 +5891,7 @@ uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶
return 0;
}
-KmScene2810::KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
- NRect *clipRects, uint clipRectsCount)
+KmScene2810::KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// TODO ClipRects stuff
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 18791ff..6cfb0fc 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -168,6 +168,9 @@ public:
void sub421270();
void sub420460();
+
+ void sub420500();
+ uint32 handleMessage41F0E0(int messageNum, const MessageParam ¶m, Entity *sender);
protected:
Entity *_parentScene;
@@ -582,6 +585,13 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2803 : public Klayman {
+public:
+ KmScene2803(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene2803b : public Klayman {
public:
KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 2bf023c..97fb18f 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -77,12 +77,11 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 2:
// TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
- setGlobalVar(0x1860C990,1);//DEBUG
+ //setGlobalVar(0x1860C990,1);//DEBUG
if (getGlobalVar(0x1860C990))
_childObject = new Scene2803b(_vm, this, which);
- else {
- // TODO _childObject = new Scene2803(_vm, this, which);
- }
+ else
+ _childObject = new Scene2803(_vm, this, which);
break;
case 3:
_childObject = new Scene2804(_vm, this, which);
@@ -477,7 +476,7 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-Class488::Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
+AsScene2803LightCord::AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
_flag1(false), _flag2(false), _soundResource(vm) {
@@ -489,7 +488,7 @@ Class488::Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, ui
sub4343C0();
}
-uint32 Class488::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2803LightCord::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -511,7 +510,7 @@ uint32 Class488::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-uint32 Class488::handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2803LightCord::handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -521,21 +520,21 @@ uint32 Class488::handleMessage434340(int messageNum, const MessageParam ¶m,
return messageResult;
}
-void Class488::sub434380() {
+void AsScene2803LightCord::sub434380() {
_flag2 = false;
_flag1 = true;
startAnimation(_fileHash2, 0, -1);
- SetMessageHandler(&Class488::handleMessage434340);
- NextState(&Class488::sub4343C0);
+ SetMessageHandler(&AsScene2803LightCord::handleMessage434340);
+ NextState(&AsScene2803LightCord::sub4343C0);
}
-void Class488::sub4343C0() {
+void AsScene2803LightCord::sub4343C0() {
_flag1 = false;
startAnimation(_fileHash1, 0, -1);
- SetMessageHandler(&Class488::handleMessage);
+ SetMessageHandler(&AsScene2803LightCord::handleMessage);
}
-void Class488::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
+void AsScene2803LightCord::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHash1 = fileHash1;
_fileHash2 = fileHash2;
if (_flag1) {
@@ -546,6 +545,381 @@ void Class488::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
}
}
+AsScene2803TestTubeOne::AsScene2803TestTubeOne(NeverhoodEngine *vm, uint32 fileHash1, uint32 fileHash2)
+ : AnimatedSprite(vm, 1200), _fileHash1(fileHash1), _fileHash2(fileHash2) {
+
+ createSurface1(fileHash1, 100);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2803TestTubeOne::handleMessage);
+ _x = 529;
+ _y = 326;
+}
+
+uint32 AsScene2803TestTubeOne::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ if (param.asInteger())
+ startAnimation(_fileHash2, 0, -1);
+ else
+ startAnimation(_fileHash1, 0, -1);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2803Rope::AsScene2803Rope(NeverhoodEngine *vm, Scene *parentScene, int16 x)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
+
+ createSurface(990, 68, 476);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&AsScene2803Rope::handleMessage);
+ startAnimation(0x9D098C23, 35, 53);
+ NextState(&AsScene2803Rope::sub476A70);
+ _x = x;
+ _y = -276;
+}
+
+uint32 AsScene2803Rope::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ startAnimation(0x9D098C23, 50, -1);
+ SetMessageHandler(&AsScene2803Rope::handleMessage4769E0);
+ break;
+ case 0x482A:
+ sendMessage(_parentScene, 0x1022, 990);
+ break;
+ case 0x482B:
+ sendMessage(_parentScene, 0x1022, 1010);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 AsScene2803Rope::handleMessage4769E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ case 0x482A:
+ sendMessage(_parentScene, 0x1022, 990);
+ break;
+ case 0x482B:
+ sendMessage(_parentScene, 0x1022, 1010);
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2803Rope::sub476A70() {
+ startAnimation(0x8258A030, 0, 1);
+ NextState(&AsScene2803Rope::stHide);
+}
+
+void AsScene2803Rope::stHide() {
+ stopAnimation();
+ setVisible(false);
+}
+
+Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _field134(0) {
+
+ static const uint32 kScene2803FileHashes1[] = {
+ 0,
+ 0x081000F1,
+ 0x08100171,
+ 0x08100271
+ };
+
+ static const uint32 kScene2803FileHashes2[] = {
+ 0,
+ 0x286800D4,
+ 0x286806D4,
+ 0x28680AD4
+ };
+
+ setGlobalVar(0x1C1B8A9A, 1);
+ _vm->gameModule()->initScene2808Vars1();
+
+ SetMessageHandler(&Scene2803::handleMessage);
+
+ loadDataResource(0x00900849);
+
+ _surfaceFlag = true;
+
+ _background = new DirtyBackground(_vm, 0);
+ _background->createSurface(0, 640, 480);
+ addBackground(_background);
+
+ setPalette(0x412A423E);
+ addEntity(_palette);
+
+ insertMouse433(0xA423A41A);
+
+ if (getSubVar(0x0C601058, 0) == 0) {
+ _asTestTubeOne = (StaticSprite*)insertStaticSprite(0x66121222, 100);
+ } else {
+ _asTestTubeOne = (StaticSprite*)insertSprite<AsScene2803TestTubeOne>(
+ kScene2803FileHashes1[getSubVar(0x0C601058, 0)],
+ kScene2803FileHashes2[getSubVar(0x0C601058, 0)]);
+ }
+
+ if (getSubVar(0x0C601058, 1) == 3)
+ _asTestTubeTwo = (StaticSprite*)insertStaticSprite(0x64330236, 100);
+
+ if (getSubVar(0x0C601058, 2) == 3)
+ _asTestTubeThree = (StaticSprite*)insertStaticSprite(0x2E4A22A2, 100);
+
+ _asLightCord = insertSprite<AsScene2803LightCord>(this, 0x8FAD5932, 0x276E1A3D, 578, 200);
+ _sprite3 = (StaticSprite*)insertStaticSprite(0xA40EF2FB, 1100);
+ _sprite4 = (StaticSprite*)insertStaticSprite(0x0C03AA23, 1100);
+ _sprite5 = (StaticSprite*)insertStaticSprite(0x2A822E2E, 1100);
+ _sprite6 = (StaticSprite*)insertStaticSprite(0x2603A202, 1100);
+ _sprite7 = (StaticSprite*)insertStaticSprite(0x24320220, 1100);
+ _sprite8 = (StaticSprite*)insertStaticSprite(0x3C42022F, 1100);
+ _sprite9 = (StaticSprite*)insertStaticSprite(0x341A0237, 1100);
+ _sprite10 = insertStaticSprite(0x855820A3, 1200);
+
+ _clipRects1[0].x1 = 0;
+ _clipRects1[0].y1 = 0;
+ _clipRects1[0].x2 = 640;
+ _clipRects1[0].y2 = _sprite8->getDrawRect().y2();
+
+ _clipRects1[1].x1 = _sprite8->getDrawRect().x2();
+ _clipRects1[1].y1 = _sprite8->getDrawRect().y2();
+ _clipRects1[1].x2 = 640;
+ _clipRects1[1].y2 = 480;
+
+ _clipRects2[0].x1 = _sprite5->getDrawRect().x;
+ _clipRects2[0].y1 = 0;
+ _clipRects2[0].x2 = _sprite5->getDrawRect().x2();
+ _clipRects2[0].y2 = _sprite5->getDrawRect().y2();
+
+ _clipRects2[1].x1 = _sprite6->getDrawRect().x;
+ _clipRects2[1].y1 = 0;
+ _clipRects2[1].x2 = _sprite3->getDrawRect().x;
+ _clipRects2[1].y2 = _sprite6->getDrawRect().y2();
+
+ _clipRects2[2].x1 = _sprite3->getDrawRect().x;
+ _clipRects2[2].y1 = 0;
+ _clipRects2[2].x2 = _sprite4->getDrawRect().x2();
+ _clipRects2[2].y2 = 480;
+
+ if (which < 0) {
+ insertKlayman<KmScene2803>(302, 445, _clipRects1, 2);
+ setMessageList(0x004B79F0);
+ sub476090();
+ } else if (which == 1) {
+ insertKlayman<KmScene2803>(200, 445, _clipRects1, 2);
+ setMessageList(0x004B79C8);
+ sub476090();
+ } else if (which == 3) {
+ NPoint pt = _dataResource.getPoint(0xC2A08694);
+ insertKlayman<KmScene2803>(pt.x, pt.y, _clipRects2, 3);
+ setMessageList(0x004B7A00);
+ sub475FF0();
+ } else if (which == 5) {
+ insertKlayman<KmScene2803>(253, 298, _clipRects2, 3);
+ setMessageList(0x004B7A00);
+ sub475FF0();
+ } else if (which == 6) {
+ _asRope = insertSprite<AsScene2803Rope>(this, 384);
+ _asRope->setClipRect(0, 25, 640, 480);
+ insertKlayman<KmScene2803>(384, 0, _clipRects1, 2);
+ sendEntityMessage(_klayman, 0x1014, _asRope);
+ _klayman->setClipRect(0, 25, 640, 480);
+ setMessageList(0x004B7A78);
+ sub476090();
+ } else if (which == 2) {
+ insertKlayman<KmScene2803>(400, 445, _clipRects1, 2);
+ setMessageList(0x004B79F8);
+ sub476090();
+ } else {
+ insertKlayman<KmScene2803>(50, 231, _clipRects2, 3);
+ setMessageList(0x004B79C0);
+ sub475FF0();
+ }
+
+ sub476180();
+
+}
+
+void Scene2803::update475E40() {
+ if (_klayman->getX() < 350) {
+ sub4765D0();
+ } else {
+ sub4765F0();
+ }
+ Scene::update();
+}
+
+uint32 Scene2803::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x480F:
+ sub476130();
+ // NOTE Intentional fall-through
+ case 0x100D:
+ if (param.asInteger() == 0x84251F82)
+ setMessageList(0x004B7A50);
+ else if (param.asInteger() == 0x4254A2D2)
+ setMessageList(0x004B7A58);
+ else if (param.asInteger() == 0xE90A40A0)
+ setMessageList(0x004B7A08);
+ else if (param.asInteger() == 0x482D1210)
+ setMessageList(0x004B7A30);
+ else if (param.asInteger() == 0x802402B2) {
+ sendEntityMessage(_klayman, 0x1014, _asLightCord);
+ setMessageList(0x004B7A68);
+ } else if (param.asInteger() == 0x9626F390)
+ setMessageList(0x004B7A88);
+ break;
+ case 0x482A:
+ sub475FF0();
+ sub4765F0();
+ break;
+ case 0x482B:
+ sub476090();
+ sub4765D0();
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2803::sub475FF0() {
+ SetUpdateHandler(&Scene2803::update475E40);
+ // TODO _klayman->setClipRects(_clipRects2, 3);
+ sendMessage(_klayman, 0x482C, 0xE5A48297);
+ _sprite3->setVisible(true);
+ _sprite4->setVisible(true);
+ _sprite5->setVisible(true);
+ _sprite6->setVisible(true);
+ _sprite7->setVisible(true);
+ _sprite8->setVisible(false);
+ _sprite9->setVisible(false);
+}
+
+void Scene2803::sub476090() {
+ SetUpdateHandler(&Scene::update);
+ // TODO _klayman->setClipRects(_clipRects1, 2);
+ sendMessage(_klayman, 0x482C, 0);
+ _sprite3->setVisible(false);
+ _sprite4->setVisible(false);
+ _sprite5->setVisible(false);
+ _sprite6->setVisible(false);
+ _sprite7->setVisible(false);
+ _sprite8->setVisible(true);
+ _sprite9->setVisible(true);
+}
+
+void Scene2803::sub476130() {
+ setGlobalVar(0x190A1D18, getGlobalVar(0x190A1D18) ? 0 : 1);
+ sub476180();
+}
+
+void Scene2803::sub476180() {
+ // TODO? g_screen->resetDirtyRects();
+ if (getGlobalVar(0x190A1D18)) {
+ _asLightCord->setFileHashes(0x8FAD5932, 0x276E1A3D);
+ _background->load(0x412A423E);
+ _palette->addPalette(0x412A423E, 0, 256, 0);
+ _palette->addBasePalette(0x412A423E, 0, 256, 0);
+ _sprite3->load(0xA40EF2FB, false, false);
+ _sprite3->update();
+ _sprite4->load(0x0C03AA23, false, false);
+ _sprite4->update();
+ _sprite5->load(0x2A822E2E, false, false);
+ _sprite5->update();
+ _sprite6->load(0x2603A202, false, false);
+ _sprite6->update();
+ _sprite7->load(0x24320220, false, false);
+ _sprite7->update();
+ _mouseCursor->load(0xA423A41A);
+ _mouseCursor->updateCursor();
+ _sprite8->load(0x3C42022F, false, false);
+ _sprite8->update();
+ _sprite9->load(0x341A0237, false, false);
+ _sprite9->update();
+ if (getSubVar(0x0C601058, 0) == 0) {
+ _asTestTubeOne->load(0x66121222, false, false);
+ _asTestTubeOne->update();
+ } else
+ sendMessage(_asTestTubeOne, 0x2000, 0);
+ if (getSubVar(0x0C601058, 1) == 3) {
+ _asTestTubeTwo->load(0x64330236, false, false);
+ _asTestTubeTwo->update();
+ }
+ if (getSubVar(0x0C601058, 2) == 3) {
+ _asTestTubeThree->load(0x2E4A22A2, false, false);
+ _asTestTubeThree->update();
+ }
+ _sprite10->setVisible(true);
+ } else {
+ _asLightCord->setFileHashes(0xAFAD591A, 0x276E321D);
+ _background->load(0x29800A01);
+ _palette->addPalette(0x29800A01, 0, 256, 0);
+ _palette->addBasePalette(0x29800A01, 0, 256, 0);
+ _sprite3->load(0x234340A0, false, false);
+ _sprite3->update();
+ _sprite4->load(0x16202200, false, false);
+ _sprite4->update();
+ _sprite5->load(0x1030169A, false, false);
+ _sprite5->update();
+ _sprite6->load(0x1600A6A8, false, false);
+ _sprite6->update();
+ _sprite7->load(0xD0802EA0, false, false);
+ _sprite7->update();
+ _mouseCursor->load(0x00A05290);
+ _mouseCursor->updateCursor();
+ _sprite8->load(0x108012C1, false, false);
+ _sprite8->update();
+ _sprite9->load(0x708072E0, false, false);
+ _sprite9->update();
+ if (getSubVar(0x0C601058, 0) == 0) {
+ _asTestTubeOne->load(0x50C027A8, false, false);
+ _asTestTubeOne->update();
+ } else
+ sendMessage(_asTestTubeOne, 0x2000, 1);
+ if (getSubVar(0x0C601058, 1) == 3) {
+ _asTestTubeTwo->load(0xD48077A0, false, false);
+ _asTestTubeTwo->update();
+ }
+ if (getSubVar(0x0C601058, 2) == 3) {
+ _asTestTubeThree->load(0x30022689, false, false);
+ _asTestTubeThree->update();
+ }
+ _sprite10->setVisible(false);
+ }
+ sub476610();
+}
+
+void Scene2803::sub4765D0() {
+ if (_field134) {
+ _field134 = 0;
+ sub476610();
+ }
+}
+
+void Scene2803::sub4765F0() {
+ if (!_field134) {
+ _field134 = 1;
+ sub476610();
+ }
+}
+
+void Scene2803::sub476610() {
+ uint32 fadePaletteHash;
+ if (getGlobalVar(0x190A1D18))
+ fadePaletteHash = _field134 ? 0xB103B604 : 0x412A423E;
+ else
+ fadePaletteHash = _field134 ? 0x0263D144 : 0x29800A01;
+ _palette->addBasePalette(fadePaletteHash, 0, 64, 0);
+ _palette->startFadeToPalette(12);
+}
+
Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _palStatus(0) {
@@ -563,7 +937,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x81120132);
insertMouse433(0x00A05290);
- insertSprite<Class488>(this, 0xAFAD591A, 0x276E321D, 578, 200);
+ insertSprite<AsScene2803LightCord>(this, 0xAFAD591A, 0x276E321D, 578, 200);
if (getGlobalVar(0x190A1D18)) {
setBackground(0x412A423E);
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 9daf820..50db161 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -54,9 +54,9 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class488 : public AnimatedSprite {
+class AsScene2803LightCord : public AnimatedSprite {
public:
- Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y);
+ AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y);
void sub434380();
void sub4343C0();
void setFileHashes(uint32 fileHash1, uint32 fileHash2);
@@ -69,6 +69,56 @@ protected:
uint32 handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class AsScene2803TestTubeOne : public AnimatedSprite {
+public:
+ AsScene2803TestTubeOne(NeverhoodEngine *vm, uint32 fileHash1, uint32 fileHash2);
+protected:
+ uint32 _fileHash1, _fileHash2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2803Rope : public AnimatedSprite {
+public:
+ AsScene2803Rope(NeverhoodEngine *vm, Scene *parentScene, int16 x);
+protected:
+ Scene *_parentScene;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage4769E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void sub476A70();
+ void stHide();
+};
+
+class Scene2803 : public Scene {
+public:
+ Scene2803(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ StaticSprite *_asTestTubeOne;
+ StaticSprite *_asTestTubeTwo;
+ StaticSprite *_asTestTubeThree;
+ Sprite *_asRope;
+ AsScene2803LightCord *_asLightCord;
+ StaticSprite *_sprite3;
+ StaticSprite *_sprite4;
+ StaticSprite *_sprite5;
+ StaticSprite *_sprite6;
+ StaticSprite *_sprite7;
+ StaticSprite *_sprite8;
+ StaticSprite *_sprite9;
+ Sprite *_sprite10;
+ NRect _clipRects1[2];
+ NRect _clipRects2[3];
+ bool _field134;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void update475E40();
+ void sub475FF0();
+ void sub476090();
+ void sub476130();
+ void sub476180();
+ void sub4765D0();
+ void sub4765F0();
+ void sub476610();
+};
+
class Scene2803b : public Scene {
public:
Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: de622586f6926eb2376b59494fdbf504b5858b95
https://github.com/scummvm/scummvm/commit/de622586f6926eb2376b59494fdbf504b5858b95
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2803
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index f8a4497..663845f 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -410,6 +410,19 @@ static const uint32 messageListOffsets[] = {
3, 0x004B6168,
1, 0x004B61A0,
5, 0x004B61A8,
+ // Scene2803
+ 1, 0x004B79F0,
+ 5, 0x004B79C8,
+ 1, 0x004B7A00,
+ 2, 0x004B7A78,
+ 1, 0x004B79F8,
+ 1, 0x004B79C0,
+ 1, 0x004B7A50,
+ 2, 0x004B7A58,
+ 5, 0x004B7A08,
+ 4, 0x004B7A30,
+ 2, 0x004B7A68,
+ 7, 0x004B7A88,
// Scene2805
1, 0x004AE1C8,
2, 0x004AE1D0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 9fbfcfa..fd8e9c4 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: b2175adf61a2524338ad8c78a747a326d1519266
https://github.com/scummvm/scummvm/commit/b2175adf61a2524338ad8c78a747a326d1519266
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2501
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 663845f..044880b 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -112,6 +112,8 @@ static const uint32 rectListOffsets[] = {
// Scene2247
1, 0x004B5588,
1, 0x004B55C8,
+ // Scene2501
+ 1, 0x004B2608,
// Scene2801
1, 0x004B6CE0,
1, 0x004B6CD0,
@@ -390,6 +392,9 @@ static const uint32 messageListOffsets[] = {
4, 0x004B54C0,
5, 0x004B54E0,
5, 0x004B5508,
+ // Scene 2501
+ 7, 0x004B2538,
+ 6, 0x004B2570,
// Scene2801
1, 0x004B6BB8,
1, 0x004B6BC0,
@@ -641,5 +646,9 @@ static const uint32 sceneInfo2700Offsets[] = {
0x004B5FD8,
0x004B5FFC,
0x004B6020,
+ // Scene2501
+ 0x004B2628,
+ 0x004B264C,
+ 0x004B2670,
0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index fd8e9c4..9d0e214 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: bbb23cdf275d686f23f0553154d36a5c1fb74c88
https://github.com/scummvm/scummvm/commit/bbb23cdf275d686f23f0553154d36a5c1fb74c88
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Start with Module2500
- Implement Scene2501
- Add Scene::removeSprite
Changed paths:
A engines/neverhood/module2500.cpp
A engines/neverhood/module2500.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
engines/neverhood/module2700.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 3208283..9953492 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -37,6 +37,7 @@
#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
+#include "neverhood/module2500.h"
#include "neverhood/module2600.h"
#include "neverhood/module2700.h"
#include "neverhood/module2800.h"
@@ -327,10 +328,15 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 11;
createModule(2800, -1);
#endif
+#if 1
+ _vm->gameState().which = 2;
+ _vm->gameState().sceneNum = 0;
+ createModule(2500, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -394,6 +400,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
break;
+ case 2500:
+ setGlobalVar(0x91080831, 0x29220120);
+ _childObject = new Module2500(_vm, this, which);
+ break;
case 2600:
setGlobalVar(0x91080831, 0x40271018);
_childObject = new Module2600(_vm, this, which);
@@ -513,6 +523,9 @@ void GameModule::updateModule() {
createModule(1000, 1);
}
break;
+ case 2500:
+ createModule(2600, 1);
+ break;
case 2600:
if (_moduleResult == 1) {
createModule(2500, 0);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index f69686a..9d28b5f 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5215,6 +5215,57 @@ void KmScene2247::sub453520() {
FinalizeState(&Klayman::stStartWalkingDone);
}
+KmScene2501::KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ // Empty
+}
+
+uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x2000:
+ _isSittingInTeleporter = param.asInteger() != 0;
+ messageResult = 1;
+ break;
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::sub421350);
+ else
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481D:
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stTurnToUseInTeleporter);
+ break;
+ case 0x481E:
+ if (_isSittingInTeleporter)
+ GotoState(&Klayman::stReturnFromUseInTeleporter);
+ break;
+ case 0x4834:
+ GotoState(&Klayman::stStepOver);
+ break;
+ case 0x4835:
+ sendMessage(_parentScene, 0x2000, 1);
+ _isSittingInTeleporter = true;
+ GotoState(&Klayman::stSitInTeleporter);
+ break;
+ case 0x4836:
+ sendMessage(_parentScene, 0x2000, 0);
+ _isSittingInTeleporter = false;
+ GotoState(&Klayman::stGetUpFromTeleporter);
+ break;
+ }
+ return messageResult;
+}
+
KmScene2801::KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 6cfb0fc..fea543c 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -578,6 +578,14 @@ protected:
void sub453520();
};
+class KmScene2501 : public Klayman {
+public:
+ KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _isSittingInTeleporter;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene2801 : public Klayman {
public:
KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 780ee76..ac4064b 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -25,6 +25,7 @@ MODULE_OBJS = \
module2100.o \
module2200.o \
module2300.o \
+ module2500.o \
module2600.o \
module2700.o \
module2800.o \
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
new file mode 100644
index 0000000..0f746d1
--- /dev/null
+++ b/engines/neverhood/module2500.cpp
@@ -0,0 +1,387 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2500.h"
+
+namespace Neverhood {
+
+Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
+ _soundResource3(vm), _soundResource4(vm), _soundIndex(0) {
+
+ // TODO Music18hList_add(0x29220120, 0x05343184);
+ // TODO Music18hList_play(0x05343184, 0, 0, 1);
+ SetMessageHandler(&Module2500::handleMessage);
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, _vm->gameState().which);
+ } else {
+ createScene(0, 0);
+ }
+
+ _soundResource1.load(0x00880CCC);
+ _soundResource2.load(0x00880CC0);
+ _soundResource3.load(0x00880CCC);
+ _soundResource4.load(0x00880CC0);
+
+}
+
+Module2500::~Module2500() {
+}
+
+void Module2500::createScene(int sceneNum, int which) {
+ debug("Module2500::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ _childObject = new Scene2501(_vm, this, which);
+ break;
+ }
+ SetUpdateHandler(&Module2500::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2500::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1)
+ createScene(2, 0);
+ else if (_moduleResult == 2)
+ createScene(1, 0);
+ else
+ leaveModule(0);
+ break;
+ }
+ }
+}
+
+uint32 Module2500::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Module::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x200D:
+ switch (_soundIndex) {
+ case 0:
+ _soundResource1.play();
+ break;
+ case 1:
+ _soundResource2.play();
+ break;
+ case 2:
+ _soundResource3.play();
+ break;
+ case 3:
+ _soundResource4.play();
+ break;
+ }
+ _soundIndex++;
+ if (_soundIndex >= 4)
+ _soundIndex = 0;
+ break;
+ }
+ return messageResult;
+}
+
+Class541::Class541(NeverhoodEngine *vm, int16 x, int16 y)
+ : AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
+
+ startAnimation(0x1209E09F, 1, -1);
+ _newStickFrameIndex = 1;
+ setDoDeltaX(1);
+}
+
+Class542::Class542(NeverhoodEngine *vm, int16 x, int16 y)
+ : AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
+
+ _newStickFrameIndex = 0;
+ setDoDeltaX(1);
+}
+
+Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ _sceneInfos[0] = _vm->_staticData->getSceneInfo2700(0x004B2628);
+ _sceneInfos[1] = _vm->_staticData->getSceneInfo2700(0x004B264C);
+ _sceneInfos[2] = _vm->_staticData->getSceneInfo2700(0x004B2670);
+
+ setGlobalVar(0x21E60190, 1);
+ SetUpdateHandler(&Scene2501::update);
+ _surfaceFlag = true;
+ setBackground(0x1B8E8115);
+ setPalette(0x1B8E8115);
+ _palette->addPalette(0x00128842, 65, 31, 65);
+ _palette->addPalette("paKlayRed", 0, 64, 0);
+ insertMouse433(0xE81111B0);
+
+ _class437 = createSprite<Class437>(0x99BE9015); // Don't add this to the sprite list
+ addEntity(_class437);
+
+ _class521 = createSprite<Class521>(this, 211, 400); // Create but don't add to the sprite list yet
+ _class541 = insertSprite<Class541>(211, 400);
+ _class542 = insertSprite<Class542>(211, 400);
+ insertStaticSprite(0xC42AC521, 1500);
+
+ if (which < 0) {
+ insertKlayman<KmScene2501>(162, 393);
+ _kmScene2501 = _klayman;
+ _klaymanInCar = false;
+ setMessageList(0x004B2538);
+ setRectList(0x004B2608);
+ SetMessageHandler(&Scene2501::handleMessage);
+ SetUpdateHandler(&Scene2501::update);
+ sendMessage(_class521, 0x2009, 0);
+ _class521->setVisible(false);
+ _currTrackIndex = 0;
+ } else if (which == 1 || which == 2) {
+ addSprite(_class521);
+ _kmScene2501 = (Klayman*)new KmScene2501(_vm, this, 275, 393);
+ _klaymanInCar = true;
+ sendMessage(_kmScene2501, 0x2000, 1);
+ _kmScene2501->setDoDeltaX(1);
+ SetMessageHandler(&Scene2501::hmRidingCar);
+ SetUpdateHandler(&Scene2501::upRidingCar);
+ _class541->setVisible(false);
+ _class542->setVisible(false);
+ _currTrackIndex = which;
+ } else {
+ insertKlayman<KmScene2501>(162, 393);
+ _kmScene2501 = _klayman;
+ _klaymanInCar = false;
+ setMessageList(0x004B2538);
+ setRectList(0x004B2608);
+ SetMessageHandler(&Scene2501::handleMessage);
+ SetUpdateHandler(&Scene2501::update);
+ sendMessage(_class521, 0x2009, 0);
+ _class521->setVisible(false);
+ _currTrackIndex = 0;
+ }
+
+ // TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ // TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ // TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ insertSprite<Class518>(_class521);
+
+ _pointListsCount = 3;
+ _newTrackIndex = -1;
+ _dataResource.load(calcHash("Ashooded"));
+
+ _trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
+ _class521->setPathPoints(_trackPoints);
+
+ if (which >= 0 && _sceneInfos[_currTrackIndex]->which2 == which) {
+ NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
+ sendMessage(_class521, 0x2007, 150);
+ } else {
+ NPoint testPoint = (*_trackPoints)[0];
+ sendMessage(_class521, 0x2002, 0);
+ if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
+ sendMessage(_class521, 0x2008, 150);
+ }
+
+ _carStatus = 0;
+
+}
+
+Scene2501::~Scene2501() {
+ // Free sprites not currently in the sprite list
+ if (_klaymanInCar)
+ delete _kmScene2501;
+ else
+ delete _class521;
+}
+
+void Scene2501::update() {
+ Scene::update();
+ if (_carStatus == 1) {
+ removeSprite(_klayman);
+ addSprite(_class521);
+ clearRectList();
+ _klaymanInCar = true;
+ SetMessageHandler(&Scene2501::hmCarAtHome);
+ SetUpdateHandler(&Scene2501::upCarAtHome);
+ _class541->setVisible(false);
+ _class542->setVisible(false);
+ _class521->setVisible(true);
+ sendMessage(_class521, 0x2009, 0);
+ _class521->handleUpdate();
+ _klayman = NULL;
+ _carStatus = 0;
+ }
+ updateKlaymanCliprect();
+}
+
+void Scene2501::upCarAtHome() {
+ Scene::update();
+ if (_mouseClicked) {
+ if (_mouseClickPos.x <= 210 && _class521->getX() == 211 && _class521->getY() == 400) {
+ sendMessage(_class521, 0x200A, 0);
+ SetUpdateHandler(&Scene2501::upGettingOutOfCar);
+ } else {
+ findClosestTrack(_mouseClickPos);
+ SetMessageHandler(&Scene2501::hmRidingCar);
+ SetUpdateHandler(&Scene2501::upRidingCar);
+ }
+ _mouseClicked = false;
+ }
+ updateKlaymanCliprect();
+}
+
+void Scene2501::upGettingOutOfCar() {
+ Scene::update();
+ if (_carStatus == 2) {
+ _klayman = _kmScene2501;
+ removeSprite(_class521);
+ addSprite(_klayman);
+ _klaymanInCar = false;
+ SetMessageHandler(&Scene2501::handleMessage);
+ SetUpdateHandler(&Scene2501::update);
+ setRectList(0x004B2608);
+ _class541->setVisible(true);
+ _class542->setVisible(true);
+ _class521->setVisible(false);
+ setMessageList(0x004B2570);
+ runMessageList();
+ _klayman->handleUpdate();
+ _carStatus = 0;
+ }
+ updateKlaymanCliprect();
+}
+
+void Scene2501::upRidingCar() {
+ Scene::update();
+ if (_mouseClicked) {
+ findClosestTrack(_mouseClickPos);
+ _mouseClicked = false;
+ }
+}
+
+uint32 Scene2501::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x60842040)
+ _carStatus = 1;
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene2501::hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2005:
+ if (_sceneInfos[_currTrackIndex]->which1 < 0 && _newTrackIndex >= 0) {
+ changeTrack();
+ } else if (_sceneInfos[_currTrackIndex]->which1 == 0) {
+ SetMessageHandler(&Scene2501::hmCarAtHome);
+ SetUpdateHandler(&Scene2501::upCarAtHome);
+ sendMessage(_class521, 0x200F, 1);
+ } else if (_sceneInfos[_currTrackIndex]->which1 > 0) {
+ leaveScene(_sceneInfos[_currTrackIndex]->which1);
+ }
+ break;
+ case 0x2006:
+ if (_sceneInfos[_currTrackIndex]->which2 < 0 && _newTrackIndex >= 0) {
+ changeTrack();
+ } else if (_sceneInfos[_currTrackIndex]->which2 == 0) {
+ SetMessageHandler(&Scene2501::hmCarAtHome);
+ SetUpdateHandler(&Scene2501::upCarAtHome);
+ sendMessage(_class521, 0x200F, 1);
+ } else if (_sceneInfos[_currTrackIndex]->which2 > 0) {
+ leaveScene(_sceneInfos[_currTrackIndex]->which2);
+ }
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Scene2501::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x200A:
+ _carStatus = 2;
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2501::changeTrack() {
+ _currTrackIndex = _newTrackIndex;
+ _trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
+ _class521->setPathPoints(_trackPoints);
+ if (_currTrackIndex == 0) {
+ sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ } else {
+ sendMessage(_class521, 0x2002, 0);
+ }
+ sendPointMessage(_class521, 0x2004, _clickPoint);
+ _newTrackIndex = -1;
+}
+
+void Scene2501::findClosestTrack(NPoint &pt) {
+ // TODO NOTE This is uses with minor variations in other scenes, maybe merge them?
+ int minMatchDistance = 640;
+ int minMatchTrackIndex = -1;
+ // Find the track which contains a point closest to pt
+ for (int infoIndex = 0; infoIndex < _pointListsCount; infoIndex++) {
+ NPointArray *pointList = _dataResource.getPointArray(_sceneInfos[infoIndex]->pointListName);
+ for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
+ NPoint testPt = (*pointList)[pointIndex];
+ int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
+ if (distance < minMatchDistance) {
+ minMatchTrackIndex = infoIndex;
+ minMatchDistance = distance;
+ }
+ }
+ }
+ if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
+ _newTrackIndex = minMatchTrackIndex;
+ _clickPoint = pt;
+ if (_currTrackIndex == 0)
+ sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ else
+ sendMessage(_class521, 0x2003, 0);
+ } else {
+ _newTrackIndex = -1;
+ sendMessage(_class521, 0x2004, pt);
+ }
+}
+
+void Scene2501::updateKlaymanCliprect() {
+ if (_kmScene2501->getX() <= 211)
+ _kmScene2501->setClipRect(0, 0, 640, 480);
+ else
+ _kmScene2501->setClipRect(0, 0, 640, 388);
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
new file mode 100644
index 0000000..d907d5f
--- /dev/null
+++ b/engines/neverhood/module2500.h
@@ -0,0 +1,96 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2500_H
+#define NEVERHOOD_MODULE2500_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/module1600.h"
+#include "neverhood/module2700.h"
+
+namespace Neverhood {
+
+// Module2500
+
+class Module2500 : public Module {
+public:
+ Module2500(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2500();
+protected:
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ int _soundIndex;
+ void createScene(int sceneNum, int which);
+ void updateScene();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Class541 : public AnimatedSprite {
+public:
+ Class541(NeverhoodEngine *vm, int16 x, int16 y);
+};
+
+class Class542 : public AnimatedSprite {
+public:
+ Class542(NeverhoodEngine *vm, int16 x, int16 y);
+};
+
+class Scene2501 : public Scene {
+public:
+ Scene2501(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene2501();
+protected:
+ Class521 *_class521;
+ Sprite *_class437;
+ // TODO Sprite *_class517;
+ // TODO Sprite *_class519;
+ // TODO Sprite *_class520;
+ Sprite *_class541;
+ Sprite *_class542;
+ Klayman *_kmScene2501;
+ NPointArray *_trackPoints;
+ SceneInfo2700 *_sceneInfos[3];
+ int _currTrackIndex;
+ NPoint _clickPoint;
+ int _pointListsCount;
+ int _newTrackIndex;
+ int _carStatus;
+ bool _klaymanInCar;
+ void update();
+ void upCarAtHome();
+ void upGettingOutOfCar();
+ void upRidingCar();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender);
+ void findClosestTrack(NPoint &pt);
+ void changeTrack();
+ void updateKlaymanCliprect();
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2500_H */
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 096e335..862b832 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -90,7 +90,6 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO Music18hList_play(0x04020210, 24, 2, 1);
SetMessageHandler(&Module2700::handleMessage);
-
if (which < 0) {
which = _vm->gameState().which;
if (_vm->gameState().sceneNum == 0 || _vm->gameState().sceneNum == 30 || _vm->gameState().sceneNum == 31)
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 457d586..d189fad 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -158,6 +158,11 @@ Sprite *Scene::addSprite(Sprite *sprite) {
return sprite;
}
+void Scene::removeSprite(Sprite *sprite) {
+ removeSurface(sprite->getSurface());
+ removeEntity(sprite);
+}
+
void Scene::setSurfacePriority(BaseSurface *surface, int priority) {
surface->setPriority(priority);
if (removeSurface(surface))
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index e962266..f9e221a 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -47,6 +47,7 @@ public:
void addSurface(BaseSurface *surface);
bool removeSurface(BaseSurface *surface);
Sprite *addSprite(Sprite *sprite);
+ void removeSprite(Sprite *sprite);
void setSurfacePriority(BaseSurface *surface, int priority);
void deleteSprite(Sprite **sprite);
Background *addBackground(Background *background);
Commit: 31270bc5e66de42312813e58f4641c0958f1f455
https://github.com/scummvm/scummvm/commit/31270bc5e66de42312813e58f4641c0958f1f455
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Add car track tables for Module2500
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 044880b..b4f84c2 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -650,5 +650,18 @@ static const uint32 sceneInfo2700Offsets[] = {
0x004B2628,
0x004B264C,
0x004B2670,
+ // Scene2502
+ 0x004B01B8,
+ // Scene2503
+ 0x004B01E0,
+ 0x004B0208,
+ // Scene2505
+ 0x004B0230,
+ // Scene2506
+ 0x004B0268,
+ // Scene2507
+ 0x004B02A0,
+ // Scene2508
+ 0x004B02C8,
0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 9d0e214..1ff9e73 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 86c75922fe5c7ee86ce31e39440fe2aca9a09474
https://github.com/scummvm/scummvm/commit/86c75922fe5c7ee86ce31e39440fe2aca9a09474
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:40-07:00
Commit Message:
NEVERHOOD: Implement Scene2504 and add all car track scenes
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 9953492..844ca58 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -333,7 +333,7 @@ void GameModule::startup() {
createModule(2800, -1);
#endif
#if 1
- _vm->gameState().which = 2;
+ _vm->gameState().which = 0;
_vm->gameState().sceneNum = 0;
createModule(2500, -1);
#endif
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 0f746d1..79a4011 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -24,6 +24,37 @@
namespace Neverhood {
+// TODO Maybe move these to the DAT
+
+static const uint32 kScene2505StaticSprites[] = {
+ 0x4000A226,
+ 0
+};
+
+static const NRect kScene2505ClipRect = NRect(0, 0, 564, 480);
+
+static const uint32 kScene2506StaticSprites[] = {
+ 0x4027AF02,
+ 0
+};
+
+static const NRect kScene2506ClipRect = NRect(0, 0, 640, 441);
+
+static const uint32 kScene2508StaticSprites1[] = {
+ 0x2F08E610,
+ 0xD844E6A0,
+ 0
+};
+
+static const NRect kScene2508ClipRect1 = NRect(0, 0, 594, 448);
+
+static const uint32 kScene2508StaticSprites2[] = {
+ 0x2F08E610,
+ 0
+};
+
+static const NRect kScene2508ClipRect2 = NRect(0, 0, 594, 448);
+
Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
_soundResource3(vm), _soundResource4(vm), _soundIndex(0) {
@@ -55,6 +86,50 @@ void Module2500::createScene(int sceneNum, int which) {
case 0:
_childObject = new Scene2501(_vm, this, which);
break;
+ case 1:
+ _vm->gameState().which = which;
+ createScene2704(which, 0x004B01B8, 220);
+ break;
+ case 2:
+ setGlobalVar(0x98109F12, 1);// TODO DEBUG! Join the tracks.
+ _vm->gameState().which = which;
+ if (getGlobalVar(0x98109F12))
+ createScene2704(which, 0x004B01E0, 150);
+ else
+ createScene2704(which, 0x004B0208, 150);
+ break;
+ case 3:
+ _childObject = new Scene2504(_vm, this, which);
+ break;
+ case 4:
+ _vm->gameState().which = which;
+ createScene2704(which, 0x004B0230, 150, kScene2505StaticSprites, &kScene2505ClipRect);
+ break;
+ case 5:
+ setGlobalVar(0x21E60190, 1);
+ _vm->gameState().which = which;
+ createScene2704(which, 0x004B0268, 150, kScene2506StaticSprites, &kScene2506ClipRect);
+ break;
+ case 6:
+ _vm->gameState().which = which;
+ createScene2704(which, 0x004B02A0, 150);
+ break;
+ case 7:
+ _vm->gameState().which = which;
+ if (getGlobalVar(0xD0A14D10))
+ createScene2704(which, 0x004B02C8, 150, kScene2508StaticSprites1, &kScene2508ClipRect1);
+ else
+ createScene2704(which, 0x004B02C8, 150, kScene2508StaticSprites2, &kScene2508ClipRect2);
+ break;
+ case 8:
+ _childObject = new Scene1608(_vm, this, which);
+ break;
+ case 9:
+ if (getGlobalVar(0xD0A14D10))
+ _childObject = new Class152(_vm, this, 0xC62A0645, 0xA0641C6A);
+ else
+ _childObject = new Class152(_vm, this, 0x7A343546, 0x435427AB);
+ break;
}
SetUpdateHandler(&Module2500::updateScene);
_childObject->handleUpdate();
@@ -71,6 +146,54 @@ void Module2500::updateScene() {
else
leaveModule(0);
break;
+ case 1:
+ if (_moduleResult == 1)
+ createScene(3, -1);
+ else
+ createScene(0, 2);
+ break;
+ case 2:
+ if (_moduleResult == 1)
+ createScene(4, 0);
+ else
+ createScene(0, 1);
+ break;
+ case 3:
+ createScene(1, 1);
+ break;
+ case 4:
+ if (_moduleResult == 1)
+ createScene(5, 0);
+ else
+ createScene(2, 1);
+ break;
+ case 5:
+ if (_moduleResult == 1)
+ createScene(6, 0);
+ else
+ createScene(4, 1);
+ break;
+ case 6:
+ if (_moduleResult == 1)
+ createScene(7, 0);
+ else
+ createScene(5, 1);
+ break;
+ case 7:
+ if (_moduleResult == 1)
+ createScene(8, 1);
+ else
+ createScene(6, 1);
+ break;
+ case 8:
+ if (_moduleResult == 2)
+ createScene(9, -1);
+ else
+ createScene(7, 1);
+ break;
+ case 9:
+ createScene(8, 2);
+ break;
}
}
}
@@ -101,6 +224,10 @@ uint32 Module2500::handleMessage(int messageNum, const MessageParam ¶m, Enti
return messageResult;
}
+void Module2500::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
+ _childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
+}
+
Class541::Class541(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
@@ -384,4 +511,91 @@ void Scene2501::updateKlaymanCliprect() {
_kmScene2501->setClipRect(0, 0, 640, 388);
}
+Class450::Class450(NeverhoodEngine *vm)
+ : StaticSprite(vm, 1400), _countdown(0), _flag1(false), _soundResource1(vm),
+ _soundResource2(vm), _soundResource3(vm), _soundResource4(vm) {
+
+ _spriteResource.load2(0x070220D9);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _deltaRect = _drawRect;
+ processDelta();
+ _needRefresh = true;
+ setVisible(false);
+ _soundResource3.load(0x44043000);
+ _soundResource4.load(0x44045000);
+ _soundResource1.load(0x4600204C);
+ _soundResource2.load(0x408C0034);
+ SetMessageHandler(&Class450::handleMessage);
+ SetUpdateHandler(&Class450::update);
+}
+
+void Class450::update() {
+ StaticSprite::update();
+ if (_flag1 && !_soundResource1.isPlaying() && !_soundResource2.isPlaying()) {
+ _soundResource4.play();
+ setVisible(false);
+ _flag1 = false;
+ }
+ if (_countdown != 0 && (--_countdown) == 0) {
+ if (getSubVar(0x14800353, 0x01180951)) {
+ _soundResource1.play();
+ } else {
+ _soundResource2.play();
+ }
+ _flag1 = true;
+ }
+}
+
+uint32 Class450::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0 && !_flag1) {
+ setVisible(true);
+ _countdown = 2;
+ if (getSubVar(0x14800353, 0x01180951)) {
+ setSubVar(0x14800353, 0x01180951, 0);
+ } else {
+ setSubVar(0x14800353, 0x01180951, 1);
+ }
+ _soundResource3.play();
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+Scene2504::Scene2504(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *class450;
+
+ _surfaceFlag = true;
+ setBackground(0x90791B80);
+ setPalette(0x90791B80);
+ class450 = insertSprite<Class450>();
+ _vm->_collisionMan->addSprite(class450);
+ insertMouse435(0x91B8490F, 20, 620);
+ SetMessageHandler(&Scene2504::handleMessage);
+ SetUpdateHandler(&Scene::update);
+}
+
+uint32 Scene2504::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
+ leaveScene(0);
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index d907d5f..c3c046e 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/module1000.h"
#include "neverhood/module1600.h"
#include "neverhood/module2700.h"
@@ -46,6 +47,7 @@ protected:
void createScene(int sceneNum, int which);
void updateScene();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
class Class541 : public AnimatedSprite {
@@ -91,6 +93,27 @@ protected:
void updateKlaymanCliprect();
};
+class Class450 : public StaticSprite {
+public:
+ Class450(NeverhoodEngine *vm);
+protected:
+ int _countdown;
+ bool _flag1;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ SoundResource _soundResource3;
+ SoundResource _soundResource4;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2504 : public Scene {
+public:
+ Scene2504(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2500_H */
Commit: bd3dac97819bd92ea7b34bc53248d5168569f15b
https://github.com/scummvm/scummvm/commit/bd3dac97819bd92ea7b34bc53248d5168569f15b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add commented out code (which is TODO) to Module2500 so I don't forget it later
Changed paths:
engines/neverhood/module2500.cpp
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 79a4011..3cb2379 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -77,6 +77,7 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2500::~Module2500() {
+ // TODO Music18hList_deleteGroup(0x29220120);
}
void Module2500::createScene(int sceneNum, int which) {
Commit: d4e322bc78d30941f5f3ab31c2460412fe0d7fb5
https://github.com/scummvm/scummvm/commit/d4e322bc78d30941f5f3ab31c2460412fe0d7fb5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2401
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index b4f84c2..c2f0d6a 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -112,6 +112,8 @@ static const uint32 rectListOffsets[] = {
// Scene2247
1, 0x004B5588,
1, 0x004B55C8,
+ // Scene2401
+ 1, 0x004B3140,
// Scene2501
1, 0x004B2608,
// Scene2801
@@ -392,7 +394,17 @@ static const uint32 messageListOffsets[] = {
4, 0x004B54C0,
5, 0x004B54E0,
5, 0x004B5508,
- // Scene 2501
+ // Scene2401
+ 1, 0x004B2F70,
+ 1, 0x004B2F80,
+ 1, 0x004B2F78,
+ 4, 0x004B3090,
+ 2, 0x004B30B0,
+ 6, 0x004B3020,
+ 2, 0x004B3050,
+ 4, 0x004B2FA8,
+ 4, 0x004B2FC8,
+ // Scene2501
7, 0x004B2538,
6, 0x004B2570,
// Scene2801
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 1ff9e73..6f7f629 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 402f4bd275f064f0ad7752be7aebfa1634b81fa1
https://github.com/scummvm/scummvm/commit/402f4bd275f064f0ad7752be7aebfa1634b81fa1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Start with Module2400
- Implement Scene2401
Changed paths:
A engines/neverhood/module2400.cpp
A engines/neverhood/module2400.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 844ca58..d657307 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -37,6 +37,7 @@
#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
+#include "neverhood/module2400.h"
#include "neverhood/module2500.h"
#include "neverhood/module2600.h"
#include "neverhood/module2700.h"
@@ -221,6 +222,21 @@ void GameModule::initScene1405Vars() {
}
+void GameModule::initScene2401Vars() {
+
+ if (getSubVar(0x40050052, 0x40520234))
+ return;
+
+ setSubVar(0x90405038, 0, 3);
+ setSubVar(0x90405038, 1, 1);
+ setSubVar(0x90405038, 2, 2);
+ setSubVar(0x90405038, 3, 0);
+ setSubVar(0x90405038, 4, 4);
+
+ setSubVar(0x40050052, 0x40520234, 1);
+
+}
+
void GameModule::initScene2808Vars1() {
// Exit if it's already initialized
@@ -332,11 +348,15 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 11;
createModule(2800, -1);
#endif
-#if 1
+#if 0
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 0;
createModule(2500, -1);
#endif
+#if 1
+ _vm->gameState().sceneNum = 0;
+ createModule(2400, -1);
+#endif
}
void GameModule::createModule(int moduleNum, int which) {
@@ -400,6 +420,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
break;
+ case 2400:
+ setGlobalVar(0x91080831, 0x202D1010);
+ _childObject = new Module2400(_vm, this, which);
+ break;
case 2500:
setGlobalVar(0x91080831, 0x29220120);
_childObject = new Module2500(_vm, this, which);
@@ -523,6 +547,9 @@ void GameModule::updateModule() {
createModule(1000, 1);
}
break;
+ case 2400:
+ createModule(2300, 3);
+ break;
case 2500:
createModule(2600, 1);
break;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index f453feb..af72d53 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -39,6 +39,7 @@ public:
void handleMouseDown(int16 x, int16 y);
void initScene1307Vars();
void initScene1405Vars();
+ void initScene2401Vars();
void initScene2808Vars1();
void initScene2808Vars2();
void initScene3009Vars();
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 9d28b5f..9a6e4fe 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5215,6 +5215,150 @@ void KmScene2247::sub453520() {
FinalizeState(&Klayman::stStartWalkingDone);
}
+KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _readyToSpit(false) {
+ // Empty
+}
+
+uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnPressButton);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else if (param.asInteger() == 0) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWalkToFrontNoStep);
+ } else {
+ GotoState(&Klayman::stWalkToFront);
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnToFront);
+ } else {
+ GotoState(&Klayman::stTurnToBack);
+ }
+ break;
+ case 0x4832:
+ GotoState(&Klayman::sub421110);
+ break;
+ case 0x4833:
+ if (param.asInteger() == 1)
+ GotoState(&Klayman::stWonderAboutHalf);
+ else {
+ _spitPipeIndex = sendMessage(_parentScene, 0x2000, 0);
+ GotoState(&KmScene2401::stTrySpitIntoPipe);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
+uint32 KmScene2401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x16401CA6) {
+ _canSpit = true;
+ if (_contSpit)
+ spitIntoPipe();
+ } else if (param.asInteger() == 0xC11C0008) {
+ _canSpit = false;
+ _acceptInput = false;
+ _readyToSpit = false;
+ } else if (param.asInteger() == 0x018A0001) {
+ sendMessage(_parentScene, 0x2001, _spitDestPipeIndex);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2401::stTrySpitIntoPipe() {
+ if (_readyToSpit) {
+ _contSpit = true;
+ _spitContDestPipeIndex = _spitPipeIndex;
+ if (_canSpit)
+ spitIntoPipe();
+ } else if (!stStartAction(AnimationCallback(&KmScene2401::stTrySpitIntoPipe))) {
+ _status2 = 2;
+ _acceptInput = true;
+ _spitDestPipeIndex = _spitPipeIndex;
+ _readyToSpit = true;
+ _canSpit = false;
+ _contSpit = false;
+ startAnimation(0x1808B150, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene2401::handleMessage);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+void KmScene2401::spitIntoPipe() {
+ _contSpit = false;
+ _spitDestPipeIndex = _spitContDestPipeIndex;
+ _canSpit = false;
+ _acceptInput = false;
+ startAnimation(0x1B08B553, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene2401::handleMessage);
+ SetSpriteUpdate(NULL);
+ NextState(&KmScene2401::stContSpitIntoPipe);
+}
+
+void KmScene2401::stContSpitIntoPipe() {
+ _canSpit = true;
+ _acceptInput = true;
+ startAnimationByHash(0x1808B150, 0x16401CA6, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&KmScene2401::handleMessage);
+ SetSpriteUpdate(NULL);
+}
+
KmScene2501::KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index fea543c..fdf9b6e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -578,6 +578,23 @@ protected:
void sub453520();
};
+class KmScene2401 : public Klayman {
+public:
+ KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ bool _canSpit;
+ bool _contSpit;
+ bool _readyToSpit;
+ uint32 _spitPipeIndex;
+ uint32 _spitDestPipeIndex;
+ uint32 _spitContDestPipeIndex;
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stTrySpitIntoPipe();
+ void spitIntoPipe();
+ void stContSpitIntoPipe();
+};
+
class KmScene2501 : public Klayman {
public:
KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index ac4064b..694d92d 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -25,6 +25,7 @@ MODULE_OBJS = \
module2100.o \
module2200.o \
module2300.o \
+ module2400.o \
module2500.o \
module2600.o \
module2700.o \
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
new file mode 100644
index 0000000..4febe74
--- /dev/null
+++ b/engines/neverhood/module2400.cpp
@@ -0,0 +1,501 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2400.h"
+
+namespace Neverhood {
+
+Module2400::Module2400(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ // TODO Music18hList_add(0x202D1010, 0xB110382D);
+
+ if (which < 0) {
+ createScene(_vm->gameState().sceneNum, _vm->gameState().which);
+ } else {
+ createScene(0, 0);
+ }
+
+}
+
+Module2400::~Module2400() {
+ // TODO Music18hList_deleteGroup(0x202D1010);
+}
+
+void Module2400::createScene(int sceneNum, int which) {
+ debug("Module2400::createScene(%d, %d)", sceneNum, which);
+ _vm->gameState().sceneNum = sceneNum;
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ // TODO Music18hList_stop(0xB110382D, 0, 0);
+ _childObject = new Scene2401(_vm, this, which);
+ break;
+ }
+ SetUpdateHandler(&Module2400::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2400::updateScene() {
+ if (!updateChild()) {
+ switch (_vm->gameState().sceneNum) {
+ case 0:
+ if (_moduleResult == 1)
+ createScene(1, 0);
+ else
+ leaveModule(0);
+ break;
+ }
+ }
+}
+
+static const NPoint kScene2401Points[] = {
+ {384, 389},
+ {406, 389},
+ {429, 389},
+ {453, 389},
+ {477, 389}
+};
+
+static const uint32 kScene2401FileHashes1[] = {
+ 0x02842920,
+ 0x02882920,
+ 0x02902920,
+ 0x02A02920,
+ 0x02C02920,
+ 0x02002920,
+ 0x03802920,
+ 0x00802920,
+ 0x06802920,
+ 0x03842920
+};
+
+static const uint32 kScene2401FileHashes2[] = {
+ 0xD0910020,
+ 0xD0910038,
+ 0xD0910008,
+ 0xD0910068,
+ 0xD09100A8,
+ 0
+};
+
+static const uint32 kScene2401FileHashes3[] = {
+ 0xD0910020,
+ 0xD0910038,
+ 0xD0910008,
+ 0xD0910068,
+ 0xD09100A8,
+ 0
+};
+
+static const NRect kScene2401Rects[] = {
+ NRect(369, 331, 394, 389),
+ NRect(395, 331, 419, 389),
+ NRect(420, 331, 441, 389),
+ NRect(442, 331, 464, 389),
+ NRect(465, 331, 491, 389)
+};
+
+static const uint32 kAsScene2401WaterSpitFileHashes2[] = {
+ 0x5C044690,
+ 0x5C644690,
+ 0x5CA44690,
+ 0x5D244690,
+ 0x5E244690
+};
+
+static const uint32 kAsScene2401WaterSpitFileHashes1[] = {
+ 0xF4418408,
+ 0xF4418808,
+ 0xF4419008,
+ 0xF441A008,
+ 0xCD4F8411
+};
+
+AsScene2401WaterSpit::AsScene2401WaterSpit(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _soundResource(vm) {
+
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2401WaterSpit::handleMessage);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ createSurface(100, 146, 74);
+ _x = 240;
+ _y = 447;
+ setVisible(false);
+}
+
+uint32 AsScene2401WaterSpit::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x120A0013)
+ _soundResource.play(kAsScene2401WaterSpitFileHashes1[_soundIndex]);
+ break;
+ case 0x2000:
+ _x = 240;
+ _y = 447;
+ _soundIndex = getSubVar(0x0800547C, param.asInteger());
+ _soundResource.play(0x48640244);
+ startAnimation(kAsScene2401WaterSpitFileHashes2[param.asInteger()], 0, -1);
+ setVisible(true);
+ break;
+ case 0x3002:
+ stopAnimation();
+ setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2401FlowingWater::AsScene2401FlowingWater(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1200), _isWaterFlowing(false) {
+
+ createSurface1(0x10203116, 100);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2401FlowingWater::handleMessage);
+ _x = 88;
+ _y = 421;
+ setVisible(false);
+}
+
+AsScene2401FlowingWater::~AsScene2401FlowingWater() {
+ // TODO Sound1ChList_sub_407AF0(0x40F11C09);
+}
+
+uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (_isWaterFlowing && param.asInteger() == 0x02421405) {
+ startAnimationByHash(0x10203116, 0x01084280, 0);
+ }
+ break;
+ case 0x2002:
+ if (!_isWaterFlowing) {
+ // TODO Sound1ChList_addSoundResource(0x40F11C09, 0x980C1420, true);
+ // TODO Sound1ChList_playLooping(0x980C1420);
+ startAnimation(0x10203116, 0, -1);
+ setVisible(true);
+ _isWaterFlowing = true;
+ }
+ break;
+ case 0x2003:
+ // TODO Sound1ChList_deleteSoundByHash(0x980C1420);
+ _isWaterFlowing = false;
+ break;
+ case 0x3002:
+ stopAnimation();
+ setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2401WaterFlushing::AsScene2401WaterFlushing(NeverhoodEngine *vm, int16 x, int16 y)
+ : AnimatedSprite(vm, 1200), _countdown(0), _flushLoopCount(0) {
+
+ createSurface1(0xB8596884, 100);
+ SetUpdateHandler(&AsScene2401WaterFlushing::update);
+ SetMessageHandler(&AsScene2401WaterFlushing::handleMessage);
+ _x = x;
+ _y = y;
+ setVisible(false);
+}
+
+void AsScene2401WaterFlushing::update() {
+ if (_countdown != 0 && (--_countdown) == 0) {
+ setDoDeltaX(_vm->_rnd->getRandomNumber(1));
+ startAnimation(0xB8596884, 0, -1);
+ setVisible(true);
+ }
+ AnimatedSprite::update();
+}
+
+uint32 AsScene2401WaterFlushing::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (_flushLoopCount > 0 && param.asInteger() == 0x02421405) {
+ startAnimationByHash(0xB8596884, 0x01084280, 0);
+ _flushLoopCount--;
+ }
+ break;
+ case 0x2002:
+ if (param.asInteger() > 0) {
+ _flushLoopCount = param.asInteger() - 1;
+ _countdown = _vm->_rnd->getRandomNumber(3) + 1;
+ }
+ break;
+ case 0x3002:
+ stopAnimation();
+ setVisible(false);
+ break;
+ }
+ return messageResult;
+}
+
+AsScene2401Door::AsScene2401Door(NeverhoodEngine *vm, bool isOpen)
+ : AnimatedSprite(vm, 1100), _countdown(0), _isOpen(isOpen), _soundResource(vm) {
+
+ createSurface1(0x44687810, 100);
+ _x = 320;
+ _y = 240;
+ _newStickFrameIndex = -2;
+ SetUpdateHandler(&AsScene2401Door::update);
+ SetMessageHandler(&AsScene2401Door::handleMessage);
+ if (_isOpen) {
+ stopAnimation();
+ setVisible(false);
+ _countdown = 48;
+ } else {
+ startAnimation(0x44687810, 0, -1);
+ _newStickFrameIndex = 0;
+ }
+}
+
+void AsScene2401Door::update() {
+ if (_isOpen && _countdown != 0 && (--_countdown) == 0) {
+ _isOpen = false;
+ setVisible(true);
+ startAnimation(0x44687810, -1, -1);
+ _newStickFrameIndex = 0;
+ _playBackwards = true;
+ _soundResource.play(calcHash("fxDoorClose38"));
+ }
+ AnimatedSprite::update();
+}
+
+uint32 AsScene2401Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2004:
+ if (_isOpen)
+ _countdown = 168;
+ messageResult = _isOpen ? 1 : 0;
+ break;
+ case 0x3002:
+ gotoNextState();
+ break;
+ case 0x4808:
+ if (!_isOpen) {
+ _countdown = 168;
+ _isOpen = true;
+ setVisible(true);
+ startAnimation(0x44687810, 0, -1);
+ _soundResource.play(calcHash("fxDoorOpen38"));
+ NextState(&AsScene2401Door::stDoorOpenFinished);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2401Door::stDoorOpenFinished() {
+ stopAnimation();
+ setVisible(false);
+}
+
+Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _flag(false),
+ _soundToggle(false), _asWaterSpitIndex(0), _soundResource1(vm), _soundResource2(vm) {
+
+ _vm->gameModule()->initScene2401Vars();
+
+ setGlobalVar(0x4E0BE910, 1); //DEBUG! Enables water
+ setGlobalVar(0x45080C38, 1); //DEBUG! Gives the test tube
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2401::handleMessage);
+ SetUpdateHandler(&Scene2401::update);
+
+ setRectList(0x004B3140);
+ setBackground(0x8C030206);
+ setPalette(0x8C030206);
+ addEntity(_palette);
+ _palette->addBasePalette(0x8C030206, 0, 256, 0);
+ _palette->addPalette(0x91D3A391, 0, 65, 0);
+ insertMouse433(0x302028C8);
+
+ _sprite1 = insertStaticSprite(0x2E068A23, 200);
+ insertStaticSprite(0x401410A6, 200);
+ _asFlowingWater = insertSprite<AsScene2401FlowingWater>();
+ insertStaticSprite(0x90C0A4B4, 200);
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x0092916A, 100, 0);
+ _ssFloorButton = insertSprite<Class427>(this, 0x28001120, 0x00911068, 100, 0);
+
+ for (uint i = 0; i < 5; i++)
+ _asWaterFlushing[i] = insertSprite<AsScene2401WaterFlushing>(kScene2401Points[i].x, kScene2401Points[i].y);
+
+ for (uint i = 0; i < 10; i++) {
+ _ssWaterPipes[i] = insertStaticSprite(kScene2401FileHashes1[i], 300);
+ _ssWaterPipes[i]->setVisible(false);
+ }
+
+ _asWaterSpit[0] = insertSprite<AsScene2401WaterSpit>();
+ _asWaterSpit[1] = insertSprite<AsScene2401WaterSpit>();
+
+ if (which < 0) {
+ insertKlayman<KmScene2401>(200, 447);
+ setMessageList(0x004B2F70);
+ _asDoor = insertSprite<AsScene2401Door>(false);
+ } else if (which == 1) {
+ insertKlayman<KmScene2401>(280, 413);
+ setMessageList(0x004B2F80);
+ _palette->addBasePalette(0xB103B604, 0, 65, 0);
+ _palette->addPalette(0xB103B604, 0, 65, 0);
+ _asDoor = insertSprite<AsScene2401Door>(true);
+ } else {
+ insertKlayman<KmScene2401>(-20, 447);
+ setMessageList(0x004B2F78);
+ _asDoor = insertSprite<AsScene2401Door>(false);
+ }
+
+}
+
+void Scene2401::update() {
+
+ if (_countdown1 != 0 && (--_countdown1) == 0) {
+ if (_pipeStatus > 0 && _pipeStatus <= 10)
+ _ssWaterPipes[_pipeStatus - 1]->setVisible(false);
+ if (_pipeStatus >= 10) {
+ bool puzzleSolved = true, waterInside = false;
+ for (uint i = 0; i < 5; i++) {
+ if (getSubVar(0x0800547C, i) != getSubVar(0x90405038, i))
+ puzzleSolved = false;
+ if (getSubVar(0x0800547C, i) != 0)
+ waterInside = true;
+ }
+ if (puzzleSolved) {
+ setGlobalVar(0x0045D021, 1);
+ setGlobalVar(0x86615030, 1);
+ sendMessage(_asDoor, 0x4808, 0);
+ } else if (waterInside) {
+ playPipeSound(0xD0431020);
+ for (uint i = 0; i < 5; i++) {
+ sendMessage(_asWaterFlushing[i], 0x2002, getSubVar(0x0800547C, i));
+ setSubVar(0x0800547C, i, 0);
+ }
+ }
+ } else if (_pipeStatus >= 5) {
+ _ssWaterPipes[_pipeStatus]->setVisible(true);
+ _countdown1 = 8;
+ playPipeSound(kScene2401FileHashes3[getSubVar(0x0800547C, _pipeStatus - 5)]);
+ } else {
+ _ssWaterPipes[_pipeStatus]->setVisible(true);
+ _countdown1 = _pipeStatus == 4 ? 16 : 8;
+ playPipeSound(kScene2401FileHashes3[getSubVar(0x90405038, _pipeStatus)]);
+ }
+ _pipeStatus++;
+ }
+
+ if (_countdown2 != 0 && (--_countdown2) == 0) {
+ sendMessage(_asFlowingWater, 0x2003, 0);
+ }
+
+ Scene::update();
+
+}
+
+uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ // case 0x0001: TODO DEBUG
+ // case 0x000D: TODO DEBUG
+ case 0x100D:
+ if (param.asInteger() == 0x402064D8)
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
+ else if (param.asInteger() == 0x02144CB1)
+ sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
+ else if (param.asInteger() == 0x11C40840) {
+ if (getGlobalVar(0x0045D021) && sendMessage(_asDoor, 0x2004, 0)) {
+ setMessageList(0x004B3090);
+ } else {
+ setMessageList(0x004B30B0);
+ }
+ } else if (param.asInteger() == 0x412722C0) {
+ if (_countdown2 > 0 && getGlobalVar(0x45080C38)) {
+ _countdown2 = 144;
+ setMessageList(0x004B3020);
+ } else {
+ setMessageList(0x004B3050);
+ }
+ } else if (param.asInteger() == 0x21142050) {
+ if (_flag && _countdown1 == 0 && getGlobalVar(0x86615030) == 0) {
+ setMessageList(0x004B2FA8);
+ } else {
+ setMessageList(0x004B2FC8);
+ }
+ } else if (param.asInteger() == 0x87441031) {
+ setSurfacePriority(_sprite1->getSurface(), 1100);
+ } else if (param.asInteger() == 0x80C40322) {
+ setSurfacePriority(_sprite1->getSurface(), 200);
+ messageList402220();
+ _flag = true;
+ } else if (param.asInteger() == 0x09C4B40A && _countdown2 > 12) {
+ _countdown2 = 12;
+ }
+ break;
+ case 0x2000:
+ messageResult = 0;
+ for (uint32 i = 0; i < 5; i++)
+ if (kScene2401Rects[i].contains(_mouseClickPos.x, _mouseClickPos.y)) {
+ messageResult = i;
+ break;
+ }
+ break;
+ case 0x2001:
+ sendMessage(_asWaterSpit[_asWaterSpitIndex], 0x2000, param.asInteger());
+ _asWaterSpitIndex = (_asWaterSpitIndex + 1) & 1;
+ incSubVar(0x0800547C, param.asInteger(), 1);
+ if (getSubVar(0x0800547C, param.asInteger()) >= 5)
+ setSubVar(0x0800547C, param.asInteger(), 4);
+ break;
+ case 0x480B:
+ if (sender == _ssButton) {
+ _pipeStatus = 0;
+ _countdown1 = 8;
+ } else if (sender == _ssFloorButton && getGlobalVar(0x4E0BE910)) {
+ _countdown2 = 144;
+ sendMessage(_asFlowingWater, 0x2002, 0);
+ _soundResource1.play(0xE1130324);
+ }
+ break;
+ case 0x482A:
+ _palette->addBasePalette(0xB103B604, 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ break;
+ case 0x482B:
+ _palette->addBasePalette(0x91D3A391, 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ break;
+ }
+ return messageResult;
+}
+
+void Scene2401::playPipeSound(uint32 fileHash) {
+ if (_soundToggle)
+ _soundResource1.play(fileHash);
+ else
+ _soundResource2.play(fileHash);
+ _soundToggle = !_soundToggle;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
new file mode 100644
index 0000000..c8cdb66
--- /dev/null
+++ b/engines/neverhood/module2400.h
@@ -0,0 +1,115 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2400_H
+#define NEVERHOOD_MODULE2400_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/module1000.h"
+#include "neverhood/module1100.h"
+#include "neverhood/module2100.h"
+
+namespace Neverhood {
+
+// Module2400
+
+class Module2400 : public Module {
+public:
+ Module2400(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Module2400();
+protected:
+ void createScene(int sceneNum, int which);
+ void updateScene();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2401WaterSpit : public AnimatedSprite {
+public:
+ AsScene2401WaterSpit(NeverhoodEngine *vm);
+protected:
+ int _soundIndex;
+ SoundResource _soundResource;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2401FlowingWater : public AnimatedSprite {
+public:
+ AsScene2401FlowingWater(NeverhoodEngine *vm);
+ virtual ~AsScene2401FlowingWater();
+protected:
+ bool _isWaterFlowing;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2401WaterFlushing : public AnimatedSprite {
+public:
+ AsScene2401WaterFlushing(NeverhoodEngine *vm, int16 x, int16 y);
+protected:
+ int _countdown;
+ int _flushLoopCount;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class AsScene2401Door : public AnimatedSprite {
+public:
+ AsScene2401Door(NeverhoodEngine *vm, bool isOpen);
+protected:
+ int _countdown;
+ bool _isOpen;
+ SoundResource _soundResource;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stDoorOpenFinished();
+};
+
+class Scene2401 : public Scene {
+public:
+ Scene2401(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_asFlowingWater;
+ Sprite *_ssButton;
+ Sprite *_ssFloorButton;
+ Sprite *_asWaterSpit[2];
+ Sprite *_ssWaterPipes[10];
+ Sprite *_asWaterFlushing[5];
+ Sprite *_asDoor;
+ bool _soundToggle;
+ bool _flag;
+ int _countdown1;
+ int _countdown2;
+ int _pipeStatus;
+ int _asWaterSpitIndex;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void playPipeSound(uint32 fileHash);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2400_H */
Commit: 49f39b0da2bee93e8425c0686f7cc26df443a35f
https://github.com/scummvm/scummvm/commit/49f39b0da2bee93e8425c0686f7cc26df443a35f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2402
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index c2f0d6a..5be95ee 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -114,6 +114,8 @@ static const uint32 rectListOffsets[] = {
1, 0x004B55C8,
// Scene2401
1, 0x004B3140,
+ // Scene2402
+ 1, 0x004AF900,
// Scene2501
1, 0x004B2608,
// Scene2801
@@ -404,6 +406,14 @@ static const uint32 messageListOffsets[] = {
2, 0x004B3050,
4, 0x004B2FA8,
4, 0x004B2FC8,
+ // Scene2402
+ 1, 0x004AF7C8,
+ 2, 0x004AF7D8,
+ 1, 0x004AF888,
+ 1, 0x004AF7D0,
+ 3, 0x004AF800,
+ 1, 0x004AF818,
+ 2, 0x004AF890,
// Scene2501
7, 0x004B2538,
6, 0x004B2570,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 6f7f629..13bf0bd 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 7c2aa2a22556c84fa8ec1d5f6993dfc8c47fb0c3
https://github.com/scummvm/scummvm/commit/7c2aa2a22556c84fa8ec1d5f6993dfc8c47fb0c3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Implement Scene2402
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d657307..dcc0995 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -354,7 +354,7 @@ void GameModule::startup() {
createModule(2500, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 0;
+ _vm->gameState().sceneNum = 1;
createModule(2400, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 9a6e4fe..17124e5 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5282,7 +5282,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4833:
if (param.asInteger() == 1)
- GotoState(&Klayman::stWonderAboutHalf);
+ GotoState(&Klayman::stWonderAbout);
else {
_spitPipeIndex = sendMessage(_parentScene, 0x2000, 0);
GotoState(&KmScene2401::stTrySpitIntoPipe);
@@ -5359,6 +5359,90 @@ void KmScene2401::stContSpitIntoPipe() {
SetSpriteUpdate(NULL);
}
+KmScene2402::KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ if (!getGlobalVar(0x92603A79))
+ GotoState(&KmScene2402::sub415840);
+ else
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _destX = param.asInteger();
+ GotoState(&Klayman::stWalking);
+ } else {
+ GotoState(&Klayman::stPeekWall);
+ }
+ break;
+ case 0x4812:
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnPressButton);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
+void KmScene2402::sub415840() {
+ if (_x > 260)
+ setDoDeltaX(1);
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
+ _newStickFrameIndex = 10;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteUpdate(NULL);
+}
+
KmScene2501::KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index fdf9b6e..7593bf1 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -595,6 +595,14 @@ protected:
void stContSpitIntoPipe();
};
+class KmScene2402 : public Klayman {
+public:
+ KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void sub415840();
+};
+
class KmScene2501 : public Klayman {
public:
KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 4febe74..1c52d68 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -49,6 +49,10 @@ void Module2400::createScene(int sceneNum, int which) {
// TODO Music18hList_stop(0xB110382D, 0, 0);
_childObject = new Scene2401(_vm, this, which);
break;
+ case 1:
+ // TODO Music18hList_play(0xB110382D, 0, 2, 1);
+ _childObject = new Scene2402(_vm, this, which);
+ break;
}
SetUpdateHandler(&Module2400::updateScene);
_childObject->handleUpdate();
@@ -63,6 +67,14 @@ void Module2400::updateScene() {
else
leaveModule(0);
break;
+ case 1:
+ if (_moduleResult == 1)
+ createScene(5, 0);
+ else if (_moduleResult == 2)
+ createScene(7, -1);
+ else
+ createScene(0, 1);
+ break;
}
}
}
@@ -497,5 +509,259 @@ void Scene2401::playPipeSound(uint32 fileHash) {
_soundResource2.play(fileHash);
_soundToggle = !_soundToggle;
}
+
+static const uint32 kScene2402FileHashes[] = {
+ 0xD0910020,
+ 0xD0910038,
+ 0xD0910008,
+ 0xD0910068,
+ 0xD09100A8
+};
+
+AsScene2402Door::AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool isOpen)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isOpen(isOpen), _soundResource(vm) {
+
+ SetUpdateHandler(&AsScene2402Door::update);
+ SetMessageHandler(&AsScene2402Door::handleMessage);
+ createSurface1(0x80495831, 100);
+ _x = 320;
+ _y = 240;
+ _newStickFrameIndex = -2;
+ if (_isOpen) {
+ startAnimation(0x80495831, -1, -1);
+ _countdown = 48;
+ } else {
+ stopAnimation();
+ setVisible(false);
+ }
+}
+
+void AsScene2402Door::update() {
+ if (_isOpen && _countdown != 0 && (--_countdown) == 0) {
+ _isOpen = false;
+ setVisible(true);
+ startAnimation(0x80495831, -1, -1);
+ _playBackwards = true;
+ _soundResource.play(calcHash("fxDoorClose38"));
+ NextState(&AsScene2402Door::stDoorClosingFinished);
+ }
+ AnimatedSprite::update();
+}
+
+uint32 AsScene2402Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ if (_isOpen)
+ _countdown = 144;
+ messageResult = _isOpen ? 1 : 0;
+ break;
+ case 0x3002:
+ gotoNextState();
+ break;
+ case 0x4808:
+ _countdown = 144;
+ _isOpen = true;
+ setVisible(true);
+ startAnimation(0x80495831, 0, -1);
+ _newStickFrameIndex = -2;
+ _soundResource.play(calcHash("fxDoorOpen38"));
+ break;
+ }
+ return messageResult;
+}
+
+void AsScene2402Door::stDoorClosingFinished() {
+ sendMessage(_parentScene, 0x2001, 0);
+ setVisible(false);
+}
+
+AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown1(0), _countdown2(0),
+ _soundResource(vm) {
+
+ createSurface(100, 640, 480); // TODO Use correct size from the two hashes
+ SetMessageHandler(&Sprite::handleMessage);
+ _x = 260;
+ _y = 210;
+ setDoDeltaX(1);
+
+ if (!getGlobalVar(0x92603A79)) {
+ _soundResource.load(0x58208810);
+ _countdown1 = 48;
+ startAnimation(0x4919397A, 0, -1);
+ _newStickFrameIndex = 0;
+ SetUpdateHandler(&AsScene2402TV::upWait);
+ } else {
+ int16 frameIndex;
+ if (_klayman->getX() > 320)
+ _currFrameIndex = 29;
+ frameIndex = CLIP<int16>((_klayman->getX() - _x + 150) / 10, 0, 29);
+ startAnimation(0x050A0103, frameIndex, -1);
+ _newStickFrameIndex = frameIndex;
+ _countdown1 = 0;
+ SetUpdateHandler(&AsScene2402TV::upFocusKlayman);
+ }
+
+}
+
+AsScene2402TV::~AsScene2402TV() {
+ // TODO Sound1ChList_sub_407AF0(0x01520123);
+}
+
+void AsScene2402TV::upWait() {
+ if (_countdown1 != 0 && (--_countdown1) == 0) {
+ startAnimation(0x4919397A, 0, -1);
+ SetMessageHandler(&AsScene2402TV::hmJoke);
+ NextState(&AsScene2402TV::stJokeFinished);
+ }
+ AnimatedSprite::update();
+}
+
+void AsScene2402TV::upFocusKlayman() {
+ int16 frameIndex = CLIP<int16>((_klayman->getX() - _x + 150) / 10, 0, 29);
+ if (frameIndex != _currFrameIndex) {
+ if (frameIndex > _currFrameIndex) {
+ _currFrameIndex++;
+ } else if (frameIndex < _currFrameIndex) {
+ _currFrameIndex--;
+ }
+ startAnimation(0x050A0103, _currFrameIndex, -1);
+ _newStickFrameIndex = _currFrameIndex;
+ if (_countdown2 == 0) {
+ // TODO Sound1ChList_addSoundResource(0x01520123, 0xC42D4528, true);
+ // TODO Sound1ChList_playLooping(0xC42D4528);
+ }
+ _countdown2 = 5;
+ } else if (_countdown2 != 0 && (--_countdown2 == 0)) {
+ // TODO Sound1ChList_deleteSoundByHash(0xC42D4528);
+ }
+ AnimatedSprite::update();
+}
+
+void AsScene2402TV::stJokeFinished() {
+ setGlobalVar(0x92603A79, 1);
+ startAnimation(0x050A0103, 0, -1);
+ _newStickFrameIndex = 0;
+ SetUpdateHandler(&AsScene2402TV::upFocusKlayman);
+}
+
+uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x431EA0B0) {
+ _soundResource.play();
+ }
+ break;
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _countdown(0), _soundToggle(false),
+ _soundResource1(vm), _soundResource2(vm) {
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2402::handleMessage);
+ SetUpdateHandler(&Scene2402::update);
+
+ setRectList(0x004AF900);
+ setBackground(0x81660220);
+ setPalette(0x81660220);
+ insertMouse433(0x6022481E);
+ _asTape = insertSprite<AsScene1201Tape>(this, 9, 1100, 286, 409, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
+
+ if (which < 0) {
+ insertKlayman<KmScene2402>(198, 404);
+ setMessageList(0x004AF7C8);
+ } else if (which == 1) {
+ insertKlayman<KmScene2402>(660, 404);
+ setMessageList(0x004AF7D8);
+ } else if (which == 2) {
+ insertKlayman<KmScene2402>(409, 404);
+ _klayman->setDoDeltaX(getGlobalVar(0xC0418A02) ? 1 : 0);
+ setMessageList(0x004AF888);
+ } else {
+ insertKlayman<KmScene2402>(0, 404);
+ setMessageList(0x004AF7D0);
+ }
+
+ _sprite1 = insertStaticSprite(0x081A60A8, 1100);
+ _ssDoorFrame = (StaticSprite*)insertStaticSprite(0x406C0AE0, 1100);
+ _klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 639, _sprite1->getDrawRect().y2());
+ _asDoor = insertSprite<AsScene2402Door>(this, which == 1/*CHECKME or != ?*/);
+ insertSprite<AsScene2402TV>(_klayman);
+ insertStaticSprite(0x3A01A020, 200);
+
+}
+
+Scene2402::~Scene2402() {
+ setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+}
+
+void Scene2402::update() {
+ if (_countdown != 0 && (--_countdown) == 0) {
+ if (_pipeStatus >= 10) {
+ sendMessage(_asDoor, 0x4808, 0);
+ _ssDoorFrame->load(0x00B415E0, true, true);
+ _ssDoorFrame->update();
+ } else if (_pipeStatus >= 5) {
+ _countdown = 8;
+ playPipeSound(kScene2402FileHashes[getSubVar(0x0800547C, _pipeStatus - 5)]);
+ } else {
+ _countdown = _pipeStatus == 4 ? 16 : 8;
+ playPipeSound(kScene2402FileHashes[getSubVar(0x90405038, _pipeStatus)]);
+ }
+ _pipeStatus++;
+ }
+ Scene::update();
+}
+
+uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x402064D8) {
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
+ } else if (param.asInteger() == 0x01C66840) {
+ if (sendMessage(_asDoor, 0x2000, 0))
+ setMessageList(0x004AF800);
+ else
+ setMessageList(0x004AF818);
+ }
+ break;
+ case 0x2001:
+ _ssDoorFrame->load(0x406C0AE0, true, true);
+ _ssDoorFrame->update();
+ break;
+ case 0x480B:
+ if (sender == _ssButton) {
+ _pipeStatus = 0;
+ _countdown = 8;
+ }
+ break;
+ case 0x4826:
+ if (sender == _asTape) {
+ sendEntityMessage(_klayman, 0x1014, _asTape);
+ setMessageList(0x004AF890);
+ }
+ break;
+ }
+ return messageResult;
+}
+void Scene2402::playPipeSound(uint32 fileHash) {
+ if (_soundToggle)
+ _soundResource1.play(fileHash);
+ else
+ _soundResource2.play(fileHash);
+ _soundToggle = !_soundToggle;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index c8cdb66..4367901 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -29,6 +29,7 @@
#include "neverhood/gamemodule.h"
#include "neverhood/module1000.h"
#include "neverhood/module1100.h"
+#include "neverhood/module1200.h"
#include "neverhood/module2100.h"
namespace Neverhood {
@@ -110,6 +111,54 @@ protected:
void playPipeSound(uint32 fileHash);
};
+class AsScene2402Door : public AnimatedSprite {
+public:
+ AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool isOpen);
+protected:
+ Scene *_parentScene;
+ int _countdown;
+ bool _isOpen;
+ SoundResource _soundResource;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stDoorClosingFinished();
+};
+
+class AsScene2402TV : public AnimatedSprite {
+public:
+ AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman);
+ virtual ~AsScene2402TV();
+protected:
+ Klayman *_klayman;
+ int _countdown1;
+ int _countdown2;
+ SoundResource _soundResource;
+ void upWait();
+ void upFocusKlayman();
+ void stJokeFinished();
+ uint32 hmJoke(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2402 : public Scene {
+public:
+ Scene2402(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene2402();
+protected:
+ Sprite *_sprite1;
+ Sprite *_asDoor;
+ Sprite *_ssButton;
+ Sprite *_asTape;
+ StaticSprite *_ssDoorFrame;
+ int _pipeStatus;
+ int _countdown;
+ bool _soundToggle;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void playPipeSound(uint32 fileHash);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2400_H */
Commit: 93614a17a8377a0cf4216c0fe9fbbf83fc82791f
https://github.com/scummvm/scummvm/commit/93614a17a8377a0cf4216c0fe9fbbf83fc82791f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Implement Scene2406
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index dcc0995..23f6dbc 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -354,7 +354,7 @@ void GameModule::startup() {
createModule(2500, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 1;
+ _vm->gameState().sceneNum = 5;
createModule(2400, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 17124e5..cebf715 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5443,6 +5443,97 @@ void KmScene2402::sub415840() {
SetSpriteUpdate(NULL);
}
+KmScene2406::KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // TODO Cliprects
+}
+
+uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4804:
+ if (param.asInteger() != 0) {
+ _destX = param.asInteger();
+ GotoState(&Klayman::stWalking);
+ } else {
+ GotoState(&Klayman::stPeekWall);
+ }
+ break;
+ case 0x4812:
+ if (param.asInteger() == 2)
+ GotoState(&Klayman::stPickUpNeedle);
+ else if (param.asInteger() == 1)
+ GotoState(&Klayman::sub41FFF0);
+ else
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481A:
+ GotoState(&Klayman::stInsertDisk);
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0)
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ else
+ sub41CCE0(param.asPoint().x);
+ break;
+ case 0x481D:
+ GotoState(&Klayman::stTurnToUse);
+ break;
+ case 0x481E:
+ GotoState(&Klayman::stReturnFromUse);
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x4820:
+ sendMessage(_parentScene, 0x2000, 0);
+ GotoState(&Klayman::stContinueClimbLadderUp);
+ break;
+ case 0x4821:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4822:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x4823:
+ sendMessage(_parentScene, 0x2001, 0);
+ GotoState(&Klayman::stClimbLadderHalf);
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
KmScene2501::KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 7593bf1..0f2077e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -603,6 +603,13 @@ protected:
void sub415840();
};
+class KmScene2406 : public Klayman {
+public:
+ KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene2501 : public Klayman {
public:
KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 1c52d68..d161389 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -53,6 +53,10 @@ void Module2400::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xB110382D, 0, 2, 1);
_childObject = new Scene2402(_vm, this, which);
break;
+ case 5:
+ // TODO Music18hList_play(0xB110382D, 0, 2, 1);
+ _childObject = new Scene2406(_vm, this, which);
+ break;
}
SetUpdateHandler(&Module2400::updateScene);
_childObject->handleUpdate();
@@ -75,6 +79,16 @@ void Module2400::updateScene() {
else
createScene(0, 1);
break;
+ case 5:
+ if (_moduleResult == 1)
+ createScene(2, 0);
+ else if (_moduleResult == 2)
+ createScene(4, 0);
+ else if (_moduleResult == 3)
+ createScene(8, -1);
+ else
+ createScene(1, 1);
+ break;
}
}
}
@@ -764,4 +778,115 @@ void Scene2402::playPipeSound(uint32 fileHash) {
_soundToggle = !_soundToggle;
}
+Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *tempSprite;
+
+ if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0) {
+ setGlobalVar(0x13382860, 2);
+ }
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2406::handleMessage);
+
+ setRectList(0x004B78C8);
+ insertMouse433(0xB03001A8);
+
+ if (getGlobalVar(0x13382860) == 2) {
+ _class545 = insertSprite<Class545>(this, 2, 1100, 560, 409);
+ _vm->_collisionMan->addSprite(_class545);
+ }
+
+ _asTape = insertSprite<AsScene1201Tape>(this, 5, 1100, 456, 409, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+
+ tempSprite = insertStaticSprite(0x19625293, 1100);
+ _clipRects[0].x1 = 0;
+ _clipRects[0].y1 = 0;
+ _clipRects[0].x2 = tempSprite->getDrawRect().x2();
+ _clipRects[0].y2 = 480;
+
+ if (getGlobalVar(0x18890C91)) {
+ setBackground(0x1A0B0304);
+ setPalette(0x1A0B0304);
+ _sprite1 = insertStaticSprite(0x32923922, 1100);
+ } else {
+ setBackground(0x0A038595);
+ setPalette(0x0A038595);
+ _sprite1 = insertStaticSprite(0x1712112A, 1100);
+ }
+
+ tempSprite = insertStaticSprite(0x22300924, 1300);
+
+ _clipRects[1].x1 = _sprite1->getDrawRect().x;
+ _clipRects[1].y1 = tempSprite->getDrawRect().y;
+ _clipRects[1].x2 = 640;
+ _clipRects[1].y2 = 480;
+
+ if (which < 0) {
+ _flag1 = false;
+ insertKlayman<KmScene2406>(307, 404, _clipRects, 2);
+ setMessageList(0x004B76C8);
+ setRectList(0x004B78C8);
+ } else if (which == 1) {
+ _flag1 = true;
+ insertKlayman<KmScene2406>(253, -16, _clipRects, 2);
+ setMessageList(0x004B76D8);
+ setRectList(0x004B78D8);
+ } else if (which == 2) {
+ _flag1 = false;
+ insertKlayman<KmScene2406>(480, 404, _clipRects, 2);
+ setMessageList(0x004B77C0);
+ setRectList(0x004B78C8);
+ } else if (which == 3) {
+ _flag1 = false;
+ insertKlayman<KmScene2406>(387, 404, _clipRects, 2);
+ setMessageList(0x004B7810);
+ setRectList(0x004B78C8);
+ } else {
+ _flag1 = false;
+ insertKlayman<KmScene2406>(0, 404, _clipRects, 2);
+ setMessageList(0x004B76D0);
+ setRectList(0x004B78C8);
+ }
+
+ tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite->setClipRect(_clipRects[1]);
+
+}
+
+uint32 Scene2406::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x41062804) {
+ if (getGlobalVar(0x18890C91)) {
+ setMessageList(0x004B7758);
+ } else {
+ setMessageList(0x004B7738);
+ }
+ }
+ break;
+ case 0x2000:
+ _flag1 = true;
+ setRectList(0x004B78D8);
+ break;
+ case 0x2001:
+ _flag1 = false;
+ setRectList(0x004B78C8);
+ break;
+ case 0x4826:
+ if (sender == _asTape && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _asTape);
+ setMessageList(0x004B77C8);
+ } else if (sender == _class545 && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _class545);
+ setMessageList(0x004B77D8);
+ }
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index 4367901..9a593d8 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -31,6 +31,7 @@
#include "neverhood/module1100.h"
#include "neverhood/module1200.h"
#include "neverhood/module2100.h"
+#include "neverhood/module2200.h"
namespace Neverhood {
@@ -159,6 +160,18 @@ protected:
void playPipeSound(uint32 fileHash);
};
+class Scene2406 : public Scene {
+public:
+ Scene2406(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_asTape;
+ Sprite *_class545;
+ NRect _clipRects[2];
+ bool _flag1;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2400_H */
Commit: 23864562238cacfc4bdd4d6ddc151e900c89c51d
https://github.com/scummvm/scummvm/commit/23864562238cacfc4bdd4d6ddc151e900c89c51d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2406
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 5be95ee..2b51b6e 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -116,7 +116,10 @@ static const uint32 rectListOffsets[] = {
1, 0x004B3140,
// Scene2402
1, 0x004AF900,
- // Scene2501
+ // Scene2406
+ 1, 0x004B78C8,
+ 1, 0x004B78D8,
+ // Scene2501
1, 0x004B2608,
// Scene2801
1, 0x004B6CE0,
@@ -414,6 +417,16 @@ static const uint32 messageListOffsets[] = {
3, 0x004AF800,
1, 0x004AF818,
2, 0x004AF890,
+ // Scene2406
+ 1, 0x004B76C8,
+ 3, 0x004B76D8,
+ 1, 0x004B77C0,
+ 1, 0x004B7810,
+ 1, 0x004B76D0,
+ 2, 0x004B77C8,
+ 2, 0x004B77D8,
+ 2, 0x004B7758,
+ 4, 0x004B7738,
// Scene2501
7, 0x004B2538,
6, 0x004B2570,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 13bf0bd..a341ae8 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: a94c1fcb8f8b1aac20a20c17a6b4a3bfff931ae6
https://github.com/scummvm/scummvm/commit/a94c1fcb8f8b1aac20a20c17a6b4a3bfff931ae6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2403
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 2b51b6e..eb210f8 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -116,6 +116,9 @@ static const uint32 rectListOffsets[] = {
1, 0x004B3140,
// Scene2402
1, 0x004AF900,
+ // Scene2403
+ 1, 0x004B5E18,
+ 1, 0x004B5E28,
// Scene2406
1, 0x004B78C8,
1, 0x004B78D8,
@@ -417,6 +420,11 @@ static const uint32 messageListOffsets[] = {
3, 0x004AF800,
1, 0x004AF818,
2, 0x004AF890,
+ // Scene2403
+ 1, 0x004B5C98,
+ 1, 0x004B5D70,
+ 4, 0x004B5CA0,
+ 2, 0x004B5D98,
// Scene2406
1, 0x004B76C8,
3, 0x004B76D8,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index a341ae8..26a705e 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 1a581543a79ed90547e9db2d741cab66424d5225
https://github.com/scummvm/scummvm/commit/1a581543a79ed90547e9db2d741cab66424d5225
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Implement Scene2403
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 23f6dbc..19bdc65 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -354,7 +354,7 @@ void GameModule::startup() {
createModule(2500, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 2;
createModule(2400, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index cebf715..957b9ef 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5443,6 +5443,92 @@ void KmScene2402::sub415840() {
SetSpriteUpdate(NULL);
}
+KmScene2403::KmScene2403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::sub420F60);
+ break;
+ case 0x4812:
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case 0x4816:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnPressButton);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x4820:
+ sendMessage(_parentScene, 0x2000, 0);
+ GotoState(&Klayman::stContinueClimbLadderUp);
+ break;
+ case 0x4821:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4822:
+ sendMessage(_parentScene, 0x2000, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x4823:
+ sendMessage(_parentScene, 0x2001, 0);
+ GotoState(&Klayman::stClimbLadderHalf);
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
KmScene2406::KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// TODO Cliprects
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 0f2077e..b752b1e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -603,6 +603,13 @@ protected:
void sub415840();
};
+class KmScene2403 : public Klayman {
+public:
+ KmScene2403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene2406 : public Klayman {
public:
KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index d161389..22ea30b 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -53,6 +53,10 @@ void Module2400::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xB110382D, 0, 2, 1);
_childObject = new Scene2402(_vm, this, which);
break;
+ case 2:
+ // TODO Music18hList_play(0xB110382D, 0, 0, 1);
+ _childObject = new Scene2403(_vm, this, which);
+ break;
case 5:
// TODO Music18hList_play(0xB110382D, 0, 2, 1);
_childObject = new Scene2406(_vm, this, which);
@@ -79,6 +83,14 @@ void Module2400::updateScene() {
else
createScene(0, 1);
break;
+ case 2:
+ if (_moduleResult == 1)
+ createScene(9, -1);
+ else if (_moduleResult == 2)
+ createScene(6, -1);
+ else
+ createScene(5, 1);
+ break;
case 5:
if (_moduleResult == 1)
createScene(2, 0);
@@ -778,6 +790,100 @@ void Scene2402::playPipeSound(uint32 fileHash) {
_soundToggle = !_soundToggle;
}
+Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm) {
+
+ Sprite *tempSprite;
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2403::handleMessage);
+ setBackground(0x0C05060C);
+ setPalette(0x0C05060C);
+ _palette->addPalette(0x414364B0, 0, 65, 0);
+ insertMouse433(0x506080C8);
+ _asTape = insertSprite<AsScene1201Tape>(this, 2, 1100, 480, 454, 0x9148A011);
+ _vm->_collisionMan->addSprite(_asTape);
+ _asLightCord = insertSprite<AsScene2803LightCord>(this, 0xA1095A10, 0x836D3813, 368, 200);
+ _asLightCord->setClipRect(0, 25, 640, 480);
+
+ if (which < 0) {
+ _flag1 = false;
+ insertKlayman<KmScene2403>(220, 449);
+ setMessageList(0x004B5C98);
+ setRectList(0x004B5E18);
+ } else if (which == 1) {
+ _flag1 = false;
+ insertKlayman<KmScene2403>(433, 449);
+ setMessageList(0x004B5D70);
+ setRectList(0x004B5E18);
+ } else if (which == 2) {
+ _flag1 = false;
+ insertKlayman<KmScene2403>(440, 449);
+ _klayman->setDoDeltaX(1);
+ setMessageList(0x004B5C98);
+ setRectList(0x004B5E18);
+ } else {
+ _flag1 = true;
+ insertKlayman<KmScene2403>(122, 599);
+ setMessageList(0x004B5CA0);
+ setRectList(0x004B5E28);
+ }
+
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x3130B0EB, 100, 0);
+ _sprite1 = insertStaticSprite(0x20C24220, 1100);
+ _sprite2 = insertStaticSprite(0x03080900, 1300);
+ tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite->setClipRect(_sprite1->getDrawRect().x, 0, 640, _sprite2->getDrawRect().y2());
+ _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, _sprite2->getDrawRect().y2());
+
+ _soundResource2.load(calcHash("fxFogHornSoft"));
+
+}
+
+uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x040424D0) {
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
+ } else if (param.asInteger() == 0x180CE614) {
+ sendEntityMessage(_klayman, 0x1014, _asLightCord);
+ }
+ break;
+ case 0x2000:
+ _flag1 = true;
+ setRectList(0x004B5E28);
+ break;
+ case 0x2001:
+ _flag1 = false;
+ setRectList(0x004B5E18);
+ break;
+ case 0x480B:
+ if (sender == _ssButton) {
+ if (getSubVar(0x14800353, 0x304008D2)) {
+ setSubVar(0x14800353, 0x304008D2, 0);
+ _soundResource1.play(calcHash("fx3LocksDisable"));
+ } else {
+ setSubVar(0x14800353, 0x304008D2, 1);
+ _soundResource2.play();
+ }
+ }
+ break;
+ case 0x480F:
+ if (sender == _asLightCord) {
+ leaveScene(2);
+ }
+ break;
+ case 0x4826:
+ if (sender == _asTape && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _asTape);
+ setMessageList(0x004B5D98);
+ }
+ break;
+ }
+ return messageResult;
+}
+
Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index 9a593d8..16c1d64 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -32,6 +32,7 @@
#include "neverhood/module1200.h"
#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
+#include "neverhood/module2800.h"
namespace Neverhood {
@@ -160,6 +161,22 @@ protected:
void playPipeSound(uint32 fileHash);
};
+class Scene2403 : public Scene {
+public:
+ Scene2403(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_ssButton;
+ Sprite *_asTape;
+ Sprite *_class545;
+ Sprite *_asLightCord;
+ bool _flag1;
+ SoundResource _soundResource1;
+ SoundResource _soundResource2;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene2406 : public Scene {
public:
Scene2406(NeverhoodEngine *vm, Module *parentModule, int which);
Commit: ee36d5d5e3ae6f5cb357f3d68c711e2fbfbdef8b
https://github.com/scummvm/scummvm/commit/ee36d5d5e3ae6f5cb357f3d68c711e2fbfbdef8b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add remaining scenes in Module2400
Changed paths:
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 22ea30b..02e6225 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -57,10 +57,27 @@ void Module2400::createScene(int sceneNum, int which) {
// TODO Music18hList_play(0xB110382D, 0, 0, 1);
_childObject = new Scene2403(_vm, this, which);
break;
+ case 4:
+ // TODO Music18hList_stop(0xB110382D, 0, 2);
+ _childObject = new DiskplayerScene(_vm, this, 0);
+ break;
case 5:
// TODO Music18hList_play(0xB110382D, 0, 2, 1);
_childObject = new Scene2406(_vm, this, which);
break;
+ case 6:
+ // TODO Music18hList_stop(0xB110382D, 0, 2);
+ createSmackerScene(0x20D80001, true, true, false);
+ break;
+ case 7:
+ _childObject = new Class152(_vm, this, 0x81523218, 0x2321C81D);
+ break;
+ case 8:
+ _childObject = new Class152(_vm, this, 0x08100210, 0x00214089);
+ break;
+ case 9:
+ _childObject = new Class152(_vm, this, 0x8C020505, 0x205018C8);
+ break;
}
SetUpdateHandler(&Module2400::updateScene);
_childObject->handleUpdate();
@@ -91,6 +108,9 @@ void Module2400::updateScene() {
else
createScene(5, 1);
break;
+ case 4:
+ createScene(5, 2);
+ break;
case 5:
if (_moduleResult == 1)
createScene(2, 0);
@@ -101,6 +121,18 @@ void Module2400::updateScene() {
else
createScene(1, 1);
break;
+ case 6:
+ createScene(2, 2);
+ break;
+ case 7:
+ createScene(1, 2);
+ break;
+ case 8:
+ createScene(5, 3);
+ break;
+ case 9:
+ createScene(2, 1);
+ break;
}
}
}
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index 16c1d64..e29f03d 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -33,6 +33,7 @@
#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/module2800.h"
+#include "neverhood/diskplayerscene.h"
namespace Neverhood {
Commit: d1d1596fd136783a7bc4db9264ba1627b8511355
https://github.com/scummvm/scummvm/commit/d1d1596fd136783a7bc4db9264ba1627b8511355
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:41-07:00
Commit Message:
NEVERHOOD: Add support for shadow sprites, used only for the shadow of the car/vehicle thing
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 19bdc65..6245cc8 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -339,7 +339,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 8;
createModule(2600, -1);
#endif
-#if 0
+#if 1
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
@@ -353,7 +353,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2500, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 2;
createModule(2400, -1);
#endif
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 5bb9424..a58cdcb 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -131,6 +131,19 @@ void BaseSurface::copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, N
}
}
+// ShadowSurface
+
+ShadowSurface::ShadowSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height, BaseSurface *shadowSurface)
+ : BaseSurface(vm, priority, width, height), _shadowSurface(shadowSurface) {
+ // Empty
+}
+
+void ShadowSurface::draw() {
+ if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
+ _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent, _shadowSurface->getSurface());
+ }
+}
+
// FontSurface
FontSurface::FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 7725e73..5e91bdb 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -116,6 +116,14 @@ protected:
bool _transparent;
};
+class ShadowSurface : public BaseSurface {
+public:
+ ShadowSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height, BaseSurface *shadowSurface);
+ virtual void draw();
+protected:
+ BaseSurface *_shadowSurface;
+};
+
class FontSurface : public BaseSurface {
public:
FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 3cb2379..84b98af 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -303,9 +303,9 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_currTrackIndex = 0;
}
- // TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- // TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- // TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
insertSprite<Class518>(_class521);
_pointListsCount = 3;
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index c3c046e..756c75e 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -67,9 +67,9 @@ public:
protected:
Class521 *_class521;
Sprite *_class437;
- // TODO Sprite *_class517;
- // TODO Sprite *_class519;
- // TODO Sprite *_class520;
+ Sprite *_class517;
+ Sprite *_class519;
+ Sprite *_class520;
Sprite *_class541;
Sprite *_class542;
Klayman *_kmScene2501;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 862b832..71ce229 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -512,6 +512,19 @@ void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, con
_childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
}
+static const NPoint kClass517Points[] = {
+ {-63, 3},
+ {-48, 40},
+ {-33, 58},
+ { 0, 65},
+ { 40, 53},
+ { 56, 27},
+ { 63, 0},
+ {-30, 26},
+ { 0, 30},
+ { 26, 25}
+};
+
Class437::Class437(NeverhoodEngine *vm, uint32 fileHash)
: StaticSprite(vm, 0) {
@@ -524,6 +537,70 @@ Class437::Class437(NeverhoodEngine *vm, uint32 fileHash)
StaticSprite::update();
}
+Class517::Class517(NeverhoodEngine *vm, AnimatedSprite *class521, BaseSurface *shadowSurface, uint index)
+ : AnimatedSprite(vm, 1100), _class521(class521), _index(index), _animFileHash(0) {
+
+ SetUpdateHandler(&Class517::update);
+ createShadowSurface(shadowSurface, 320, 240, 100); // TODO Use actual dimensions from resource
+ updateShadow();
+}
+
+void Class517::update() {
+ updateShadow();
+ AnimatedSprite::update();
+}
+
+void Class517::updateShadow() {
+ if (_class521->getFrameIndex() != _currFrameIndex || _class521->getCurrAnimFileHash() != _animFileHash) {
+ uint32 fileHash = _class521->getCurrAnimFileHash();
+ if (fileHash == 0x35698F78 || fileHash == 0x192ADD30 || fileHash == 0x9C220DA4 ||
+ fileHash == 0x9966B138 || fileHash == 0xB579A77C || fileHash == 0xA86A9538 ||
+ fileHash == 0xD4220027 || fileHash == 0xD00A1364 || fileHash == 0xD4AA03A4 ||
+ fileHash == 0xF46A0324) {
+ startAnimation(fileHash, _class521->getFrameIndex(), -1);
+ _newStickFrameIndex = _class521->getFrameIndex();
+ }
+ _animFileHash = fileHash;
+ }
+ _x = _class521->getX() + kClass517Points[_index].x;
+ _y = _class521->getY() + kClass517Points[_index].y;
+ if (!_class521->getVisible()) {
+ startAnimation(0x1209E09F, 0, -1);
+ _newStickFrameIndex = 0;
+ }
+ setDoDeltaX(_class521->isDoDeltaX() ? 1 : 0);
+}
+
+Class519::Class519(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, uint index)
+ : AnimatedSprite(vm, 1100), _class521(class521), _index(index) {
+
+ SetUpdateHandler(&Class519::update);
+ createShadowSurface1(shadowSurface, 0x60281C10, 150);
+ startAnimation(0x60281C10, -1, -1);
+ _newStickFrameIndex = -2;
+}
+
+void Class519::update() {
+ _x = _class521->getX() + kClass517Points[_index].x;
+ _y = _class521->getY() + kClass517Points[_index].y;
+ AnimatedSprite::update();
+}
+
+Class520::Class520(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, int16 frameIndex)
+ : AnimatedSprite(vm, 1100), _class521(class521) {
+
+ SetUpdateHandler(&Class520::update);
+ createShadowSurface1(shadowSurface, 0x0759129C, 100);
+ startAnimation(0x0759129C, frameIndex, -1);
+ _newStickFrameIndex = frameIndex;
+}
+
+void Class520::update() {
+ _x = _class521->getX();
+ _y = _class521->getY();
+ AnimatedSprite::update();
+}
+
Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -546,17 +623,20 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
clipRect.set(0, 0, 640, _sprite1->getDrawRect().x2());
if (sceneInfo->class437Filename) {
- _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
+
+ _class437 = createSprite<Class437>(sceneInfo->class437Filename);
+ addEntity(_class437);
+
_class521 = insertSprite<Class521>(this, 320, 240);
-//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
-//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
-//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
} else {
_class437 = NULL;
_class521 = insertSprite<Class521>(this, 320, 240);
}
-//TODO _class518 = insertSprite<Class518>(_class521);
+ _class518 = insertSprite<Class518>(_class521);
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
@@ -578,7 +658,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
}
_class521->setClipRect(clipRect);
- // TODO _class518->setClipRect(clipRect);
+ _class518->setClipRect(clipRect);
if (which == 1) {
SetMessageHandler(&Scene2701::handleMessage42F500);
@@ -654,12 +734,14 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B04180);
- _class437 = insertSprite<Class437>(0x12002035);
+ _class437 = createSprite<Class437>(0x12002035);
+ addEntity(_class437);
+
_class521 = insertSprite<Class521>(this, 320, 240);
- //TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- //TODO insertSprite<Class518>(_class521);
- //TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- //TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ insertSprite<Class518>(_class521);
+ _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
_dataResource.load(0x04310014);
@@ -828,18 +910,21 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
insertMouse433(sceneInfo->mouseCursorFilename);
if (sceneInfo->class437Filename) {
- _class437 = insertSprite<Class437>(sceneInfo->class437Filename);
+
+ _class437 = createSprite<Class437>(sceneInfo->class437Filename);
+ addEntity(_class437);
+
_class521 = insertSprite<Class521>(this, 320, 240);
-//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
-//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
-//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
} else {
_class437 = NULL;
-//TODO _class517 = NULL;
+ _class517 = NULL;
_class521 = insertSprite<Class521>(this, 320, 240);
}
-//TODO _class518 = insertSprite<Class518>(_class521);
+ _class518 = insertSprite<Class518>(_class521);
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
@@ -871,7 +956,6 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
if (clipRect) {
_class521->getClipRect() = *clipRect;
-#if 0
if (_class517)
_class517->getClipRect() = *clipRect;
if (_class520)
@@ -880,7 +964,6 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_class519->getClipRect() = *clipRect;
if (_class518)
_class518->getClipRect() = *clipRect;
-#endif
}
}
@@ -932,12 +1015,14 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B8C180);
- _class437 = insertSprite<Class437>(0x18808B88);
+ _class437 = createSprite<Class437>(0x18808B88);
+ addEntity(_class437);
+
_class521 = insertSprite<Class521>(this, 320, 240);
-//TODO _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
-//TODO _class518 = insertSprite<Class518>(_class521);
-//TODO _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
-//TODO _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
+ _class518 = insertSprite<Class518>(_class521);
+ _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
_dataResource.load(0x06000162);
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index f1ef3f5..bed9a7d 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -58,6 +58,34 @@ public:
Class437(NeverhoodEngine *vm, uint32 fileHash);
};
+class Class517 : public AnimatedSprite {
+public:
+ Class517(NeverhoodEngine *vm, AnimatedSprite *class521, BaseSurface *shadowSurface, uint index);
+protected:
+ uint _index;
+ AnimatedSprite *_class521;
+ uint32 _animFileHash;
+ void update();
+ void updateShadow();
+};
+
+class Class519 : public AnimatedSprite {
+public:
+ Class519(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, uint index);
+protected:
+ uint _index;
+ Sprite *_class521;
+ void update();
+};
+
+class Class520 : public AnimatedSprite {
+public:
+ Class520(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, int16 frameIndex);
+protected:
+ Sprite *_class521;
+ void update();
+};
+
class Scene2701 : public Scene {
public:
Scene2701(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -104,6 +132,10 @@ public:
protected:
Class521 *_class521;
Sprite *_class437;
+ Sprite *_class517;
+ Sprite *_class518;
+ Sprite *_class520;
+ Sprite *_class519;
int _which1, _which2;
NPointArray *_trackPoints;
NRectArray *_rectList;
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 351e51a..dfc5358 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -36,6 +36,7 @@ Screen::Screen(NeverhoodEngine *vm)
}
Screen::~Screen() {
+ _backScreen->free();
delete _backScreen;
}
@@ -94,16 +95,17 @@ void Screen::clear() {
memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
}
-void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent) {
+void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent,
+ const Graphics::Surface *shadowSurface) {
int16 destX, destY;
NRect ddRect;
-
+
if (drawRect.x + drawRect.width >= clipRect.x2)
ddRect.x2 = clipRect.x2 - drawRect.x;
else
ddRect.x2 = drawRect.width;
-
+
if (drawRect.x < clipRect.x1) {
destX = clipRect.x1;
ddRect.x1 = clipRect.x1 - drawRect.x;
@@ -127,7 +129,7 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
//debug(2, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
- blit(surface, destX, destY, ddRect, transparent);
+ blit(surface, destX, destY, ddRect, transparent, shadowSurface);
// Useful for debugging
//_backScreen->frameRect(Common::Rect(clipRect.x1, clipRect.y1, clipRect.x2, clipRect.y2), 250);
@@ -171,7 +173,8 @@ void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, ND
}
-void Screen::blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent) {
+void Screen::blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent,
+ const Graphics::Surface *shadowSurface) {
const byte *source = (const byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
@@ -181,7 +184,17 @@ void Screen::blit(const Graphics::Surface *surface, int16 destX, int16 destY, NR
if (width <= 0 || height <= 0)
return;
- if (!transparent) {
+ if (shadowSurface) {
+ const byte *shadowSource = (const byte*)shadowSurface->getBasePtr(destX, destY);
+ while (height--) {
+ for (int xc = 0; xc < width; xc++)
+ if (source[xc] != 0)
+ dest[xc] = shadowSource[xc];
+ source += surface->pitch;
+ shadowSource += shadowSurface->pitch;
+ dest += _backScreen->pitch;
+ }
+ } else if (!transparent) {
while (height--) {
memcpy(dest, source, width);
source += surface->pitch;
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index e813e63..07be04c 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -42,9 +42,12 @@ public:
void testPalette(byte *paletteData);
void updatePalette();
void clear();
- void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent);
+ void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent,
+ const Graphics::Surface *shadowSurface = NULL);
void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent);
- void blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent);
+ void drawShadowSurface(const Graphics::Surface *surface, const Graphics::Surface *shadowSurface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect);
+ void blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent,
+ const Graphics::Surface *shadowSurface = NULL);
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent);
protected:
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index b68434b..66f1178 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -28,7 +28,7 @@ namespace Neverhood {
Sprite::Sprite(NeverhoodEngine *vm, int objectPriority)
: Entity(vm, objectPriority), _x(0), _y(0), _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
- _dataResource(vm), _doDeltaX(false), _doDeltaY(false), _needRefresh(false), _flags(0) {
+ _dataResource(vm), _doDeltaX(false), _doDeltaY(false), _needRefresh(false), _flags(0), _surface(NULL) {
_name = "Sprite";
SetMessageHandler(&Sprite::handleMessage);
@@ -438,6 +438,15 @@ void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
_surface = new BaseSurface(_vm, surfacePriority, dimensions.width, dimensions.height);
}
+void AnimatedSprite::createShadowSurface1(BaseSurface *shadowSurface, uint32 fileHash, int surfacePriority) {
+ NDimensions dimensions = _animResource.loadSpriteDimensions(fileHash);
+ _surface = new ShadowSurface(_vm, surfacePriority, dimensions.width, dimensions.height, shadowSurface);
+}
+
+void AnimatedSprite::createShadowSurface(BaseSurface *shadowSurface, int16 width, int16 height, int surfacePriority) {
+ _surface = new ShadowSurface(_vm, surfacePriority, width, height, shadowSurface);
+}
+
void AnimatedSprite::startAnimation(uint32 fileHash, int16 plFirstFrameIndex, int16 plLastFrameIndex) {
debug(2, "AnimatedSprite::startAnimation(%08X, %d, %d)", fileHash, plFirstFrameIndex, plLastFrameIndex);
_newAnimFileHash = fileHash;
@@ -506,7 +515,7 @@ void AnimatedSprite::gotoNextState() {
if (_nextStateCb) {
_currStateCb = _nextStateCb;
_nextStateCb = NULL;
- debug("Fire _nextStateCb '%s'", _nextStateCbName.c_str());
+ //debug("Fire _nextStateCb '%s'", _nextStateCbName.c_str());
(this->*_currStateCb)();
#if 0 // TODO
} else if (_callbackList) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index bc7c0a5..d34704d 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -58,6 +58,7 @@ public:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void loadDataResource(uint32 fileHash);
int16 defFilterY(int16 y);
+ bool getVisible() const { return _surface->getVisible(); }
void setVisible(bool value) { _surface->setVisible(value); }
NDrawRect& getDrawRect() { return _surface->getDrawRect(); }
// Some shortcuts to set the clipRect
@@ -157,6 +158,8 @@ protected:
void updateFrameIndex();
void updateFrameInfo();
void createSurface1(uint32 fileHash, int surfacePriority);
+ void createShadowSurface1(BaseSurface *shadowSurface, uint32 fileHash, int surfacePriority);
+ void createShadowSurface(BaseSurface *shadowSurface, int16 width, int16 height, int surfacePriority);
void stopAnimation();
void startAnimationByHash(uint32 fileHash, uint32 plFirstFrameHash, uint32 plLastFrameHash);
void nextAnimationByHash(uint32 fileHash2, uint32 plFirstFrameHash, uint32 plLastFrameHash);
Commit: 96153bfe04fff5edc8253226125b225cee6681a0
https://github.com/scummvm/scummvm/commit/96153bfe04fff5edc8253226125b225cee6681a0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: Implement TextSurface, used in the save/load menus
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index a58cdcb..b1597f2 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -168,6 +168,40 @@ void FontSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const b
}
}
+// TextSurface
+
+TextSurface::TextSurface(NeverhoodEngine *vm, uint32 fileHash, uint16 numRows, uint charCount,
+ byte firstChar, uint16 charWidth, uint16 charHeight)
+ : BaseSurface(vm, 0, charWidth * charCount, charHeight * numRows),
+ _numRows(numRows), _firstChar(firstChar), _charWidth(charWidth), _charHeight(charHeight),
+ _fileHash(fileHash), _charCount(charCount) {
+
+ SpriteResource spriteResource(_vm);
+ spriteResource.load2(_fileHash);
+ drawSpriteResourceEx(spriteResource, false, false, 0, 0);
+}
+
+void TextSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr) {
+ NDrawRect sourceRect;
+ chr -= _firstChar;
+ sourceRect.x = (chr % 16) * _charWidth;
+ sourceRect.y = (chr / 16) * _charHeight;
+ sourceRect.width = _charWidth;
+ sourceRect.height = _charHeight;
+ destSurface->copyFrom(_surface, x, y, sourceRect, true);
+}
+
+void TextSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen) {
+ for (; stringLen > 0; stringLen--, string++) {
+ drawChar(destSurface, x, y, *string);
+ x += _charWidth;
+ }
+}
+
+int16 TextSurface::getStringWidth(const byte *string, int stringLen) {
+ return string ? stringLen * _charWidth : 0;
+}
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 5e91bdb..3b30b25 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -137,6 +137,22 @@ protected:
uint16 _charHeight;
};
+class TextSurface : public BaseSurface {
+public:
+ TextSurface(NeverhoodEngine *vm, uint32 fileHash, uint16 numRows, uint charCount,
+ byte firstChar, uint16 charWidth, uint16 charHeight);
+ void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
+ void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen);
+ int16 getStringWidth(const byte *string, int stringLen);
+protected:
+ uint16 _numRows;
+ byte _firstChar;
+ uint16 _charWidth;
+ uint16 _charHeight;
+ uint32 _fileHash;
+ uint _charCount;
+};
+
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels);
Commit: 65afa25c9f2862fffba5e8a0588547ef52854b35
https://github.com/scummvm/scummvm/commit/65afa25c9f2862fffba5e8a0588547ef52854b35
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: Implement the SoundMan; no sound is played yet since the important code doesn't exist yet
Changed paths:
A engines/neverhood/sound.cpp
A engines/neverhood/sound.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 694d92d..f9f349b 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -41,6 +41,7 @@ MODULE_OBJS = \
screen.o \
smackerscene.o \
smackerplayer.o \
+ sound.o \
sprite.o \
staticdata.o
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 7fa6fb0..abd9374 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -35,6 +35,7 @@
#include "neverhood/resourceman.h"
#include "neverhood/resource.h"
#include "neverhood/screen.h"
+#include "neverhood/sound.h"
#include "neverhood/staticdata.h"
namespace Neverhood {
@@ -98,6 +99,8 @@ Common::Error NeverhoodEngine::run() {
#if 1
+ _soundMan = new SoundMan(this);
+
_collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
@@ -145,6 +148,7 @@ Common::Error NeverhoodEngine::run() {
delete _gameModule;
delete _collisionMan;
+ delete _soundMan;
#endif
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index b7c276e..13ea399 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -45,6 +45,7 @@ class GameModule;
class GameVars;
class ResourceMan;
class Screen;
+class SoundMan;
class StaticData;
struct NPoint;
@@ -84,6 +85,8 @@ public:
GameModule *_gameModule;
StaticData *_staticData;
CollisionMan *_collisionMan;
+
+ SoundMan *_soundMan;
public:
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 65f98a8..7b0aa94 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -654,12 +654,18 @@ bool SoundResource::isPlaying() {
void SoundResource::load(uint32 fileHash) {
}
+void SoundResource::unload() {
+}
+
void SoundResource::play(uint32 fileHash, bool looping) {
}
void SoundResource::play() {
}
+void SoundResource::setVolume(int volume) {
+}
+
uint32 calcHash(const char *value) {
uint32 hash = 0, shiftValue = 0;
while (*value != 0) {
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 6436509..b0cd464 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -198,9 +198,11 @@ public:
SoundResource(NeverhoodEngine *vm);
bool isPlaying();
void load(uint32 fileHash);
+ void unload();
void play(uint32 fileHash, bool looping = false);
void play();
void stop() { /*DUMMY*/ }
+ void setVolume(int volume);
protected:
NeverhoodEngine *_vm;
};
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
new file mode 100644
index 0000000..38ccce9
--- /dev/null
+++ b/engines/neverhood/sound.cpp
@@ -0,0 +1,413 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/palette.h"
+#include "neverhood/sound.h"
+
+namespace Neverhood {
+
+// TODO Put more stuff into the constructors/destructors of the item structs
+// TODO Some parts are quite bad here, but my priority is to get sound working at all
+
+MusicResource::MusicResource(NeverhoodEngine *vm)
+ : _vm(vm) {
+}
+
+bool MusicResource::isPlaying() {
+ return false;
+}
+
+void MusicResource::load(uint32 fileHash) {
+ // TODO
+}
+
+void MusicResource::unload() {
+ // TODO
+}
+
+void MusicResource::play(int16 fadeVolumeStep) {
+ // TODO
+}
+
+void MusicResource::stop(int16 fadeVolumeStep) {
+ // TODO
+}
+
+SoundMan::SoundMan(NeverhoodEngine *vm)
+ : _vm(vm),
+ _soundIndex1(-1), _soundIndex2(-1), _soundIndex3(-1) {
+}
+
+SoundMan::~SoundMan() {
+ // TODO Clean up
+}
+
+void SoundMan::addMusic(uint32 nameHash, uint32 musicFileHash) {
+ MusicItem *musicItem = new MusicItem();
+ musicItem->_nameHash = nameHash;
+ musicItem->_musicFileHash = musicFileHash;
+ musicItem->_play = false;
+ musicItem->_stop = false;
+ musicItem->_fadeVolumeStep = 0;
+ musicItem->_countdown = 24;
+ musicItem->_musicResource = new MusicResource(_vm);
+ musicItem->_musicResource->load(musicFileHash);
+ // TODO Is this needed? musicItem->_musicResource->init();
+ _musicItems.push_back(musicItem);
+}
+
+void SoundMan::deleteMusic(uint32 musicFileHash) {
+ for (uint i = 0; i < _musicItems.size(); ++i) {
+ MusicItem *musicItem = _musicItems[i];
+ if (musicItem->_musicFileHash == musicFileHash) {
+ musicItem->_musicResource->unload();
+ delete musicItem->_musicResource;
+ delete musicItem;
+ _musicItems.remove_at(i);
+ break;
+ }
+ }
+}
+
+void SoundMan::startMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep) {
+ for (uint i = 0; i < _musicItems.size(); ++i) {
+ MusicItem *musicItem = _musicItems[i];
+ if (musicItem->_musicFileHash == musicFileHash) {
+ musicItem->_play = true;
+ musicItem->_stop = false;
+ musicItem->_countdown = countdown;
+ musicItem->_fadeVolumeStep = fadeVolumeStep;
+ break;
+ }
+ }
+}
+
+void SoundMan::stopMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep) {
+ for (uint i = 0; i < _musicItems.size(); ++i) {
+ MusicItem *musicItem = _musicItems[i];
+ if (musicItem->_musicFileHash == musicFileHash) {
+ musicItem->_play = false;
+ musicItem->_stop = true;
+ musicItem->_countdown = countdown;
+ musicItem->_fadeVolumeStep = fadeVolumeStep;
+ break;
+ }
+ }
+}
+
+void SoundMan::addSound(uint32 nameHash, uint32 soundFileHash) {
+ SoundItem *soundItem = new SoundItem();
+ soundItem->_nameHash = nameHash;
+ soundItem->_soundFileHash = soundFileHash;
+ soundItem->_playOnceAfterRandomCountdown = false;
+ soundItem->_minCountdown = 50;
+ soundItem->_maxCountdown = 600;
+ soundItem->_playOnceAfterCountdown = false;
+ soundItem->_initialCountdown = 0;
+ soundItem->_playLooping = false;
+ soundItem->_currCountdown = 0;
+ soundItem->_soundResource = new SoundResource(_vm);
+ soundItem->_soundResource->load(soundFileHash);
+ _soundItems.push_back(soundItem);
+}
+
+void SoundMan::addSoundList(uint32 nameHash, uint32 *soundFileHashList) {
+ while (*soundFileHashList)
+ addSound(nameHash, *soundFileHashList++);
+}
+
+void SoundMan::deleteSound(uint32 soundFileHash) {
+ for (uint i = 0; i < _soundItems.size(); ++i) {
+ SoundItem *soundItem = _soundItems[i];
+ if (soundItem->_soundFileHash == soundFileHash) {
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(i);
+ break;
+ }
+ }
+}
+
+void SoundMan::setSoundParams(uint32 soundFileHash, bool playOnceAfterRandomCountdown,
+ int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown) {
+
+ SoundItem *soundItem = getSoundItemByHash(soundFileHash);
+ if (soundItem) {
+ soundItem->_playOnceAfterCountdown = false;
+ soundItem->_playLooping = false;
+ soundItem->_playOnceAfterRandomCountdown = playOnceAfterRandomCountdown;
+ if (minCountdown > 0)
+ soundItem->_minCountdown = minCountdown;
+ if (maxCountdown > 0)
+ soundItem->_maxCountdown = maxCountdown;
+ if (firstMinCountdown >= firstMaxCountdown)
+ soundItem->_currCountdown = firstMinCountdown;
+ else if (firstMinCountdown > 0 && firstMaxCountdown > 0 && firstMinCountdown < firstMaxCountdown)
+ soundItem->_currCountdown = _vm->_rnd->getRandomNumberRng(firstMinCountdown, firstMaxCountdown);
+ }
+}
+
+void SoundMan::setSoundListParams(uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
+ int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown) {
+
+ while (*soundFileHashList)
+ setSoundParams(*soundFileHashList++, playOnceAfterRandomCountdown,
+ minCountdown, maxCountdown, firstMinCountdown, firstMaxCountdown);
+}
+
+void SoundMan::playSoundLooping(uint32 soundFileHash) {
+ SoundItem *soundItem = getSoundItemByHash(soundFileHash);
+ if (soundItem) {
+ soundItem->_playOnceAfterRandomCountdown = false;
+ soundItem->_playOnceAfterCountdown = false;
+ soundItem->_playLooping = true;
+ }
+}
+
+void SoundMan::stopSound(uint32 soundFileHash) {
+ SoundItem *soundItem = getSoundItemByHash(soundFileHash);
+ if (soundItem) {
+ soundItem->_playOnceAfterRandomCountdown = false;
+ soundItem->_playOnceAfterCountdown = false;
+ soundItem->_playLooping = false;
+ soundItem->_soundResource->stop();
+ }
+}
+
+void SoundMan::setSoundVolume(uint32 soundFileHash, int volume) {
+ SoundItem *soundItem = getSoundItemByHash(soundFileHash);
+ if (soundItem)
+ soundItem->_soundResource->setVolume(volume);
+}
+
+void SoundMan::update() {
+ // TODO Check if active
+
+ for (uint i = 0; i < _soundItems.size(); ++i) {
+ SoundItem *soundItem = _soundItems[i];
+ if (soundItem->_playOnceAfterCountdown) {
+ if (soundItem->_currCountdown == 0) {
+ soundItem->_currCountdown = soundItem->_initialCountdown;
+ } else if (--soundItem->_currCountdown == 0) {
+ soundItem->_soundResource->play();
+ }
+ } else if (soundItem->_playOnceAfterRandomCountdown) {
+ if (soundItem->_currCountdown == 0) {
+ if (soundItem->_minCountdown > 0 && soundItem->_maxCountdown > 0 && soundItem->_minCountdown < soundItem->_maxCountdown)
+ soundItem->_currCountdown = _vm->_rnd->getRandomNumberRng(soundItem->_minCountdown, soundItem->_maxCountdown);
+ } else if (--soundItem->_currCountdown == 0) {
+ soundItem->_soundResource->play();
+ }
+ } else if (soundItem->_playLooping && !soundItem->_soundResource->isPlaying()) {
+ soundItem->_soundResource->play(); // TODO Looping parameter?
+ }
+ }
+
+ for (uint i = 0; i < _musicItems.size(); ++i) {
+ MusicItem *musicItem = _musicItems[i];
+ if (musicItem->_countdown) {
+ --musicItem->_countdown;
+ } else if (musicItem->_play && !musicItem->_musicResource->isPlaying()) {
+ musicItem->_musicResource->play(musicItem->_fadeVolumeStep);
+ musicItem->_fadeVolumeStep = 0;
+ } else if (musicItem->_stop) {
+ musicItem->_musicResource->stop(musicItem->_fadeVolumeStep);
+ musicItem->_fadeVolumeStep = 0;
+ musicItem->_stop = false;
+ }
+ }
+
+}
+
+void SoundMan::deleteGroup(uint32 nameHash) {
+ deleteMusicGroup(nameHash);
+ deleteSoundGroup(nameHash);
+}
+
+void SoundMan::deleteMusicGroup(uint32 nameHash) {
+ for (int index = _musicItems.size() - 1; index >= 0; --index) {
+ MusicItem *musicItem = _musicItems[index];
+ if (musicItem->_nameHash == nameHash) {
+ musicItem->_musicResource->unload();
+ delete musicItem->_musicResource;
+ delete musicItem;
+ _musicItems.remove_at(index);
+ }
+ }
+}
+
+void SoundMan::deleteSoundGroup(uint32 nameHash) {
+
+ SoundItem *soundItem;
+
+ if (_soundIndex1 != -1 && _soundItems[_soundIndex1]->_nameHash == nameHash) {
+ soundItem = _soundItems[_soundIndex1];
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(_soundIndex1);
+ _soundIndex1 = -1;
+ }
+
+ if (_soundIndex2 != -1 && _soundItems[_soundIndex2]->_nameHash == nameHash) {
+ soundItem = _soundItems[_soundIndex2];
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(_soundIndex2);
+ _soundIndex2 = -1;
+ }
+
+ for (int index = _soundItems.size() - 1; index >= 0; --index) {
+ soundItem = _soundItems[index];
+ if (soundItem->_nameHash == nameHash) {
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(index);
+ }
+ }
+
+}
+
+void SoundMan::playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soundFileHash2, int16 initialCountdown) {
+
+ SoundItem *soundItem;
+ int16 currCountdown1 = _initialCountdown;
+ int16 currCountdown2 = _initialCountdown / 2;
+
+ if (_soundIndex1 != -1) {
+ soundItem = _soundItems[_soundIndex1];
+ currCountdown1 = soundItem->_currCountdown;
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(_soundIndex1);
+ _soundIndex1 = -1;
+ }
+
+ if (_soundIndex2 != -1) {
+ soundItem = _soundItems[_soundIndex2];
+ currCountdown2 = soundItem->_currCountdown;
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(_soundIndex2);
+ _soundIndex2 = -1;
+ }
+
+ if (initialCountdown > 0)
+ _initialCountdown = initialCountdown;
+
+ if (soundFileHash1 != 0) {
+ soundItem = new SoundItem();
+ soundItem->_nameHash = nameHash;
+ soundItem->_soundFileHash = soundFileHash1;
+ soundItem->_playOnceAfterRandomCountdown = false;
+ soundItem->_minCountdown = 0;
+ soundItem->_maxCountdown = 0;
+ soundItem->_playOnceAfterCountdown = _playOnceAfterCountdown;
+ soundItem->_initialCountdown = _initialCountdown;
+ soundItem->_playLooping = false;
+ soundItem->_currCountdown = currCountdown1;
+ soundItem->_soundResource = new SoundResource(_vm);
+ soundItem->_soundResource->load(soundFileHash1);
+ soundItem->_soundResource->setVolume(80);
+ _soundIndex1 = _soundItems.size();
+ _soundItems.push_back(soundItem);
+ }
+
+ if (soundFileHash2 != 0) {
+ soundItem = new SoundItem();
+ soundItem->_nameHash = nameHash;
+ soundItem->_soundFileHash = soundFileHash2;
+ soundItem->_playOnceAfterRandomCountdown = false;
+ soundItem->_minCountdown = 0;
+ soundItem->_maxCountdown = 0;
+ soundItem->_playOnceAfterCountdown = _playOnceAfterCountdown;
+ soundItem->_initialCountdown = _initialCountdown;
+ soundItem->_playLooping = false;
+ soundItem->_currCountdown = currCountdown2;
+ soundItem->_soundResource = new SoundResource(_vm);
+ soundItem->_soundResource->load(soundFileHash2);
+ soundItem->_soundResource->setVolume(80);
+ _soundIndex2 = _soundItems.size();
+ _soundItems.push_back(soundItem);
+ }
+
+}
+
+void SoundMan::playSoundThree(uint32 nameHash, uint32 soundFileHash) {
+
+ SoundItem *soundItem;
+
+ if (_soundIndex3 != -1) {
+ soundItem = _soundItems[_soundIndex3];
+ soundItem->_soundResource->unload();
+ delete soundItem->_soundResource;
+ delete soundItem;
+ _soundItems.remove_at(_soundIndex3);
+ _soundIndex3 = -1;
+ }
+
+ if (soundFileHash != 0) {
+ soundItem = new SoundItem();
+ soundItem->_nameHash = nameHash;
+ soundItem->_soundFileHash = soundFileHash;
+ soundItem->_playOnceAfterRandomCountdown = false;
+ soundItem->_minCountdown = 0;
+ soundItem->_maxCountdown = 0;
+ soundItem->_playOnceAfterCountdown = false;
+ soundItem->_initialCountdown = _initialCountdown3;
+ soundItem->_playLooping = false;
+ soundItem->_currCountdown = 0;
+ soundItem->_soundResource = new SoundResource(_vm);
+ soundItem->_soundResource->load(soundFileHash);
+ _soundIndex2 = _soundItems.size();
+ _soundItems.push_back(soundItem);
+ }
+
+}
+
+void SoundMan::setTwoSoundsPlayFlag(bool playOnceAfterCountdown) {
+ if (_soundIndex1 != -1)
+ _soundItems[_soundIndex1]->_playOnceAfterCountdown = playOnceAfterCountdown;
+ if (_soundIndex2 != -1)
+ _soundItems[_soundIndex2]->_playOnceAfterCountdown = playOnceAfterCountdown;
+ _playOnceAfterCountdown = playOnceAfterCountdown;
+}
+
+void SoundMan::setSoundThreePlayFlag(bool playOnceAfterCountdown) {
+ if (_soundIndex3 != -1)
+ _soundItems[_soundIndex3]->_playOnceAfterCountdown = playOnceAfterCountdown;
+ _playOnceAfterCountdown3 = playOnceAfterCountdown;
+}
+
+SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ if (_soundItems[i]->_soundFileHash == soundFileHash)
+ return _soundItems[i];
+ return NULL;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
new file mode 100644
index 0000000..66ed700
--- /dev/null
+++ b/engines/neverhood/sound.h
@@ -0,0 +1,122 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_SOUND_H
+#define NEVERHOOD_SOUND_H
+
+#include "common/array.h"
+#include "graphics/surface.h"
+#include "neverhood/neverhood.h"
+#include "neverhood/resource.h"
+
+namespace Neverhood {
+
+class MusicResource {
+public:
+ MusicResource(NeverhoodEngine *vm);
+ bool isPlaying();
+ void load(uint32 fileHash);
+ void unload();
+ void play(int16 fadeVolumeStep);
+ void stop(int16 fadeVolumeStep);
+protected:
+ NeverhoodEngine *_vm;
+};
+
+struct MusicItem {
+ uint32 _nameHash;
+ uint32 _musicFileHash;
+ bool _play;
+ bool _stop;
+ int16 _fadeVolumeStep;
+ int16 _countdown;
+ MusicResource *_musicResource;
+};
+
+struct SoundItem {
+ uint32 _nameHash;
+ uint32 _soundFileHash;
+ bool _playOnceAfterRandomCountdown;
+ int16 _minCountdown;
+ int16 _maxCountdown;
+ bool _playOnceAfterCountdown;
+ int16 _initialCountdown;
+ bool _playLooping;
+ int16 _currCountdown;
+ SoundResource *_soundResource;
+};
+
+class SoundMan {
+public:
+ SoundMan(NeverhoodEngine *vm);
+ ~SoundMan();
+
+ // Music
+ void addMusic(uint32 nameHash, uint32 musicFileHash);
+ void deleteMusic(uint32 musicFileHash);
+ void startMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep);
+ void stopMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep);
+
+ // Sound
+ void addSound(uint32 nameHash, uint32 soundFileHash);
+ void addSoundList(uint32 nameHash, uint32 *soundFileHashList);
+ void deleteSound(uint32 soundFileHash);
+ void setSoundParams(uint32 soundFileHash, bool playOnceAfterRandomCountdown,
+ int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown);
+ void setSoundListParams(uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
+ int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown);
+ void playSoundLooping(uint32 soundFileHash);
+ void stopSound(uint32 soundFileHash);
+ void setSoundVolume(uint32 soundFileHash, int volume);
+
+ // Misc
+ void update();
+ void deleteGroup(uint32 nameHash);
+ void deleteMusicGroup(uint32 nameHash);
+ void deleteSoundGroup(uint32 nameHash);
+ void playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soundFileHash2, int16 initialCountdown);
+ void playSoundThree(uint32 nameHash, uint32 soundFileHash);
+ void setTwoSoundsPlayFlag(bool playOnceAfterCountdown);
+ void setSoundThreePlayFlag(bool playOnceAfterCountdown);
+
+protected:
+ NeverhoodEngine *_vm;
+
+ // TODO Find out what these special sounds are used for (door sounds?)
+ int _soundIndex1, _soundIndex2;
+ int16 _initialCountdown;
+ bool _playOnceAfterCountdown;
+
+ int _soundIndex3;
+ int16 _initialCountdown3;
+ bool _playOnceAfterCountdown3;
+
+ Common::Array<MusicItem*> _musicItems;
+ Common::Array<SoundItem*> _soundItems;
+
+ SoundItem *getSoundItemByHash(uint32 soundFileHash);
+
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_SOUND_H */
Commit: 0bb70c39f084dc122d213b07b1ef2d946608fe88
https://github.com/scummvm/scummvm/commit/0bb70c39f084dc122d213b07b1ef2d946608fe88
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: More work on the SoundMan
- Also changed all sound related function calls which are still TODO to the new names
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/sound.cpp
engines/neverhood/sound.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6245cc8..e2494af 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -51,17 +51,17 @@ GameModule::GameModule(NeverhoodEngine *vm)
// Other initializations moved to actual engine class
// TODO
- // TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
+ // TODO SoundMan_playSoundThree(0x2D0031, 0x8861079);
SetMessageHandler(&GameModule::handleMessage);
}
GameModule::~GameModule() {
- // TODO Sound1ChList_sub_407AF0(0x2D0031);
+ // TODO SoundMan_deleteSoundGroup(0x2D0031);
delete _childObject;
_childObject = NULL;
// TODO: Set palette to black but probably not neccessary
- // TODO Sound1ChList_sub_408480();
+ // TODO SoundMan_deinit();
// TODO Set debug vars (maybe)
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 957b9ef..ca30e3b 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -4733,11 +4733,11 @@ void KmScene2205::sub423980() {
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // TODO Sound1ChList_addSoundResource(0x80101800, 0xD3B02847);
+ // TODO SoundMan_addSound(0x80101800, 0xD3B02847);
}
KmScene2206::~KmScene2206() {
- // TODO Sound1ChList_sub_407AF0(0x80101800);
+ // TODO SoundMan_deleteSoundGroup(0x80101800);
}
void KmScene2206::xUpdate() {
@@ -4852,7 +4852,7 @@ void KmScene2206::sub482490() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(&KmScene2206::spriteUpdate482450);
- // TODO Sound1ChList_playLooping(0xD3B02847);
+ // TODO SoundMan_playSoundLooping(0xD3B02847);
}
}
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index edd9860..1c30681 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -31,8 +31,8 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
_musicFileHash = getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144;
- // TODO Music18hList_add(0x03294419, 0x061880C6);
- // TODO Music18hList_add(0x03294419, _musicFileHash);
+ // TODO SoundMan_addMusic(0x03294419, 0x061880C6);
+ // TODO SoundMan_addMusic(0x03294419, _musicFileHash);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -45,7 +45,7 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1000::~Module1000() {
- // TODO Music18hList_deleteGroup(0x03294419);
+ // TODO SoundMan_deleteMusicGroup(0x03294419);
}
void Module1000::createScene(int sceneNum, int which) {
@@ -53,24 +53,24 @@ void Module1000::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Music18hList_play(0x061880C6, 0, 0, 1);
+ // TODO SoundMan_startMusic(0x061880C6, 0, 0, 1);
_childObject = new Scene1001(_vm, this, which);
break;
case 1:
- // TODO Music18hList_play(0x061880C6, 0, 0, 1);
+ // TODO SoundMan_startMusic(0x061880C6, 0, 0, 1);
_childObject = new Scene1002(_vm, this, which);
break;
case 2:
- // TODO Music18hList_play(0x061880C6, 0, 0);
+ // TODO SoundMan_startMusic(0x061880C6, 0, 0);
_childObject = new Class152(_vm, this, 0xC084110C, 0x41108C00);
break;
case 3:
- // TODO Music18hList_stop(0x061880C6, 0, 2);
+ // TODO SoundMan_stopMusic(0x061880C6, 0, 2);
_childObject = new Scene1004(_vm, this, which);
break;
case 4:
- // TODO Music18hList_stop(0x061880C6, 0, 0);
- // TODO Music18hList_play(_musicFileHash, 0, 0, 1);
+ // TODO SoundMan_stopMusic(0x061880C6, 0, 0);
+ // TODO SoundMan_startMusic(_musicFileHash, 0, 0, 1);
_childObject = new Scene1005(_vm, this, which);
break;
}
@@ -105,7 +105,7 @@ void Module1000::updateScene() {
createScene(1, 2);
break;
case 4:
- // TODO Music18hList_stop(_musicFileHash, 0, 1);
+ // TODO SoundMan_stopMusic(_musicFileHash, 0, 1);
createScene(3, 1);
break;
}
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 1efd7e3..8b73598 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -36,16 +36,16 @@ Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(9, 3);
}
- // TODO Sound1ChList_addSoundResources(0x2C818, dword_4B85B0, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B85B0, true, 50, 600, 20, 250);
- // TODO Sound1ChList_setSoundValues(0x74E01054, false, 100, 200, 10, 20);
- // TODO Sound1ChList_setVolume(0x74E01054, 60);
- // TODO Sound1ChList_sub_407C70(0x2C818, 0x41861371, 0x43A2507F);
+ // TODO SoundMan_addSoundList(0x2C818, dword_4B85B0, true);
+ // TODO SoundMan_setSoundListParams(dword_4B85B0, true, 50, 600, 20, 250);
+ // TODO SoundMan_setSoundParams(0x74E01054, false, 100, 200, 10, 20);
+ // TODO SoundMan_setSoundVolume(0x74E01054, 60);
+ // TODO SoundMan_playTwoSounds(0x2C818, 0x41861371, 0x43A2507F);
}
Module1100::~Module1100() {
- // TODO Sound1ChList_sub_407A50(0x2C818);
+ // TODO SoundMan_deleteGroup(0x2C818);
}
void Module1100::createScene(int sceneNum, int which) {
@@ -86,11 +86,11 @@ void Module1100::createScene(int sceneNum, int which) {
createSmackerScene(0x04180007, true, false, false);
break;
case 6:
- // TODO Sound1ChList_sub_407AF0(0x2C818);
+ // TODO SoundMan_deleteSoundGroup(0x2C818);
createSmackerScene(kSmackerFileHashList06, true, true, false);
break;
case 7:
- // TODO Sound1ChList_setSoundValues(0x74E01054, false, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundParams(0x74E01054, false, 0, 0, 0, 0);
createSmackerScene(kSmackerFileHashList07, true, true, false);
break;
case 8:
@@ -98,7 +98,7 @@ void Module1100::createScene(int sceneNum, int which) {
break;
case 1002:
_countdown = 40;
- // TODO Sound1ChList_sub_4080B0(true);
+ // TODO SoundMan_setTwoSoundsPlayFlag(true);
createSmackerScene(0x00012211, true, true, false);
break;
}
@@ -111,9 +111,9 @@ void Module1100::updateScene() {
switch (_vm->gameState().sceneNum) {
case 0:
_countdown = 0;
- // TODO Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64);
- // TODO Sound1ChList_setVolume(0x48498E46, 65);
- // TODO Sound1ChList_setVolume(0x50399F64, 65);
+ // TODO SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64);
+ // TODO SoundMan_setSoundVolume(0x48498E46, 65);
+ // TODO SoundMan_setSoundVolume(0x50399F64, 65);
if (_moduleResult == 0) {
createScene(1, 0);
} else if (_moduleResult == 1) {
@@ -121,7 +121,7 @@ void Module1100::updateScene() {
}
break;
case 1:
- // TODO Sound1ChList_sub_407C70(0x2C818, 0x41861371, 0x43A2507F);
+ // TODO SoundMan_playTwoSounds(0x2C818, 0x41861371, 0x43A2507F);
if (getGlobalVar(0x0C0288F4)) {
if (_moduleResult == 0) {
createScene(6, -1);
@@ -137,7 +137,7 @@ void Module1100::updateScene() {
}
break;
case 2:
- // TODO Sound1ChList_setSoundValues(0x74E01054, false, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundParams(0x74E01054, false, 0, 0, 0, 0);
if (_navigationAreaType == 3) {
createScene(7, -1);
} else if (_moduleResult == 1) {
@@ -182,7 +182,7 @@ void Module1100::updateScene() {
break;
case 1002:
_countdown = 0;
- // TODO Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64, 0);
createScene(1, 1);
break;
}
@@ -191,30 +191,30 @@ void Module1100::updateScene() {
case 0:
#if 0 // TODO
if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
- Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64);
- Sound1ChList_setVolume(0x48498E46, 65);
- Sound1ChList_setVolume(0x50399F64, 65);
+ SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64);
+ SoundMan_setSoundVolume(0x48498E46, 65);
+ SoundMan_setSoundVolume(0x50399F64, 65);
}
#endif
break;
case 1:
#if 0 // TODO
if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
- Sound1ChList_sub_407C70(0x2C818, 0x41861371, 0x43A2507F);
+ SoundMan_playTwoSounds(0x2C818, 0x41861371, 0x43A2507F);
}
#endif
break;
case 2:
- // TODO Sound1ChList_setSoundValues(0x74E01054, !navigationScene()->soundFlag1, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundParams(0x74E01054, !navigationScene()->soundFlag1, 0, 0, 0, 0);
break;
case 5:
case 6:
case 7:
case 1002:
if (_countdown != 0 && (--_countdown == 0)) {
- // TODO Sound1ChList_sub_407C70(0x2C818, 0x48498E46, 0x50399F64);
- // TODO Sound1ChList_setVolume(0x48498E46, 65);
- // TODO Sound1ChList_setVolume(0x50399F64, 65);
+ // TODO SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64);
+ // TODO SoundMan_setSoundVolume(0x48498E46, 65);
+ // TODO SoundMan_setSoundVolume(0x50399F64, 65);
}
break;
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 96ed46f..7599d76 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -39,12 +39,12 @@ Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- // TODO Music18hList_add(0x00478311, 0x62222CAE);
- // TODO Music18hList_play(0x62222CAE, 0, 0, 1);
+ // TODO SoundMan_addMusic(0x00478311, 0x62222CAE);
+ // TODO SoundMan_startMusic(0x62222CAE, 0, 0, 1);
}
Module1200::~Module1200() {
- // TODO Music18hList_deleteGroup(0x00478311);
+ // TODO SoundMan_deleteMusicGroup(0x00478311);
}
void Module1200::createScene(int sceneNum, int which) {
@@ -58,7 +58,7 @@ void Module1200::createScene(int sceneNum, int which) {
_childObject = new Scene1202(_vm, this, which);
break;
case 2:
- // TODO Music18hList_stop(0x62222CAE, 0, 0);
+ // TODO SoundMan_stopMusic(0x62222CAE, 0, 0);
createSmackerScene(0x31890001, true, true, false);
setGlobalVar(0x2A02C07B, 1);
break;
@@ -87,7 +87,7 @@ void Module1200::updateScene() {
createScene(0, 1);
break;
case 2:
- // TODO Music18hList_play(0x62222CAE, 0, 0, 1);
+ // TODO SoundMan_startMusic(0x62222CAE, 0, 0, 1);
createScene(0, 3);
break;
}
@@ -371,7 +371,7 @@ AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sp
}
AsScene1201TntMan::~AsScene1201TntMan() {
- // TODO Sound1ChList_sub_407AF0(0x01D00560);
+ // TODO SoundMan_deleteSoundGroup(0x01D00560);
}
uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -426,8 +426,8 @@ void AsScene1201TntMan::sub40CD60() {
}
void AsScene1201TntMan::sub40CD90() {
- // TODO Sound1ChList_addSoundResource(0x01D00560, 0x4B044624, true);
- // TODO Sound1ChList_playLooping(0x4B044624);
+ // TODO SoundMan_addSound(0x01D00560, 0x4B044624, true);
+ // TODO SoundMan_playSoundLooping(0x4B044624);
_flag = true;
startAnimation(0x85084190, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
@@ -447,7 +447,7 @@ Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
}
Class465::~Class465() {
- // TODO Sound1ChList_sub_407AF0(0x041080A4);
+ // TODO SoundMan_deleteSoundGroup(0x041080A4);
}
void Class465::update() {
@@ -455,8 +455,8 @@ void Class465::update() {
if (getGlobalVar(0x20A0C516)) {
setVisible(true);
SetUpdateHandler(&AnimatedSprite::update);
- // TODO Sound1ChList_addSoundResource(0x041080A4, 0x460A1050, true);
- // TODO Sound1ChList_playLooping(0x460A1050);
+ // TODO SoundMan_addSound(0x041080A4, 0x460A1050, true);
+ // TODO SoundMan_playSoundLooping(0x460A1050);
}
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 2c7a5c8..b7c588f 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -35,12 +35,12 @@ namespace Neverhood {
Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO Music18hList_add(0x61C090, 0x203197);
- // TODO Sound1ChList_addSoundResources(0x61C090, dword_4B2868, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, 0, 50, 600, 20, 150);
- // TODO Sound1ChList_sub_407C70(0x61C090, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ // TODO SoundMan_addMusic(0x61C090, 0x203197);
+ // TODO SoundMan_addSoundList(0x61C090, dword_4B2868, true);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 50, 600, 20, 150);
+ // TODO SoundMan_playTwoSounds(0x61C090, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_setSoundVolume(0x48498E46, 70);
+ // TODO SoundMan_setSoundVolume(0x50399F64, 70);
if (which < 0) {
if (_vm->gameState().sceneNum >= 1 && _vm->gameState().sceneNum <= 17)
@@ -94,7 +94,7 @@ Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1300::~Module1300() {
- // TODO Sound1ChList_sub_407A50(0x61C090);
+ // TODO SoundMan_deleteGroup(0x61C090);
}
void Module1300::createScene(int sceneNum, int which) {
@@ -102,83 +102,83 @@ void Module1300::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 1:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
_childObject = new Scene1302(_vm, this, which);
break;
case 2:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
_childObject = new Scene1303(_vm, this, which);
break;
case 3:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
_childObject = new Scene1304(_vm, this, which);
break;
case 4:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
_childObject = new Scene1305(_vm, this, which);
break;
case 5:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
_childObject = new Scene1306(_vm, this, which);
break;
case 6:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
_childObject = new Scene1307(_vm, this, which);
break;
case 7:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_play(0x203197, 0, 2, 1);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
_childObject = new Scene1308(_vm, this, which);
break;
case 8:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 1);
break;
case 9:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createSmackerScene(0x20082818, true, true, false);
break;
case 10:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createSmackerScene(0x20082828, true, true, false);
break;
case 11:
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B27A8, which);
break;
case 12:
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2718, which);
break;
case 13:
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B27D8, which);
break;
case 14:
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2808, which);
break;
case 15:
- // TODO Sound1ChList_setSoundValuesMulti(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2838, which);
break;
case 16:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
- // TODO Music18hList_stop(0x203197, 0, 2);
+ // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ // TODO SoundMan_stopMusic(0x203197, 0, 2);
_childObject = new Scene1317(_vm, this, which);
break;
case 17:
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 76bf41b..3707356 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -32,8 +32,8 @@ namespace Neverhood {
Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO Music18hList_add(0x00AD0012, 0x06333232);
- // TODO Music18hList_add(0x00AD0012, 0x624A220E);
+ // TODO SoundMan_addMusic(0x00AD0012, 0x06333232);
+ // TODO SoundMan_addMusic(0x00AD0012, 0x624A220E);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -44,7 +44,7 @@ Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1400::~Module1400() {
- // TODO Music18hList_deleteGroup(0x00AD0012);
+ // TODO SoundMan_deleteMusicGroup(0x00AD0012);
}
void Module1400::createScene(int sceneNum, int which) {
@@ -52,33 +52,33 @@ void Module1400::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ // TODO SoundMan_startMusic(0x06333232, 0, 2, 1);
_childObject = new Scene1401(_vm, this, which);
break;
case 1:
- // TODO Music18hList_stop(0x06333232, 0, 2);
- // TODO Music18hList_stop(0x624A220E, 0, 2);
+ // TODO SoundMan_stopMusic(0x06333232, 0, 2);
+ // TODO SoundMan_stopMusic(0x624A220E, 0, 2);
_childObject = new Scene1402(_vm, this, which);
break;
case 2:
- // TODO Music18hList_stop(0x06333232, 0, 2);
- // TODO Music18hList_play(0x624A220E, 0, 2, 1);
+ // TODO SoundMan_stopMusic(0x06333232, 0, 2);
+ // TODO SoundMan_startMusic(0x624A220E, 0, 2, 1);
_childObject = new Scene1403(_vm, this, which);
break;
case 3:
- // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ // TODO SoundMan_startMusic(0x06333232, 0, 2, 1);
_childObject = new Scene1404(_vm, this, which);
break;
case 4:
- // TODO Music18hList_play(0x06333232, 0, 2, 1);
+ // TODO SoundMan_startMusic(0x06333232, 0, 2, 1);
_childObject = new Scene1405(_vm, this, which);
break;
case 5:
- // TODO Music18hList_stop(0x06333232, 0, 2);
+ // TODO SoundMan_stopMusic(0x06333232, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 2);
break;
case 6:
- // TODO Music18hList_stop(0x06333232, 0, 2);
+ // TODO SoundMan_stopMusic(0x06333232, 0, 2);
_childObject = new Scene1407(_vm, this, which);
break;
}
@@ -148,7 +148,7 @@ Class525::Class525(NeverhoodEngine *vm)
}
Class525::~Class525() {
- // TODO Sound1ChList_sub_407AF0(0x01104C08);
+ // TODO SoundMan_deleteSoundGroup(0x01104C08);
}
void Class525::update4662A0() {
@@ -157,8 +157,8 @@ void Class525::update4662A0() {
sub466460();
}
if (_countdown2 != 0 && (--_countdown2 == 0)) {
- // TODO Sound1ChList_addSoundResource(0x01104C08, 0x4A116437, true);
- // TODO Sound1ChList_playLooping(0x4A116437);
+ // TODO SoundMan_addSound(0x01104C08, 0x4A116437, true);
+ // TODO SoundMan_playSoundLooping(0x4A116437);
}
}
@@ -211,7 +211,7 @@ void Class525::sub466420() {
}
void Class525::sub466460() {
- // TODO Sound1ChList_deleteSoundByHash(0x4A116437);
+ // TODO SoundMan_deleteSound(0x4A116437);
_soundResource1.play(0x4A120435);
startAnimation(0x4C210500, 0, -1);
}
@@ -406,7 +406,7 @@ Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Spr
}
Class489::~Class489() {
- // TODO Sound1ChList_sub_407AF0(0x05331081);
+ // TODO SoundMan_deleteSoundGroup(0x05331081);
}
uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -616,8 +616,8 @@ void Class489::sub434EC0() {
NextState(&Class489::sub434F40);
setGlobalVar(0x12A10DB3, 1);
_soundResource1.play(0xCC4A8456);
- // TODO Sound1ChList_addSoundResource(0x05331081, 0xCE428854, true);
- // TODO Sound1ChList_playLooping(0xCE428854);
+ // TODO SoundMan_addSound(0x05331081, 0xCE428854, true);
+ // TODO SoundMan_playSoundLooping(0xCE428854);
}
void Class489::sub434F40() {
@@ -634,7 +634,7 @@ void Class489::sub434F80() {
NextState(&Class489::sub434E90);
setGlobalVar(0x12A10DB3, 0);
_soundResource1.play(0xCC4A8456);
- // TODO Sound1ChList_deleteSoundByHash(0xCE428854);
+ // TODO SoundMan_deleteSound(0xCE428854);
}
void Class489::sub434FF0() {
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 6519efa..77d135d 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -44,14 +44,14 @@ Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- // TODO Sound1ChList_addSoundResources(0x1A008D8, dword_4B3BB0, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B3BB0, true, 50, 600, 5, 150);
- // TODO Sound1ChList_sub_407C70(0x1A008D8, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_addSoundList(0x1A008D8, dword_4B3BB0, true);
+ // TODO SoundMan_setSoundListParams(dword_4B3BB0, true, 50, 600, 5, 150);
+ // TODO SoundMan_playTwoSounds(0x1A008D8, 0x41861371, 0x43A2507F, 0);
}
Module1600::~Module1600() {
- // TODO Sound1ChList_sub_407A50(0x1A008D8);
+ // TODO SoundMan_deleteGroup(0x1A008D8);
}
void Module1600::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index f9dc6b7..696f646 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -27,10 +27,10 @@ namespace Neverhood {
Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource(vm) {
- // TODO Music18hList_add(0x04212331);
- // TODO Sound1ChList_addSoundResources(0x04212331, dword_4AE930, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 50, 600, 5, 150);
- // TODO Sound1ChList_sub_407C70(0x04212331, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_addMusic(0x04212331);
+ // TODO SoundMan_addSoundList(0x04212331, dword_4AE930, true);
+ // TODO SoundMan_setSoundListParams(dword_4AE930, true, 50, 600, 5, 150);
+ // TODO SoundMan_playTwoSounds(0x04212331, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -45,7 +45,7 @@ Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1700::~Module1700() {
- // TODO Sound1ChList_sub_407A50(0x04212331);
+ // TODO SoundMan_deleteGroup(0x04212331);
}
void Module1700::createScene(int sceneNum, int which) {
@@ -53,7 +53,7 @@ void Module1700::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
createSmackerScene(0x3028A005, true, true, false);
break;
case 1:
@@ -63,12 +63,12 @@ void Module1700::createScene(int sceneNum, int which) {
createNavigationScene(0x004AE8E8, which);
break;
case 3:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
createSmackerScene(0x01190041, true, true, false);
break;
case 4:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 0, 0, 0, 0, 0);
- // TODO Music18hList_play(0x31114225, 0, 2, 1);
+ // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
+ // TODO SoundMan_startMusic(0x31114225, 0, 2, 1);
_childObject = new Scene1705(_vm, this, which);
break;
}
@@ -80,7 +80,7 @@ void Module1700::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AE930, 1, 0, 0, 0);
+ // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0);
createScene(1, 0);
break;
case 1:
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index cce72b0..7526a3a 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -28,9 +28,9 @@ namespace Neverhood {
Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO Sound1ChList_addSoundResources(0x04A14718, dword_4AFE70);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 1, 50, 600, 10, 150);
- // TODO Sound1ChList_sub_407C70(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
+ // TODO SoundMan_addSoundList(0x04A14718, dword_4AFE70);
+ // TODO SoundMan_setSoundListParams(dword_4AFE70, true, 50, 600, 10, 150);
+ // TODO SoundMan_playTwoSounds(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -45,7 +45,7 @@ Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1800::~Module1800() {
- // TODO Sound1ChList_sub_407A50(0x04A14718);
+ // TODO SoundMan_deleteGroup(0x04A14718);
}
void Module1800::createScene(int sceneNum, int which) {
@@ -73,11 +73,11 @@ void Module1800::createScene(int sceneNum, int which) {
createNavigationScene(0x004AFE40, which);
break;
case 6:
- // TODO Sound1ChList_sub_407A50(0x04A14718);
+ // TODO SoundMan_deleteGroup(0x04A14718);
createSmackerScene(0x08D84010, true, true, false);
break;
case 7:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4AFE70, 0, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundListParams(dword_4AFE70, false, 0, 0, 0, 0);
createSmackerScene(0x0168B121, true, true, false);
break;
case 8:
@@ -159,7 +159,7 @@ void Module1800::updateScene() {
#if 0 // TODO
NavigationScene *navigationScene = (NavigationScene*)_childObject;
if (navigationScene->soundFlag1 && navigationScene->index == 2) {
- // TODO Sound1ChList_sub_4080B0(false);
+ // TODO SoundMan_setTwoSoundsPlayFlag(false);
}
#endif
break;
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 45d3b83..bf1aad6 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -36,13 +36,13 @@ Module1900::Module1900(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- // TODO Sound1ChList_addSoundResources(0x04E1C09C, dword_4B8800, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B8800, true, 50, 600, 5, 150);
+ // TODO SoundMan_addSoundList(0x04E1C09C, dword_4B8800, true);
+ // TODO SoundMan_setSoundListParams(dword_4B8800, true, 50, 600, 5, 150);
}
Module1900::~Module1900() {
- // TODO Sound1ChList_sub_407A50(0x04E1C09C);
+ // TODO SoundMan_deleteGroup(0x04E1C09C);
}
void Module1900::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index bd22c7b..e071291 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -40,7 +40,7 @@ Module2000::Module2000(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2000::~Module2000() {
- // TODO Sound1ChList_sub_407A50(0x81293110);
+ // TODO SoundMan_deleteGroup(0x81293110);
}
void Module2000::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index c6de482..33c9d23 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -29,7 +29,7 @@ namespace Neverhood {
Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO Music18hList_add(0x10A10C14, 0x11482B95);
+ // TODO SoundMan_addMusic(0x10A10C14, 0x11482B95);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -44,7 +44,7 @@ Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2100::~Module2100() {
- // TODO Music18hList_deleteGroup(0x10A10C14);
+ // TODO SoundMan_deleteMusicGroup(0x10A10C14);
}
void Module2100::createScene(int sceneNum, int which) {
@@ -52,7 +52,7 @@ void Module2100::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Music18hList_play(0x11482B95, 0, 1, 1);
+ // TODO SoundMan_startMusic(0x11482B95, 0, 1, 1);
_childObject = new Scene2101(_vm, this, which);
break;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 9846bc5..cbd232e 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -33,7 +33,7 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Create Module2200(%d)", which);
- // TODO: Music18hList_add(0x11391412, 0x601C908C);
+ // TODO: SoundMan_addMusic(0x11391412, 0x601C908C);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -44,7 +44,7 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2200::~Module2200() {
- // TODO Sound1ChList_sub_407A50(0x11391412);
+ // TODO SoundMan_deleteGroup(0x11391412);
}
void Module2200::createScene(int sceneNum, int which) {
@@ -57,23 +57,23 @@ void Module2200::createScene(int sceneNum, int which) {
_childObject = new Scene2201(_vm, this, which);
break;
case 1:
- // TODO Music18hList_play(0x601C908C, 0, 2, 1);
+ // TODO SoundMan_startMusic(0x601C908C, 0, 2, 1);
_childObject = new Scene2202(_vm, this, which);
break;
case 2:
- // TODO Music18hList_play(0x601C908C, 0, 2, 1);
+ // TODO SoundMan_startMusic(0x601C908C, 0, 2, 1);
_childObject = new Scene2203(_vm, this, which);
break;
case 3:
- // TODO Music18hList_stop(0x601C908C, 0, 2);
+ // TODO SoundMan_stopMusic(0x601C908C, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 3);
break;
case 4:
- // TODO Music18hList_stop(0x601C908C, 0, 2);
+ // TODO SoundMan_stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2205(_vm, this, which);
break;
case 5:
- // TODO Music18hList_stop(0x601C908C, 0, 2);
+ // TODO SoundMan_stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2206(_vm, this, which);
break;
case 6:
@@ -576,19 +576,19 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
insertSprite<AsScene2201CeilingFan>();
- // TODO Sound1ChList_addSoundResource(0x04106220, 0x81212040, true);
+ // TODO SoundMan_addSound(0x04106220, 0x81212040, true);
}
Scene2201::~Scene2201() {
setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
- // TODO Sound1ChList_sub_407AF0(0x04106220);
+ // TODO SoundMan_deleteSoundGroup(0x04106220);
}
void Scene2201::update() {
Scene::update();
if (!_soundFlag) {
- // TODO Sound1ChList_playLooping(0x81212040);
+ // TODO SoundMan_playSoundLooping(0x81212040);
_soundFlag = true;
}
}
@@ -918,13 +918,13 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
_soundResource1.load(0x68E25540);
_soundResource2.load(0x40400457);
- // TODO Sound1ChList_addSoundResource(0x60400854, 0x8101A241, true);
- // TODO Sound1ChList_playLooping(0x8101A241);
+ // TODO SoundMan_addSound(0x60400854, 0x8101A241, true);
+ // TODO SoundMan_playSoundLooping(0x8101A241);
}
Scene2202::~Scene2202() {
- // TODO Sound1ChList_sub_407AF0(0x60400854);
+ // TODO SoundMan_deleteSoundGroup(0x60400854);
}
void Scene2202::update() {
@@ -1714,7 +1714,7 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
}
AsScene2207Elevator::~AsScene2207Elevator() {
- // TODO Sound1ChList_sub_407AF0(0x02700413);
+ // TODO SoundMan_deleteSoundGroup(0x02700413);
}
void AsScene2207Elevator::update() {
@@ -1727,7 +1727,7 @@ void AsScene2207Elevator::update() {
if (_destPointIndexDelta != 0) {
_destPointIndexDelta = 0;
} else {
- // TODO Sound1ChList_deleteSoundByHash(0xD3B02847);
+ // TODO SoundMan_deleteSound(0xD3B02847);
_soundResource.play(0x53B8284A);
}
}
@@ -1743,7 +1743,7 @@ void AsScene2207Elevator::update() {
if (_destPointIndexDelta != 0) {
_destPointIndexDelta = 0;
} else {
- // TODO Sound1ChList_deleteSoundByHash(0xD3B02847);
+ // TODO SoundMan_deleteSound(0xD3B02847);
_soundResource.play(0x53B8284A);
}
}
@@ -1802,8 +1802,8 @@ void AsScene2207Elevator::moveToY(int16 y) {
} else {
_destPointIndexDelta = 2;
}
- // TODO Sound1ChList_addSoundResource(0x02700413, 0xD3B02847, true);
- // TODO Sound1ChList_playLooping(0xD3B02847);
+ // TODO SoundMan_addSound(0x02700413, 0xD3B02847, true);
+ // TODO SoundMan_playSoundLooping(0xD3B02847);
}
_isMoving = true;
@@ -1888,7 +1888,7 @@ AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm
}
AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() {
- // TODO Sound1ChList_sub_407AF0(0x80D00820);
+ // TODO SoundMan_deleteSoundGroup(0x80D00820);
}
uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1897,14 +1897,14 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
case 0x100D:
if (!_idle) {
if (param.asInteger() == 0x3423093) {
- // TODO Sound1ChList_addSoundResource(0x80D00820, 0x12121943, true);
- // TODO Sound1ChList_playLooping(0x12121943);
+ // TODO SoundMan_addSound(0x80D00820, 0x12121943, true);
+ // TODO SoundMan_playSoundLooping(0x12121943);
} else if (param.asInteger() == 0x834AB011) {
_soundResource1.stop();
_soundResource2.stop();
_soundResource3.stop();
_soundResource4.stop();
- // TODO Sound1ChList_deleteSoundByHash(0x12121943);
+ // TODO SoundMan_deleteSound(0x12121943);
} else if (param.asInteger() == 0x3A980501) {
_soundResource2.play();
} else if (param.asInteger() == 0x2A2AD498) {
@@ -1949,7 +1949,7 @@ void AsScene2207WallRobotAnimation::cbStopAnimation() {
_soundResource2.stop();
_soundResource3.stop();
_soundResource4.stop();
- // TODO Sound1ChList_deleteSoundByHash(0x12121943);
+ // TODO SoundMan_deleteSound(0x12121943);
_idle = true;
setVisible(false);
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 1513f7b..d3346eb 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -27,20 +27,20 @@ namespace Neverhood {
Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _volume(0) {
- // TODO Sound1ChList_addSoundResources(0x1A214010, dword_4B6938, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B6938, true, 50, 600, 10, 10, 150);
+ // TODO SoundMan_addSoundList(0x1A214010, dword_4B6938, true);
+ // TODO SoundMan_setSoundListParams(dword_4B6938, true, 50, 600, 10, 10, 150);
_flag = getGlobalVar(0x10938830) == 0;
if (_flag) {
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
- // TODO Sound1ChList_playLooping(0x90F0D1C3);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, 0);
+ // TODO SoundMan_playSoundLooping(0x90F0D1C3);
} else {
- // TODO Sound1ChList_setSoundValues(0x90F0D1C3, false, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundParams(0x90F0D1C3, false, 0, 0, 0, 0);
}
- // TODO Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_sub_407C70(0x1A214010, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_playTwoSounds(0x1A214010, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -59,7 +59,7 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2300::~Module2300() {
- // TODO Sound1ChList_sub_407A50(0x1A214010);
+ // TODO SoundMan_deleteGroup(0x1A214010);
}
void Module2300::createScene(int sceneNum, int which) {
@@ -73,7 +73,7 @@ void Module2300::createScene(int sceneNum, int which) {
createNavigationScene(0x004B67E8, which);
if (_flag) {
_volume = 15;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 15);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, 15);
}
break;
case 2:
@@ -83,16 +83,16 @@ void Module2300::createScene(int sceneNum, int which) {
if (getGlobalVar(0x10938830)) {
createNavigationScene(0x004B68F0, which);
} else {
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, _volume);
createNavigationScene(0x004B68A8, which);
if (_flag) {
_volume = 87;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 87);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, 87);
}
}
break;
case 4:
- // TODO Sound1ChList_sub_4080B0(true);
+ // TODO SoundMan_setTwoSoundsPlayFlag(true);
createSmackerScene(0x20080A0B, true, true, false);
break;
}
@@ -140,7 +140,7 @@ void Module2300::updateScene() {
}
break;
case 4:
- // TODO Sound1ChList_sub_4080B0(false);
+ // TODO SoundMan_setTwoSoundsPlayFlag(false);
createScene(1, 2);
break;
}
@@ -152,15 +152,15 @@ void Module2300::updateScene() {
if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
_volume++;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ SoundMan_setSoundVolume(0x90F0D1C3, _volume);
}
#endif
#if 0 // TODO
if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
- Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
- Sound1ChList_setVolume(0x48498E46, 70);
- Sound1ChList_setVolume(0x50399F64, 70);
+ SoundMan_playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64);
+ SoundMan_setSoundVolume(0x48498E46, 70);
+ SoundMan_setSoundVolume(0x50399F64, 70);
}
#endif
break;
@@ -170,7 +170,7 @@ void Module2300::updateScene() {
if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
_volume--;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ SoundMan_setSoundVolume(0x90F0D1C3, _volume);
}
#endif
break;
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 02e6225..f2f2da9 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -27,7 +27,7 @@ namespace Neverhood {
Module2400::Module2400(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO Music18hList_add(0x202D1010, 0xB110382D);
+ // TODO SoundMan_addMusic(0x202D1010, 0xB110382D);
if (which < 0) {
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
@@ -38,7 +38,7 @@ Module2400::Module2400(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2400::~Module2400() {
- // TODO Music18hList_deleteGroup(0x202D1010);
+ // TODO SoundMan_deleteMusicGroup(0x202D1010);
}
void Module2400::createScene(int sceneNum, int which) {
@@ -46,27 +46,27 @@ void Module2400::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Music18hList_stop(0xB110382D, 0, 0);
+ // TODO SoundMan_stopMusic(0xB110382D, 0, 0);
_childObject = new Scene2401(_vm, this, which);
break;
case 1:
- // TODO Music18hList_play(0xB110382D, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xB110382D, 0, 2, 1);
_childObject = new Scene2402(_vm, this, which);
break;
case 2:
- // TODO Music18hList_play(0xB110382D, 0, 0, 1);
+ // TODO SoundMan_startMusic(0xB110382D, 0, 0, 1);
_childObject = new Scene2403(_vm, this, which);
break;
case 4:
- // TODO Music18hList_stop(0xB110382D, 0, 2);
+ // TODO SoundMan_stopMusic(0xB110382D, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 0);
break;
case 5:
- // TODO Music18hList_play(0xB110382D, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xB110382D, 0, 2, 1);
_childObject = new Scene2406(_vm, this, which);
break;
case 6:
- // TODO Music18hList_stop(0xB110382D, 0, 2);
+ // TODO SoundMan_stopMusic(0xB110382D, 0, 2);
createSmackerScene(0x20D80001, true, true, false);
break;
case 7:
@@ -247,7 +247,7 @@ AsScene2401FlowingWater::AsScene2401FlowingWater(NeverhoodEngine *vm)
}
AsScene2401FlowingWater::~AsScene2401FlowingWater() {
- // TODO Sound1ChList_sub_407AF0(0x40F11C09);
+ // TODO SoundMan_deleteSoundGroup(0x40F11C09);
}
uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -260,15 +260,15 @@ uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam
break;
case 0x2002:
if (!_isWaterFlowing) {
- // TODO Sound1ChList_addSoundResource(0x40F11C09, 0x980C1420, true);
- // TODO Sound1ChList_playLooping(0x980C1420);
+ // TODO SoundMan_addSound(0x40F11C09, 0x980C1420, true);
+ // TODO SoundMan_playSoundLooping(0x980C1420);
startAnimation(0x10203116, 0, -1);
setVisible(true);
_isWaterFlowing = true;
}
break;
case 0x2003:
- // TODO Sound1ChList_deleteSoundByHash(0x980C1420);
+ // TODO SoundMan_deleteSound(0x980C1420);
_isWaterFlowing = false;
break;
case 0x3002:
@@ -664,7 +664,7 @@ AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
}
AsScene2402TV::~AsScene2402TV() {
- // TODO Sound1ChList_sub_407AF0(0x01520123);
+ // TODO SoundMan_deleteSoundGroup(0x01520123);
}
void AsScene2402TV::upWait() {
@@ -687,12 +687,12 @@ void AsScene2402TV::upFocusKlayman() {
startAnimation(0x050A0103, _currFrameIndex, -1);
_newStickFrameIndex = _currFrameIndex;
if (_countdown2 == 0) {
- // TODO Sound1ChList_addSoundResource(0x01520123, 0xC42D4528, true);
- // TODO Sound1ChList_playLooping(0xC42D4528);
+ // TODO SoundMan_addSound(0x01520123, 0xC42D4528, true);
+ // TODO SoundMan_playSoundLooping(0xC42D4528);
}
_countdown2 = 5;
} else if (_countdown2 != 0 && (--_countdown2 == 0)) {
- // TODO Sound1ChList_deleteSoundByHash(0xC42D4528);
+ // TODO SoundMan_deleteSound(0xC42D4528);
}
AnimatedSprite::update();
}
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 84b98af..822204f 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -59,8 +59,8 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
_soundResource3(vm), _soundResource4(vm), _soundIndex(0) {
- // TODO Music18hList_add(0x29220120, 0x05343184);
- // TODO Music18hList_play(0x05343184, 0, 0, 1);
+ // TODO SoundMan_addMusic(0x29220120, 0x05343184);
+ // TODO SoundMan_startMusic(0x05343184, 0, 0, 1);
SetMessageHandler(&Module2500::handleMessage);
if (which < 0) {
@@ -77,7 +77,7 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2500::~Module2500() {
- // TODO Music18hList_deleteGroup(0x29220120);
+ // TODO SoundMan_deleteMusicGroup(0x29220120);
}
void Module2500::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 7975fcb..be05037 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -35,14 +35,14 @@ Module2600::Module2600(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 1);
}
- // TODO Sound1ChList_addSoundResources(0x40271018, dword_4B87E8, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B87E8, true, 50, 600, 5, 150);
- // TODO Sound1ChList_sub_407C70(0x40271018, 0x41861371, 0x43A2507F);
+ // TODO SoundMan_addSoundList(0x40271018, dword_4B87E8, true);
+ // TODO SoundMan_setSoundListParams(dword_4B87E8, true, 50, 600, 5, 150);
+ // TODO SoundMan_playTwoSounds(0x40271018, 0x41861371, 0x43A2507F);
}
Module2600::~Module2600() {
- // TODO Sound1ChList_sub_407A50(0x40271018);
+ // TODO SoundMan_deleteGroup(0x40271018);
}
void Module2600::createScene(int sceneNum, int which) {
@@ -72,7 +72,7 @@ void Module2600::createScene(int sceneNum, int which) {
createNavigationScene(0x004B8698, which);
break;
case 7:
- // TODO Sound1ChList_sub_407A50(0x40271018);
+ // TODO SoundMan_deleteGroup(0x40271018);
createSmackerScene(0x30090001, true, true, false);
break;
case 8:
@@ -268,7 +268,7 @@ AsScene2609Water::AsScene2609Water(NeverhoodEngine *vm)
setDoDeltaX(1);
createSurface1(0x9C210C90, 1200);
setClipRect(260, 260, 400, 368);
- // TODO Sound1ChList_addSoundResource(0xDC2769B0, true);
+ // TODO SoundMan_addSound(0xDC2769B0, true);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2609Water::handleMessage);
if (getGlobalVar(0x4E0BE910))
@@ -281,12 +281,12 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
case 0x2001:
stopAnimation();
setVisible(false);
- // TODO Sound1ChList_stop(0xDC2769B0);
+ // TODO SoundMan_stopSound(0xDC2769B0);
break;
case 0x2002:
startAnimation(0x9C210C90, 0, -1);
setVisible(true);
- // TODO Sound1ChList_playLooping(0xDC2769B0);
+ // TODO SoundMan_playSoundLooping(0xDC2769B0);
break;
}
return messageResult;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 71ce229..a91eea2 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -86,8 +86,8 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
_soundResource3(vm), _soundResource4(vm), _soundIndex(0), _flag1(false) {
- // TODO Music18hList_add(0x42212411, 0x04020210);
- // TODO Music18hList_play(0x04020210, 24, 2, 1);
+ // TODO SoundMan_addMusic(0x42212411, 0x04020210);
+ // TODO SoundMan_startMusic(0x04020210, 24, 2, 1);
SetMessageHandler(&Module2700::handleMessage);
if (which < 0) {
@@ -107,7 +107,7 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2700::~Module2700() {
- // TODO Sound1ChList_sub_407A50(0x42212411);
+ // TODO SoundMan_deleteGroup(0x42212411);
}
void Module2700::createScene(int sceneNum, int which) {
@@ -414,9 +414,9 @@ void Module2700::updateScene() {
case 21:
// TODO? GameState_sub_469C50(&field_52, 0);
// TODO MusicMan_stopAll (if field_52 above = 1)
- // TODO Music18hList_delete(_musicFileHash);
- // TODO Music18hList_play(0x04020210, 0, 2, 1);
- // TODO Sound1ChList_sub_407AF0(0x42212411);
+ // TODO SoundMan_deleteMusic(_musicFileHash);
+ // TODO SoundMan_startMusic(0x04020210, 0, 2, 1);
+ // TODO SoundMan_deleteSoundGroup(0x42212411);
createScene(20, 3);
break;
case 22:
@@ -458,15 +458,15 @@ void Module2700::updateScene() {
switch (_vm->gameState().sceneNum) {
case 21:
if (!_flag1) {
- // TODO Music18hList_stop(0x04020210, 0, 1);
+ // TODO SoundMan_stopMusic(0x04020210, 0, 1);
// TODO _vm->gameModule()->initScene2801Vars();
_musicFileHash = getGlobalVar(0x89A82A15);
// TODO? GameState_sub_469C50(&field_52, 0);
- // TODO MusicMan_create();
- // TODO Music18hList_add2(0x42212411, _musicFileHash);
- // TODO Music18hList_play2(_musicFileHash, 0, /*TODO */???, 1);
- // TODO Sound1ChList_addSoundResource(0x42212411, 0x44014282, true);
- // TODO Sound1ChList_setSoundValues(0x44014282, true, 120, 360, 72, 0);
+ // TODO MusicMan_create(); // Why?
+ // TODO SoundMan_addMusic(0x42212411, _musicFileHash);
+ // TODO SoundMan_startMusic(_musicFileHash, 0, /*TODO */???, 1);
+ // TODO SoundMan_addSound(0x42212411, 0x44014282, true);
+ // TODO SoundMan_setSoundParams(0x44014282, true, 120, 360, 72, 0);
_flag1 = true;
}
break;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 97fb18f..558819c 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -35,7 +35,7 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
_fileHash = 0;
// TODO music stuff
- // TODO Music18hList_add(0x64210814, 0xD2FA4D14);
+ // TODO SoundMan_addMusic(0x64210814, 0xD2FA4D14);
setGlobalVar(0x28D8C940, 1);
if (which < 0) {
@@ -52,7 +52,7 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
Module2800::~Module2800() {
// TODO music stuff
- // TODO Sound1ChList_sub_407A50(0x64210814);
+ // TODO SoundMan_deleteGroup(0x64210814);
// TODO Module2800_sub471DF0();
}
@@ -61,11 +61,11 @@ void Module2800::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Music18hList_stop(0xD2FA4D14, 0, 0);
+ // TODO SoundMan_stopMusic(0xD2FA4D14, 0, 0);
_childObject = new Scene2801(_vm, this, which);
break;
case 1:
- // TODO Music18hList_stop(0xD2FA4D14, 0, 0);
+ // TODO SoundMan_stopMusic(0xD2FA4D14, 0, 0);
#if 0
_flag = true; // DEBUG!
if (_flag) {
@@ -76,7 +76,7 @@ void Module2800::createScene(int sceneNum, int which) {
#endif
break;
case 2:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
//setGlobalVar(0x1860C990,1);//DEBUG
if (getGlobalVar(0x1860C990))
_childObject = new Scene2803b(_vm, this, which);
@@ -87,98 +87,98 @@ void Module2800::createScene(int sceneNum, int which) {
_childObject = new Scene2804(_vm, this, which);
break;
case 4:
- // TODO Music18hList_stop(0xD2FA4D14, 0, 2);
+ // TODO SoundMan_stopMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
break;
case 5:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2806(_vm, this, which);
break;
case 6:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2807(_vm, this, which);
break;
case 7:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 0);
break;
case 8:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2809(_vm, this, which);
break;
case 9:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2810(_vm, this, which);
break;
case 10:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2808(_vm, this, 1);
break;
case 11:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2812(_vm, this, which);
break;
case 12:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x0000A245, 0x0A241008);
break;
case 13:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x81C60635, 0x60631814);
break;
case 14:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0xCA811204, 0x11200CA0);
break;
case 15:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x2D438A00, 0x38A042DC);
break;
case 16:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x0A806204, 0x062000A0);
break;
case 17:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x010F9284, 0xF9280018);
break;
case 18:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x0100022B, 0x0022F018);
break;
case 19:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x10866205, 0x66201100);
break;
case 20:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x01C58000, 0x58004014);
break;
case 21:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Scene2822(_vm, this, which);
break;
case 22:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x9408121E, 0x8121A948);
break;
case 23:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x048C0600, 0xC0604040);
break;
case 24:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new Class152(_vm, this, 0x04270A94, 0x70A9004A);
break;
case 25:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
if (getGlobalVar(0x190A1D18))
_childObject = new Class152(_vm, this, 0x01600204, 0x0020001E);
else
_childObject = new Class152(_vm, this, 0x08611204, 0x1120008E);
break;
case 26:
- // TODO Music18hList_play(0xD2FA4D14, 0, 2, 1);
+ // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
_childObject = new DiskplayerScene(_vm, this, 4);
break;
//
@@ -1527,7 +1527,7 @@ AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene
_needRefresh = true;
AnimatedSprite::updatePosition();
_soundResource.load(0x6352F051);
- // TODO Sound1ChList_addSoundResource(0xC5EA0B28, 0xEF56B094, true);
+ // TODO SoundMan_addSound(0xC5EA0B28, 0xEF56B094, true);
SetUpdateHandler(&AsScene2804BeamCoil::update);
SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
}
@@ -1572,13 +1572,13 @@ void AsScene2804BeamCoil::hide() {
setVisible(false);
_ssBeamCoilBody->setVisible(false);
// TODO _ssBeamCoilBody->update(); -> hide()
- // TODO Sound1ChList_stop(0xEF56B094);
+ // TODO SoundMan_stopSound(0xEF56B094);
}
void AsScene2804BeamCoil::stBeaming() {
startAnimation(0x00494891, 93, -1);
NextState(&AsScene2804BeamCoil::stBeaming);
- // TODO Sound1ChList_playLooping(0xEF56B094);
+ // TODO SoundMan_playSoundLooping(0xEF56B094);
}
uint32 AsScene2804BeamCoil::hmBeaming(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2735,9 +2735,9 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE738);
_klayman->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
_asRope->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
- // TODO Sound1ChList_addSoundResource(0x84400112, 0xC874EE6C, true);
- // TODO Sound1ChList_playLooping(0xC874EE6C);
- // TODO Sound1ChList_setVolume(0xC874EE6C, 50);
+ // TODO SoundMan_addSound(0x84400112, 0xC874EE6C, true);
+ // TODO SoundMan_playSoundLooping(0xC874EE6C);
+ // TODO SoundMan_setSoundVolume(0xC874EE6C, 50);
_flag1 = false;
} else if ((which >= 11 && which <= 14) || (which >= 19 && which <= 22) || which == 3) {
if (getGlobalVar(0x1860C990)) {
@@ -2798,7 +2798,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
Scene2810::~Scene2810() {
setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
setGlobalVar(0x00D30138, _klayman->getX());
- // TODO Sound1ChList_sub_407AF0(0x84400112);
+ // TODO SoundMan_deleteSoundGroup(0x84400112);
}
void Scene2810::sub406650() {
@@ -2887,7 +2887,7 @@ AsScene2812Winch::AsScene2812Winch(NeverhoodEngine *vm)
}
AsScene2812Winch::~AsScene2812Winch() {
- // TODO Sound1ChList_sub_407AF0(0x00B000E2);
+ // TODO SoundMan_deleteSoundGroup(0x00B000E2);
}
uint32 AsScene2812Winch::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2896,8 +2896,8 @@ uint32 AsScene2812Winch::handleMessage(int messageNum, const MessageParam ¶m
case 0x2000:
startAnimation(0x20DA08A0, 0, -1);
setVisible(true);
- // TODO Sound1ChList_addSoundResource(0x00B000E2, 0xC874EE6C, true);
- // TODO Sound1ChList_playLooping(0xC874EE6C);
+ // TODO SoundMan_addSound(0x00B000E2, 0xC874EE6C, true);
+ // TODO SoundMan_playSoundLooping(0xC874EE6C);
break;
case 0x3002:
startAnimation(0x20DA08A0, 7, -1);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 8c797f3..ab86c48 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -29,18 +29,18 @@ namespace Neverhood {
Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundVolume(0) {
- // TODO Sound1ChList_addSoundResources(0x81293110, dword_4B7FC8, true);
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 1, 50, 600, 5, 150);
- // TODO Sound1ChList_setSoundValues(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_addSoundList(0x81293110, dword_4B7FC8, true);
+ // TODO SoundMan_setSoundListParams(dword_4B7FC8, true, 50, 600, 5, 150);
+ // TODO SoundMan_setSoundParams(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
_flag = getGlobalVar(0x10938830) != 0;
if (_flag) {
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
- // TODO Sound1ChList_playLooping(0x90F0D1C3);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, 0);
+ // TODO SoundMan_playSoundLooping(0x90F0D1C3);
}
if (which < 0) {
@@ -58,7 +58,7 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module3000::~Module3000() {
- // TODO Sound1ChList_sub_407A50(0x81293110);
+ // TODO SoundMan_deleteGroup(0x81293110);
}
void Module3000::createScene(int sceneNum, int which) {
@@ -77,10 +77,10 @@ void Module3000::createScene(int sceneNum, int which) {
}
break;
case 2:
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
if (_flag) {
_soundVolume = 90;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 90);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, 90);
}
if (getGlobalVar(0x10938830)) {
createNavigationScene(0x004B7D58, which);
@@ -109,7 +109,7 @@ void Module3000::createScene(int sceneNum, int which) {
createNavigationScene(0x004B7FB0, which, kNavigationTypes06);
break;
case 7:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundListParams(dword_4B7FC8, false, 0, 0, 0, 0);
if (!getSubVar(0x40050052, 0x089809C2)) {
setSubVar(0x40050052, 0x089809C2, 1);
createSmackerScene(0x90022001, true, true, false);
@@ -126,7 +126,7 @@ void Module3000::createScene(int sceneNum, int which) {
_childObject = new Scene3011(_vm, this, 0);
break;
case 11:
- // TODO Sound1ChList_setSoundValuesMulti(dword_4B7FC8, 0, 0, 0, 0, 0);
+ // TODO SoundMan_setSoundListParams(dword_4B7FC8, false, 0, 0, 0, 0);
if (!getSubVar(0x40050052, 0x10130993)) {
setSubVar(0x40050052, 0x10130993, 1);
createSmackerScene(0x31093019, true, true, false);
@@ -181,10 +181,10 @@ void Module3000::updateScene() {
}
break;
case 2:
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
if (_flag) {
_soundVolume = 0;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, 0);
}
if (_moduleResult == 0) {
createScene(3, 0);
@@ -229,12 +229,12 @@ void Module3000::updateScene() {
case 8:
_flag = getGlobalVar(0x10938830); // CHECKME
if (_moduleResult != 1) {
- // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
+ // TODO: SoundMan_setSoundListParams(dword_4B7FC8, true, 0, 0, 0, 0):
createScene(4, 1);
} else if (getGlobalVar(0xF0402B0A)) {
createScene(1008, -1);
} else {
- // TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0);
+ // TODO: SoundMan_setSoundListParams(dword_4B7FC8, true, 0, 0, 0, 0);
createScene(4, 1);
}
break;
@@ -275,26 +275,26 @@ void Module3000::updateScene() {
int navigationIndex = navigationScene()->getIndex();
if (navigationIndex == 1) {
if (frameNumber == 0) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_setSoundVolume(0x48498E46, 70);
+ // TODO SoundMan_setSoundVolume(0x50399F64, 70);
} else if (frameNumber == 100) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
}
} else if (navigationIndex == 0) {
if (frameNumber == 0) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_setSoundVolume(0x48498E46, 70);
+ // TODO SoundMan_setSoundVolume(0x50399F64, 70);
} else if (frameNumber == 10) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
}
if (_flag && _soundVolume < 90 && frameNumber % 2) {
if (frameNumber == 0)
_soundVolume = 40;
else
_soundVolume++;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, _soundVolume);
}
}
}
@@ -307,17 +307,17 @@ void Module3000::updateScene() {
int navigationIndex = navigationScene()->getIndex();
if (_flag && _soundVolume > 1 && frameNumber % 2) {
_soundVolume--;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, _soundVolume);
}
if (navigationIndex == 0) {
if (frameNumber == 35) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
}
} else if (navigationIndex == 1) {
if (frameNumber == 55) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO SoundMan_setSoundVolume(0x48498E46, 70);
+ // TODO SoundMan_setSoundVolume(0x50399F64, 70);
}
}
}
@@ -330,14 +330,14 @@ void Module3000::updateScene() {
int navigationIndex = navigationScene()->getIndex();
if (navigationIndex == 2) {
if (frameNumber == 40) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
}
if (_flag && _soundVolume < 90 && frameNumber % 2) {
if (frameNumber == 0)
_soundVolume = 40;
else
_soundVolume++;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ // TODO SoundMan_setSoundVolume(0x90F0D1C3, _soundVolume);
}
}
}
@@ -346,7 +346,7 @@ void Module3000::updateScene() {
case 5:
#if 0 // ALL TODO
if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
- // TODO Sound1ChList_sub_4080B0(false);
+ // TODO SoundMan_setTwoSoundsPlayFlag(false);
}
#endif
break;
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 7a3161c..981e703 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -60,8 +60,8 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
}
NavigationScene::~NavigationScene() {
- // TODO Sound1ChList_sub_4080B0(0);
- // TODO Sound1ChList_sub_408110(0);
+ // TODO SoundMan_setTwoSoundsPlayFlag(false);
+ // TODO SoundMan_setSoundThreePlayFlag(false);
}
int NavigationScene::getNavigationAreaType() {
@@ -88,8 +88,8 @@ void NavigationScene::update() {
_soundFlag2 = false;
_soundFlag1 = false;
_interactive = true;
- // TODO Sound1ChList_sub_4080B0(0);
- // TODO Sound1ChList_sub_408110(0);
+ // TODO SoundMan_setTwoSoundsPlayFlag(false);
+ // TODO SoundMan_setSoundThreePlayFlag(false);
_smackerDone = false;
_smackerPlayer->open(navigationItem.fileHash, true);
_vm->_screen->clear();
@@ -205,11 +205,11 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
}
if (oldSoundFlag2 != _soundFlag2) {
- // TODO Sound1ChList_sub_408110(_soundFlag2);
+ // TODO SoundMan_setSoundThreePlayFlag(_soundFlag2);
}
if (oldSoundFlag1 != _soundFlag1) {
- // TODO Sound1ChList_sub_4080B0(_soundFlag1);
+ // TODO SoundMan_setTwoSoundsPlayFlag(_soundFlag1);
}
}
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 38ccce9..91a23bf 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -52,6 +52,34 @@ void MusicResource::stop(int16 fadeVolumeStep) {
// TODO
}
+MusicItem::MusicItem()
+ : _musicResource(NULL) {
+}
+
+MusicItem::~MusicItem() {
+ if (_musicResource)
+ _musicResource->unload();
+ delete _musicResource;
+}
+
+SoundItem::SoundItem(NeverhoodEngine *vm, uint32 nameHash, uint32 soundFileHash,
+ bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
+ bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown)
+ : _soundResource(NULL), _nameHash(nameHash), _soundFileHash(soundFileHash),
+ _playOnceAfterRandomCountdown(false), _minCountdown(0), _maxCountdown(0),
+ _playOnceAfterCountdown(_playOnceAfterCountdown), _initialCountdown(initialCountdown),
+ _playLooping(false), _currCountdown(currCountdown) {
+
+ _soundResource = new SoundResource(vm);
+ _soundResource->load(soundFileHash);
+}
+
+SoundItem::~SoundItem() {
+ if (_soundResource)
+ _soundResource->unload();
+ delete _soundResource;
+}
+
SoundMan::SoundMan(NeverhoodEngine *vm)
: _vm(vm),
_soundIndex1(-1), _soundIndex2(-1), _soundIndex3(-1) {
@@ -71,62 +99,43 @@ void SoundMan::addMusic(uint32 nameHash, uint32 musicFileHash) {
musicItem->_countdown = 24;
musicItem->_musicResource = new MusicResource(_vm);
musicItem->_musicResource->load(musicFileHash);
- // TODO Is this needed? musicItem->_musicResource->init();
_musicItems.push_back(musicItem);
}
void SoundMan::deleteMusic(uint32 musicFileHash) {
- for (uint i = 0; i < _musicItems.size(); ++i) {
- MusicItem *musicItem = _musicItems[i];
- if (musicItem->_musicFileHash == musicFileHash) {
- musicItem->_musicResource->unload();
- delete musicItem->_musicResource;
- delete musicItem;
- _musicItems.remove_at(i);
- break;
- }
+ MusicItem *musicItem = getMusicItemByHash(musicFileHash);
+ if (musicItem) {
+ delete musicItem;
+ for (uint i = 0; i < _musicItems.size(); ++i)
+ if (_musicItems[i]->_musicFileHash == musicFileHash) {
+ _musicItems.remove_at(i);
+ break;
+ }
}
}
void SoundMan::startMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep) {
- for (uint i = 0; i < _musicItems.size(); ++i) {
- MusicItem *musicItem = _musicItems[i];
- if (musicItem->_musicFileHash == musicFileHash) {
- musicItem->_play = true;
- musicItem->_stop = false;
- musicItem->_countdown = countdown;
- musicItem->_fadeVolumeStep = fadeVolumeStep;
- break;
- }
+ MusicItem *musicItem = getMusicItemByHash(musicFileHash);
+ if (musicItem) {
+ musicItem->_play = true;
+ musicItem->_stop = false;
+ musicItem->_countdown = countdown;
+ musicItem->_fadeVolumeStep = fadeVolumeStep;
}
}
void SoundMan::stopMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep) {
- for (uint i = 0; i < _musicItems.size(); ++i) {
- MusicItem *musicItem = _musicItems[i];
- if (musicItem->_musicFileHash == musicFileHash) {
- musicItem->_play = false;
- musicItem->_stop = true;
- musicItem->_countdown = countdown;
- musicItem->_fadeVolumeStep = fadeVolumeStep;
- break;
- }
+ MusicItem *musicItem = getMusicItemByHash(musicFileHash);
+ if (musicItem) {
+ musicItem->_play = false;
+ musicItem->_stop = true;
+ musicItem->_countdown = countdown;
+ musicItem->_fadeVolumeStep = fadeVolumeStep;
}
}
void SoundMan::addSound(uint32 nameHash, uint32 soundFileHash) {
- SoundItem *soundItem = new SoundItem();
- soundItem->_nameHash = nameHash;
- soundItem->_soundFileHash = soundFileHash;
- soundItem->_playOnceAfterRandomCountdown = false;
- soundItem->_minCountdown = 50;
- soundItem->_maxCountdown = 600;
- soundItem->_playOnceAfterCountdown = false;
- soundItem->_initialCountdown = 0;
- soundItem->_playLooping = false;
- soundItem->_currCountdown = 0;
- soundItem->_soundResource = new SoundResource(_vm);
- soundItem->_soundResource->load(soundFileHash);
+ SoundItem *soundItem = new SoundItem(_vm, nameHash, soundFileHash, false, 50, 600, false, 0, false, 0);
_soundItems.push_back(soundItem);
}
@@ -136,15 +145,14 @@ void SoundMan::addSoundList(uint32 nameHash, uint32 *soundFileHashList) {
}
void SoundMan::deleteSound(uint32 soundFileHash) {
- for (uint i = 0; i < _soundItems.size(); ++i) {
- SoundItem *soundItem = _soundItems[i];
- if (soundItem->_soundFileHash == soundFileHash) {
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
- delete soundItem;
- _soundItems.remove_at(i);
- break;
- }
+ SoundItem *soundItem = getSoundItemByHash(soundFileHash);
+ if (soundItem) {
+ delete soundItem;
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ if (_soundItems[i]->_soundFileHash == soundFileHash) {
+ _soundItems.remove_at(i);
+ break;
+ }
}
}
@@ -248,8 +256,6 @@ void SoundMan::deleteMusicGroup(uint32 nameHash) {
for (int index = _musicItems.size() - 1; index >= 0; --index) {
MusicItem *musicItem = _musicItems[index];
if (musicItem->_nameHash == nameHash) {
- musicItem->_musicResource->unload();
- delete musicItem->_musicResource;
delete musicItem;
_musicItems.remove_at(index);
}
@@ -261,28 +267,18 @@ void SoundMan::deleteSoundGroup(uint32 nameHash) {
SoundItem *soundItem;
if (_soundIndex1 != -1 && _soundItems[_soundIndex1]->_nameHash == nameHash) {
- soundItem = _soundItems[_soundIndex1];
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
- delete soundItem;
- _soundItems.remove_at(_soundIndex1);
+ deleteSoundByIndex(_soundIndex1);
_soundIndex1 = -1;
}
if (_soundIndex2 != -1 && _soundItems[_soundIndex2]->_nameHash == nameHash) {
- soundItem = _soundItems[_soundIndex2];
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
- delete soundItem;
- _soundItems.remove_at(_soundIndex2);
+ deleteSoundByIndex(_soundIndex2);
_soundIndex2 = -1;
}
for (int index = _soundItems.size() - 1; index >= 0; --index) {
soundItem = _soundItems[index];
if (soundItem->_nameHash == nameHash) {
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
delete soundItem;
_soundItems.remove_at(index);
}
@@ -297,22 +293,14 @@ void SoundMan::playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soun
int16 currCountdown2 = _initialCountdown / 2;
if (_soundIndex1 != -1) {
- soundItem = _soundItems[_soundIndex1];
- currCountdown1 = soundItem->_currCountdown;
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
- delete soundItem;
- _soundItems.remove_at(_soundIndex1);
+ currCountdown1 = _soundItems[_soundIndex1]->_currCountdown;
+ deleteSoundByIndex(_soundIndex1);
_soundIndex1 = -1;
}
if (_soundIndex2 != -1) {
- soundItem = _soundItems[_soundIndex2];
- currCountdown2 = soundItem->_currCountdown;
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
- delete soundItem;
- _soundItems.remove_at(_soundIndex2);
+ currCountdown2 = _soundItems[_soundIndex2]->_currCountdown;
+ deleteSoundByIndex(_soundIndex2);
_soundIndex2 = -1;
}
@@ -320,36 +308,16 @@ void SoundMan::playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soun
_initialCountdown = initialCountdown;
if (soundFileHash1 != 0) {
- soundItem = new SoundItem();
- soundItem->_nameHash = nameHash;
- soundItem->_soundFileHash = soundFileHash1;
- soundItem->_playOnceAfterRandomCountdown = false;
- soundItem->_minCountdown = 0;
- soundItem->_maxCountdown = 0;
- soundItem->_playOnceAfterCountdown = _playOnceAfterCountdown;
- soundItem->_initialCountdown = _initialCountdown;
- soundItem->_playLooping = false;
- soundItem->_currCountdown = currCountdown1;
- soundItem->_soundResource = new SoundResource(_vm);
- soundItem->_soundResource->load(soundFileHash1);
+ soundItem = new SoundItem(_vm, nameHash, soundFileHash1, false, 0, 0,
+ _playOnceAfterCountdown, _initialCountdown, false, currCountdown1);
soundItem->_soundResource->setVolume(80);
_soundIndex1 = _soundItems.size();
_soundItems.push_back(soundItem);
}
if (soundFileHash2 != 0) {
- soundItem = new SoundItem();
- soundItem->_nameHash = nameHash;
- soundItem->_soundFileHash = soundFileHash2;
- soundItem->_playOnceAfterRandomCountdown = false;
- soundItem->_minCountdown = 0;
- soundItem->_maxCountdown = 0;
- soundItem->_playOnceAfterCountdown = _playOnceAfterCountdown;
- soundItem->_initialCountdown = _initialCountdown;
- soundItem->_playLooping = false;
- soundItem->_currCountdown = currCountdown2;
- soundItem->_soundResource = new SoundResource(_vm);
- soundItem->_soundResource->load(soundFileHash2);
+ soundItem = new SoundItem(_vm, nameHash, soundFileHash2, false, 0, 0,
+ _playOnceAfterCountdown, _initialCountdown, false, currCountdown2);
soundItem->_soundResource->setVolume(80);
_soundIndex2 = _soundItems.size();
_soundItems.push_back(soundItem);
@@ -362,28 +330,14 @@ void SoundMan::playSoundThree(uint32 nameHash, uint32 soundFileHash) {
SoundItem *soundItem;
if (_soundIndex3 != -1) {
- soundItem = _soundItems[_soundIndex3];
- soundItem->_soundResource->unload();
- delete soundItem->_soundResource;
- delete soundItem;
- _soundItems.remove_at(_soundIndex3);
+ deleteSoundByIndex(_soundIndex3);
_soundIndex3 = -1;
}
if (soundFileHash != 0) {
- soundItem = new SoundItem();
- soundItem->_nameHash = nameHash;
- soundItem->_soundFileHash = soundFileHash;
- soundItem->_playOnceAfterRandomCountdown = false;
- soundItem->_minCountdown = 0;
- soundItem->_maxCountdown = 0;
- soundItem->_playOnceAfterCountdown = false;
- soundItem->_initialCountdown = _initialCountdown3;
- soundItem->_playLooping = false;
- soundItem->_currCountdown = 0;
- soundItem->_soundResource = new SoundResource(_vm);
- soundItem->_soundResource->load(soundFileHash);
- _soundIndex2 = _soundItems.size();
+ soundItem = new SoundItem(_vm, nameHash, soundFileHash, false, 0, 0,
+ false, _initialCountdown3, false, 0);
+ _soundIndex3 = _soundItems.size();
_soundItems.push_back(soundItem);
}
@@ -403,6 +357,13 @@ void SoundMan::setSoundThreePlayFlag(bool playOnceAfterCountdown) {
_playOnceAfterCountdown3 = playOnceAfterCountdown;
}
+MusicItem *SoundMan::getMusicItemByHash(uint32 musicFileHash) {
+ for (uint i = 0; i < _musicItems.size(); ++i)
+ if (_musicItems[i]->_musicFileHash == musicFileHash)
+ return _musicItems[i];
+ return NULL;
+}
+
SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
for (uint i = 0; i < _soundItems.size(); ++i)
if (_soundItems[i]->_soundFileHash == soundFileHash)
@@ -410,4 +371,9 @@ SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
return NULL;
}
+void SoundMan::deleteSoundByIndex(int index) {
+ delete _soundItems[index];
+ _soundItems.remove_at(index);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index 66ed700..39bf7cd 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -50,6 +50,8 @@ struct MusicItem {
int16 _fadeVolumeStep;
int16 _countdown;
MusicResource *_musicResource;
+ MusicItem();
+ ~MusicItem();
};
struct SoundItem {
@@ -63,6 +65,11 @@ struct SoundItem {
bool _playLooping;
int16 _currCountdown;
SoundResource *_soundResource;
+
+ SoundItem(NeverhoodEngine *vm, uint32 nameHash, uint32 soundFileHash,
+ bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
+ bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown);
+ ~SoundItem();
};
class SoundMan {
@@ -113,7 +120,9 @@ protected:
Common::Array<MusicItem*> _musicItems;
Common::Array<SoundItem*> _soundItems;
+ MusicItem *getMusicItemByHash(uint32 musicFileHash);
SoundItem *getSoundItemByHash(uint32 soundFileHash);
+ void deleteSoundByIndex(int index);
};
Commit: fc0e40db304aa489d4117299fcce1f80ba0b6379
https://github.com/scummvm/scummvm/commit/fc0e40db304aa489d4117299fcce1f80ba0b6379
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: Implement the actual audio code
Sounds and music play now in some scenes
(I didn't change the comments to code in all modules yet)
- Fix calcHash to ignore non-alphanumeric characters, this fixes at least
one animation glitch (when inserting tapes into the player)
- Move SoundResource to sound.cpp
Changed paths:
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/navigationscene.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/resourceman.cpp
engines/neverhood/scene.cpp
engines/neverhood/sound.cpp
engines/neverhood/sound.h
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 9256c13..22eb780 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -27,6 +27,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/gamevars.h"
#include "neverhood/graphics.h"
+#include "neverhood/sound.h"
namespace Neverhood {
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e2494af..7841e27 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -298,9 +298,9 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule(1500, 0); // Logos and intro video //Real
-#if 0
+#if 1
_vm->gameState().sceneNum = 0;
- createModule(1200, -1);
+ createModule(1400, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -339,7 +339,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 8;
createModule(2600, -1);
#endif
-#if 1
+#if 0
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index ca30e3b..0000883 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -60,7 +60,7 @@ static const KlaymanIdleTableItem klaymanTable4[] = {
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
_counterMax(0), _counter(0), _isMoveObjectRequested(false), _counter3Max(0), _isWalkingOpenDoorNotified(false), _counter1(0),
- _counter2(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
+ _tapesToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
_status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _flagF6(false), _isLeverDown(false),
_flagFA(false), _ladderStatus(0), _pathPoints(NULL), _resourceHandle(-1), _soundFlag(false) {
@@ -2119,16 +2119,16 @@ void Klayman::cbLeverReleasedEvent() {
void Klayman::stInsertDisk() {
if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertDisk))) {
_status2 = 2;
- _counter2 = 0;
+ _tapesToInsert = 0;
for (uint32 i = 0; i < 20; i++) {
if (getSubVar(0x02038314, i)) {
setSubVar(0x02720344, i, 1);
setSubVar(0x02038314, i, 0);
- _counter2++;
+ _tapesToInsert++;
}
}
- if (_counter2 == 0) {
- gotoState(NULL);
+ if (_tapesToInsert == 0) {
+ GotoState(NULL);
gotoNextStateExt();
} else {
startAnimation(0xD8C8D100, 0, -1);
@@ -2136,7 +2136,7 @@ void Klayman::stInsertDisk() {
SetSpriteUpdate(&Klayman::spriteUpdate41F250);
SetMessageHandler(&Klayman::hmInsertDisk);
_acceptInput = false;
- _counter2--;
+ _tapesToInsert--;
}
}
}
@@ -2145,12 +2145,12 @@ uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x06040580) {
- if (_counter2 == 0) {
- // TODO: Calc calcHash value somewhere else
+ if (_tapesToInsert == 0) {
+ // TODO: Calc calcHash value somewhere else
nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
}
- } else if (_counter2 != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
- _counter2--;
+ } else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
+ _tapesToInsert--;
startAnimationByHash(0xD8C8D100, 0x01084280, 0);
} else if (param.asInteger() == 0x062A1510) {
_soundResource1.play(0x41688704);
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index b752b1e..cbf17a0 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -185,7 +185,7 @@ protected:
int16 _counter, _counterMax;
int16 _counter3, _counter3Max;
int16 _counter1;
- int16 _counter2;
+ int16 _tapesToInsert;
bool _flagF6;
bool _isLeverDown;
bool _isWalkingOpenDoorNotified;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 1c30681..2db598b 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -31,8 +31,8 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
_musicFileHash = getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144;
- // TODO SoundMan_addMusic(0x03294419, 0x061880C6);
- // TODO SoundMan_addMusic(0x03294419, _musicFileHash);
+ _vm->_soundMan->addMusic(0x03294419, 0x061880C6);
+ _vm->_soundMan->addMusic(0x03294419, _musicFileHash);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -45,7 +45,7 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1000::~Module1000() {
- // TODO SoundMan_deleteMusicGroup(0x03294419);
+ _vm->_soundMan->deleteMusicGroup(0x03294419);
}
void Module1000::createScene(int sceneNum, int which) {
@@ -53,24 +53,24 @@ void Module1000::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_startMusic(0x061880C6, 0, 0, 1);
+ _vm->_soundMan->startMusic(0x061880C6, 0, 0);
_childObject = new Scene1001(_vm, this, which);
break;
case 1:
- // TODO SoundMan_startMusic(0x061880C6, 0, 0, 1);
+ _vm->_soundMan->startMusic(0x061880C6, 0, 0);
_childObject = new Scene1002(_vm, this, which);
break;
case 2:
- // TODO SoundMan_startMusic(0x061880C6, 0, 0);
+ _vm->_soundMan->startMusic(0x061880C6, 0, 0);
_childObject = new Class152(_vm, this, 0xC084110C, 0x41108C00);
break;
case 3:
- // TODO SoundMan_stopMusic(0x061880C6, 0, 2);
+ _vm->_soundMan->stopMusic(0x061880C6, 0, 2);
_childObject = new Scene1004(_vm, this, which);
break;
case 4:
- // TODO SoundMan_stopMusic(0x061880C6, 0, 0);
- // TODO SoundMan_startMusic(_musicFileHash, 0, 0, 1);
+ _vm->_soundMan->stopMusic(0x061880C6, 0, 0);
+ _vm->_soundMan->startMusic(_musicFileHash, 0, 0);
_childObject = new Scene1005(_vm, this, which);
break;
}
@@ -105,7 +105,7 @@ void Module1000::updateScene() {
createScene(1, 2);
break;
case 4:
- // TODO SoundMan_stopMusic(_musicFileHash, 0, 1);
+ _vm->_soundMan->stopMusic(_musicFileHash, 0, 1);
createScene(3, 1);
break;
}
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 8b73598..e948c2b 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -22,6 +22,7 @@
#include "neverhood/module1100.h"
#include "neverhood/gamemodule.h"
+#include "neverhood/navigationscene.h"
namespace Neverhood {
@@ -36,16 +37,16 @@ Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(9, 3);
}
- // TODO SoundMan_addSoundList(0x2C818, dword_4B85B0, true);
+ // TODO SoundMan_addSoundList(0x0002C818, dword_4B85B0, true);
// TODO SoundMan_setSoundListParams(dword_4B85B0, true, 50, 600, 20, 250);
- // TODO SoundMan_setSoundParams(0x74E01054, false, 100, 200, 10, 20);
- // TODO SoundMan_setSoundVolume(0x74E01054, 60);
- // TODO SoundMan_playTwoSounds(0x2C818, 0x41861371, 0x43A2507F);
+ _vm->_soundMan->setSoundParams(0x74E01054, false, 100, 200, 10, 20);
+ _vm->_soundMan->setSoundVolume(0x74E01054, 60);
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
}
Module1100::~Module1100() {
- // TODO SoundMan_deleteGroup(0x2C818);
+ _vm->_soundMan->deleteGroup(0x0002C818);
}
void Module1100::createScene(int sceneNum, int which) {
@@ -86,11 +87,11 @@ void Module1100::createScene(int sceneNum, int which) {
createSmackerScene(0x04180007, true, false, false);
break;
case 6:
- // TODO SoundMan_deleteSoundGroup(0x2C818);
+ _vm->_soundMan->deleteSoundGroup(0x0002C818);
createSmackerScene(kSmackerFileHashList06, true, true, false);
break;
case 7:
- // TODO SoundMan_setSoundParams(0x74E01054, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundParams(0x74E01054, false, 0, 0, 0, 0);
createSmackerScene(kSmackerFileHashList07, true, true, false);
break;
case 8:
@@ -98,7 +99,7 @@ void Module1100::createScene(int sceneNum, int which) {
break;
case 1002:
_countdown = 40;
- // TODO SoundMan_setTwoSoundsPlayFlag(true);
+ _vm->_soundMan->setTwoSoundsPlayFlag(true);
createSmackerScene(0x00012211, true, true, false);
break;
}
@@ -111,9 +112,9 @@ void Module1100::updateScene() {
switch (_vm->gameState().sceneNum) {
case 0:
_countdown = 0;
- // TODO SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64);
- // TODO SoundMan_setSoundVolume(0x48498E46, 65);
- // TODO SoundMan_setSoundVolume(0x50399F64, 65);
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 65);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 65);
if (_moduleResult == 0) {
createScene(1, 0);
} else if (_moduleResult == 1) {
@@ -121,7 +122,7 @@ void Module1100::updateScene() {
}
break;
case 1:
- // TODO SoundMan_playTwoSounds(0x2C818, 0x41861371, 0x43A2507F);
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
if (getGlobalVar(0x0C0288F4)) {
if (_moduleResult == 0) {
createScene(6, -1);
@@ -137,7 +138,7 @@ void Module1100::updateScene() {
}
break;
case 2:
- // TODO SoundMan_setSoundParams(0x74E01054, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundParams(0x74E01054, false, 0, 0, 0, 0);
if (_navigationAreaType == 3) {
createScene(7, -1);
} else if (_moduleResult == 1) {
@@ -161,6 +162,7 @@ void Module1100::updateScene() {
}
break;
case 5:
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
if (getGlobalVar(0x610210B7)) {
createScene(3, 0);
} else {
@@ -168,9 +170,11 @@ void Module1100::updateScene() {
}
break;
case 6:
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
leaveModule(1);
break;
case 7:
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
createScene(2, 2);
break;
case 8:
@@ -181,8 +185,9 @@ void Module1100::updateScene() {
}
break;
case 1002:
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
_countdown = 0;
- // TODO SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
createScene(1, 1);
break;
}
@@ -191,7 +196,7 @@ void Module1100::updateScene() {
case 0:
#if 0 // TODO
if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
- SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64);
+ SoundMan_playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64);
SoundMan_setSoundVolume(0x48498E46, 65);
SoundMan_setSoundVolume(0x50399F64, 65);
}
@@ -200,21 +205,21 @@ void Module1100::updateScene() {
case 1:
#if 0 // TODO
if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
- SoundMan_playTwoSounds(0x2C818, 0x41861371, 0x43A2507F);
+ SoundMan_playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F);
}
#endif
break;
case 2:
- // TODO SoundMan_setSoundParams(0x74E01054, !navigationScene()->soundFlag1, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundParams(0x74E01054, !navigationScene()->getSoundFlag1(), 0, 0, 0, 0);
break;
case 5:
case 6:
case 7:
case 1002:
if (_countdown != 0 && (--_countdown == 0)) {
- // TODO SoundMan_playTwoSounds(0x2C818, 0x48498E46, 0x50399F64);
- // TODO SoundMan_setSoundVolume(0x48498E46, 65);
- // TODO SoundMan_setSoundVolume(0x50399F64, 65);
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 65);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 65);
}
break;
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 7599d76..33b791a 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -39,12 +39,12 @@ Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- // TODO SoundMan_addMusic(0x00478311, 0x62222CAE);
- // TODO SoundMan_startMusic(0x62222CAE, 0, 0, 1);
+ _vm->_soundMan->addMusic(0x00478311, 0x62222CAE);
+ _vm->_soundMan->startMusic(0x62222CAE, 0, 0);
}
Module1200::~Module1200() {
- // TODO SoundMan_deleteMusicGroup(0x00478311);
+ _vm->_soundMan->deleteMusicGroup(0x00478311);
}
void Module1200::createScene(int sceneNum, int which) {
@@ -58,7 +58,7 @@ void Module1200::createScene(int sceneNum, int which) {
_childObject = new Scene1202(_vm, this, which);
break;
case 2:
- // TODO SoundMan_stopMusic(0x62222CAE, 0, 0);
+ _vm->_soundMan->stopMusic(0x62222CAE, 0, 0);
createSmackerScene(0x31890001, true, true, false);
setGlobalVar(0x2A02C07B, 1);
break;
@@ -87,7 +87,7 @@ void Module1200::updateScene() {
createScene(0, 1);
break;
case 2:
- // TODO SoundMan_startMusic(0x62222CAE, 0, 0, 1);
+ _vm->_soundMan->startMusic(0x62222CAE, 0, 0);
createScene(0, 3);
break;
}
@@ -371,7 +371,7 @@ AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sp
}
AsScene1201TntMan::~AsScene1201TntMan() {
- // TODO SoundMan_deleteSoundGroup(0x01D00560);
+ _vm->_soundMan->deleteSoundGroup(0x01D00560);
}
uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -426,8 +426,8 @@ void AsScene1201TntMan::sub40CD60() {
}
void AsScene1201TntMan::sub40CD90() {
- // TODO SoundMan_addSound(0x01D00560, 0x4B044624, true);
- // TODO SoundMan_playSoundLooping(0x4B044624);
+ _vm->_soundMan->addSound(0x01D00560, 0x4B044624);
+ _vm->_soundMan->playSoundLooping(0x4B044624);
_flag = true;
startAnimation(0x85084190, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
@@ -447,7 +447,7 @@ Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
}
Class465::~Class465() {
- // TODO SoundMan_deleteSoundGroup(0x041080A4);
+ _vm->_soundMan->deleteSoundGroup(0x041080A4);
}
void Class465::update() {
@@ -455,8 +455,8 @@ void Class465::update() {
if (getGlobalVar(0x20A0C516)) {
setVisible(true);
SetUpdateHandler(&AnimatedSprite::update);
- // TODO SoundMan_addSound(0x041080A4, 0x460A1050, true);
- // TODO SoundMan_playSoundLooping(0x460A1050);
+ _vm->_soundMan->addSound(0x041080A4, 0x460A1050);
+ _vm->_soundMan->playSoundLooping(0x460A1050);
}
}
@@ -1227,10 +1227,7 @@ bool Scene1202::isSolved() {
}
void Scene1202::doPaletteEffect() {
-#if 0 // TODO
- Palette2 *palette2 = (Palette2*)_palette;
- palette2->startFadeToPalette(24);
-#endif
+ // TODO
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index b7c588f..ee4dc7a 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -35,12 +35,12 @@ namespace Neverhood {
Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO SoundMan_addMusic(0x61C090, 0x203197);
+ _vm->_soundMan->addMusic(0x61C090, 0x203197);
// TODO SoundMan_addSoundList(0x61C090, dword_4B2868, true);
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 50, 600, 20, 150);
- // TODO SoundMan_playTwoSounds(0x61C090, 0x48498E46, 0x50399F64, 0);
- // TODO SoundMan_setSoundVolume(0x48498E46, 70);
- // TODO SoundMan_setSoundVolume(0x50399F64, 70);
+ _vm->_soundMan->playTwoSounds(0x61C090, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 70);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 70);
if (which < 0) {
if (_vm->gameState().sceneNum >= 1 && _vm->gameState().sceneNum <= 17)
@@ -94,7 +94,7 @@ Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1300::~Module1300() {
- // TODO SoundMan_deleteGroup(0x61C090);
+ _vm->_soundMan->deleteGroup(0x61C090);
}
void Module1300::createScene(int sceneNum, int which) {
@@ -103,82 +103,82 @@ void Module1300::createScene(int sceneNum, int which) {
switch (_vm->gameState().sceneNum) {
case 1:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1302(_vm, this, which);
break;
case 2:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new Scene1303(_vm, this, which);
break;
case 3:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new Scene1304(_vm, this, which);
break;
case 4:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1305(_vm, this, which);
break;
case 5:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1306(_vm, this, which);
break;
case 6:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1307(_vm, this, which);
break;
case 7:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_startMusic(0x203197, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1308(_vm, this, which);
break;
case 8:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 1);
break;
case 9:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createSmackerScene(0x20082818, true, true, false);
break;
case 10:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createSmackerScene(0x20082828, true, true, false);
break;
case 11:
// TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B27A8, which);
break;
case 12:
// TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2718, which);
break;
case 13:
// TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B27D8, which);
break;
case 14:
// TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2808, which);
break;
case 15:
// TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2838, which);
break;
case 16:
// TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
- // TODO SoundMan_stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new Scene1317(_vm, this, which);
break;
case 17:
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 3707356..8d40c34 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -32,8 +32,8 @@ namespace Neverhood {
Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO SoundMan_addMusic(0x00AD0012, 0x06333232);
- // TODO SoundMan_addMusic(0x00AD0012, 0x624A220E);
+ _vm->_soundMan->addMusic(0x00AD0012, 0x06333232);
+ _vm->_soundMan->addMusic(0x00AD0012, 0x624A220E);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -44,7 +44,7 @@ Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1400::~Module1400() {
- // TODO SoundMan_deleteMusicGroup(0x00AD0012);
+ _vm->_soundMan->deleteMusicGroup(0x00AD0012);
}
void Module1400::createScene(int sceneNum, int which) {
@@ -52,33 +52,33 @@ void Module1400::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_startMusic(0x06333232, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x06333232, 0, 2);
_childObject = new Scene1401(_vm, this, which);
break;
case 1:
- // TODO SoundMan_stopMusic(0x06333232, 0, 2);
- // TODO SoundMan_stopMusic(0x624A220E, 0, 2);
+ _vm->_soundMan->stopMusic(0x06333232, 0, 2);
+ _vm->_soundMan->stopMusic(0x624A220E, 0, 2);
_childObject = new Scene1402(_vm, this, which);
break;
case 2:
- // TODO SoundMan_stopMusic(0x06333232, 0, 2);
- // TODO SoundMan_startMusic(0x624A220E, 0, 2, 1);
+ _vm->_soundMan->stopMusic(0x06333232, 0, 2);
+ _vm->_soundMan->startMusic(0x624A220E, 0, 2);
_childObject = new Scene1403(_vm, this, which);
break;
case 3:
- // TODO SoundMan_startMusic(0x06333232, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x06333232, 0, 2);
_childObject = new Scene1404(_vm, this, which);
break;
case 4:
- // TODO SoundMan_startMusic(0x06333232, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x06333232, 0, 2);
_childObject = new Scene1405(_vm, this, which);
break;
case 5:
- // TODO SoundMan_stopMusic(0x06333232, 0, 2);
+ _vm->_soundMan->stopMusic(0x06333232, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 2);
break;
case 6:
- // TODO SoundMan_stopMusic(0x06333232, 0, 2);
+ _vm->_soundMan->stopMusic(0x06333232, 0, 2);
_childObject = new Scene1407(_vm, this, which);
break;
}
@@ -148,7 +148,7 @@ Class525::Class525(NeverhoodEngine *vm)
}
Class525::~Class525() {
- // TODO SoundMan_deleteSoundGroup(0x01104C08);
+ _vm->_soundMan->deleteSoundGroup(0x01104C08);
}
void Class525::update4662A0() {
@@ -157,8 +157,8 @@ void Class525::update4662A0() {
sub466460();
}
if (_countdown2 != 0 && (--_countdown2 == 0)) {
- // TODO SoundMan_addSound(0x01104C08, 0x4A116437, true);
- // TODO SoundMan_playSoundLooping(0x4A116437);
+ _vm->_soundMan->addSound(0x01104C08, 0x4A116437);
+ _vm->_soundMan->playSoundLooping(0x4A116437);
}
}
@@ -211,7 +211,7 @@ void Class525::sub466420() {
}
void Class525::sub466460() {
- // TODO SoundMan_deleteSound(0x4A116437);
+ _vm->_soundMan->deleteSound(0x4A116437);
_soundResource1.play(0x4A120435);
startAnimation(0x4C210500, 0, -1);
}
@@ -406,7 +406,7 @@ Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Spr
}
Class489::~Class489() {
- // TODO SoundMan_deleteSoundGroup(0x05331081);
+ _vm->_soundMan->deleteSoundGroup(0x05331081);
}
uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -616,8 +616,8 @@ void Class489::sub434EC0() {
NextState(&Class489::sub434F40);
setGlobalVar(0x12A10DB3, 1);
_soundResource1.play(0xCC4A8456);
- // TODO SoundMan_addSound(0x05331081, 0xCE428854, true);
- // TODO SoundMan_playSoundLooping(0xCE428854);
+ _vm->_soundMan->addSound(0x05331081, 0xCE428854);
+ _vm->_soundMan->playSoundLooping(0xCE428854);
}
void Class489::sub434F40() {
@@ -634,7 +634,7 @@ void Class489::sub434F80() {
NextState(&Class489::sub434E90);
setGlobalVar(0x12A10DB3, 0);
_soundResource1.play(0xCC4A8456);
- // TODO SoundMan_deleteSound(0xCE428854);
+ _vm->_soundMan->deleteSound(0xCE428854);
}
void Class489::sub434FF0() {
diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h
index c37a7fc..4397a43 100644
--- a/engines/neverhood/navigationscene.h
+++ b/engines/neverhood/navigationscene.h
@@ -34,6 +34,8 @@ public:
NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, const byte *itemsTypes);
virtual ~NavigationScene();
int getNavigationAreaType();
+ bool getSoundFlag1() const { return _soundFlag1; }
+ bool getSoundFlag2() const { return _soundFlag2; }
protected:
SmackerPlayer *_smackerPlayer;
bool _smackerDone;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index abd9374..e5c07b5 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -100,6 +100,7 @@ Common::Error NeverhoodEngine::run() {
#if 1
_soundMan = new SoundMan(this);
+ _audioResourceMan = new AudioResourceMan(this);
_collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
@@ -139,6 +140,8 @@ Common::Error NeverhoodEngine::run() {
//debug("millis %d", _system->getMillis());
_gameModule->handleUpdate();
_gameModule->draw();
+ _soundMan->update();
+ _audioResourceMan->update();
_screen->wait();
_screen->update();
@@ -149,6 +152,7 @@ Common::Error NeverhoodEngine::run() {
delete _gameModule;
delete _collisionMan;
delete _soundMan;
+ delete _audioResourceMan;
#endif
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 13ea399..2aa84e5 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -46,6 +46,7 @@ class GameVars;
class ResourceMan;
class Screen;
class SoundMan;
+class AudioResourceMan;
class StaticData;
struct NPoint;
@@ -87,6 +88,7 @@ public:
CollisionMan *_collisionMan;
SoundMan *_soundMan;
+ AudioResourceMan *_audioResourceMan;
public:
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 7b0aa94..9bf6549 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -640,44 +640,20 @@ DataResource::DRDirectoryItem *DataResource::findDRDirectoryItem(uint32 nameHash
return NULL;
}
-// SoundResource
-// ALL TODO
-
-SoundResource::SoundResource(NeverhoodEngine *vm)
- : _vm(vm) {
-}
-
-bool SoundResource::isPlaying() {
- return false;
-}
-
-void SoundResource::load(uint32 fileHash) {
-}
-
-void SoundResource::unload() {
-}
-
-void SoundResource::play(uint32 fileHash, bool looping) {
-}
-
-void SoundResource::play() {
-}
-
-void SoundResource::setVolume(int volume) {
-}
-
uint32 calcHash(const char *value) {
uint32 hash = 0, shiftValue = 0;
while (*value != 0) {
char ch = *value++;
- if (ch >= 'a' && ch <= 'z')
- ch -= 32;
- else if (ch >= '0' && ch <= '9')
- ch += 22;
- shiftValue += ch - 64;
- if (shiftValue >= 32)
- shiftValue -= 32;
- hash ^= 1 << shiftValue;
+ if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')) {
+ if (ch >= 'a' && ch <= 'z')
+ ch -= 32;
+ else if (ch >= '0' && ch <= '9')
+ ch += 22;
+ shiftValue += ch - 64;
+ if (shiftValue >= 32)
+ shiftValue -= 32;
+ hash ^= 1 << shiftValue;
+ }
}
return hash;
}
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index b0cd464..1678296 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -191,22 +191,6 @@ protected:
DataResource::DRDirectoryItem *findDRDirectoryItem(uint32 nameHash, uint16 type);
};
-// TODO: Dummy class atm
-
-class SoundResource {
-public:
- SoundResource(NeverhoodEngine *vm);
- bool isPlaying();
- void load(uint32 fileHash);
- void unload();
- void play(uint32 fileHash, bool looping = false);
- void play();
- void stop() { /*DUMMY*/ }
- void setVolume(int volume);
-protected:
- NeverhoodEngine *_vm;
-};
-
uint32 calcHash(const char *value);
} // End of namespace Neverhood
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 0538f58..c073e97 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -35,7 +35,7 @@ void ResourceMan::addArchive(const Common::String &filename) {
uint archiveIndex = _archives.size();
archive->open(filename);
_archives.push_back(archive);
- debug("ResourceMan::addArchive(%s) %d files", filename.c_str(), archive->getCount());
+ debug(3, "ResourceMan::addArchive(%s) %d files", filename.c_str(), archive->getCount());
_entries.reserve(_entries.size() + archive->getCount());
for (uint archiveEntryIndex = 0; archiveEntryIndex < archive->getCount(); archiveEntryIndex++) {
BlbArchiveEntry *archiveEntry = archive->getEntry(archiveEntryIndex);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index d189fad..8520d64 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -375,7 +375,7 @@ uint32 Scene::smackerHandleMessage(int messageNum, const MessageParam ¶m, En
}
bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
- debug("Scene::queryPositionSprite(%d, %d)", mouseX, mouseY);
+ //debug("Scene::queryPositionSprite(%d, %d)", mouseX, mouseY);
for (uint i = 0; i < _vm->_collisionMan->getSpriteCount(); i++) {
Sprite *sprite = _vm->_collisionMan->getSprite(i);
if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
@@ -397,7 +397,7 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
for (uint j = 0; j < rectList[i].subRects.size(); j++) {
debug(2, " (%d, %d) ? (%d, %d, %d, %d)", mouseX, mouseY, rectList[i].subRects[j].rect.x1, rectList[i].subRects[j].rect.y1, rectList[i].subRects[j].rect.x2, rectList[i].subRects[j].rect.y2);
if (rectList[i].subRects[j].rect.contains(mouseX, mouseY)) {
- debug("Scene::queryPositionRectList() -> %08X", rectList[i].subRects[j].messageListId);
+ //debug("Scene::queryPositionRectList() -> %08X", rectList[i].subRects[j].messageListId);
return setMessageList2(rectList[i].subRects[j].messageListId);
}
}
@@ -416,7 +416,7 @@ void Scene::setMessageList(uint32 id, bool messageListFlag, bool systemCallbackF
}
void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
- debug("Scene::setMessageList(%p)", (void*)messageList);
+ //debug("Scene::setMessageList(%p)", (void*)messageList);
_messageList = messageList;
_messageListCount = _messageList ? _messageList->size() : 0;
_messageListIndex = 0;
@@ -426,11 +426,13 @@ void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool
_messageListStatus = 1;
sendMessage(_klayman, 0x101C, 0);
+#if 0
// DEBUG: Show message list
for (uint i = 0; i < messageList->size(); i++) {
debug("A: %02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
}
debug("A: ================================================================");
+#endif
}
@@ -441,13 +443,15 @@ bool Scene::setMessageList2(uint32 id, bool messageListFlag, bool systemCallback
bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
bool result = false;
- debug("Scene::setMessageList2(%p)", (void*)messageList);
+ //debug("Scene::setMessageList2(%p)", (void*)messageList);
+#if 0
// DEBUG: Show message list
for (uint i = 0; i < messageList->size(); i++) {
debug("B: %02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
}
debug("B: ================================================================");
+#endif
if (_messageListStatus == 1) {
if (messageList != _messageList2) {
@@ -500,7 +504,7 @@ void Scene::runMessageList() {
uint32 messageNum = (*_messageList)[_messageListIndex].messageNum;
uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
- debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
+ //debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
_messageListIndex++;
if (_messageListIndex == _messageListCount) {
@@ -573,7 +577,7 @@ void Scene::clearRectList() {
void Scene::loadHitRectList() {
HitRectList *hitRectList = _dataResource.getHitRectList();
- debug("Scene::loadHitRectList() hitRectList = %p", (void*)hitRectList);
+ //debug("Scene::loadHitRectList() hitRectList = %p", (void*)hitRectList);
if (hitRectList) {
_hitRectList = *hitRectList;
_vm->_collisionMan->setHitRects(&_hitRectList);
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 91a23bf..bd2f223 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -20,36 +20,101 @@
*
*/
+#include "common/memstream.h"
#include "graphics/palette.h"
#include "neverhood/sound.h"
+#include "neverhood/resourceman.h"
namespace Neverhood {
// TODO Put more stuff into the constructors/destructors of the item structs
// TODO Some parts are quite bad here, but my priority is to get sound working at all
+SoundResource::SoundResource(NeverhoodEngine *vm)
+ : _vm(vm), _soundIndex(-1) {
+}
+
+SoundResource::~SoundResource() {
+ unload();
+}
+
+bool SoundResource::isPlaying() {
+ return _soundIndex >= 0 &&
+ _vm->_audioResourceMan->isSoundPlaying(_soundIndex);
+}
+
+void SoundResource::load(uint32 fileHash) {
+ unload();
+ _soundIndex = _vm->_audioResourceMan->addSound(fileHash);
+ _vm->_audioResourceMan->loadSound(_soundIndex);
+}
+
+void SoundResource::unload() {
+ if (_soundIndex >= 0) {
+ _vm->_audioResourceMan->removeSound(_soundIndex);
+ _soundIndex = -1;
+ }
+}
+
+void SoundResource::play(uint32 fileHash) {
+ load(fileHash);
+ play();
+}
+
+void SoundResource::play() {
+ if (_soundIndex >= 0)
+ _vm->_audioResourceMan->playSound(_soundIndex, false);
+}
+
+void SoundResource::stop() {
+ if (_soundIndex >= 0)
+ _vm->_audioResourceMan->stopSound(_soundIndex);
+}
+
+void SoundResource::setVolume(int16 volume) {
+ if (_soundIndex >= 0)
+ _vm->_audioResourceMan->setSoundVolume(_soundIndex, volume);
+}
+
+void SoundResource::setPan(int16 pan) {
+ if (_soundIndex >= 0)
+ _vm->_audioResourceMan->setSoundPan(_soundIndex, pan);
+}
+
MusicResource::MusicResource(NeverhoodEngine *vm)
- : _vm(vm) {
+ : _vm(vm), _musicIndex(-1) {
}
bool MusicResource::isPlaying() {
- return false;
+ return _musicIndex >= 0 &&
+ _vm->_audioResourceMan->isMusicPlaying(_musicIndex);
}
void MusicResource::load(uint32 fileHash) {
- // TODO
+ unload();
+ _musicIndex = _vm->_audioResourceMan->loadMusic(fileHash);
}
void MusicResource::unload() {
- // TODO
+ if (_musicIndex >= 0) {
+ _vm->_audioResourceMan->unloadMusic(_musicIndex);
+ _musicIndex = -1;
+ }
}
void MusicResource::play(int16 fadeVolumeStep) {
- // TODO
+ if (_musicIndex >= 0)
+ _vm->_audioResourceMan->playMusic(_musicIndex, fadeVolumeStep);
}
void MusicResource::stop(int16 fadeVolumeStep) {
- // TODO
+ if (_musicIndex >= 0)
+ _vm->_audioResourceMan->stopMusic(_musicIndex, fadeVolumeStep);
+}
+
+void MusicResource::setVolume(int16 volume) {
+ if (_musicIndex >= 0)
+ _vm->_audioResourceMan->setMusicVolume(_musicIndex, volume);
}
MusicItem::MusicItem()
@@ -80,6 +145,8 @@ SoundItem::~SoundItem() {
delete _soundResource;
}
+// SoundMan
+
SoundMan::SoundMan(NeverhoodEngine *vm)
: _vm(vm),
_soundIndex1(-1), _soundIndex2(-1), _soundIndex3(-1) {
@@ -107,8 +174,8 @@ void SoundMan::deleteMusic(uint32 musicFileHash) {
if (musicItem) {
delete musicItem;
for (uint i = 0; i < _musicItems.size(); ++i)
- if (_musicItems[i]->_musicFileHash == musicFileHash) {
- _musicItems.remove_at(i);
+ if (_musicItems[i] == musicItem) {
+ _musicItems[i] = NULL;
break;
}
}
@@ -149,8 +216,8 @@ void SoundMan::deleteSound(uint32 soundFileHash) {
if (soundItem) {
delete soundItem;
for (uint i = 0; i < _soundItems.size(); ++i)
- if (_soundItems[i]->_soundFileHash == soundFileHash) {
- _soundItems.remove_at(i);
+ if (_soundItems[i] == soundItem) {
+ _soundItems[i] = NULL;
break;
}
}
@@ -213,35 +280,41 @@ void SoundMan::update() {
for (uint i = 0; i < _soundItems.size(); ++i) {
SoundItem *soundItem = _soundItems[i];
- if (soundItem->_playOnceAfterCountdown) {
- if (soundItem->_currCountdown == 0) {
- soundItem->_currCountdown = soundItem->_initialCountdown;
- } else if (--soundItem->_currCountdown == 0) {
- soundItem->_soundResource->play();
+ if (soundItem) {
+ if (soundItem->_playOnceAfterCountdown) {
+ if (soundItem->_currCountdown == 0) {
+ soundItem->_currCountdown = soundItem->_initialCountdown;
+ } else if (--soundItem->_currCountdown == 0) {
+ soundItem->_soundResource->play();
+ }
+ } else if (soundItem->_playOnceAfterRandomCountdown) {
+ if (soundItem->_currCountdown == 0) {
+ if (soundItem->_minCountdown > 0 && soundItem->_maxCountdown > 0 && soundItem->_minCountdown < soundItem->_maxCountdown)
+ soundItem->_currCountdown = _vm->_rnd->getRandomNumberRng(soundItem->_minCountdown, soundItem->_maxCountdown);
+ } else if (--soundItem->_currCountdown == 0) {
+ soundItem->_soundResource->play();
+ }
+ } else if (soundItem->_playLooping && !soundItem->_soundResource->isPlaying()) {
+ soundItem->_soundResource->play(); // TODO Looping parameter?
}
- } else if (soundItem->_playOnceAfterRandomCountdown) {
- if (soundItem->_currCountdown == 0) {
- if (soundItem->_minCountdown > 0 && soundItem->_maxCountdown > 0 && soundItem->_minCountdown < soundItem->_maxCountdown)
- soundItem->_currCountdown = _vm->_rnd->getRandomNumberRng(soundItem->_minCountdown, soundItem->_maxCountdown);
- } else if (--soundItem->_currCountdown == 0) {
- soundItem->_soundResource->play();
- }
- } else if (soundItem->_playLooping && !soundItem->_soundResource->isPlaying()) {
- soundItem->_soundResource->play(); // TODO Looping parameter?
}
}
for (uint i = 0; i < _musicItems.size(); ++i) {
MusicItem *musicItem = _musicItems[i];
- if (musicItem->_countdown) {
- --musicItem->_countdown;
- } else if (musicItem->_play && !musicItem->_musicResource->isPlaying()) {
- musicItem->_musicResource->play(musicItem->_fadeVolumeStep);
- musicItem->_fadeVolumeStep = 0;
- } else if (musicItem->_stop) {
- musicItem->_musicResource->stop(musicItem->_fadeVolumeStep);
- musicItem->_fadeVolumeStep = 0;
- musicItem->_stop = false;
+ if (musicItem) {
+ if (musicItem->_countdown) {
+ --musicItem->_countdown;
+ } else if (musicItem->_play && !musicItem->_musicResource->isPlaying()) {
+ debug("SoundMan: play music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
+ musicItem->_musicResource->play(musicItem->_fadeVolumeStep);
+ musicItem->_fadeVolumeStep = 0;
+ } else if (musicItem->_stop) {
+ debug("SoundMan: stop music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
+ musicItem->_musicResource->stop(musicItem->_fadeVolumeStep);
+ musicItem->_fadeVolumeStep = 0;
+ musicItem->_stop = false;
+ }
}
}
@@ -253,11 +326,11 @@ void SoundMan::deleteGroup(uint32 nameHash) {
}
void SoundMan::deleteMusicGroup(uint32 nameHash) {
- for (int index = _musicItems.size() - 1; index >= 0; --index) {
+ for (uint index = 0; index < _musicItems.size(); ++index) {
MusicItem *musicItem = _musicItems[index];
- if (musicItem->_nameHash == nameHash) {
+ if (musicItem && musicItem->_nameHash == nameHash) {
delete musicItem;
- _musicItems.remove_at(index);
+ _musicItems[index] = NULL;
}
}
}
@@ -276,11 +349,11 @@ void SoundMan::deleteSoundGroup(uint32 nameHash) {
_soundIndex2 = -1;
}
- for (int index = _soundItems.size() - 1; index >= 0; --index) {
+ for (uint index = 0; index < _soundItems.size(); ++index) {
soundItem = _soundItems[index];
- if (soundItem->_nameHash == nameHash) {
+ if (soundItem && soundItem->_nameHash == nameHash) {
delete soundItem;
- _soundItems.remove_at(index);
+ _soundItems[index] = NULL;
}
}
@@ -359,21 +432,327 @@ void SoundMan::setSoundThreePlayFlag(bool playOnceAfterCountdown) {
MusicItem *SoundMan::getMusicItemByHash(uint32 musicFileHash) {
for (uint i = 0; i < _musicItems.size(); ++i)
- if (_musicItems[i]->_musicFileHash == musicFileHash)
+ if (_musicItems[i] && _musicItems[i]->_musicFileHash == musicFileHash)
return _musicItems[i];
return NULL;
}
SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
for (uint i = 0; i < _soundItems.size(); ++i)
- if (_soundItems[i]->_soundFileHash == soundFileHash)
+ if (_soundItems[i] && _soundItems[i]->_soundFileHash == soundFileHash)
return _soundItems[i];
return NULL;
}
+int16 SoundMan::addMusicItem(MusicItem *musicItem) {
+ return 0; // TODO
+}
+
+int16 SoundMan::addSoundItem(SoundItem *soundItem) {
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ if (!_soundItems[i]) {
+ _soundItems[i] = soundItem;
+ return i;
+ }
+ int16 soundIndex = _soundItems.size();
+ _soundItems.push_back(soundItem);
+ return soundIndex;
+}
+
void SoundMan::deleteSoundByIndex(int index) {
delete _soundItems[index];
- _soundItems.remove_at(index);
+ _soundItems[index] = NULL;
+}
+
+// NeverhoodAudioStream
+
+NeverhoodAudioStream::NeverhoodAudioStream(int rate, byte shiftValue, bool isLooping, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream)
+ : _rate(rate), _shiftValue(shiftValue), _isLooping(isLooping), _isStereo(false), _stream(stream, disposeStream), _endOfData(false), _buffer(0),
+ _isCompressed(_shiftValue != 0xFF), _prevValue(0) {
+ // Setup our buffer for readBuffer
+ _buffer = new byte[kSampleBufferLength * (_isCompressed ? 1 : 2)];
+ assert(_buffer);
+}
+
+NeverhoodAudioStream::~NeverhoodAudioStream() {
+ delete[] _buffer;
+}
+
+int NeverhoodAudioStream::readBuffer(int16 *buffer, const int numSamples) {
+ int samplesLeft = numSamples;
+
+ while (samplesLeft > 0 && !_endOfData) {
+
+ const int maxSamples = MIN<int>(kSampleBufferLength, samplesLeft);
+ const int bytesToRead = maxSamples * (_isCompressed ? 1 : 2);
+ int bytesRead = _stream->read(_buffer, bytesToRead);
+ int samplesRead = bytesRead / (_isCompressed ? 1 : 2);
+
+ samplesLeft -= samplesRead;
+
+ const byte *src = _buffer;
+ if (_isCompressed) {
+ while (samplesRead--) {
+ _prevValue += (int8)(*src++);
+ *buffer++ = _prevValue << _shiftValue;
+ }
+ } else {
+ memcpy(buffer, _buffer, bytesRead);
+ buffer += bytesRead;
+ }
+
+ if (bytesRead < bytesToRead || _stream->pos() >= _stream->size() || _stream->err() || _stream->eos()) {
+ if (_isLooping)
+ _stream->seek(0);
+ else
+ _endOfData = true;
+ }
+
+ }
+
+ return numSamples - samplesLeft;
+}
+
+AudioResourceMan::AudioResourceMan(NeverhoodEngine *vm)
+ : _vm(vm) {
+}
+
+AudioResourceMan::~AudioResourceMan() {
+}
+
+int16 AudioResourceMan::addSound(uint32 fileHash) {
+ AudioResourceManSoundItem *soundItem = new AudioResourceManSoundItem();
+ soundItem->_resourceHandle = _vm->_res->useResource(fileHash);
+ soundItem->_fileHash = fileHash;
+ soundItem->_data = NULL;
+ soundItem->_isLoaded = false;
+ soundItem->_isPlaying = false;
+ soundItem->_volume = 100;
+ soundItem->_panning = 50;
+
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ if (!_soundItems[i]) {
+ _soundItems[i] = soundItem;
+ return i;
+ }
+
+ int16 soundIndex = (int16)_soundItems.size();
+ _soundItems.push_back(soundItem);
+ return soundIndex;
+}
+
+void AudioResourceMan::removeSound(int16 soundIndex) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (soundItem->_data) {
+ _vm->_res->unloadResource(soundItem->_resourceHandle);
+ soundItem->_data = NULL;
+ }
+ if (soundItem->_resourceHandle != 1) {
+ _vm->_res->unuseResource(soundItem->_resourceHandle);
+ soundItem->_resourceHandle = -1;
+ }
+ if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
+ _vm->_mixer->stopHandle(soundItem->_soundHandle);
+ delete soundItem;
+ _soundItems[soundIndex] = NULL;
+}
+
+void AudioResourceMan::loadSound(int16 soundIndex) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (!soundItem->_data) {
+ // TODO Check if it's a sound resource
+ soundItem->_data = _vm->_res->loadResource(soundItem->_resourceHandle);
+ }
+}
+
+void AudioResourceMan::unloadSound(int16 soundIndex) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (soundItem->_data) {
+ _vm->_res->unloadResource(soundItem->_resourceHandle);
+ soundItem->_data = NULL;
+ }
+}
+
+void AudioResourceMan::setSoundVolume(int16 soundIndex, int16 volume) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ soundItem->_volume = MIN<int16>(volume, 100);
+ if (soundItem->_isPlaying && _vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
+ _vm->_mixer->setChannelVolume(soundItem->_soundHandle, VOLUME(soundItem->_volume));
+}
+
+void AudioResourceMan::setSoundPan(int16 soundIndex, int16 pan) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ soundItem->_panning = MIN<int16>(pan, 100);
+ if (soundItem->_isPlaying && _vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
+ _vm->_mixer->setChannelVolume(soundItem->_soundHandle, PANNING(soundItem->_panning));
+}
+
+void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (!soundItem->_data)
+ loadSound(soundIndex);
+
+ uint32 soundSize = _vm->_res->getResourceSize(soundItem->_resourceHandle);
+ Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundSize, DisposeAfterUse::NO);
+ byte *shiftValue = _vm->_res->getResourceExtData(soundItem->_resourceHandle);
+ NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, false, DisposeAfterUse::YES, stream);
+
+ _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &soundItem->_soundHandle,
+ audioStream, -1, VOLUME(soundItem->_volume), PANNING(soundItem->_panning));
+
+ debug("playing sound %08X", soundItem->_fileHash);
+
+ soundItem->_isPlaying = true;
+
+}
+
+void AudioResourceMan::stopSound(int16 soundIndex) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
+ _vm->_mixer->stopHandle(soundItem->_soundHandle);
+ soundItem->_isPlaying = false;
+}
+
+bool AudioResourceMan::isSoundPlaying(int16 soundIndex) {
+ AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ return soundItem->_isPlaying;
+}
+
+int16 AudioResourceMan::loadMusic(uint32 fileHash) {
+
+ AudioResourceManMusicItem *musicItem;
+
+ for (uint i = 0; i < _musicItems.size(); ++i) {
+ musicItem = _musicItems[i];
+ if (musicItem && musicItem->_fileHash == fileHash && musicItem->_remove) {
+ musicItem->_remove = false;
+ musicItem->_isFadingOut = false;
+ musicItem->_isFadingIn = true;
+ return i;
+ }
+ }
+
+ musicItem = new AudioResourceManMusicItem();
+ musicItem->_fileHash = fileHash;
+ musicItem->_isPlaying = false;
+ musicItem->_remove = false;
+ musicItem->_volume = 100;
+ musicItem->_panning = 50;
+ musicItem->_start = false;
+ musicItem->_isFadingIn = false;
+ musicItem->_isFadingOut = false;
+
+ for (uint i = 0; i < _musicItems.size(); ++i) {
+ if (!_musicItems[i]) {
+ _musicItems[i] = musicItem;
+ return i;
+ }
+ }
+
+ int16 musicIndex = _musicItems.size();
+ _musicItems.push_back(musicItem);
+ return musicIndex;
+
+}
+
+void AudioResourceMan::unloadMusic(int16 musicIndex) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+ if (musicItem->_isFadingOut) {
+ musicItem->_remove = true;
+ } else {
+ if (_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle))
+ _vm->_mixer->stopHandle(musicItem->_soundHandle);
+ musicItem->_isPlaying = false;
+ _musicItems[musicIndex] = NULL;
+ }
+}
+
+void AudioResourceMan::setMusicVolume(int16 musicIndex, int16 volume) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+ musicItem->_volume = MIN<int16>(volume, 100);
+ if (musicItem->_isPlaying && _vm->_mixer->isSoundHandleActive(musicItem->_soundHandle))
+ _vm->_mixer->setChannelVolume(musicItem->_soundHandle, VOLUME(musicItem->_volume));
+}
+
+void AudioResourceMan::playMusic(int16 musicIndex, int16 fadeVolumeStep) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+ if (!musicItem->_isPlaying) {
+ musicItem->_isFadingIn = false;
+ musicItem->_isFadingOut = false;
+ if (fadeVolumeStep != 0) {
+ musicItem->_isFadingIn = true;
+ musicItem->_fadeVolume = 0;
+ musicItem->_fadeVolumeStep = fadeVolumeStep;
+ }
+ musicItem->_start = true;
+ }
+}
+
+void AudioResourceMan::stopMusic(int16 musicIndex, int16 fadeVolumeStep) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+ if (_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
+ if (fadeVolumeStep != 0) {
+ if (musicItem->_isFadingIn)
+ musicItem->_isFadingIn = false;
+ else
+ musicItem->_fadeVolume = musicItem->_volume;
+ musicItem->_isFadingOut = true;
+ musicItem->_fadeVolumeStep = fadeVolumeStep;
+ } else {
+ _vm->_mixer->stopHandle(musicItem->_soundHandle);
+ }
+ musicItem->_isPlaying = false;
+ }
+}
+
+bool AudioResourceMan::isMusicPlaying(int16 musicIndex) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+ return musicItem->_isPlaying;
+}
+
+void AudioResourceMan::updateMusicItem(int16 musicIndex) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+
+ if (musicItem->_start && !_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
+ Common::SeekableReadStream *stream = _vm->_res->createStream(musicItem->_fileHash);
+ byte *shiftValue = _vm->_res->getResourceExtDataByHash(musicItem->_fileHash);
+ NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, true, DisposeAfterUse::YES, stream);
+ _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &musicItem->_soundHandle,
+ audioStream, -1, VOLUME(musicItem->_isFadingIn ? musicItem->_fadeVolume : musicItem->_volume),
+ PANNING(musicItem->_panning));
+ musicItem->_start = false;
+ musicItem->_isPlaying = true;
+ }
+
+ if (_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
+ if (musicItem->_isFadingIn) {
+ musicItem->_fadeVolume += musicItem->_fadeVolumeStep;
+ if (musicItem->_fadeVolume >= musicItem->_volume) {
+ musicItem->_fadeVolume = musicItem->_volume;
+ musicItem->_isFadingIn = false;
+ }
+ _vm->_mixer->setChannelVolume(musicItem->_soundHandle, VOLUME(musicItem->_fadeVolume));
+ }
+ if (musicItem->_isFadingOut) {
+ musicItem->_fadeVolume -= musicItem->_fadeVolumeStep;
+ if (musicItem->_fadeVolume < 0)
+ musicItem->_fadeVolume = 0;
+ _vm->_mixer->setChannelVolume(musicItem->_soundHandle, VOLUME(musicItem->_fadeVolume));
+ if (musicItem->_fadeVolume == 0) {
+ musicItem->_isFadingOut = false;
+ stopMusic(musicIndex, 0);
+ if (musicItem->_remove)
+ unloadMusic(musicIndex);
+ }
+ }
+ }
+
+}
+
+void AudioResourceMan::update() {
+ for (uint i = 0; i < _musicItems.size(); ++i)
+ if (_musicItems[i])
+ updateMusicItem(i);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index 39bf7cd..b724e89 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -23,6 +23,7 @@
#ifndef NEVERHOOD_SOUND_H
#define NEVERHOOD_SOUND_H
+#include "audio/audiostream.h"
#include "common/array.h"
#include "graphics/surface.h"
#include "neverhood/neverhood.h"
@@ -30,6 +31,29 @@
namespace Neverhood {
+// Convert volume from percent to 0..255
+#define VOLUME(volume) (Audio::Mixer::kMaxChannelVolume / 100 * (volume))
+
+// Convert panning from percent (50% equals center) to -127..0..+127
+#define PANNING(panning) (254 / 100 * (panning) - 127)
+
+class SoundResource {
+public:
+ SoundResource(NeverhoodEngine *vm);
+ ~SoundResource();
+ bool isPlaying();
+ void load(uint32 fileHash);
+ void unload();
+ void play(uint32 fileHash);
+ void play();
+ void stop();
+ void setVolume(int16 volume);
+ void setPan(int16 pan);
+protected:
+ NeverhoodEngine *_vm;
+ int16 _soundIndex;
+};
+
class MusicResource {
public:
MusicResource(NeverhoodEngine *vm);
@@ -38,8 +62,10 @@ public:
void unload();
void play(int16 fadeVolumeStep);
void stop(int16 fadeVolumeStep);
+ void setVolume(int16 volume);
protected:
NeverhoodEngine *_vm;
+ int16 _musicIndex;
};
struct MusicItem {
@@ -72,6 +98,8 @@ struct SoundItem {
~SoundItem();
};
+// TODO Give this a better name
+
class SoundMan {
public:
SoundMan(NeverhoodEngine *vm);
@@ -122,10 +150,102 @@ protected:
MusicItem *getMusicItemByHash(uint32 musicFileHash);
SoundItem *getSoundItemByHash(uint32 soundFileHash);
+ int16 addMusicItem(MusicItem *musicItem);
+ int16 addSoundItem(SoundItem *soundItem);
void deleteSoundByIndex(int index);
};
+class NeverhoodAudioStream : public Audio::AudioStream {
+public:
+ NeverhoodAudioStream(int rate, byte shiftValue, bool isLooping, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream);
+ ~NeverhoodAudioStream();
+ int readBuffer(int16 *buffer, const int numSamples);
+ bool isStereo() const { return _isStereo; }
+ bool endOfData() const { return _endOfData; }
+ int getRate() const { return _rate; }
+private:
+ const int _rate;
+ const bool _isLooping;
+ const bool _isStereo;
+ const byte _shiftValue;
+ const bool _isCompressed;
+ int16 _prevValue;
+ Common::DisposablePtr<Common::SeekableReadStream> _stream;
+ bool _endOfData;
+ byte *_buffer;
+ enum {
+ kSampleBufferLength = 2048
+ };
+ int fillBuffer(int maxSamples);
+};
+
+// TODO Rename these
+
+struct AudioResourceManSoundItem {
+ uint32 _fileHash;
+ int _resourceHandle;
+ byte *_data;
+ bool _isLoaded;
+ bool _isPlaying;
+ int16 _volume;
+ int16 _panning;
+ Audio::SoundHandle _soundHandle;
+};
+
+struct AudioResourceManMusicItem {
+ uint32 _fileHash;
+ // streamIndex dw
+ // needCreate db
+ bool _isPlaying;
+ bool _remove;
+ int16 _volume;
+ int16 _panning;
+ bool _start;
+ bool _isFadingIn;
+ bool _isFadingOut;
+ int16 _fadeVolume;
+ int16 _fadeVolumeStep;
+ Audio::SoundHandle _soundHandle;
+ // status dw
+ // updateCounter dd
+};
+
+class AudioResourceMan {
+public:
+ AudioResourceMan(NeverhoodEngine *vm);
+ ~AudioResourceMan();
+
+ int16 addSound(uint32 fileHash);
+ void removeSound(int16 soundIndex);
+ void loadSound(int16 soundIndex);
+ void unloadSound(int16 soundIndex);
+ void setSoundVolume(int16 soundIndex, int16 volume);
+ void setSoundPan(int16 soundIndex, int16 pan);
+ void playSound(int16 soundIndex, bool looping);
+ void stopSound(int16 soundIndex);
+ bool isSoundPlaying(int16 soundIndex);
+
+ int16 loadMusic(uint32 fileHash);
+ void unloadMusic(int16 musicIndex);
+ void setMusicVolume(int16 musicIndex, int16 volume);
+ void playMusic(int16 musicIndex, int16 fadeVolumeStep);
+ void stopMusic(int16 musicIndex, int16 fadeVolumeStep);
+ bool isMusicPlaying(int16 musicIndex);
+ void updateMusicItem(int16 musicIndex);
+
+ void update();
+
+protected:
+ NeverhoodEngine *_vm;
+
+ Common::Array<AudioResourceManMusicItem*> _musicItems;
+ Common::Array<AudioResourceManSoundItem*> _soundItems;
+
+ int16 addSoundItem(AudioResourceManSoundItem *soundItem);
+
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_SOUND_H */
Commit: f5a8c9d90d66de98f7eba43a2de0c4fdf3517a0d
https://github.com/scummvm/scummvm/commit/f5a8c9d90d66de98f7eba43a2de0c4fdf3517a0d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: Add most SoundMan remaining calls
Except for those which need a sound hash array (later)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/navigationscene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7841e27..3cd7e1d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -51,13 +51,13 @@ GameModule::GameModule(NeverhoodEngine *vm)
// Other initializations moved to actual engine class
// TODO
- // TODO SoundMan_playSoundThree(0x2D0031, 0x8861079);
+ _vm->_soundMan->playSoundThree(0x002D0031, 0x8861079);
SetMessageHandler(&GameModule::handleMessage);
}
GameModule::~GameModule() {
- // TODO SoundMan_deleteSoundGroup(0x2D0031);
+ _vm->_soundMan->deleteSoundGroup(0x002D0031);
delete _childObject;
_childObject = NULL;
// TODO: Set palette to black but probably not neccessary
@@ -300,7 +300,7 @@ void GameModule::startup() {
// createModule(1500, 0); // Logos and intro video //Real
#if 1
_vm->gameState().sceneNum = 0;
- createModule(1400, -1);
+ createModule(1200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 0000883..87ab6e0 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -4733,11 +4733,11 @@ void KmScene2205::sub423980() {
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // TODO SoundMan_addSound(0x80101800, 0xD3B02847);
+ _vm->_soundMan->addSound(0x80101800, 0xD3B02847);
}
KmScene2206::~KmScene2206() {
- // TODO SoundMan_deleteSoundGroup(0x80101800);
+ _vm->_soundMan->deleteSoundGroup(0x80101800);
}
void KmScene2206::xUpdate() {
@@ -4852,7 +4852,7 @@ void KmScene2206::sub482490() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(&KmScene2206::spriteUpdate482450);
- // TODO SoundMan_playSoundLooping(0xD3B02847);
+ _vm->_soundMan->playSoundLooping(0xD3B02847);
}
}
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 77d135d..5ff6cd0 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -46,12 +46,12 @@ Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO SoundMan_addSoundList(0x1A008D8, dword_4B3BB0, true);
// TODO SoundMan_setSoundListParams(dword_4B3BB0, true, 50, 600, 5, 150);
- // TODO SoundMan_playTwoSounds(0x1A008D8, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->playTwoSounds(0x1A008D8, 0x41861371, 0x43A2507F, 0);
}
Module1600::~Module1600() {
- // TODO SoundMan_deleteGroup(0x1A008D8);
+ _vm->_soundMan->deleteGroup(0x1A008D8);
}
void Module1600::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 696f646..0057926 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -27,10 +27,10 @@ namespace Neverhood {
Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource(vm) {
- // TODO SoundMan_addMusic(0x04212331);
+ _vm->_soundMan->addMusic(0x04212331, 0x31114225);
// TODO SoundMan_addSoundList(0x04212331, dword_4AE930, true);
// TODO SoundMan_setSoundListParams(dword_4AE930, true, 50, 600, 5, 150);
- // TODO SoundMan_playTwoSounds(0x04212331, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->playTwoSounds(0x04212331, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -45,7 +45,7 @@ Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1700::~Module1700() {
- // TODO SoundMan_deleteGroup(0x04212331);
+ _vm->_soundMan->deleteGroup(0x04212331);
}
void Module1700::createScene(int sceneNum, int which) {
@@ -68,7 +68,7 @@ void Module1700::createScene(int sceneNum, int which) {
break;
case 4:
// TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
- // TODO SoundMan_startMusic(0x31114225, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x31114225, 0, 2);
_childObject = new Scene1705(_vm, this, which);
break;
}
@@ -97,7 +97,7 @@ void Module1700::updateScene() {
createScene(1, 1);
} else if (_moduleResult == 2) {
if (!_soundResource.isPlaying()) {
- // TODO _soundResource.setVolume(60);
+ _soundResource.setVolume(60);
_soundResource.play(0x58B45E58);
}
createScene(2, 2);
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 7526a3a..fc31b2d 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -30,7 +30,7 @@ Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO SoundMan_addSoundList(0x04A14718, dword_4AFE70);
// TODO SoundMan_setSoundListParams(dword_4AFE70, true, 50, 600, 10, 150);
- // TODO SoundMan_playTwoSounds(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
+ _vm->_soundMan->playTwoSounds(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -45,7 +45,7 @@ Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1800::~Module1800() {
- // TODO SoundMan_deleteGroup(0x04A14718);
+ _vm->_soundMan->deleteGroup(0x04A14718);
}
void Module1800::createScene(int sceneNum, int which) {
@@ -73,7 +73,7 @@ void Module1800::createScene(int sceneNum, int which) {
createNavigationScene(0x004AFE40, which);
break;
case 6:
- // TODO SoundMan_deleteGroup(0x04A14718);
+ _vm->_soundMan->deleteGroup(0x04A14718);
createSmackerScene(0x08D84010, true, true, false);
break;
case 7:
@@ -156,12 +156,9 @@ void Module1800::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 0:
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (navigationScene->soundFlag1 && navigationScene->index == 2) {
- // TODO SoundMan_setTwoSoundsPlayFlag(false);
+ if (navigationScene()->getSoundFlag1() && navigationScene()->getNavigationIndex() == 2) {
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
}
-#endif
break;
}
}
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index bf1aad6..d432bcb 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -42,7 +42,7 @@ Module1900::Module1900(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module1900::~Module1900() {
- // TODO SoundMan_deleteGroup(0x04E1C09C);
+ _vm->_soundMan->deleteGroup(0x04E1C09C);
}
void Module1900::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index e071291..d1d6b82 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -40,7 +40,7 @@ Module2000::Module2000(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2000::~Module2000() {
- // TODO SoundMan_deleteGroup(0x81293110);
+ _vm->_soundMan->deleteGroup(0x81293110);
}
void Module2000::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 33c9d23..fd2a793 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -29,7 +29,7 @@ namespace Neverhood {
Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO SoundMan_addMusic(0x10A10C14, 0x11482B95);
+ _vm->_soundMan->addMusic(0x10A10C14, 0x11482B95);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -44,7 +44,7 @@ Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2100::~Module2100() {
- // TODO SoundMan_deleteMusicGroup(0x10A10C14);
+ _vm->_soundMan->deleteMusicGroup(0x10A10C14);
}
void Module2100::createScene(int sceneNum, int which) {
@@ -52,7 +52,7 @@ void Module2100::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_startMusic(0x11482B95, 0, 1, 1);
+ _vm->_soundMan->startMusic(0x11482B95, 0, 1);
_childObject = new Scene2101(_vm, this, which);
break;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index cbd232e..bb2f59b 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -33,7 +33,7 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Create Module2200(%d)", which);
- // TODO: SoundMan_addMusic(0x11391412, 0x601C908C);
+ _vm->_soundMan->addMusic(0x11391412, 0x601C908C);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -44,7 +44,7 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2200::~Module2200() {
- // TODO SoundMan_deleteGroup(0x11391412);
+ _vm->_soundMan->deleteGroup(0x11391412);
}
void Module2200::createScene(int sceneNum, int which) {
@@ -57,23 +57,23 @@ void Module2200::createScene(int sceneNum, int which) {
_childObject = new Scene2201(_vm, this, which);
break;
case 1:
- // TODO SoundMan_startMusic(0x601C908C, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x601C908C, 0, 2);
_childObject = new Scene2202(_vm, this, which);
break;
case 2:
- // TODO SoundMan_startMusic(0x601C908C, 0, 2, 1);
+ _vm->_soundMan->startMusic(0x601C908C, 0, 2);
_childObject = new Scene2203(_vm, this, which);
break;
case 3:
- // TODO SoundMan_stopMusic(0x601C908C, 0, 2);
+ _vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 3);
break;
case 4:
- // TODO SoundMan_stopMusic(0x601C908C, 0, 2);
+ _vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2205(_vm, this, which);
break;
case 5:
- // TODO SoundMan_stopMusic(0x601C908C, 0, 2);
+ _vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2206(_vm, this, which);
break;
case 6:
@@ -576,19 +576,19 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
insertSprite<AsScene2201CeilingFan>();
- // TODO SoundMan_addSound(0x04106220, 0x81212040, true);
+ _vm->_soundMan->addSound(0x04106220, 0x81212040);
}
Scene2201::~Scene2201() {
setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
- // TODO SoundMan_deleteSoundGroup(0x04106220);
+ _vm->_soundMan->deleteSoundGroup(0x04106220);
}
void Scene2201::update() {
Scene::update();
if (!_soundFlag) {
- // TODO SoundMan_playSoundLooping(0x81212040);
+ _vm->_soundMan->playSoundLooping(0x81212040);
_soundFlag = true;
}
}
@@ -918,13 +918,13 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
_soundResource1.load(0x68E25540);
_soundResource2.load(0x40400457);
- // TODO SoundMan_addSound(0x60400854, 0x8101A241, true);
- // TODO SoundMan_playSoundLooping(0x8101A241);
+ _vm->_soundMan->addSound(0x60400854, 0x8101A241);
+ _vm->_soundMan->playSoundLooping(0x8101A241);
}
Scene2202::~Scene2202() {
- // TODO SoundMan_deleteSoundGroup(0x60400854);
+ _vm->_soundMan->deleteSoundGroup(0x60400854);
}
void Scene2202::update() {
@@ -1714,7 +1714,7 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
}
AsScene2207Elevator::~AsScene2207Elevator() {
- // TODO SoundMan_deleteSoundGroup(0x02700413);
+ _vm->_soundMan->deleteSoundGroup(0x02700413);
}
void AsScene2207Elevator::update() {
@@ -1727,7 +1727,7 @@ void AsScene2207Elevator::update() {
if (_destPointIndexDelta != 0) {
_destPointIndexDelta = 0;
} else {
- // TODO SoundMan_deleteSound(0xD3B02847);
+ _vm->_soundMan->deleteSound(0xD3B02847);
_soundResource.play(0x53B8284A);
}
}
@@ -1743,7 +1743,7 @@ void AsScene2207Elevator::update() {
if (_destPointIndexDelta != 0) {
_destPointIndexDelta = 0;
} else {
- // TODO SoundMan_deleteSound(0xD3B02847);
+ _vm->_soundMan->deleteSound(0xD3B02847);
_soundResource.play(0x53B8284A);
}
}
@@ -1802,8 +1802,8 @@ void AsScene2207Elevator::moveToY(int16 y) {
} else {
_destPointIndexDelta = 2;
}
- // TODO SoundMan_addSound(0x02700413, 0xD3B02847, true);
- // TODO SoundMan_playSoundLooping(0xD3B02847);
+ _vm->_soundMan->addSound(0x02700413, 0xD3B02847);
+ _vm->_soundMan->playSoundLooping(0xD3B02847);
}
_isMoving = true;
@@ -1888,7 +1888,7 @@ AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm
}
AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() {
- // TODO SoundMan_deleteSoundGroup(0x80D00820);
+ _vm->_soundMan->deleteSoundGroup(0x80D00820);
}
uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1897,14 +1897,14 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
case 0x100D:
if (!_idle) {
if (param.asInteger() == 0x3423093) {
- // TODO SoundMan_addSound(0x80D00820, 0x12121943, true);
- // TODO SoundMan_playSoundLooping(0x12121943);
+ _vm->_soundMan->addSound(0x80D00820, 0x12121943);
+ _vm->_soundMan->playSoundLooping(0x12121943);
} else if (param.asInteger() == 0x834AB011) {
_soundResource1.stop();
_soundResource2.stop();
_soundResource3.stop();
_soundResource4.stop();
- // TODO SoundMan_deleteSound(0x12121943);
+ _vm->_soundMan->deleteSound(0x12121943);
} else if (param.asInteger() == 0x3A980501) {
_soundResource2.play();
} else if (param.asInteger() == 0x2A2AD498) {
@@ -1949,7 +1949,7 @@ void AsScene2207WallRobotAnimation::cbStopAnimation() {
_soundResource2.stop();
_soundResource3.stop();
_soundResource4.stop();
- // TODO SoundMan_deleteSound(0x12121943);
+ _vm->_soundMan->deleteSound(0x12121943);
_idle = true;
setVisible(false);
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index d3346eb..3f7c5e6 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -33,14 +33,14 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
_flag = getGlobalVar(0x10938830) == 0;
if (_flag) {
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, 0);
- // TODO SoundMan_playSoundLooping(0x90F0D1C3);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
+ _vm->_soundMan->playSoundLooping(0x90F0D1C3);
} else {
- // TODO SoundMan_setSoundParams(0x90F0D1C3, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundParams(0x90F0D1C3, false, 0, 0, 0, 0);
}
- // TODO SoundMan_playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64, 0);
- // TODO SoundMan_playTwoSounds(0x1A214010, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->playTwoSounds(0x1A214010, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
@@ -59,7 +59,7 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2300::~Module2300() {
- // TODO SoundMan_deleteGroup(0x1A214010);
+ _vm->_soundMan->deleteGroup(0x1A214010);
}
void Module2300::createScene(int sceneNum, int which) {
@@ -73,7 +73,7 @@ void Module2300::createScene(int sceneNum, int which) {
createNavigationScene(0x004B67E8, which);
if (_flag) {
_volume = 15;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, 15);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, 15);
}
break;
case 2:
@@ -83,16 +83,16 @@ void Module2300::createScene(int sceneNum, int which) {
if (getGlobalVar(0x10938830)) {
createNavigationScene(0x004B68F0, which);
} else {
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, _volume);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _volume);
createNavigationScene(0x004B68A8, which);
if (_flag) {
_volume = 87;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, 87);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, 87);
}
}
break;
case 4:
- // TODO SoundMan_setTwoSoundsPlayFlag(true);
+ _vm->_soundMan->setTwoSoundsPlayFlag(true);
createSmackerScene(0x20080A0B, true, true, false);
break;
}
@@ -140,7 +140,7 @@ void Module2300::updateScene() {
}
break;
case 4:
- // TODO SoundMan_setTwoSoundsPlayFlag(false);
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
createScene(1, 2);
break;
}
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index f2f2da9..f1f9f04 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -27,7 +27,7 @@ namespace Neverhood {
Module2400::Module2400(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO SoundMan_addMusic(0x202D1010, 0xB110382D);
+ _vm->_soundMan->addMusic(0x202D1010, 0xB110382D);
if (which < 0) {
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
@@ -38,7 +38,7 @@ Module2400::Module2400(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2400::~Module2400() {
- // TODO SoundMan_deleteMusicGroup(0x202D1010);
+ _vm->_soundMan->deleteMusicGroup(0x202D1010);
}
void Module2400::createScene(int sceneNum, int which) {
@@ -46,27 +46,27 @@ void Module2400::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_stopMusic(0xB110382D, 0, 0);
+ _vm->_soundMan->stopMusic(0xB110382D, 0, 0);
_childObject = new Scene2401(_vm, this, which);
break;
case 1:
- // TODO SoundMan_startMusic(0xB110382D, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xB110382D, 0, 2);
_childObject = new Scene2402(_vm, this, which);
break;
case 2:
- // TODO SoundMan_startMusic(0xB110382D, 0, 0, 1);
+ _vm->_soundMan->startMusic(0xB110382D, 0, 0);
_childObject = new Scene2403(_vm, this, which);
break;
case 4:
- // TODO SoundMan_stopMusic(0xB110382D, 0, 2);
+ _vm->_soundMan->stopMusic(0xB110382D, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 0);
break;
case 5:
- // TODO SoundMan_startMusic(0xB110382D, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xB110382D, 0, 2);
_childObject = new Scene2406(_vm, this, which);
break;
case 6:
- // TODO SoundMan_stopMusic(0xB110382D, 0, 2);
+ _vm->_soundMan->stopMusic(0xB110382D, 0, 2);
createSmackerScene(0x20D80001, true, true, false);
break;
case 7:
@@ -247,7 +247,7 @@ AsScene2401FlowingWater::AsScene2401FlowingWater(NeverhoodEngine *vm)
}
AsScene2401FlowingWater::~AsScene2401FlowingWater() {
- // TODO SoundMan_deleteSoundGroup(0x40F11C09);
+ _vm->_soundMan->deleteSoundGroup(0x40F11C09);
}
uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -260,15 +260,15 @@ uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam
break;
case 0x2002:
if (!_isWaterFlowing) {
- // TODO SoundMan_addSound(0x40F11C09, 0x980C1420, true);
- // TODO SoundMan_playSoundLooping(0x980C1420);
+ _vm->_soundMan->addSound(0x40F11C09, 0x980C1420);
+ _vm->_soundMan->playSoundLooping(0x980C1420);
startAnimation(0x10203116, 0, -1);
setVisible(true);
_isWaterFlowing = true;
}
break;
case 0x2003:
- // TODO SoundMan_deleteSound(0x980C1420);
+ _vm->_soundMan->deleteSound(0x980C1420);
_isWaterFlowing = false;
break;
case 0x3002:
@@ -664,7 +664,7 @@ AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
}
AsScene2402TV::~AsScene2402TV() {
- // TODO SoundMan_deleteSoundGroup(0x01520123);
+ _vm->_soundMan->deleteSoundGroup(0x01520123);
}
void AsScene2402TV::upWait() {
@@ -687,12 +687,12 @@ void AsScene2402TV::upFocusKlayman() {
startAnimation(0x050A0103, _currFrameIndex, -1);
_newStickFrameIndex = _currFrameIndex;
if (_countdown2 == 0) {
- // TODO SoundMan_addSound(0x01520123, 0xC42D4528, true);
- // TODO SoundMan_playSoundLooping(0xC42D4528);
+ _vm->_soundMan->addSound(0x01520123, 0xC42D4528);
+ _vm->_soundMan->playSoundLooping(0xC42D4528);
}
_countdown2 = 5;
} else if (_countdown2 != 0 && (--_countdown2 == 0)) {
- // TODO SoundMan_deleteSound(0xC42D4528);
+ _vm->_soundMan->deleteSound(0xC42D4528);
}
AnimatedSprite::update();
}
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 822204f..a12c516 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -59,8 +59,8 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
_soundResource3(vm), _soundResource4(vm), _soundIndex(0) {
- // TODO SoundMan_addMusic(0x29220120, 0x05343184);
- // TODO SoundMan_startMusic(0x05343184, 0, 0, 1);
+ _vm->_soundMan->addMusic(0x29220120, 0x05343184);
+ _vm->_soundMan->startMusic(0x05343184, 0, 0);
SetMessageHandler(&Module2500::handleMessage);
if (which < 0) {
@@ -77,7 +77,7 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2500::~Module2500() {
- // TODO SoundMan_deleteMusicGroup(0x29220120);
+ _vm->_soundMan->deleteMusicGroup(0x29220120);
}
void Module2500::createScene(int sceneNum, int which) {
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index be05037..9106eeb 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -37,12 +37,12 @@ Module2600::Module2600(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO SoundMan_addSoundList(0x40271018, dword_4B87E8, true);
// TODO SoundMan_setSoundListParams(dword_4B87E8, true, 50, 600, 5, 150);
- // TODO SoundMan_playTwoSounds(0x40271018, 0x41861371, 0x43A2507F);
+ _vm->_soundMan->playTwoSounds(0x40271018, 0x41861371, 0x43A2507F, 0);
}
Module2600::~Module2600() {
- // TODO SoundMan_deleteGroup(0x40271018);
+ _vm->_soundMan->deleteGroup(0x40271018);
}
void Module2600::createScene(int sceneNum, int which) {
@@ -72,7 +72,7 @@ void Module2600::createScene(int sceneNum, int which) {
createNavigationScene(0x004B8698, which);
break;
case 7:
- // TODO SoundMan_deleteGroup(0x40271018);
+ _vm->_soundMan->deleteGroup(0x40271018);
createSmackerScene(0x30090001, true, true, false);
break;
case 8:
@@ -268,7 +268,7 @@ AsScene2609Water::AsScene2609Water(NeverhoodEngine *vm)
setDoDeltaX(1);
createSurface1(0x9C210C90, 1200);
setClipRect(260, 260, 400, 368);
- // TODO SoundMan_addSound(0xDC2769B0, true);
+ _vm->_soundMan->addSound(0xDC2769B0, true);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2609Water::handleMessage);
if (getGlobalVar(0x4E0BE910))
@@ -281,12 +281,12 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
case 0x2001:
stopAnimation();
setVisible(false);
- // TODO SoundMan_stopSound(0xDC2769B0);
+ _vm->_soundMan->stopSound(0xDC2769B0);
break;
case 0x2002:
startAnimation(0x9C210C90, 0, -1);
setVisible(true);
- // TODO SoundMan_playSoundLooping(0xDC2769B0);
+ _vm->_soundMan->playSoundLooping(0xDC2769B0);
break;
}
return messageResult;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index a91eea2..aa5c98e 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -86,8 +86,8 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
_soundResource3(vm), _soundResource4(vm), _soundIndex(0), _flag1(false) {
- // TODO SoundMan_addMusic(0x42212411, 0x04020210);
- // TODO SoundMan_startMusic(0x04020210, 24, 2, 1);
+ _vm->_soundMan->addMusic(0x42212411, 0x04020210);
+ _vm->_soundMan->startMusic(0x04020210, 24, 2);
SetMessageHandler(&Module2700::handleMessage);
if (which < 0) {
@@ -107,7 +107,7 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2700::~Module2700() {
- // TODO SoundMan_deleteGroup(0x42212411);
+ _vm->_soundMan->deleteGroup(0x42212411);
}
void Module2700::createScene(int sceneNum, int which) {
@@ -414,9 +414,9 @@ void Module2700::updateScene() {
case 21:
// TODO? GameState_sub_469C50(&field_52, 0);
// TODO MusicMan_stopAll (if field_52 above = 1)
- // TODO SoundMan_deleteMusic(_musicFileHash);
- // TODO SoundMan_startMusic(0x04020210, 0, 2, 1);
- // TODO SoundMan_deleteSoundGroup(0x42212411);
+ _vm->_soundMan->deleteMusic(_musicFileHash);
+ _vm->_soundMan->startMusic(0x04020210, 0, 2);
+ _vm->_soundMan->deleteSoundGroup(0x42212411);
createScene(20, 3);
break;
case 22:
@@ -458,15 +458,15 @@ void Module2700::updateScene() {
switch (_vm->gameState().sceneNum) {
case 21:
if (!_flag1) {
- // TODO SoundMan_stopMusic(0x04020210, 0, 1);
+ _vm->_soundMan->stopMusic(0x04020210, 0, 1);
// TODO _vm->gameModule()->initScene2801Vars();
_musicFileHash = getGlobalVar(0x89A82A15);
// TODO? GameState_sub_469C50(&field_52, 0);
// TODO MusicMan_create(); // Why?
- // TODO SoundMan_addMusic(0x42212411, _musicFileHash);
- // TODO SoundMan_startMusic(_musicFileHash, 0, /*TODO */???, 1);
- // TODO SoundMan_addSound(0x42212411, 0x44014282, true);
- // TODO SoundMan_setSoundParams(0x44014282, true, 120, 360, 72, 0);
+ _vm->_soundMan->addMusic(0x42212411, _musicFileHash);
+ _vm->_soundMan->startMusic(_musicFileHash, 0, 2/*TODO ??? */);
+ _vm->_soundMan->addSound(0x42212411, 0x44014282);
+ _vm->_soundMan->setSoundParams(0x44014282, true, 120, 360, 72, 0);
_flag1 = true;
}
break;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 558819c..f6c6748 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -35,7 +35,7 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
_fileHash = 0;
// TODO music stuff
- // TODO SoundMan_addMusic(0x64210814, 0xD2FA4D14);
+ _vm->_soundMan->addMusic(0x64210814, 0xD2FA4D14);
setGlobalVar(0x28D8C940, 1);
if (which < 0) {
@@ -52,8 +52,7 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
Module2800::~Module2800() {
// TODO music stuff
- // TODO SoundMan_deleteGroup(0x64210814);
- // TODO Module2800_sub471DF0();
+ _vm->_soundMan->deleteGroup(0x64210814);
}
void Module2800::createScene(int sceneNum, int which) {
@@ -61,11 +60,11 @@ void Module2800::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_stopMusic(0xD2FA4D14, 0, 0);
+ _vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
_childObject = new Scene2801(_vm, this, which);
break;
case 1:
- // TODO SoundMan_stopMusic(0xD2FA4D14, 0, 0);
+ _vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
#if 0
_flag = true; // DEBUG!
if (_flag) {
@@ -76,7 +75,7 @@ void Module2800::createScene(int sceneNum, int which) {
#endif
break;
case 2:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
//setGlobalVar(0x1860C990,1);//DEBUG
if (getGlobalVar(0x1860C990))
_childObject = new Scene2803b(_vm, this, which);
@@ -87,98 +86,98 @@ void Module2800::createScene(int sceneNum, int which) {
_childObject = new Scene2804(_vm, this, which);
break;
case 4:
- // TODO SoundMan_stopMusic(0xD2FA4D14, 0, 2);
+ _vm->_soundMan->stopMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
break;
case 5:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2806(_vm, this, which);
break;
case 6:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2807(_vm, this, which);
break;
case 7:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2808(_vm, this, 0);
break;
case 8:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2809(_vm, this, which);
break;
case 9:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2810(_vm, this, which);
break;
case 10:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2808(_vm, this, 1);
break;
case 11:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2812(_vm, this, which);
break;
case 12:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x0000A245, 0x0A241008);
break;
case 13:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x81C60635, 0x60631814);
break;
case 14:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0xCA811204, 0x11200CA0);
break;
case 15:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x2D438A00, 0x38A042DC);
break;
case 16:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x0A806204, 0x062000A0);
break;
case 17:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x010F9284, 0xF9280018);
break;
case 18:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x0100022B, 0x0022F018);
break;
case 19:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x10866205, 0x66201100);
break;
case 20:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x01C58000, 0x58004014);
break;
case 21:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2822(_vm, this, which);
break;
case 22:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x9408121E, 0x8121A948);
break;
case 23:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x048C0600, 0xC0604040);
break;
case 24:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Class152(_vm, this, 0x04270A94, 0x70A9004A);
break;
case 25:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
if (getGlobalVar(0x190A1D18))
_childObject = new Class152(_vm, this, 0x01600204, 0x0020001E);
else
_childObject = new Class152(_vm, this, 0x08611204, 0x1120008E);
break;
case 26:
- // TODO SoundMan_startMusic(0xD2FA4D14, 0, 2, 1);
+ _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 4);
break;
//
@@ -359,10 +358,10 @@ void Module2800::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Module2800_sub4731E0(true);
+ // TODO Module2800_updateMusic(true);
break;
case 1:
- // TODO Module2800_sub4731E0(false);
+ // TODO Module2800_updateMusic(false);
break;
}
}
@@ -1527,7 +1526,7 @@ AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene
_needRefresh = true;
AnimatedSprite::updatePosition();
_soundResource.load(0x6352F051);
- // TODO SoundMan_addSound(0xC5EA0B28, 0xEF56B094, true);
+ _vm->_soundMan->addSound(0xC5EA0B28, 0xEF56B094);
SetUpdateHandler(&AsScene2804BeamCoil::update);
SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
}
@@ -1572,13 +1571,13 @@ void AsScene2804BeamCoil::hide() {
setVisible(false);
_ssBeamCoilBody->setVisible(false);
// TODO _ssBeamCoilBody->update(); -> hide()
- // TODO SoundMan_stopSound(0xEF56B094);
+ _vm->_soundMan->stopSound(0xEF56B094);
}
void AsScene2804BeamCoil::stBeaming() {
startAnimation(0x00494891, 93, -1);
NextState(&AsScene2804BeamCoil::stBeaming);
- // TODO SoundMan_playSoundLooping(0xEF56B094);
+ _vm->_soundMan->playSoundLooping(0xEF56B094);
}
uint32 AsScene2804BeamCoil::hmBeaming(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2735,9 +2734,9 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE738);
_klayman->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
_asRope->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2());
- // TODO SoundMan_addSound(0x84400112, 0xC874EE6C, true);
- // TODO SoundMan_playSoundLooping(0xC874EE6C);
- // TODO SoundMan_setSoundVolume(0xC874EE6C, 50);
+ _vm->_soundMan->addSound(0x84400112, 0xC874EE6C);
+ _vm->_soundMan->playSoundLooping(0xC874EE6C);
+ _vm->_soundMan->setSoundVolume(0xC874EE6C, 50);
_flag1 = false;
} else if ((which >= 11 && which <= 14) || (which >= 19 && which <= 22) || which == 3) {
if (getGlobalVar(0x1860C990)) {
@@ -2798,7 +2797,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
Scene2810::~Scene2810() {
setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
setGlobalVar(0x00D30138, _klayman->getX());
- // TODO SoundMan_deleteSoundGroup(0x84400112);
+ _vm->_soundMan->deleteSoundGroup(0x84400112);
}
void Scene2810::sub406650() {
@@ -2887,7 +2886,7 @@ AsScene2812Winch::AsScene2812Winch(NeverhoodEngine *vm)
}
AsScene2812Winch::~AsScene2812Winch() {
- // TODO SoundMan_deleteSoundGroup(0x00B000E2);
+ _vm->_soundMan->deleteSoundGroup(0x00B000E2);
}
uint32 AsScene2812Winch::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2896,8 +2895,8 @@ uint32 AsScene2812Winch::handleMessage(int messageNum, const MessageParam ¶m
case 0x2000:
startAnimation(0x20DA08A0, 0, -1);
setVisible(true);
- // TODO SoundMan_addSound(0x00B000E2, 0xC874EE6C, true);
- // TODO SoundMan_playSoundLooping(0xC874EE6C);
+ _vm->_soundMan->addSound(0x00B000E2, 0xC874EE6C);
+ _vm->_soundMan->playSoundLooping(0xC874EE6C);
break;
case 0x3002:
startAnimation(0x20DA08A0, 7, -1);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index ab86c48..b76f9c7 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -31,16 +31,16 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO SoundMan_addSoundList(0x81293110, dword_4B7FC8, true);
// TODO SoundMan_setSoundListParams(dword_4B7FC8, true, 50, 600, 5, 150);
- // TODO SoundMan_setSoundParams(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
- // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
- // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->setSoundParams(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
_flag = getGlobalVar(0x10938830) != 0;
if (_flag) {
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, 0);
- // TODO SoundMan_playSoundLooping(0x90F0D1C3);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
+ _vm->_soundMan->playSoundLooping(0x90F0D1C3);
}
if (which < 0) {
@@ -58,7 +58,7 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module3000::~Module3000() {
- // TODO SoundMan_deleteGroup(0x81293110);
+ _vm->_soundMan->deleteGroup(0x81293110);
}
void Module3000::createScene(int sceneNum, int which) {
@@ -77,10 +77,10 @@ void Module3000::createScene(int sceneNum, int which) {
}
break;
case 2:
- // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
if (_flag) {
_soundVolume = 90;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, 90);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, 90);
}
if (getGlobalVar(0x10938830)) {
createNavigationScene(0x004B7D58, which);
@@ -181,10 +181,10 @@ void Module3000::updateScene() {
}
break;
case 2:
- // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
if (_flag) {
_soundVolume = 0;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, 0);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
}
if (_moduleResult == 0) {
createScene(3, 0);
@@ -275,26 +275,26 @@ void Module3000::updateScene() {
int navigationIndex = navigationScene()->getIndex();
if (navigationIndex == 1) {
if (frameNumber == 0) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO SoundMan_setSoundVolume(0x48498E46, 70);
- // TODO SoundMan_setSoundVolume(0x50399F64, 70);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 70);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 70);
} else if (frameNumber == 100) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
}
} else if (navigationIndex == 0) {
if (frameNumber == 0) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO SoundMan_setSoundVolume(0x48498E46, 70);
- // TODO SoundMan_setSoundVolume(0x50399F64, 70);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 70);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 70);
} else if (frameNumber == 10) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
}
if (_flag && _soundVolume < 90 && frameNumber % 2) {
if (frameNumber == 0)
_soundVolume = 40;
else
_soundVolume++;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, _soundVolume);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
}
}
@@ -307,17 +307,17 @@ void Module3000::updateScene() {
int navigationIndex = navigationScene()->getIndex();
if (_flag && _soundVolume > 1 && frameNumber % 2) {
_soundVolume--;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, _soundVolume);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
if (navigationIndex == 0) {
if (frameNumber == 35) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
}
} else if (navigationIndex == 1) {
if (frameNumber == 55) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO SoundMan_setSoundVolume(0x48498E46, 70);
- // TODO SoundMan_setSoundVolume(0x50399F64, 70);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 70);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 70);
}
}
}
@@ -330,25 +330,23 @@ void Module3000::updateScene() {
int navigationIndex = navigationScene()->getIndex();
if (navigationIndex == 2) {
if (frameNumber == 40) {
- // TODO SoundMan_playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ _vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
}
if (_flag && _soundVolume < 90 && frameNumber % 2) {
if (frameNumber == 0)
_soundVolume = 40;
else
_soundVolume++;
- // TODO SoundMan_setSoundVolume(0x90F0D1C3, _soundVolume);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
}
}
#endif
break;
case 5:
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
- // TODO SoundMan_setTwoSoundsPlayFlag(false);
+ if (navigationScene()->getSoundFlag1() && navigationScene()->getNavigationIndex() == 0) {
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
}
-#endif
break;
}
}
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 981e703..a3e1536 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -60,8 +60,8 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
}
NavigationScene::~NavigationScene() {
- // TODO SoundMan_setTwoSoundsPlayFlag(false);
- // TODO SoundMan_setSoundThreePlayFlag(false);
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
+ _vm->_soundMan->setSoundThreePlayFlag(false);
}
int NavigationScene::getNavigationAreaType() {
@@ -88,8 +88,8 @@ void NavigationScene::update() {
_soundFlag2 = false;
_soundFlag1 = false;
_interactive = true;
- // TODO SoundMan_setTwoSoundsPlayFlag(false);
- // TODO SoundMan_setSoundThreePlayFlag(false);
+ _vm->_soundMan->setTwoSoundsPlayFlag(false);
+ _vm->_soundMan->setSoundThreePlayFlag(false);
_smackerDone = false;
_smackerPlayer->open(navigationItem.fileHash, true);
_vm->_screen->clear();
@@ -205,11 +205,11 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
}
if (oldSoundFlag2 != _soundFlag2) {
- // TODO SoundMan_setSoundThreePlayFlag(_soundFlag2);
+ _vm->_soundMan->setSoundThreePlayFlag(_soundFlag2);
}
if (oldSoundFlag1 != _soundFlag1) {
- // TODO SoundMan_setTwoSoundsPlayFlag(_soundFlag1);
+ _vm->_soundMan->setTwoSoundsPlayFlag(_soundFlag1);
}
}
diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h
index 4397a43..cf351d1 100644
--- a/engines/neverhood/navigationscene.h
+++ b/engines/neverhood/navigationscene.h
@@ -34,6 +34,7 @@ public:
NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, const byte *itemsTypes);
virtual ~NavigationScene();
int getNavigationAreaType();
+ int getNavigationIndex() const { return _navigationIndex; }
bool getSoundFlag1() const { return _soundFlag1; }
bool getSoundFlag2() const { return _soundFlag2; }
protected:
Commit: a2bc19291216fd137a09fe6f9a9f5e6321e7b67e
https://github.com/scummvm/scummvm/commit/a2bc19291216fd137a09fe6f9a9f5e6321e7b67e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: Add sound lists to all modules which have them
Changed paths:
engines/neverhood/module1100.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sound.cpp
engines/neverhood/sound.h
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index e948c2b..e5cca26 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -26,6 +26,18 @@
namespace Neverhood {
+static const uint32 kModule1100SoundList[] = {
+ 0x90805C50,
+ 0xB288D450,
+ 0x98C05840,
+ 0x98A01500,
+ 0xB4005E50,
+ 0x92025040,
+ 0x90035066,
+ 0x74E01054,
+ 0
+};
+
Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
@@ -37,8 +49,8 @@ Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(9, 3);
}
- // TODO SoundMan_addSoundList(0x0002C818, dword_4B85B0, true);
- // TODO SoundMan_setSoundListParams(dword_4B85B0, true, 50, 600, 20, 250);
+ _vm->_soundMan->addSoundList(0x0002C818, kModule1100SoundList);
+ _vm->_soundMan->setSoundListParams(kModule1100SoundList, true, 50, 600, 20, 250);
_vm->_soundMan->setSoundParams(0x74E01054, false, 100, 200, 10, 20);
_vm->_soundMan->setSoundVolume(0x74E01054, 60);
_vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index ee4dc7a..45c6842 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -32,12 +32,22 @@
namespace Neverhood {
+static const uint32 kModule1300SoundList[] = {
+ 0x16805648,
+ 0x16805C48,
+ 0xB4964448,
+ 0x96A05481,
+ 0xD0E14441,
+ 0x90815450,
+ 0
+};
+
Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
_vm->_soundMan->addMusic(0x61C090, 0x203197);
- // TODO SoundMan_addSoundList(0x61C090, dword_4B2868, true);
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 50, 600, 20, 150);
+ _vm->_soundMan->addSoundList(0x61C090, kModule1300SoundList);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 50, 600, 20, 150);
_vm->_soundMan->playTwoSounds(0x61C090, 0x48498E46, 0x50399F64, 0);
_vm->_soundMan->setSoundVolume(0x48498E46, 70);
_vm->_soundMan->setSoundVolume(0x50399F64, 70);
@@ -102,82 +112,82 @@ void Module1300::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 1:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1302(_vm, this, which);
break;
case 2:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new Scene1303(_vm, this, which);
break;
case 3:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new Scene1304(_vm, this, which);
break;
case 4:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1305(_vm, this, which);
break;
case 5:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1306(_vm, this, which);
break;
case 6:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1307(_vm, this, which);
break;
case 7:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x203197, 0, 2);
_childObject = new Scene1308(_vm, this, which);
break;
case 8:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 1);
break;
case 9:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createSmackerScene(0x20082818, true, true, false);
break;
case 10:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createSmackerScene(0x20082828, true, true, false);
break;
case 11:
- // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B27A8, which);
break;
case 12:
- // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2718, which);
break;
case 13:
- // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B27D8, which);
break;
case 14:
- // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2808, which);
break;
case 15:
- // TODO SoundMan_setSoundListParams(0xdword_4B2868, true, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
createNavigationScene(0x004B2838, which);
break;
case 16:
- // TODO SoundMan_setSoundListParams(dword_4B2868, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x203197, 0, 2);
_childObject = new Scene1317(_vm, this, which);
break;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 5ff6cd0..864e4a6 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -27,6 +27,15 @@
namespace Neverhood {
+static const uint32 kModule1600SoundList[] = {
+ 0x90805C50,
+ 0x90804450,
+ 0xB4005E60,
+ 0x91835066,
+ 0x90E14440,
+ 0
+};
+
Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
@@ -44,8 +53,8 @@ Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- // TODO SoundMan_addSoundList(0x1A008D8, dword_4B3BB0, true);
- // TODO SoundMan_setSoundListParams(dword_4B3BB0, true, 50, 600, 5, 150);
+ _vm->_soundMan->addSoundList(0x1A008D8, kModule1600SoundList);
+ _vm->_soundMan->setSoundListParams(kModule1600SoundList, true, 50, 600, 5, 150);
_vm->_soundMan->playTwoSounds(0x1A008D8, 0x41861371, 0x43A2507F, 0);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 0057926..13d0f35 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -24,12 +24,21 @@
namespace Neverhood {
+static const uint32 kModule1700SoundList[] = {
+ 0xB288D450,
+ 0x90804450,
+ 0x99801500,
+ 0xB288D455,
+ 0x93825040,
+ 0
+};
+
Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundResource(vm) {
_vm->_soundMan->addMusic(0x04212331, 0x31114225);
- // TODO SoundMan_addSoundList(0x04212331, dword_4AE930, true);
- // TODO SoundMan_setSoundListParams(dword_4AE930, true, 50, 600, 5, 150);
+ _vm->_soundMan->addSoundList(0x04212331, kModule1700SoundList);
+ _vm->_soundMan->setSoundListParams(kModule1700SoundList, true, 50, 600, 5, 150);
_vm->_soundMan->playTwoSounds(0x04212331, 0x41861371, 0x43A2507F, 0);
if (which < 0) {
@@ -53,7 +62,7 @@ void Module1700::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1700SoundList, false, 0, 0, 0, 0);
createSmackerScene(0x3028A005, true, true, false);
break;
case 1:
@@ -63,11 +72,11 @@ void Module1700::createScene(int sceneNum, int which) {
createNavigationScene(0x004AE8E8, which);
break;
case 3:
- // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1700SoundList, false, 0, 0, 0, 0);
createSmackerScene(0x01190041, true, true, false);
break;
case 4:
- // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1700SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x31114225, 0, 2);
_childObject = new Scene1705(_vm, this, which);
break;
@@ -80,7 +89,7 @@ void Module1700::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO SoundMan_setSoundListParams(dword_4AE930, false, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1700SoundList, true, 0, 0, 0, 0);
createScene(1, 0);
break;
case 1:
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index fc31b2d..14c4868 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -25,11 +25,21 @@
namespace Neverhood {
+static const uint32 kModule1800SoundList[] = {
+ 0x16805548,
+ 0x16805048,
+ 0xD0E14441,
+ 0x90E090C2,
+ 0x90E1D0C2,
+ 0x90E2D0C2,
+ 0
+};
+
Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- // TODO SoundMan_addSoundList(0x04A14718, dword_4AFE70);
- // TODO SoundMan_setSoundListParams(dword_4AFE70, true, 50, 600, 10, 150);
+ _vm->_soundMan->addSoundList(0x04A14718, kModule1800SoundList);
+ _vm->_soundMan->setSoundListParams(kModule1800SoundList, true, 50, 600, 10, 150);
_vm->_soundMan->playTwoSounds(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
if (which < 0) {
@@ -77,7 +87,7 @@ void Module1800::createScene(int sceneNum, int which) {
createSmackerScene(0x08D84010, true, true, false);
break;
case 7:
- // TODO SoundMan_setSoundListParams(dword_4AFE70, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule1800SoundList, false, 0, 0, 0, 0);
createSmackerScene(0x0168B121, true, true, false);
break;
case 8:
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index d432bcb..c6ce15c 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -25,6 +25,13 @@
namespace Neverhood {
+static const uint32 kModule1900SoundList[] = {
+ 0xB4005E60,
+ 0x91835066,
+ 0x90E14440,
+ 0
+};
+
Module1900::Module1900(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
@@ -36,8 +43,8 @@ Module1900::Module1900(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- // TODO SoundMan_addSoundList(0x04E1C09C, dword_4B8800, true);
- // TODO SoundMan_setSoundListParams(dword_4B8800, true, 50, 600, 5, 150);
+ _vm->_soundMan->addSoundList(0x04E1C09C, kModule1900SoundList);
+ _vm->_soundMan->setSoundListParams(kModule1900SoundList, true, 50, 600, 5, 150);
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 3f7c5e6..4f35122 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -24,11 +24,21 @@
namespace Neverhood {
+static const uint32 kModule2300SoundList[] = {
+ 0x90805C50,
+ 0x90804450,
+ 0xB4005E60,
+ 0x91835066,
+ 0x90E14440,
+ 0x90F0D1C3,
+ 0
+};
+
Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _volume(0) {
- // TODO SoundMan_addSoundList(0x1A214010, dword_4B6938, true);
- // TODO SoundMan_setSoundListParams(dword_4B6938, true, 50, 600, 10, 10, 150);
+ _vm->_soundMan->addSoundList(0x1A214010, kModule2300SoundList);
+ _vm->_soundMan->setSoundListParams(kModule2300SoundList, true, 50, 600, 10, 150);
_flag = getGlobalVar(0x10938830) == 0;
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 9106eeb..7cdfb69 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -24,6 +24,15 @@
namespace Neverhood {
+static const uint32 kModule2600SoundList[] = {
+ 0xB288D450,
+ 0x90804450,
+ 0x99801500,
+ 0xB288D455,
+ 0x93825040,
+ 0
+};
+
Module2600::Module2600(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
@@ -35,8 +44,8 @@ Module2600::Module2600(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 1);
}
- // TODO SoundMan_addSoundList(0x40271018, dword_4B87E8, true);
- // TODO SoundMan_setSoundListParams(dword_4B87E8, true, 50, 600, 5, 150);
+ _vm->_soundMan->addSoundList(0x40271018, kModule2600SoundList);
+ _vm->_soundMan->setSoundListParams(kModule2600SoundList, true, 50, 600, 5, 150);
_vm->_soundMan->playTwoSounds(0x40271018, 0x41861371, 0x43A2507F, 0);
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index b76f9c7..3a6209e 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -26,11 +26,22 @@
namespace Neverhood {
+static const uint32 kModule3000SoundList[] = {
+ 0x92025040,
+ 0x90035066,
+ 0x90815450,
+ 0x99801500,
+ 0x90E14440,
+ 0x16805048,
+ 0x90F0D1C3,
+ 0
+};
+
Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _soundVolume(0) {
- // TODO SoundMan_addSoundList(0x81293110, dword_4B7FC8, true);
- // TODO SoundMan_setSoundListParams(dword_4B7FC8, true, 50, 600, 5, 150);
+ _vm->_soundMan->addSoundList(0x81293110, kModule3000SoundList);
+ _vm->_soundMan->setSoundListParams(kModule3000SoundList, true, 50, 600, 5, 150);
_vm->_soundMan->setSoundParams(0x90F0D1C3, false, 20000, 30000, 20000, 30000);
_vm->_soundMan->playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
@@ -109,7 +120,7 @@ void Module3000::createScene(int sceneNum, int which) {
createNavigationScene(0x004B7FB0, which, kNavigationTypes06);
break;
case 7:
- // TODO SoundMan_setSoundListParams(dword_4B7FC8, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule3000SoundList, false, 0, 0, 0, 0);
if (!getSubVar(0x40050052, 0x089809C2)) {
setSubVar(0x40050052, 0x089809C2, 1);
createSmackerScene(0x90022001, true, true, false);
@@ -126,7 +137,7 @@ void Module3000::createScene(int sceneNum, int which) {
_childObject = new Scene3011(_vm, this, 0);
break;
case 11:
- // TODO SoundMan_setSoundListParams(dword_4B7FC8, false, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule3000SoundList, false, 0, 0, 0, 0);
if (!getSubVar(0x40050052, 0x10130993)) {
setSubVar(0x40050052, 0x10130993, 1);
createSmackerScene(0x31093019, true, true, false);
@@ -229,12 +240,12 @@ void Module3000::updateScene() {
case 8:
_flag = getGlobalVar(0x10938830); // CHECKME
if (_moduleResult != 1) {
- // TODO: SoundMan_setSoundListParams(dword_4B7FC8, true, 0, 0, 0, 0):
+ // TODO: SoundMan_setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0):
createScene(4, 1);
} else if (getGlobalVar(0xF0402B0A)) {
createScene(1008, -1);
} else {
- // TODO: SoundMan_setSoundListParams(dword_4B7FC8, true, 0, 0, 0, 0);
+ // TODO: SoundMan_setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
createScene(4, 1);
}
break;
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index bd2f223..df66c6b 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -206,7 +206,7 @@ void SoundMan::addSound(uint32 nameHash, uint32 soundFileHash) {
_soundItems.push_back(soundItem);
}
-void SoundMan::addSoundList(uint32 nameHash, uint32 *soundFileHashList) {
+void SoundMan::addSoundList(uint32 nameHash, const uint32 *soundFileHashList) {
while (*soundFileHashList)
addSound(nameHash, *soundFileHashList++);
}
@@ -242,7 +242,7 @@ void SoundMan::setSoundParams(uint32 soundFileHash, bool playOnceAfterRandomCoun
}
}
-void SoundMan::setSoundListParams(uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
+void SoundMan::setSoundListParams(const uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown) {
while (*soundFileHashList)
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index b724e89..1f0940c 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -113,11 +113,11 @@ public:
// Sound
void addSound(uint32 nameHash, uint32 soundFileHash);
- void addSoundList(uint32 nameHash, uint32 *soundFileHashList);
+ void addSoundList(uint32 nameHash, const uint32 *soundFileHashList);
void deleteSound(uint32 soundFileHash);
void setSoundParams(uint32 soundFileHash, bool playOnceAfterRandomCountdown,
int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown);
- void setSoundListParams(uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
+ void setSoundListParams(const uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown);
void playSoundLooping(uint32 soundFileHash);
void stopSound(uint32 soundFileHash);
Commit: ba991fe7021df572fd003ddda2f7f090081fd299
https://github.com/scummvm/scummvm/commit/ba991fe7021df572fd003ddda2f7f090081fd299
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:42-07:00
Commit Message:
NEVERHOOD: Fix addSound in AsScene2609Water and add a destructor
Changed paths:
engines/neverhood/module2600.cpp
engines/neverhood/module2600.h
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 7cdfb69..43c55ea 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -277,13 +277,17 @@ AsScene2609Water::AsScene2609Water(NeverhoodEngine *vm)
setDoDeltaX(1);
createSurface1(0x9C210C90, 1200);
setClipRect(260, 260, 400, 368);
- _vm->_soundMan->addSound(0xDC2769B0, true);
+ _vm->_soundMan->addSound(0x08526C36, 0xDC2769B0);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2609Water::handleMessage);
if (getGlobalVar(0x4E0BE910))
sendMessage(this, 0x2002, 0);
}
+AsScene2609Water::~AsScene2609Water() {
+ _vm->_soundMan->deleteSoundGroup(0x08526C36);
+}
+
uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
diff --git a/engines/neverhood/module2600.h b/engines/neverhood/module2600.h
index d6580a6..04c7800 100644
--- a/engines/neverhood/module2600.h
+++ b/engines/neverhood/module2600.h
@@ -57,6 +57,7 @@ protected:
class AsScene2609Water : public AnimatedSprite {
public:
AsScene2609Water(NeverhoodEngine *vm);
+ virtual ~AsScene2609Water();
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 2ba49676eaff16c43be612579347ce0be8589812
https://github.com/scummvm/scummvm/commit/2ba49676eaff16c43be612579347ce0be8589812
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:43-07:00
Commit Message:
NEVERHOOD: Add destructor to AsScene2804BeamCoil
Changed paths:
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index f6c6748..597227c 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -1531,6 +1531,10 @@ AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene
SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
}
+AsScene2804BeamCoil::~AsScene2804BeamCoil() {
+ _vm->_soundMan->deleteSoundGroup(0xC5EA0B28);
+}
+
void AsScene2804BeamCoil::update() {
updateAnim();
updatePosition();
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 50db161..89e4d71 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -224,6 +224,7 @@ protected:
class AsScene2804BeamCoil : public AnimatedSprite {
public:
AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2804BeamCoilBody *ssBeamCoilBody);
+ virtual ~AsScene2804BeamCoil();
protected:
SoundResource _soundResource;
Scene *_parentScene;
Commit: 21d1372d7e2ab6a6263ebc3167ca141594756a96
https://github.com/scummvm/scummvm/commit/21d1372d7e2ab6a6263ebc3167ca141594756a96
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:43-07:00
Commit Message:
NEVERHOOD: Some work on the Klayman "idle" code (when the user doesn't do something for a certain time)
- Fix startIdleAnimation and the Klayman update code which calls the idle code
- Rename related variables/methods
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 87ab6e0..fa2dc7a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -42,12 +42,10 @@ static const KlaymanIdleTableItem klaymanTable2[] = {
{1, &Klayman::sub41FEB0}
};
-#if 0
static const KlaymanIdleTableItem klaymanTable3[] = {
{1, &Klayman::sub421430},
{1, &Klayman::sub421480}
};
-#endif
static const KlaymanIdleTableItem klaymanTable4[] = {
{1, &Klayman::sub41FDA0},
@@ -59,10 +57,10 @@ static const KlaymanIdleTableItem klaymanTable4[] = {
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
: AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
- _counterMax(0), _counter(0), _isMoveObjectRequested(false), _counter3Max(0), _isWalkingOpenDoorNotified(false), _counter1(0),
+ _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0), _isWalkingOpenDoorNotified(false), _countdown1(0),
_tapesToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
_status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _flagF6(false), _isLeverDown(false),
- _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _resourceHandle(-1), _soundFlag(false) {
+ _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -105,9 +103,8 @@ void Klayman::setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCo
_idleTable = table;
_idleTableCount = tableCount;
_idleTableMaxValue = 0;
- for (int i = 0; i < tableCount; i++) {
+ for (int i = 0; i < tableCount; i++)
_idleTableMaxValue += table[i].value;
- }
}
void Klayman::setKlaymanIdleTable1() {
@@ -119,7 +116,7 @@ void Klayman::setKlaymanIdleTable2() {
}
void Klayman::setKlaymanIdleTable3() {
- // TODO setKlaymanIdleTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
+ setKlaymanIdleTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
}
void Klayman::stDoIdlePickEar() {
@@ -276,38 +273,35 @@ void Klayman::sub421350() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x582EC138, 0, -1);
- _counter = 0;
+ _idleCounter = 0;
SetSpriteUpdate(NULL);
SetUpdateHandler(&Klayman::update41D1C0);
SetMessageHandler(&Klayman::handleMessage41D360);
- _counter3 = 0;
- _counterMax = 8;
- _counter3Max = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ _blinkCounter = 0;
+ _idleCounterMax = 8;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
void Klayman::update41D1C0() {
update();
- _counter++;
- if (_counter >= _counterMax) {
- _counter = 0;
+ _idleCounter++;
+ if (_idleCounter >= _idleCounterMax) {
+ _idleCounter = 0;
if (_idleTable) {
int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
for (int i = 0; i < _idleTableCount; i++) {
- if (randomValue < _idleTable[_idleTableCount].value) {
- (this->*(_idleTable[_idleTableCount].callback))();
- _counterMax = _vm->_rnd->getRandomNumber(128) + 24;
+ if (randomValue < _idleTable[i].value) {
+ (this->*(_idleTable[i].callback))();
+ _idleCounterMax = _vm->_rnd->getRandomNumber(128 - 1) + 24;
break;
}
- randomValue -= _idleTable[_idleTableCount].value;
+ randomValue -= _idleTable[i].value;
}
}
- } else {
- _counter3++;
- if (_counter3 >= _counter3Max) {
- _counter3 = 0;
- _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
- stIdleSitBlink();
- }
+ } else if (++_blinkCounter >= _blinkCounterMax) {
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ stIdleSitBlink();
}
}
@@ -449,24 +443,13 @@ void Klayman::sub41CE70() {
}
void Klayman::startIdleAnimation(uint32 fileHash, AnimationCb callback) {
- _resourceHandle = _vm->_res->useResource(fileHash);
- if (_resourceHandle != -1) {
- // TODO _vm->_res->moveToFront(_resourceHandle);
- NextState(callback);
- SetUpdateHandler(&Klayman::upIdleAnimation);
- }
+ debug("startIdleAnimation(%08X)", fileHash);
+ NextState(callback);
+ SetUpdateHandler(&Klayman::upIdleAnimation);
}
void Klayman::upIdleAnimation() {
- // TODO Check if this odd stuff is needed or just some cache optimization
- if (_vm->_res->isResourceDataValid(_resourceHandle)) {
- gotoNextStateExt();
- // TODO _vm->_res->moveToBack(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- } else {
- // TODO _vm->_res->moveToFront(_resourceHandle);
- }
+ gotoNextStateExt();
update();
}
@@ -518,9 +501,9 @@ void Klayman::stTryStandIdle() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
- _counter = 0;
- _counter3 = 0;
- _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ _idleCounter = 0;
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
SetUpdateHandler(&Klayman::update41D0F0);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(NULL);
@@ -529,22 +512,22 @@ void Klayman::stTryStandIdle() {
void Klayman::update41D0F0() {
update();
- if (++_counter >= 720) {
- _counter = 0;
+ if (++_idleCounter >= 720) {
+ _idleCounter = 0;
if (_idleTable) {
- int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
+ int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue - 1);
for (int i = 0; i < _idleTableCount; i++) {
- if (randomValue < _idleTable[_idleTableCount].value) {
- (this->*(_idleTable[_idleTableCount].callback))();
+ if (randomValue < _idleTable[i].value) {
+ (this->*(_idleTable[i].callback))();
break;
}
- randomValue -= _idleTable[_idleTableCount].value;
+ randomValue -= _idleTable[i].value;
}
}
- } else if (++_counter3 >= _counter3Max) {
- _counter3 = 0;
- _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
- stStand();
+ } else if (++_blinkCounter >= _blinkCounterMax) {
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ stIdleBlink();
}
}
@@ -583,7 +566,7 @@ uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::stStand() {
+void Klayman::stIdleBlink() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5900C41E, 0, -1);
@@ -2299,6 +2282,34 @@ uint32 Klayman::handleMessage41F0E0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
+void Klayman::sub421430() {
+ startIdleAnimation(0x90EF8D38, AnimationCallback(&Klayman::sub421440));
+}
+
+void Klayman::sub421440() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x90EF8D38, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::stIdleSitBlinkSecond);
+}
+
+void Klayman::sub421480() {
+ startIdleAnimation(0x900F0930, AnimationCallback(&Klayman::sub421440));
+}
+
+void Klayman::sub421490() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x900F0930, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::stIdleSitBlinkSecond);
+}
+
//##############################################################################
// KmScene1001
@@ -2528,7 +2539,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
void KmScene1002::update4497D0() {
Klayman::update();
- if (_counter1 != 0 && (--_counter1 == 0)) {
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
_surface->setVisible(true);
SetUpdateHandler(&Klayman::update);
}
@@ -2719,7 +2730,7 @@ void KmScene1002::sub449E90() {
}
void KmScene1002::sub449EF0() {
- _counter1 = 1;
+ _countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x000BAB02, 0, -1);
@@ -2752,7 +2763,7 @@ void KmScene1002::sub449F70() {
}
void KmScene1002::stSpitOutFall() {
- _counter1 = 1;
+ _countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
@@ -2765,7 +2776,7 @@ void KmScene1002::stSpitOutFall() {
}
void KmScene1002::sub44A0D0() {
- _counter1 = 1;
+ _countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x0013A206, 0, -1);
@@ -3309,9 +3320,9 @@ uint32 KmScene1303::hmPeekWallReturn(int messageNum, const MessageParam ¶m,
void KmScene1303::update4161A0() {
Klayman::update();
- _counter3++;
- if (_counter3 >= _counter3Max)
- stPeekWall3();
+ _blinkCounter++;
+ if (_blinkCounter >= _blinkCounterMax)
+ stPeekWallBlink();
}
void KmScene1303::stPeekWall1() {
@@ -3321,7 +3332,7 @@ void KmScene1303::stPeekWall1() {
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
- NextState(&KmScene1303::stPeekWall3);
+ NextState(&KmScene1303::stPeekWallBlink);
}
void KmScene1303::stPeekWall2() {
@@ -3333,11 +3344,11 @@ void KmScene1303::stPeekWall2() {
SetMessageHandler(&Klayman::handleMessage41D480);
}
-void KmScene1303::stPeekWall3() {
- _counter3 = 0;
+void KmScene1303::stPeekWallBlink() {
+ _blinkCounter = 0;
_status2 = 0;
_acceptInput = true;
- _counter3Max = _vm->_rnd->getRandomNumber(64) + 24;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
startAnimation(0xAC20C012, 38, 42);
SetUpdateHandler(&KmScene1303::update4161A0);
SetSpriteUpdate(NULL);
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index cbf17a0..9e31cf2 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -171,6 +171,12 @@ public:
void sub420500();
uint32 handleMessage41F0E0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void sub421430();
+ void sub421440();
+
+ void sub421480();
+ void sub421490();
protected:
Entity *_parentScene;
@@ -182,9 +188,9 @@ protected:
bool _isMoveObjectRequested;
bool _acceptInput;
int16 _destX, _destY;
- int16 _counter, _counterMax;
- int16 _counter3, _counter3Max;
- int16 _counter1;
+ int16 _idleCounter, _idleCounterMax;
+ int16 _blinkCounter, _blinkCounterMax;
+ int16 _countdown1;
int16 _tapesToInsert;
bool _flagF6;
bool _isLeverDown;
@@ -199,7 +205,6 @@ protected:
int _idleTableMaxValue;
NPointArray *_pathPoints;
bool _soundFlag;
- int _resourceHandle;
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -230,7 +235,7 @@ protected:
void update41D0F0();
- void stStand();
+ void stIdleBlink();
void stStandAround();
uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -381,7 +386,7 @@ protected:
void update4161A0();
void stPeekWall1();
void stPeekWall2();
- void stPeekWall3();
+ void stPeekWallBlink();
void stPeekWallReturn();
};
Commit: 8bdddfdb02c0327af2985b81b4803b79de5a2b33
https://github.com/scummvm/scummvm/commit/8bdddfdb02c0327af2985b81b4803b79de5a2b33
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:43-07:00
Commit Message:
NEVERHOOD: Rename many Klayman functions/variables
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 3cd7e1d..3b1a8c9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -298,7 +298,7 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule(1500, 0); // Logos and intro video //Real
-#if 1
+#if 0
_vm->gameState().sceneNum = 0;
createModule(1200, -1);
#endif
@@ -310,8 +310,8 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2000, -1);
#endif
-#if 0
- _vm->gameState().sceneNum = 4;
+#if 1
+ _vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
#if 0
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index fa2dc7a..d7e68e6 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -29,28 +29,28 @@ namespace Neverhood {
static const KlaymanIdleTableItem klaymanTable1[] = {
{1, &Klayman::stDoIdlePickEar},
- {1, &Klayman::sub41FDA0},
- {1, &Klayman::sub41FDF0},
+ {1, &Klayman::stDoIdleSpinHead},
+ {1, &Klayman::stDoIdleArms},
{1, &Klayman::stDoIdleChest},
- {1, &Klayman::sub41FEB0}
+ {1, &Klayman::stDoIdleHeadOff}
};
static const KlaymanIdleTableItem klaymanTable2[] = {
{1, &Klayman::stDoIdlePickEar},
- {1, &Klayman::sub41FDA0},
+ {1, &Klayman::stDoIdleSpinHead},
{1, &Klayman::stDoIdleChest},
- {1, &Klayman::sub41FEB0}
+ {1, &Klayman::stDoIdleHeadOff}
};
static const KlaymanIdleTableItem klaymanTable3[] = {
- {1, &Klayman::sub421430},
- {1, &Klayman::sub421480}
+ {1, &Klayman::stDoIdleTeleporterHands},
+ {1, &Klayman::stDoIdleTeleporterHands2}
};
static const KlaymanIdleTableItem klaymanTable4[] = {
- {1, &Klayman::sub41FDA0},
+ {1, &Klayman::stDoIdleSpinHead},
{1, &Klayman::stDoIdleChest},
- {1, &Klayman::sub41FEB0},
+ {1, &Klayman::stDoIdleHeadOff},
};
// Klayman
@@ -150,21 +150,21 @@ void Klayman::evIdlePickEarDone() {
_soundResource1.stop();
}
-void Klayman::sub41FDA0() {
- startIdleAnimation(0xD122C137, AnimationCallback(&Klayman::sub41FDB0));
+void Klayman::stDoIdleSpinHead() {
+ startIdleAnimation(0xD122C137, AnimationCallback(&Klayman::stIdleSpinHead));
}
-void Klayman::sub41FDB0() {
+void Klayman::stIdleSpinHead() {
_status2 = 1;
_acceptInput = true;
startAnimation(0xD122C137, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E980);
+ SetMessageHandler(&Klayman::hmIdleSpinHead);
SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
-uint32 Klayman::handleMessage41E980(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -176,26 +176,26 @@ uint32 Klayman::handleMessage41E980(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub41FDF0() {
- startIdleAnimation(0x543CD054, AnimationCallback(&Klayman::sub41FE00));
+void Klayman::stDoIdleArms() {
+ startIdleAnimation(0x543CD054, AnimationCallback(&Klayman::stIdleArms));
}
-void Klayman::sub41FE00() {
+void Klayman::stIdleArms() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x543CD054, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E9E0);
+ SetMessageHandler(&Klayman::hmIdleArms);
SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
- FinalizeState(&Klayman::sub41FE50);
+ FinalizeState(&Klayman::evIdleArmsDone);
}
-void Klayman::sub41FE50() {
+void Klayman::evIdleArmsDone() {
_soundResource1.stop();
}
-uint32 Klayman::handleMessage41E9E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -237,21 +237,21 @@ uint32 Klayman::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *s
return messageResult;
}
-void Klayman::sub41FEB0() {
- startIdleAnimation(0x5120E137, AnimationCallback(&Klayman::sub41FEC0));
+void Klayman::stDoIdleHeadOff() {
+ startIdleAnimation(0x5120E137, AnimationCallback(&Klayman::stIdleHeadOff));
}
-void Klayman::sub41FEC0() {
+void Klayman::stIdleHeadOff() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5120E137, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EFE0);
+ SetMessageHandler(&Klayman::hmIdleHeadOff);
SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
-uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -269,20 +269,20 @@ uint32 Klayman::handleMessage41EFE0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421350() {
+void Klayman::stSitIdleTeleporter() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x582EC138, 0, -1);
_idleCounter = 0;
SetSpriteUpdate(NULL);
- SetUpdateHandler(&Klayman::update41D1C0);
+ SetUpdateHandler(&Klayman::upSitIdleTeleporter);
SetMessageHandler(&Klayman::handleMessage41D360);
_blinkCounter = 0;
_idleCounterMax = 8;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void Klayman::update41D1C0() {
+void Klayman::upSitIdleTeleporter() {
update();
_idleCounter++;
if (_idleCounter >= _idleCounterMax) {
@@ -319,7 +319,7 @@ void Klayman::stIdleSitBlinkSecond() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
- SetUpdateHandler(&Klayman::update41D1C0);
+ SetUpdateHandler(&Klayman::upSitIdleTeleporter);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(NULL);
}
@@ -336,9 +336,9 @@ void Klayman::stPickUpNeedle() {
}
}
-void Klayman::sub41FFF0() {
+void Klayman::stPickUpTube() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- if (!stStartAction(AnimationCallback(&Klayman::sub41FFF0))) {
+ if (!stStartAction(AnimationCallback(&Klayman::stPickUpTube))) {
_status2 = 1;
_acceptInput = false;
startAnimation(0x0018C032, 0, -1);
@@ -396,7 +396,7 @@ void Klayman::stStepOver() {
startAnimation(0x004AA310, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -407,7 +407,7 @@ void Klayman::stSitInTeleporter() {
startAnimation(0x392A0330, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmSitInTeleporter);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -429,12 +429,12 @@ void Klayman::stGetUpFromTeleporter() {
startAnimation(0x913AB120, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
/////////////////////////////////////////////////////////////////
-void Klayman::sub41CE70() {
+void Klayman::stopWalking() {
_destX = _x;
if (!_isWalking && !_isSneaking && !_isLargeStep) {
gotoState(NULL);
@@ -504,13 +504,13 @@ void Klayman::stTryStandIdle() {
_idleCounter = 0;
_blinkCounter = 0;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
- SetUpdateHandler(&Klayman::update41D0F0);
+ SetUpdateHandler(&Klayman::upIdle);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(NULL);
}
}
-void Klayman::update41D0F0() {
+void Klayman::upIdle() {
update();
if (++_idleCounter >= 720) {
_idleCounter = 0;
@@ -590,7 +590,7 @@ void Klayman::stStandAround() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update41D0F0);
+ SetUpdateHandler(&Klayman::upIdle);
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(NULL);
}
@@ -633,7 +633,7 @@ void Klayman::startWalkToX(int16 x, bool flag) {
_destX = x;
} else if (flag) {
_destX = x;
- GotoState(&Klayman::sub421550);
+ GotoState(&Klayman::stStartWalkingExt);
} else {
_destX = x;
GotoState(&Klayman::stStartWalking);
@@ -771,7 +771,7 @@ void Klayman::stSneak() {
setDoDeltaX(_destX < _x ? 1 : 0);
startAnimation(0x5C48C506, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
+ SetMessageHandler(&Klayman::hmSneaking);
SetSpriteUpdate(&Klayman::suWalking);
FinalizeState(&Klayman::stWalkingDone);
}
@@ -780,7 +780,7 @@ void Klayman::stWalkingDone() {
_isSneaking = false;
}
-uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -841,7 +841,7 @@ void Klayman::stWalking() {
_acceptInput = true;
startAnimation(0x1A249001, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
FinalizeState(&Klayman::stStartWalkingDone);
NextState(&Klayman::stUpdateWalking);
@@ -852,7 +852,7 @@ void Klayman::spriteUpdate41F300() {
_deltaX = 0;
}
-uint32 Klayman::handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -892,7 +892,7 @@ void Klayman::stUpdateWalking() {
}
}
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
+ SetMessageHandler(&Klayman::hmSneaking);
SetSpriteUpdate(&Klayman::suWalking);
FinalizeState(&Klayman::stWalkingDone);
}
@@ -1054,7 +1054,7 @@ void Klayman::startSpecialWalkRight(int16 x) {
} else if (_x < x) {
startWalkToX(x, false);
} else if (_x - x <= 105) {
- sub41CAC0(x);
+ startWalkToXExt(x);
} else {
startWalkToX(x, false);
}
@@ -1068,13 +1068,13 @@ void Klayman::startSpecialWalkLeft(int16 x) {
} else if (x < _x) {
startWalkToX(x, false);
} else if (x - _x <= 105) {
- sub41CAC0(x);
+ startWalkToXExt(x);
} else {
startWalkToX(x, false);
}
}
-void Klayman::sub41CDE0(int16 x) {
+void Klayman::startWalkToXSmall(int16 x) {
_status3 = 2;
if (_x == x) {
_destX = x;
@@ -1086,23 +1086,23 @@ void Klayman::sub41CDE0(int16 x) {
_destX = x;
} else {
_destX = x;
- GotoState(&Klayman::sub421680);
+ GotoState(&Klayman::stStartWalkingSmall);
}
}
-void Klayman::sub421680() {
+void Klayman::stStartWalkingSmall() {
_isWalking = true;
_acceptInput = true;
_status3 = 2;
setDoDeltaX(_destX < _x ? 1 : 0);
startAnimation(0x3A4CD934, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41ED70);
+ SetMessageHandler(&Klayman::hmWalkingSmall);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
FinalizeState(&Klayman::stStartWalkingDone);
}
-uint32 Klayman::handleMessage41ED70(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1114,7 +1114,7 @@ uint32 Klayman::handleMessage41ED70(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421640() {
+void Klayman::stStandIdleSmall() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x90D0D1D0, 0, -1);
@@ -1123,7 +1123,7 @@ void Klayman::sub421640() {
SetSpriteUpdate(NULL);
}
-void Klayman::sub421740() {
+void Klayman::stWonderAboutAfterSmall() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x11C8D156, 30, -1);
@@ -1132,7 +1132,7 @@ void Klayman::sub421740() {
SetSpriteUpdate(NULL);
}
-void Klayman::sub421780() {
+void Klayman::stWonderAboutHalfSmall() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x11C8D156, 0, 10);
@@ -1141,7 +1141,7 @@ void Klayman::sub421780() {
SetSpriteUpdate(NULL);
}
-void Klayman::sub421700() {
+void Klayman::stWonderAboutSmall() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x11C8D156, 0, -1);
@@ -1150,16 +1150,16 @@ void Klayman::sub421700() {
SetSpriteUpdate(NULL);
}
-void Klayman::sub421840() {
+void Klayman::stWalkToFrontNoStepSmall() {
_status2 = 0;
_acceptInput = false;
startAnimationByHash(0x3F9CC394, 0x14884392, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EE00);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-uint32 Klayman::handleMessage41EE00(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1176,72 +1176,72 @@ uint32 Klayman::handleMessage41EE00(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421800() {
+void Klayman::stWalkToFront2Small() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x2F1C4694, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EE00);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-void Klayman::sub4217C0() {
+void Klayman::stWalkToFrontSmall() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x3F9CC394, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EE00);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-void Klayman::sub421900() {
+void Klayman::stTurnToBackHalfSmall() {
_status2 = 0;
_acceptInput = false;
startAnimationByHash(0x37ECD436, 0, 0x8520108C);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EE00);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-void Klayman::sub4218C0() {
+void Klayman::stTurnToBackWalkSmall() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x16EDDE36, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EE00);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-void Klayman::sub421880() {
+void Klayman::stTurnToBackSmall() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x37ECD436, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EE00);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-void Klayman::sub420F60() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420F60))) {
+void Klayman::stPullCord() {
+ if (!stStartAction(AnimationCallback(&Klayman::stPullCord))) {
_status2 = 2;
_acceptInput = false;
startAnimation(0x3F28E094, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E6C0);
+ SetMessageHandler(&Klayman::hmPullCord);
SetSpriteUpdate(NULL);
- NextState(&Klayman::sub420FB0);
+ NextState(&Klayman::stReleaseCord);
}
}
-void Klayman::sub420FB0() {
+void Klayman::stReleaseCord() {
_acceptInput = false;
startAnimation(0x3A28C094, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E6C0);
+ SetMessageHandler(&Klayman::hmPullCord);
SetSpriteUpdate(NULL);
}
-uint32 Klayman::handleMessage41E6C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPullCord(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1256,18 +1256,18 @@ uint32 Klayman::handleMessage41E6C0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421110() {
- if (!stStartAction(AnimationCallback(&Klayman::sub421110))) {
+void Klayman::stUseTube() {
+ if (!stStartAction(AnimationCallback(&Klayman::stUseTube))) {
_status2 = 1;
_acceptInput = false;
startAnimation(0x1A38A814, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E750);
+ SetMessageHandler(&Klayman::hmUseTube);
SetSpriteUpdate(NULL);
}
}
-uint32 Klayman::handleMessage41E750(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1292,20 +1292,20 @@ uint32 Klayman::handleMessage41E750(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub4215E0() {
+void Klayman::stWalkingExt() {
_status2 = 0;
_isWalking = true;
_acceptInput = true;
+ startAnimation(0x5A2CBC00, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
- startAnimation(0x5A2CBC00, 0, -1);
}
-void Klayman::sub421550() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::sub421550))) {
+void Klayman::stStartWalkingExt() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalkingExt))) {
_status2 = 0;
_isWalking = true;
_acceptInput = true;
@@ -1314,8 +1314,8 @@ void Klayman::sub421550() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::stStartWalkingDone);
- NextState(&Klayman::sub4215E0);
+ FinalizeState(&Klayman::stStartWalkingDone);
+ NextState(&Klayman::stWalkingExt);
}
}
@@ -1326,7 +1326,7 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
gotoState(NULL);
gotoNextStateExt();
} else if (_x < x1 + x2) {
- sub41CAC0(x1 + x2);
+ startWalkToXExt(x1 + x2);
} else {
startWalkToX(x1 + x2, false);
}
@@ -1336,14 +1336,14 @@ void Klayman::sub41CC40(int16 x1, int16 x2) {
gotoState(NULL);
gotoNextStateExt();
} else if (_x > x1 - x2) {
- sub41CAC0(x1 - x2);
+ startWalkToXExt(x1 - x2);
} else {
startWalkToX(x1 - x2, false);
}
}
}
-void Klayman::sub41CAC0(int16 x) {
+void Klayman::startWalkToXExt(int16 x) {
int16 xdiff = ABS(x - _x);
if (x == _x) {
_destX = x;
@@ -1540,8 +1540,8 @@ void Klayman::setupJumpToRing() {
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmJumpToRing);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
- NextState(&Klayman::sub420340);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ NextState(&Klayman::stHangOnRing);
sendMessage(_attachedSprite, 0x482B, 0);
}
@@ -1566,12 +1566,12 @@ uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *
return messageResult;
}
-void Klayman::spriteUpdate41F230() {
+void Klayman::suUpdateDestX() {
AnimatedSprite::updateDeltaXY();
_destX = _x;
}
-void Klayman::sub420340() {
+void Klayman::stHangOnRing() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x4829E0B8, 0, -1);
@@ -1594,7 +1594,7 @@ void Klayman::stJumpToRing3() {
_acceptInput = false;
startAnimation(0xBA1910B2, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmJumpToRing3);
NextState(&Klayman::stHoldRing);
sendMessage(_attachedSprite, 0x482B, 0);
@@ -1691,14 +1691,14 @@ void Klayman::stStartClimbLadderDown() {
startAnimation(0x122D1505, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
} else if (_ladderStatus == 3) {
_ladderStatus = 2;
_acceptInput = true;
startAnimationByHash(0x122D1505, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
} else if (_ladderStatus == 1) {
_ladderStatus = 2;
_acceptInput = true;
@@ -1715,14 +1715,14 @@ void Klayman::stClimbLadderHalf() {
startAnimationByHash(0x3A292504, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
} else if (_ladderStatus == 2) {
_ladderStatus = 0;
_acceptInput = false;
startAnimationByHash(0x122D1505, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41DFD0);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
} else {
gotoNextStateExt();
}
@@ -1783,14 +1783,14 @@ void Klayman::stStartClimbLadderUp() {
startAnimation(0x3A292504, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
} else if (_ladderStatus == 3) {
_ladderStatus = 1;
_acceptInput = true;
startAnimationByHash(0x3A292504, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
} else if (_ladderStatus == 2) {
_ladderStatus = 1;
_acceptInput = true;
@@ -1805,7 +1805,7 @@ void Klayman::stWalkToFrontNoStep() {
startAnimationByHash(0xF229C003, 0x14884392, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1833,7 +1833,7 @@ void Klayman::stWalkToFront() {
startAnimation(0xF229C003, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -1844,7 +1844,7 @@ void Klayman::stTurnToFront() {
startAnimationByHash(0xCA221107, 0x8520108C, 0);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -1855,7 +1855,7 @@ void Klayman::stTurnToBack() {
startAnimation(0xCA221107, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -1887,7 +1887,7 @@ void Klayman::stTurnToBackToUse() {
startAnimation(0x91540140, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmTurnToBackToUse);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -1913,7 +1913,7 @@ void Klayman::stClayDoorOpen() {
_acceptInput = false;
startAnimation(0x5CCCB330, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmClayDoorOpen);
}
}
@@ -1938,8 +1938,8 @@ void Klayman::stTurnToUse() {
_acceptInput = false;
startAnimation(0x9B250AD2, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::hmTurnToUse);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -1948,7 +1948,7 @@ void Klayman::stReturnFromUse() {
_acceptInput = false;
startAnimation(0x98F88391, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmTurnToUse);
}
@@ -1975,11 +1975,11 @@ void Klayman::stMoveObjectSkipTurnFaceObject() {
_acceptInput = true;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
-void Klayman::sub420660() {
+void Klayman::evMoveObjectTurnDone() {
sendMessage(_attachedSprite, 0x4807, 0);
}
@@ -1993,7 +1993,7 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti
if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
stMoveObjectSkipTurn();
} else {
- FinalizeState(&Klayman::sub420660);
+ FinalizeState(&Klayman::evMoveObjectTurnDone);
SetMessageHandler(&Klayman::handleMessage41D480);
}
} else if (param.asInteger() == 0x32180101) {
@@ -2014,7 +2014,7 @@ void Klayman::stMoveObjectSkipTurn() {
_acceptInput = true;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
@@ -2026,7 +2026,7 @@ void Klayman::stMoveObjectFaceObject() {
_acceptInput = true;
startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
}
}
@@ -2040,7 +2040,7 @@ void Klayman::stUseLever() {
sendMessage(_attachedSprite, 0x482B, 0);
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::handleMessage41E210);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
@@ -2058,7 +2058,7 @@ void Klayman::stPullLeverDown() {
void Klayman::stHoldLeverDown() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::handleMessage41D360);
_isLeverDown = true;
_acceptInput = true;
@@ -2067,7 +2067,7 @@ void Klayman::stHoldLeverDown() {
void Klayman::stUseLeverRelease() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stPullLeverDown);
@@ -2079,7 +2079,7 @@ void Klayman::stReleaseLever() {
_status2 = 2;
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::handleMessage41E210);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stLetGoOfLever);
@@ -2183,16 +2183,16 @@ void Klayman::walkAlongPathPoints() {
}
}
-void Klayman::sub4204C0() {
+void Klayman::stJumpToGrab() {
_status2 = 0;
_acceptInput = false;
startAnimationByHash(0x00AB8C10, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F920);
- SetMessageHandler(&Klayman::handleMessage41E5F0);
+ SetSpriteUpdate(&Klayman::suJumpToGrab);
+ SetMessageHandler(&Klayman::hmJumpToGrab);
}
-void Klayman::spriteUpdate41F920() {
+void Klayman::suJumpToGrab() {
updateDeltaXY();
if (_y >= _destY) {
_y = _destY;
@@ -2201,7 +2201,7 @@ void Klayman::spriteUpdate41F920() {
}
}
-uint32 Klayman::handleMessage41E5F0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2218,7 +2218,7 @@ uint32 Klayman::handleMessage41E5F0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421230() {
+void Klayman::sub421230() {//stGrow
_status2 = 2;
_acceptInput = false;
startAnimationByHash(0x38445000, 0, -1);
@@ -2238,40 +2238,40 @@ uint32 Klayman::handleMessage41F1D0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421270() {
- if (!stStartAction(AnimationCallback(&Klayman::sub421270))) {
+void Klayman::stTurnToUseExt() {
+ if (!stStartAction(AnimationCallback(&Klayman::stTurnToUseExt))) {
_status2 = 2;
_acceptInput = false;
startAnimation(0x1B3D8216, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
-void Klayman::sub420460() {
- if (!stStartAction(AnimationCallback(&Klayman::sub420460))) {
+void Klayman::stJumpToGrabFall() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToGrabFall))) {
_status2 = 0;
_acceptInput = false;
startAnimation(0x00AB8C10, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41E5F0);
- SetSpriteUpdate(&Klayman::spriteUpdate41F920);
+ SetMessageHandler(&Klayman::hmJumpToGrab);
+ SetSpriteUpdate(&Klayman::suJumpToGrab);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
-void Klayman::sub420500() {
+void Klayman::stJumpToGrabRelease() {
_status2 = 1;
_acceptInput = false;
startAnimationByHash(0x00AB8C10, 0x320AC306, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41F0E0);
+ SetMessageHandler(&Klayman::hmJumpToGrabRelease);
NextState(&Klayman::stReleaseRing);
}
-uint32 Klayman::handleMessage41F0E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2282,11 +2282,11 @@ uint32 Klayman::handleMessage41F0E0(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klayman::sub421430() {
- startIdleAnimation(0x90EF8D38, AnimationCallback(&Klayman::sub421440));
+void Klayman::stDoIdleTeleporterHands() {
+ startIdleAnimation(0x90EF8D38, AnimationCallback(&Klayman::stIdleTeleporterHands));
}
-void Klayman::sub421440() {
+void Klayman::stIdleTeleporterHands() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x90EF8D38, 0, -1);
@@ -2296,11 +2296,11 @@ void Klayman::sub421440() {
NextState(&Klayman::stIdleSitBlinkSecond);
}
-void Klayman::sub421480() {
- startIdleAnimation(0x900F0930, AnimationCallback(&Klayman::sub421440));
+void Klayman::stDoIdleTeleporterHands2() {
+ startIdleAnimation(0x900F0930, AnimationCallback(&Klayman::stIdleTeleporterHands2));
}
-void Klayman::sub421490() {
+void Klayman::stIdleTeleporterHands2() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x900F0930, 0, -1);
@@ -2332,7 +2332,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stSleeping);
break;
case 0x480D:
- GotoState(&KmScene1001::sub44FA50);
+ GotoState(&KmScene1001::stPullLever);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
@@ -2391,18 +2391,18 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1001::sub44FA50() {
- if (!stStartAction(AnimationCallback(&KmScene1001::sub44FA50))) {
+void KmScene1001::stPullLever() {
+ if (!stStartAction(AnimationCallback(&KmScene1001::stPullLever))) {
_status2 = 2;
_acceptInput = false;
startAnimation(0x00648953, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1001::handleMessage44FA00);
+ SetMessageHandler(&KmScene1001::hmPullLever);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
}
-uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1001::hmPullLever(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2439,7 +2439,7 @@ void KmScene1002::xUpdate() {
uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2001:
- GotoState(&KmScene1002::sub449E90);
+ GotoState(&KmScene1002::stStandIdleSpecial);
break;
case 0x2007:
_otherSprite = (Sprite*)param.asEntity();
@@ -2481,7 +2481,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&KmScene1002::stMoveVenusFlyTrap);
break;
case 0x480D:
- GotoState(&KmScene1002::sub449E20);
+ GotoState(&KmScene1002::stJumpToRingVenusFlyTrap);
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
@@ -2545,7 +2545,7 @@ void KmScene1002::update4497D0() {
}
}
-uint32 KmScene1002::handleMessage449800(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2571,7 +2571,7 @@ uint32 KmScene1002::handleMessage449800(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x4811:
_soundResource1.play(0x5252A0E4);
@@ -2705,20 +2705,20 @@ void KmScene1002::suFallDown() {
_vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
}
-void KmScene1002::sub449E20() {
- if (!stStartAction(AnimationCallback(&KmScene1002::sub449E20))) {
+void KmScene1002::stJumpToRingVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&KmScene1002::stJumpToRingVenusFlyTrap))) {
_status2 = 2;
_acceptInput = false;
startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1002::handleMessage449800);
+ SetMessageHandler(&KmScene1002::hmJumpToRingVenusFlyTrap);
NextState(&Klayman::stLandOnFeet);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
-void KmScene1002::sub449E90() {
+void KmScene1002::stStandIdleSpecial() {
_soundResource1.play(0x56548280);
_status2 = 0;
_acceptInput = false;
@@ -2726,7 +2726,7 @@ void KmScene1002::sub449E90() {
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1002::handleMessage4498E0);
+ SetMessageHandler(&KmScene1002::hmStandIdleSpecial);
}
void KmScene1002::sub449EF0() {
@@ -2998,7 +2998,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter)
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -3036,16 +3036,16 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- sub461F30();
+ stTeleporterAppear();
break;
case 0x483E:
- sub461F70();
+ stTeleporterDisappear();
break;
}
return 0;
}
-uint32 KmScene1109::handleMessage461EA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1109::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -3059,22 +3059,22 @@ uint32 KmScene1109::handleMessage461EA0(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene1109::sub461F30() {
+void KmScene1109::stTeleporterAppear() {
_status2 = 0;
_acceptInput = false;
+ startAnimation(0x2C2A4A1C, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1109::handleMessage461EA0);
- startAnimation(0x2C2A4A1C, 0, -1);
+ SetMessageHandler(&KmScene1109::hmTeleporterAppearDisappear);
}
-void KmScene1109::sub461F70() {
+void KmScene1109::stTeleporterDisappear() {
_status2 = 0;
_acceptInput = false;
+ startAnimation(0x3C2E4245, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1109::handleMessage461EA0);
- startAnimation(0x3C2E4245, 0, -1);
+ SetMessageHandler(&KmScene1109::hmTeleporterAppearDisappear);
}
// KmScene1201
@@ -3109,7 +3109,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&KmScene1201::stTumbleHeadless);
break;
case 0x4815:
- GotoState(&KmScene1201::sub40E040);
+ GotoState(&KmScene1201::stCloseEyes);
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
@@ -3150,7 +3150,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1201::update40DBE0() {
+void KmScene1201::upMoveObject() {
if (_x >= 380)
gotoNextStateExt();
Klayman::update();
@@ -3239,7 +3239,7 @@ void KmScene1201::stMoveObject() {
_countdown = 8;
setDoDeltaX(0);
startAnimation(0x0C1CA072, 0, -1);
- SetUpdateHandler(&KmScene1201::update40DBE0);
+ SetUpdateHandler(&KmScene1201::upMoveObject);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmMoveObject);
}
@@ -3248,7 +3248,7 @@ void KmScene1201::stMoveObject() {
void KmScene1201::stMoveObjectSkipTurn() {
_acceptInput = false;
startAnimationByHash(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&KmScene1201::update40DBE0);
+ SetUpdateHandler(&KmScene1201::upMoveObject);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmMoveObject);
}
@@ -3268,8 +3268,8 @@ void KmScene1201::stTumbleHeadless() {
}
}
-void KmScene1201::sub40E040() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::sub40E040))) {
+void KmScene1201::stCloseEyes() {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stCloseEyes))) {
_status2 = 1;
_acceptInput = false;
startAnimation(0x5420E254, 0, -1);
@@ -3318,7 +3318,7 @@ uint32 KmScene1303::hmPeekWallReturn(int messageNum, const MessageParam ¶m,
return messageResult;
}
-void KmScene1303::update4161A0() {
+void KmScene1303::upPeekWallBlink() {
Klayman::update();
_blinkCounter++;
if (_blinkCounter >= _blinkCounterMax)
@@ -3350,7 +3350,7 @@ void KmScene1303::stPeekWallBlink() {
_acceptInput = true;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
startAnimation(0xAC20C012, 38, 42);
- SetUpdateHandler(&KmScene1303::update4161A0);
+ SetUpdateHandler(&KmScene1303::upPeekWallBlink);
SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D360);
_newStickFrameIndex = 42;
@@ -3384,7 +3384,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -3479,7 +3479,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter)
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -3487,7 +3487,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -3572,10 +3572,10 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- sub417D40();
+ stTeleporterAppear();
break;
case 0x483E:
- sub417D80();
+ stTeleporterDisappear();
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -3587,25 +3587,25 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-void KmScene1306::sub417D40() {
+void KmScene1306::stTeleporterAppear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0xEE084A04, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1306::handleMessage417CB0);
+ SetMessageHandler(&KmScene1306::hmTeleporterAppearDisappear);
}
-void KmScene1306::sub417D80() {
+void KmScene1306::stTeleporterDisappear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0xB86A4274, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1306::handleMessage417CB0);
+ SetMessageHandler(&KmScene1306::hmTeleporterAppearDisappear);
}
-uint32 KmScene1306::handleMessage417CB0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1306::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -3647,7 +3647,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -3658,7 +3658,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_INSERT_DISK:
if (param.asInteger() == 1) {
- GotoState(&KmScene1308::sub456150);
+ GotoState(&KmScene1308::stInsertDiskSide);
} else {
GotoState(&Klayman::stInsertDisk);
}
@@ -3692,7 +3692,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene1308::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1308::hmInsertDiskSide(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -3717,8 +3717,8 @@ uint32 KmScene1308::handleMessage(int messageNum, const MessageParam ¶m, Ent
return messageResult;
}
-void KmScene1308::sub456150() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1308::sub456150))) {
+void KmScene1308::stInsertDiskSide() {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene1308::stInsertDiskSide))) {
_status2 = 2;
_flag1 = false;
for (uint i = 0; i < 3; i++) {
@@ -3747,7 +3747,7 @@ void KmScene1308::sub456150() {
startAnimation(0xDC409440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::spriteUpdate41F250);
- SetMessageHandler(&KmScene1308::handleMessage);
+ SetMessageHandler(&KmScene1308::hmInsertDiskSide);
_flag1 = false;
}
}
@@ -3904,7 +3904,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -3961,7 +3961,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -4028,7 +4028,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter)
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -4036,7 +4036,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -4057,7 +4057,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_isSittingInTeleporter)//CHECKME
+ if (_isSittingInTeleporter)
GotoState(&Klayman::stReturnFromUseInTeleporter);
break;
case 0x481F:
@@ -4121,7 +4121,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter) {
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
} else {
GotoState(&Klayman::stTryStandIdle);
}
@@ -4133,7 +4133,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -4186,16 +4186,16 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- sub468AD0();
+ stTeleporterAppear();
break;
case 0x483E:
- sub468B10();
+ stTeleporterDisappear();
break;
}
return messageResult;
}
-uint32 KmScene1705::handleMessage4689A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1705::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -4209,7 +4209,7 @@ uint32 KmScene1705::handleMessage4689A0(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene1705::spriteUpdate468A30() {
+void KmScene1705::suFallSkipJump() {
updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
@@ -4224,27 +4224,27 @@ void KmScene1705::stFallSkipJump() {
_acceptInput = false;
startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene1705::spriteUpdate468A30);
+ SetSpriteUpdate(&KmScene1705::suFallSkipJump);
SetMessageHandler(&Klayman::handleMessage41D360);
NextState(&Klayman::stLandOnFeet);
}
-void KmScene1705::sub468AD0() {
+void KmScene1705::stTeleporterAppear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x5E0A4905, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1705::handleMessage4689A0);
+ SetMessageHandler(&KmScene1705::hmTeleporterAppearDisappear);
}
-void KmScene1705::sub468B10() {
+void KmScene1705::stTeleporterDisappear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0xD86E4477, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1705::handleMessage4689A0);
+ SetMessageHandler(&KmScene1705::hmTeleporterAppearDisappear);
}
KmScene1901::KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4303,7 +4303,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter) {
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
} else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -4341,16 +4341,16 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- sub440230();
+ stTeleporterAppear();
break;
case 0x483E:
- stDoTeleport();
+ stTeleporterDisappear();
break;
}
return 0;
}
-uint32 KmScene2001::handleMessage4401A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2001::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -4364,22 +4364,22 @@ uint32 KmScene2001::handleMessage4401A0(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene2001::sub440230() {
+void KmScene2001::stTeleporterAppear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0xBE68CC54, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2001::handleMessage4401A0);
+ SetMessageHandler(&KmScene2001::hmTeleporterAppearDisappear);
}
-void KmScene2001::stDoTeleport() {
+void KmScene2001::stTeleporterDisappear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x18AB4ED4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2001::handleMessage4401A0);
+ SetMessageHandler(&KmScene2001::hmTeleporterAppearDisappear);
}
KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4401,18 +4401,18 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter)
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
else
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4811:
- GotoState(&KmScene2101::sub4862C0);
+ GotoState(&KmScene2101::stHitByDoor);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -4459,16 +4459,16 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- sub486320();
+ stTeleporterAppear();
break;
case 0x483E:
- sub486360();
+ stTeleporterDisappear();
break;
}
return messageResult;
}
-uint32 KmScene2101::handleMessage486160(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2101::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
int16 speedUpFrameIndex;
switch (messageNum) {
@@ -4491,7 +4491,7 @@ uint32 KmScene2101::handleMessage486160(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 KmScene2101::handleMessage486230(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2101::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -4505,32 +4505,32 @@ uint32 KmScene2101::handleMessage486230(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene2101::sub4862C0() {
+void KmScene2101::stHitByDoor() {
_status2 = 1;
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene2101::handleMessage486160);
+ SetMessageHandler(&KmScene2101::hmHitByDoor);
_soundResource1.play(0x402E82D4);
}
-void KmScene2101::sub486320() {
+void KmScene2101::stTeleporterAppear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0xFF290E30, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2101::handleMessage486230);
+ SetMessageHandler(&KmScene2101::hmTeleporterAppearDisappear);
}
-void KmScene2101::sub486360() {
+void KmScene2101::stTeleporterDisappear() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x9A28CA1C, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2101::handleMessage486230);
+ SetMessageHandler(&KmScene2101::hmTeleporterAppearDisappear);
}
KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
@@ -4624,7 +4624,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -4699,7 +4699,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2205::sub423980);
+ GotoState(&KmScene2205::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -4726,7 +4726,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2205::sub423980() {
+void KmScene2205::stStartWalkingResume() {
int16 frameIndex = getGlobalVar(0x18288913);
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
@@ -4735,7 +4735,7 @@ void KmScene2205::sub423980() {
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
@@ -4765,19 +4765,19 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4803:
- GotoState(&KmScene2206::sub482490);
+ GotoState(&KmScene2206::stRidePlatformDown);
break;
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2206::sub482530);
+ GotoState(&KmScene2206::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -4834,7 +4834,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -4846,15 +4846,15 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2206::spriteUpdate482450() {
+void KmScene2206::suRidePlatformDown() {
_yDelta++;
_y += _yDelta;
if (_y > 600)
sendMessage(this, 0x1019, 0);
}
-void KmScene2206::sub482490() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::sub482490))) {
+void KmScene2206::stRidePlatformDown() {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::stRidePlatformDown))) {
_status2 = 1;
sendMessage(_parentScene, 0x4803, 0);
_acceptInput = false;
@@ -4862,12 +4862,12 @@ void KmScene2206::sub482490() {
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteUpdate(&KmScene2206::spriteUpdate482450);
+ SetSpriteUpdate(&KmScene2206::suRidePlatformDown);
_vm->_soundMan->playSoundLooping(0xD3B02847);
}
}
-void KmScene2206::sub482530() {
+void KmScene2206::stStartWalkingResume() {
int16 frameIndex = getGlobalVar(0x18288913) + 1;
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
@@ -4876,7 +4876,7 @@ void KmScene2206::sub482530() {
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
@@ -4890,10 +4890,10 @@ KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2001:
- GotoState(&KmScene2207::sub442460);
+ GotoState(&KmScene2207::stRidePlatform);
break;
case 0x2005:
- spriteUpdate442430();
+ suRidePlatform();
GotoState(&KmScene2207::stTryStandIdle);
break;
case 0x4001:
@@ -4904,7 +4904,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480D:
- GotoState(&KmScene2207::sub4424B0);
+ GotoState(&KmScene2207::stInteractLever);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
@@ -4946,25 +4946,25 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2207::spriteUpdate442430() {
+void KmScene2207::suRidePlatform() {
_x = _attachedSprite->getX() - 20;
_y = _attachedSprite->getY() + 46;
processDelta();
}
-void KmScene2207::sub442460() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene2207::sub442460))) {
+void KmScene2207::stRidePlatform() {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene2207::stRidePlatform))) {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene2207::spriteUpdate442430);
+ SetSpriteUpdate(&KmScene2207::suRidePlatform);
SetMessageHandler(&Klayman::handleMessage41D360);
}
}
-void KmScene2207::sub4424B0() {
- if (!stStartAction(AnimationCallback(&KmScene2207::sub4424B0))) {
+void KmScene2207::stInteractLever() {
+ if (!stStartAction(AnimationCallback(&KmScene2207::stInteractLever))) {
_status2 = 0;
if (_isLeverDown) {
stUseLeverRelease();
@@ -4972,32 +4972,32 @@ void KmScene2207::sub4424B0() {
_acceptInput = false;
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene2207::spriteUpdate41F230);
+ SetSpriteUpdate(&KmScene2207::suUpdateDestX);
SetMessageHandler(&Klayman::handleMessage41E210);
- NextState(&KmScene2207::sub442520);
+ NextState(&KmScene2207::stPullLever);
}
}
}
-void KmScene2207::sub442520() {
+void KmScene2207::stPullLever() {
startAnimation(0x0D318140, 0, -1);
sendMessage(_attachedSprite, 0x480F, 0);
- NextState(&KmScene2207::sub442560);
+ NextState(&KmScene2207::stLookLeverDown);
}
-void KmScene2207::sub442560() {
+void KmScene2207::stLookLeverDown() {
startAnimation(0x1564A2C0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
- NextState(&KmScene2207::sub4425A0);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ NextState(&KmScene2207::stWaitLeverDown);
_acceptInput = true;
_isLeverDown = true;
}
-void KmScene2207::sub4425A0() {
+void KmScene2207::stWaitLeverDown() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F230);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::handleMessage41D360);
_acceptInput = true;
_isLeverDown = true;
@@ -5033,7 +5033,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2) {
GotoState(&Klayman::stPickUpNeedle);
} else if (param.asInteger() == 1) {
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
} else {
GotoState(&Klayman::stPickUpGeneric);
}
@@ -5067,7 +5067,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
}
return 0;
@@ -5082,7 +5082,7 @@ void KmScene2242::sub444D20() {
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
@@ -5136,7 +5136,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
gotoNextStateExt();
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
}
return 0;
@@ -5151,7 +5151,7 @@ void KmHallOfRecords::sub43B130() {
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
@@ -5205,7 +5205,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
}
return 0;
@@ -5220,7 +5220,7 @@ void KmScene2247::sub453520() {
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41EB70);
+ SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::spriteUpdate41F300);
NextState(&Klayman::stUpdateWalking);
FinalizeState(&Klayman::stStartWalkingDone);
@@ -5289,7 +5289,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4832:
- GotoState(&Klayman::sub421110);
+ GotoState(&Klayman::stUseTube);
break;
case 0x4833:
if (param.asInteger() == 1)
@@ -5470,7 +5470,7 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480D:
- GotoState(&Klayman::sub420F60);
+ GotoState(&Klayman::stPullCord);
break;
case 0x4812:
GotoState(&Klayman::stPickUpGeneric);
@@ -5567,7 +5567,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 2)
GotoState(&Klayman::stPickUpNeedle);
else if (param.asInteger() == 1)
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
else
GotoState(&Klayman::stPickUpGeneric);
break;
@@ -5649,7 +5649,7 @@ uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter)
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -5748,7 +5748,7 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
}
return 0;
@@ -5772,14 +5772,14 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4803:
_destY = param.asInteger();
- GotoState(&Klayman::sub4204C0);
+ GotoState(&Klayman::stJumpToGrab);
break;
case 0x4804:
if (param.asInteger() == 3)
GotoState(&Klayman::sub421230);
break;
case 0x480D:
- GotoState(&Klayman::sub420F60);
+ GotoState(&Klayman::stPullCord);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -5811,7 +5811,7 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stStepOver);
break;
case 0x4838:
- GotoState(&Klayman::sub420500);
+ GotoState(&Klayman::stJumpToGrabRelease);
break;
}
return 0;
@@ -5828,41 +5828,41 @@ uint32 KmScene2803b::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41CDE0(param.asPoint().x);
+ startWalkToXSmall(param.asPoint().x);
break;
case 0x4004:
- GotoState(&Klayman::sub421640);
+ GotoState(&Klayman::stStandIdleSmall);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x4818:
- sub41CDE0(_dataResource.getPoint(param.asInteger()).x);
+ startWalkToXSmall(_dataResource.getPoint(param.asInteger()).x);
break;
case 0x481F:
if (param.asInteger() == 1)
- GotoState(&Klayman::sub421740);
+ GotoState(&Klayman::stWonderAboutAfterSmall);
else if (param.asInteger() == 0)
- GotoState(&Klayman::sub421780);
+ GotoState(&Klayman::stWonderAboutHalfSmall);
else
- GotoState(&Klayman::sub421700);
+ GotoState(&Klayman::stWonderAboutSmall);
break;
case 0x482E:
if (param.asInteger() == 1)
- GotoState(&Klayman::sub421840);
+ GotoState(&Klayman::stWalkToFrontNoStepSmall);
else if (param.asInteger() == 2)
- GotoState(&Klayman::sub421800);
+ GotoState(&Klayman::stWalkToFront2Small);
else
- GotoState(&Klayman::sub4217C0);
+ GotoState(&Klayman::stWalkToFrontSmall);
break;
case 0x482F:
if (param.asInteger() == 1)
- GotoState(&Klayman::sub421900);
+ GotoState(&Klayman::stTurnToBackHalfSmall);
else if (param.asInteger() == 2)
- GotoState(&Klayman::sub4218C0);
+ GotoState(&Klayman::stTurnToBackWalkSmall);
else
- GotoState(&Klayman::sub421880);
+ GotoState(&Klayman::stTurnToBackSmall);
break;
case 0x4830:
GotoState(&KmScene2803b::sub460670);
@@ -5910,7 +5910,7 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (_isSittingInTeleporter)
- GotoState(&Klayman::sub421350);
+ GotoState(&Klayman::stSitIdleTeleporter);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -6012,7 +6012,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(440, true);
break;
case 0x480D:
- GotoState(&Klayman::sub420F60);
+ GotoState(&Klayman::stPullCord);
break;
case 0x4816:
if (param.asInteger() == 0) {
@@ -6033,7 +6033,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 1) {
GotoState(&KmScene2806::sub40F7C0);
} else {
- GotoState(&Klayman::sub421110);
+ GotoState(&Klayman::stUseTube);
}
break;
}
@@ -6174,7 +6174,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(226, true);
break;
case 0x480D:
- GotoState(&Klayman::sub420F60);
+ GotoState(&Klayman::stPullCord);
break;
case 0x4816:
if (param.asInteger() == 0) {
@@ -6195,7 +6195,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 1) {
GotoState(&KmScene2809::sub458590);
} else {
- GotoState(&Klayman::sub421110);
+ GotoState(&Klayman::stUseTube);
}
break;
}
@@ -6317,42 +6317,42 @@ uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x4001:
case 0x4800:
- sub41CDE0(param.asPoint().x);
+ startWalkToXSmall(param.asPoint().x);
break;
case 0x4004:
- GotoState(&Klayman::sub421640);
+ GotoState(&Klayman::stStandIdleSmall);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x4818:
- sub41CDE0(_dataResource.getPoint(param.asInteger()).x);
+ startWalkToXSmall(_dataResource.getPoint(param.asInteger()).x);
break;
case 0x481F:
if (param.asInteger() == 1)
- GotoState(&Klayman::sub421740);
+ GotoState(&Klayman::stWonderAboutAfterSmall);
else if (param.asInteger() == 0)
- GotoState(&Klayman::sub421780);
+ GotoState(&Klayman::stWonderAboutHalfSmall);
else
- GotoState(&Klayman::sub421700);
+ GotoState(&Klayman::stWonderAboutSmall);
break;
case 0x482E:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421840);
+ GotoState(&Klayman::stWalkToFrontNoStepSmall);
} else {
- GotoState(&Klayman::sub4217C0);
+ GotoState(&Klayman::stWalkToFrontSmall);
}
break;
case 0x482F:
if (param.asInteger() == 1) {
- GotoState(&Klayman::sub421900);
+ GotoState(&Klayman::stTurnToBackHalfSmall);
} else {
- GotoState(&Klayman::sub421880);
+ GotoState(&Klayman::stTurnToBackSmall);
}
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
}
return 0;
@@ -6376,7 +6376,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4803:
_destY = param.asInteger();
- GotoState(&Klayman::sub4204C0);
+ GotoState(&Klayman::stJumpToGrab);
break;
case 0x4804:
if (param.asInteger() == 3)
@@ -6409,7 +6409,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
} else if (param.asInteger() == 4) {
GotoState(&Klayman::stTurnAwayFromUse);
} else if (param.asInteger() == 5) {
- GotoState(&Klayman::sub421270);
+ GotoState(&Klayman::stTurnToUseExt);
} else {
GotoState(&Klayman::stWonderAbout);
}
@@ -6447,7 +6447,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x4837:
- sub41CE70();
+ stopWalking();
break;
}
return 0;
@@ -6469,14 +6469,13 @@ uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4805:
_destY = param.asInteger();
- debug("_destY = %d", _destY);
- GotoState(&Klayman::sub420460);
+ GotoState(&Klayman::stJumpToGrabFall);
break;
case 0x4812:
if (param.asInteger() == 2)
GotoState(&Klayman::stPickUpNeedle);
else if (param.asInteger() == 1)
- GotoState(&Klayman::sub41FFF0);
+ GotoState(&Klayman::stPickUpTube);
else
GotoState(&Klayman::stPickUpGeneric);
break;
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 9e31cf2..3f3aafd 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -53,10 +53,10 @@ public:
void update();
void stDoIdlePickEar();
- void sub41FDA0();
- void sub41FDF0();
+ void stDoIdleSpinHead();
+ void stDoIdleArms();
void stDoIdleChest();
- void sub41FEB0();
+ void stDoIdleHeadOff();
void stTryStandIdle();
void stWakeUp();
void stSleeping();
@@ -73,7 +73,7 @@ public:
void stPeekWall();
void stJumpToRing1();
void setupJumpToRing();
- void sub420340();
+ void stHangOnRing();
void stJumpToRing2();
void stJumpToRing3();
void stHoldRing();
@@ -93,18 +93,18 @@ public:
void stTurnToUse();
void stReturnFromUse();
void stWalkingOpenDoor();
- void sub421350();
+ void stSitIdleTeleporter();
void stIdleSitBlink();
void stIdleSitBlinkSecond();
void stPickUpNeedle();
- void sub41FFF0();
+ void stPickUpTube();
void stTurnToUseInTeleporter();
void stReturnFromUseInTeleporter();
void stStepOver();
void stSitInTeleporter();
void stGetUpFromTeleporter();
void stMoveObjectSkipTurnFaceObject();
- void sub420660();
+ void evMoveObjectTurnDone();
void stMoveObjectSkipTurn();
void stMoveObjectFaceObject();
void stUseLever();
@@ -119,19 +119,19 @@ public:
void stUpdateWalking();
void stStartWalkingDone();
- void sub41CE70();
+ void stopWalking();
void spriteUpdate41F250();
void suWalking();
void suLargeStep();
- void spriteUpdate41F230();
+ void suUpdateDestX();
void suWalkingOpenDoor();
void spriteUpdate41F300();
void suWalkingTestExit();
uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41EB70(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
@@ -141,42 +141,42 @@ public:
void setSoundFlag(bool value) { _soundFlag = value; }
- void sub421640();
- void sub421740();
- void sub421780();
- void sub421700();
- void sub421840();
- void sub421800();
- void sub4217C0();
- void sub421900();
- void sub4218C0();
- void sub421880();
- void sub420F60();
- void sub420FB0();
- uint32 handleMessage41E6C0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub421110();
- uint32 handleMessage41E750(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub4215E0();
- void sub421550();
+ void stStandIdleSmall();
+ void stWonderAboutAfterSmall();
+ void stWonderAboutHalfSmall();
+ void stWonderAboutSmall();
+ void stWalkToFrontNoStepSmall();
+ void stWalkToFront2Small();
+ void stWalkToFrontSmall();
+ void stTurnToBackHalfSmall();
+ void stTurnToBackWalkSmall();
+ void stTurnToBackSmall();
+ void stPullCord();
+ void stReleaseCord();
+ uint32 hmPullCord(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stUseTube();
+ uint32 hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stWalkingExt();
+ void stStartWalkingExt();
- void sub4204C0();
- void spriteUpdate41F920();
- uint32 handleMessage41E5F0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stJumpToGrab();
+ void suJumpToGrab();
+ uint32 hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub421230();
+ void sub421230();//stGrow??
uint32 handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub421270();
- void sub420460();
+ void stTurnToUseExt();
+ void stJumpToGrabFall();
- void sub420500();
- uint32 handleMessage41F0E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stJumpToGrabRelease();
+ uint32 hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub421430();
- void sub421440();
+ void stDoIdleTeleporterHands();
+ void stIdleTeleporterHands();
- void sub421480();
- void sub421490();
+ void stDoIdleTeleporterHands2();
+ void stIdleTeleporterHands2();
protected:
Entity *_parentScene;
@@ -212,18 +212,18 @@ protected:
void evIdlePickEarDone();
uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41FDB0();
- uint32 handleMessage41E980(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdleSpinHead();
+ uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41FE00();
- void sub41FE50();
- uint32 handleMessage41E9E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdleArms();
+ void evIdleArmsDone();
+ uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender);
void stIdleChest();
uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41FEC0();
- uint32 handleMessage41EFE0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdleHeadOff();
+ uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender);
void startIdleAnimation(uint32 fileHash, AnimationCb callback);
void upIdleAnimation();
@@ -233,7 +233,7 @@ protected:
void sub41C770();
void sub41C790();
- void update41D0F0();
+ void upIdle();
void stIdleBlink();
void stStandAround();
@@ -248,7 +248,7 @@ protected:
void stSneak();
void stWalkingDone();
- uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender);
void startSpecialWalkLeft(int16 x);
void stStartWalking();
uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -259,7 +259,7 @@ protected:
void startSpecialWalkRight(int16 x);
void sub41CC40(int16 x1, int16 x2);
- void sub41CAC0(int16 x);
+ void startWalkToXExt(int16 x);
void sub41CCE0(int16 x);
void stLargeStepDone();
@@ -279,14 +279,14 @@ protected:
uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender);
- void update41D1C0();
+ void upSitIdleTeleporter();
uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub41CDE0(int16 x);
- void sub421680();
- uint32 handleMessage41ED70(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41EE00(int messageNum, const MessageParam ¶m, Entity *sender);
+ void startWalkToXSmall(int16 x);
+ void stStartWalkingSmall();
+ uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender);
void walkAlongPathPoints();
@@ -297,8 +297,8 @@ public:
KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub44FA50();
- uint32 handleMessage44FA00(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stPullLever();
+ uint32 hmPullLever(int messageNum, const MessageParam ¶m, Entity *sender);
};
class KmScene1002 : public Klayman {
@@ -312,16 +312,16 @@ protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void update4497D0();
- uint32 handleMessage449800(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage4498E0(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender);
void suFallDown();
- void sub449E20();
- void sub449E90();
+ void stJumpToRingVenusFlyTrap();
+ void stStandIdleSpecial();
void sub449EF0();
void sub449F70();
void stSpitOutFall();
@@ -353,9 +353,9 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage461EA0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub461F30();
- void sub461F70();
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stTeleporterAppear();
+ void stTeleporterDisappear();
};
class KmScene1201 : public Klayman {
@@ -365,7 +365,7 @@ protected:
Entity *_class464;
int _countdown;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void update40DBE0();
+ void upMoveObject();
uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
void stFetchMatch();
void stLightMatch();
@@ -374,7 +374,7 @@ protected:
void stMoveObject();
void stMoveObjectSkipTurn();
void stTumbleHeadless();
- void sub40E040();
+ void stCloseEyes();
};
class KmScene1303 : public Klayman {
@@ -383,7 +383,7 @@ public:
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
- void update4161A0();
+ void upPeekWallBlink();
void stPeekWall1();
void stPeekWall2();
void stPeekWallBlink();
@@ -412,9 +412,9 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage417CB0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub417D40();
- void sub417D80();
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stTeleporterAppear();
+ void stTeleporterDisappear();
};
class KmScene1308 : public Klayman {
@@ -423,8 +423,8 @@ public:
protected:
bool _flag1;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub456150();
+ uint32 hmInsertDiskSide(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stInsertDiskSide();
};
class KmScene1401 : public Klayman {
@@ -469,11 +469,11 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage4689A0(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate468A30();
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suFallSkipJump();
void stFallSkipJump();
- void sub468AD0();
- void sub468B10();
+ void stTeleporterAppear();
+ void stTeleporterDisappear();
};
class KmScene1901 : public Klayman {
@@ -489,9 +489,9 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage4401A0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub440230();
- void stDoTeleport();
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stTeleporterAppear();
+ void stTeleporterDisappear();
};
class KmScene2101 : public Klayman {
@@ -500,11 +500,11 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage486160(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage486230(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub4862C0();
- void sub486320();
- void sub486360();
+ uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stHitByDoor();
+ void stTeleporterAppear();
+ void stTeleporterDisappear();
};
class KmScene2201 : public Klayman {
@@ -524,7 +524,7 @@ protected:
class KmScene2205 : public Klayman {
public:
KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void sub423980();
+ void stStartWalkingResume();
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -538,9 +538,9 @@ protected:
int16 _yDelta;
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void spriteUpdate482450();
- void sub482490();
- void sub482530();
+ void suRidePlatformDown();
+ void stRidePlatformDown();
+ void stStartWalkingResume();
};
class KmScene2207 : public Klayman {
@@ -548,12 +548,12 @@ public:
KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void spriteUpdate442430();
- void sub442460();
- void sub4424B0();
- void sub442520();
- void sub442560();
- void sub4425A0();
+ void suRidePlatform();
+ void stRidePlatform();
+ void stInteractLever();
+ void stPullLever();
+ void stLookLeverDown();
+ void stWaitLeverDown();
};
class KmScene2242 : public Klayman {
Commit: a5986fd7222f32dfb00487542086cdd765a39208
https://github.com/scummvm/scummvm/commit/a5986fd7222f32dfb00487542086cdd765a39208
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:43-07:00
Commit Message:
NEVERHOOD: Fix resource file reading by introducing SafeMutexedSeekableSubReadStream which locks a mutex during reads and also lock the same mutex in BlbArchive::load; loading resources while music is playing shouldn't mess up the file position now
- Fix loading of non-existent resources (not elegant and not checked everywhere yet, the resource system is subject to a minor rewrite anyway)
- Rename more Klayman stuff
Changed paths:
engines/neverhood/blbarchive.cpp
engines/neverhood/blbarchive.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/resourceman.cpp
engines/neverhood/sound.cpp
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index f003728..cb422a1 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -25,6 +25,29 @@
namespace Neverhood {
+/**
+ * A special variant of SafeSeekableSubReadStream which locks a mutex during each read.
+ * This is neccessary because the music is streamed from disk and it could happen
+ * that a sound effect or another music track is played from the same read stream
+ * while the first music track is updated/read.
+ */
+
+class SafeMutexedSeekableSubReadStream : public Common::SafeSeekableSubReadStream {
+public:
+ SafeMutexedSeekableSubReadStream(SeekableReadStream *parentStream, uint32 begin, uint32 end, DisposeAfterUse::Flag disposeParentStream,
+ Common::Mutex &mutex)
+ : SafeSeekableSubReadStream(parentStream, begin, end, disposeParentStream), _mutex(mutex) {
+ }
+ virtual uint32 read(void *dataPtr, uint32 dataSize);
+protected:
+ Common::Mutex &_mutex;
+};
+
+uint32 SafeMutexedSeekableSubReadStream::read(void *dataPtr, uint32 dataSize) {
+ Common::StackLock lock(_mutex);
+ return Common::SafeSeekableSubReadStream::read(dataPtr, dataSize);
+}
+
BlbArchive::BlbArchive() : _extData(NULL) {
}
@@ -84,6 +107,8 @@ void BlbArchive::open(const Common::String &filename) {
}
void BlbArchive::load(uint index, byte *buffer, uint32 size) {
+ Common::StackLock lock(_mutex);
+
BlbArchiveEntry &entry = _entries[index];
_fd.seek(entry.offset);
@@ -95,7 +120,11 @@ void BlbArchive::load(uint index, byte *buffer, uint32 size) {
_fd.read(buffer, size);
break;
case 3: // DCL-compressed
- Common::decompressDCL(&_fd, buffer, entry.diskSize, entry.size);
+ if (!Common::decompressDCL(&_fd, buffer, entry.diskSize, entry.size)) {
+ debug("decompressDCL(diskSize: %d; size: %d)", entry.diskSize, entry.size);
+ debug("-> fileHash: %08X; type: %d; offset: %08X; endOffset: %08X", entry.fileHash, entry.type, entry.offset, entry.offset + entry.diskSize);
+ debug("-> fd.pos() = %08X", _fd.pos());
+ }
break;
default:
error("BlbArchive::load() Unknown compression type %d", entry.comprType);
@@ -110,7 +139,8 @@ byte *BlbArchive::getEntryExtData(uint index) {
Common::SeekableReadStream *BlbArchive::createStream(uint index) {
const BlbArchiveEntry &entry = _entries[index];
- return new Common::SafeSeekableSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize);
+ return new SafeMutexedSeekableSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize,
+ DisposeAfterUse::NO,_mutex);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/blbarchive.h b/engines/neverhood/blbarchive.h
index ddb3f01..cd2fd11 100644
--- a/engines/neverhood/blbarchive.h
+++ b/engines/neverhood/blbarchive.h
@@ -25,6 +25,7 @@
#include "common/array.h"
#include "common/file.h"
+#include "common/mutex.h"
#include "common/stream.h"
#include "common/substream.h"
#include "neverhood/neverhood.h"
@@ -63,6 +64,7 @@ public:
Common::SeekableReadStream *createStream(uint index);
private:
Common::File _fd;
+ Common::Mutex _mutex;
Common::Array<BlbArchiveEntry> _entries;
byte *_extData;
};
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 3b1a8c9..5b84e61 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -310,7 +310,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2000, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
@@ -344,8 +344,9 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
-#if 0
- _vm->gameState().sceneNum = 11;
+#if 1
+ setGlobalVar(0x1860C990, 1); // DEBUG Make Klayman small
+ _vm->gameState().sceneNum = 2;
createModule(2800, -1);
#endif
#if 0
@@ -354,7 +355,7 @@ void GameModule::startup() {
createModule(2500, -1);
#endif
#if 0
- _vm->gameState().sceneNum = 2;
+ _vm->gameState().sceneNum = 1;
createModule(2400, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index d7e68e6..dd5a588 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5024,7 +5024,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2242::sub444D20);
+ GotoState(&KmScene2242::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5073,8 +5073,8 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2242::sub444D20() {
- int16 frameIndex = (int16)getGlobalVar(0x18288913);
+void KmScene2242::stStartWalkingResume() {
+ int16 frameIndex = getGlobalVar(0x18288913);
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
@@ -5109,7 +5109,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmHallOfRecords::sub43B130);
+ GotoState(&KmHallOfRecords::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5142,8 +5142,8 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
return 0;
}
-void KmHallOfRecords::sub43B130() {
- int16 frameIndex = (int16)getGlobalVar(0x18288913);
+void KmHallOfRecords::stStartWalkingResume() {
+ int16 frameIndex = getGlobalVar(0x18288913);
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
@@ -5178,7 +5178,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2247::sub453520);
+ GotoState(&KmScene2247::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5211,8 +5211,8 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2247::sub453520() {
- int16 frameIndex = (int16)getGlobalVar(0x18288913);
+void KmScene2247::stStartWalkingResume() {
+ int16 frameIndex = getGlobalVar(0x18288913);
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
@@ -5384,7 +5384,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (!getGlobalVar(0x92603A79))
- GotoState(&KmScene2402::sub415840);
+ GotoState(&KmScene2402::stStandWonderAbout);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -5442,7 +5442,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-void KmScene2402::sub415840() {
+void KmScene2402::stStandWonderAbout() {
if (_x > 260)
setDoDeltaX(1);
_status2 = 0;
@@ -6027,11 +6027,11 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4831:
- GotoState(&KmScene2806::sub40F780);
+ GotoState(&KmScene2806::stGrow);
break;
case 0x4832:
if (param.asInteger() == 1) {
- GotoState(&KmScene2806::sub40F7C0);
+ GotoState(&KmScene2806::stDrinkPotion);
} else {
GotoState(&Klayman::stUseTube);
}
@@ -6040,7 +6040,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene2806::handleMessage40F1F0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2806::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
@@ -6090,7 +6090,7 @@ uint32 KmScene2806::handleMessage40F1F0(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 KmScene2806::handleMessage40F570(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2806::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -6123,23 +6123,23 @@ uint32 KmScene2806::handleMessage40F570(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene2806::sub40F780() {
+void KmScene2806::stGrow() {
_status2 = 0;
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene2806::handleMessage40F570);
+ SetMessageHandler(&KmScene2806::hmGrow);
startAnimation(0x2838C010, 0, -1);
}
-void KmScene2806::sub40F7C0() {
+void KmScene2806::stDrinkPotion() {
_status2 = 1;
_acceptInput = false;
_flag1 = false;
_flag2 = false;
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene2806::handleMessage40F1F0);
+ SetMessageHandler(&KmScene2806::hmDrinkPotion);
startAnimation(0x1C388C04, 0, -1);
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3f3aafd..25e6d38 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -562,7 +562,7 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub444D20();
+ void stStartWalkingResume();
};
class KmHallOfRecords : public Klayman {
@@ -571,7 +571,7 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub43B130();
+ void stStartWalkingResume();
};
class KmScene2247 : public Klayman {
@@ -580,7 +580,7 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub453520();
+ void stStartWalkingResume();
};
class KmScene2401 : public Klayman {
@@ -605,7 +605,7 @@ public:
KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void sub415840();
+ void stStandWonderAbout();
};
class KmScene2403 : public Klayman {
@@ -678,10 +678,10 @@ protected:
bool _flag1;
bool _flag2;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage40F1F0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40F570(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40F780();
- void sub40F7C0();
+ uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stGrow();
+ void stDrinkPotion();
};
class KmScene2809 : public Klayman {
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index c073e97..28cef36 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -77,6 +77,8 @@ BlbArchiveEntry *ResourceMan::getArchiveEntry(ResourceFileEntry *entry) const {
int ResourceMan::useResource(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
+ if (!entry)
+ return -1;
if (entry->resourceHandle != -1) {
_resources[entry->resourceHandle]->useRefCount++;
} else {
@@ -94,6 +96,8 @@ int ResourceMan::useResource(uint32 fileHash) {
}
void ResourceMan::unuseResource(int resourceHandle) {
+ if (resourceHandle < 0)
+ return;
Resource *resource = _resources[resourceHandle];
if (resource->useRefCount > 0)
resource->useRefCount--;
@@ -111,15 +115,21 @@ int ResourceMan::getResourceHandleByHash(uint32 fileHash) {
}
bool ResourceMan::isResourceDataValid(int resourceHandle) const {
+ if (resourceHandle < 0)
+ return false;
return _resources[resourceHandle]->data != NULL;
}
uint32 ResourceMan::getResourceSize(int resourceHandle) const {
+ if (resourceHandle < 0)
+ return 0;
Resource *resource = _resources[resourceHandle];
return _archives[resource->archiveIndex]->getEntry(resource->entryIndex)->size;
}
byte ResourceMan::getResourceType(int resourceHandle) {
+ if (resourceHandle < 0)
+ return 0;
Resource *resource = _resources[resourceHandle];
return _archives[resource->archiveIndex]->getEntry(resource->entryIndex)->type;
}
@@ -130,6 +140,8 @@ byte ResourceMan::getResourceTypeByHash(uint32 fileHash) {
}
byte *ResourceMan::getResourceExtData(int resourceHandle) {
+ if (resourceHandle < 0)
+ return NULL;
Resource *resource = _resources[resourceHandle];
return _archives[resource->archiveIndex]->getEntryExtData(resource->entryIndex);
}
@@ -140,6 +152,8 @@ byte *ResourceMan::getResourceExtDataByHash(uint32 fileHash) {
}
byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
+ if (resourceHandle < 0)
+ return NULL;
Resource *resource = _resources[resourceHandle];
if (resource->data != NULL) {
resource->dataRefCount++;
@@ -154,6 +168,8 @@ byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
}
void ResourceMan::unloadResource(int resourceHandle) {
+ if (resourceHandle < 0)
+ return;
Resource *resource = _resources[resourceHandle];
if (resource->dataRefCount > 0)
resource->dataRefCount--;
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index df66c6b..c1db48c 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -306,11 +306,11 @@ void SoundMan::update() {
if (musicItem->_countdown) {
--musicItem->_countdown;
} else if (musicItem->_play && !musicItem->_musicResource->isPlaying()) {
- debug("SoundMan: play music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
+ debug(1, "SoundMan: play music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
musicItem->_musicResource->play(musicItem->_fadeVolumeStep);
musicItem->_fadeVolumeStep = 0;
} else if (musicItem->_stop) {
- debug("SoundMan: stop music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
+ debug(1, "SoundMan: stop music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
musicItem->_musicResource->stop(musicItem->_fadeVolumeStep);
musicItem->_fadeVolumeStep = 0;
musicItem->_stop = false;
@@ -529,13 +529,11 @@ int16 AudioResourceMan::addSound(uint32 fileHash) {
soundItem->_isPlaying = false;
soundItem->_volume = 100;
soundItem->_panning = 50;
-
for (uint i = 0; i < _soundItems.size(); ++i)
if (!_soundItems[i]) {
_soundItems[i] = soundItem;
return i;
}
-
int16 soundIndex = (int16)_soundItems.size();
_soundItems.push_back(soundItem);
return soundIndex;
@@ -591,6 +589,9 @@ void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
if (!soundItem->_data)
loadSound(soundIndex);
+
+ if (!soundItem->_data)
+ return;
uint32 soundSize = _vm->_res->getResourceSize(soundItem->_resourceHandle);
Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundSize, DisposeAfterUse::NO);
@@ -600,7 +601,7 @@ void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &soundItem->_soundHandle,
audioStream, -1, VOLUME(soundItem->_volume), PANNING(soundItem->_panning));
- debug("playing sound %08X", soundItem->_fileHash);
+ debug(1, "playing sound %08X", soundItem->_fileHash);
soundItem->_isPlaying = true;
Commit: cce19001fd353664f4348adf291080cef9da50b0
https://github.com/scummvm/scummvm/commit/cce19001fd353664f4348adf291080cef9da50b0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:43-07:00
Commit Message:
NEVERHOOD: Rename more Klayman stuff (not much left :)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 5b84e61..56812ba 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -314,8 +314,8 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
-#if 0
- _vm->gameState().sceneNum = 0;
+#if 1
+ _vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
#if 0
@@ -344,7 +344,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
-#if 1
+#if 0
setGlobalVar(0x1860C990, 1); // DEBUG Make Klayman small
_vm->gameState().sceneNum = 2;
createModule(2800, -1);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index dd5a588..6ce39a7 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2537,7 +2537,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1002::update4497D0() {
+void KmScene1002::upSpitOutFall() {
Klayman::update();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
_surface->setVisible(true);
@@ -2583,11 +2583,12 @@ uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam ¶m
}
_y = ((Sprite*)sender)->getY() - 200;
if (param.asInteger() == 0) {
- sub449EF0();
+ stSpitOutFall0();
} else if (param.asInteger() == 1) {
- sub44A0D0();
+ // NOTE This is never used and the code was removed
+ // Also the animations used here in the original don't exist...
} else if (param.asInteger() == 2) {
- stSpitOutFall();
+ stSpitOutFall2();
}
break;
}
@@ -2659,7 +2660,7 @@ uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &
return messageResult;
}
-uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) {
int16 speedUpFrameIndex;
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
@@ -2682,7 +2683,7 @@ uint32 KmScene1002::handleMessage449C90(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 KmScene1002::handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene1002::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D360(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2729,22 +2730,20 @@ void KmScene1002::stStandIdleSpecial() {
SetMessageHandler(&KmScene1002::hmStandIdleSpecial);
}
-void KmScene1002::sub449EF0() {
+void KmScene1002::stSpitOutFall0() {
_countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x000BAB02, 0, -1);
- SetUpdateHandler(&KmScene1002::update4497D0);
- // Weird stuff happening
+ SetUpdateHandler(&KmScene1002::upSpitOutFall);
SetMessageHandler(&Klayman::handleMessage41D360);
- //SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteUpdate(&KmScene1002::suFallDown);
- NextState(&KmScene1002::sub449F70);
+ NextState(&KmScene1002::stFalling);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
}
-void KmScene1002::sub449F70() {
+void KmScene1002::stFalling() {
sendMessage(_parentScene, 0x1024, 1);
_soundResource1.play(0x41648271);
_status2 = 1;
@@ -2754,7 +2753,7 @@ void KmScene1002::sub449F70() {
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
SetMessageHandler(&KmScene1002::handleMessage41D480);
- NextState(&KmScene1002::sub44A230);
+ NextState(&KmScene1002::stFallTouchdown);
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
@@ -2762,51 +2761,20 @@ void KmScene1002::sub449F70() {
sendMessage(_ssLadderArch, 0x482B, 0);
}
-void KmScene1002::stSpitOutFall() {
+void KmScene1002::stSpitOutFall2() {
_countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
- SetUpdateHandler(&KmScene1002::update4497D0);
- SetSpriteUpdate(&KmScene1002::suFallDown);
+ SetUpdateHandler(&KmScene1002::upSpitOutFall);
SetMessageHandler(&Klayman::handleMessage41D480);
- NextState(&KmScene1002::sub449F70);
- sendMessage(_class599, 0x482A, 0);
- sendMessage(_ssLadderArch, 0x482A, 0);
-}
-
-void KmScene1002::sub44A0D0() {
- _countdown1 = 1;
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x0013A206, 0, -1);
- SetUpdateHandler(&KmScene1002::update4497D0);
- SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(&KmScene1002::suFallDown);
- NextState(&KmScene1002::sub44A150);
+ NextState(&KmScene1002::stFalling);
sendMessage(_class599, 0x482A, 0);
sendMessage(_ssLadderArch, 0x482A, 0);
}
-void KmScene1002::sub44A150() {
- sendMessage(_parentScene, 0x1024, 1);
- _soundResource1.play(0x41648271);
- _status2 = 1;
- _acceptInput = false;
- _isWalking = false;
- startAnimationByHash(0x0013A206, 0x88003000, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage41D480);
- SetSpriteUpdate(NULL);
- NextState(&KmScene1002::sub44A230);
- sendMessage(_parentScene, 0x2002, 0);
- // TODO _callbackList = NULL;
- _attachedSprite = NULL;
- sendMessage(_class599, 0x482B, 0);
- sendMessage(_ssLadderArch, 0x482B, 0);
-}
-
-void KmScene1002::sub44A230() {
+void KmScene1002::stFallTouchdown() {
setDoDeltaX(2);
stTryStandIdle();
}
@@ -2818,7 +2786,7 @@ void KmScene1002::stJumpAndFall() {
_acceptInput = false;
startAnimation(0xB93AB151, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage449D60);
+ SetMessageHandler(&KmScene1002::hmJumpAndFall);
SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
@@ -2854,7 +2822,7 @@ void KmScene1002::stHitByBoxingGlove() {
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage449C90);
+ SetMessageHandler(&KmScene1002::hmHitByBoxingGlove);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
FinalizeState(&KmScene1002::stHitByBoxingGloveDone);
}
@@ -5865,13 +5833,13 @@ uint32 KmScene2803b::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToBackSmall);
break;
case 0x4830:
- GotoState(&KmScene2803b::sub460670);
+ GotoState(&KmScene2803b::stShrink);
break;
}
return 0;
}
-uint32 KmScene2803b::handleMessage460600(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2803b::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -5884,14 +5852,14 @@ uint32 KmScene2803b::handleMessage460600(int messageNum, const MessageParam &par
return messageResult;
}
-void KmScene2803b::sub460670() {
+void KmScene2803b::stShrink() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x1AE88904, 0, -1);
_soundResource1.play(0x4C69EA53);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene2803b::handleMessage460600);
+ SetMessageHandler(&KmScene2803b::hmShrink);
}
KmScene2805::KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -5940,16 +5908,16 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- sub404890();
+ stTeleporterAppear();
break;
case 0x483E:
- sub4048D0();
+ stTeleporterDisappear();
break;
}
return 0;
}
-uint32 KmScene2805::handleMessage404800(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2805::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -5962,21 +5930,21 @@ uint32 KmScene2805::handleMessage404800(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene2805::sub404890() {
+void KmScene2805::stTeleporterAppear() {
_status2 = 0;
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2805::handleMessage404800);
+ SetMessageHandler(&KmScene2805::hmTeleporterAppearDisappear);
startAnimation(0xDE284B74, 0, -1);
}
-void KmScene2805::sub4048D0() {
+void KmScene2805::stTeleporterDisappear() {
_status2 = 0;
_acceptInput = false;
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2805::handleMessage404800);
+ SetMessageHandler(&KmScene2805::hmTeleporterAppearDisappear);
startAnimation(0xD82A4094, 0, -1);
}
@@ -6126,10 +6094,10 @@ uint32 KmScene2806::hmGrow(int messageNum, const MessageParam ¶m, Entity *se
void KmScene2806::stGrow() {
_status2 = 0;
_acceptInput = false;
+ startAnimation(0x2838C010, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene2806::hmGrow);
- startAnimation(0x2838C010, 0, -1);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
void KmScene2806::stDrinkPotion() {
@@ -6137,10 +6105,10 @@ void KmScene2806::stDrinkPotion() {
_acceptInput = false;
_flag1 = false;
_flag2 = false;
+ startAnimation(0x1C388C04, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene2806::hmDrinkPotion);
- startAnimation(0x1C388C04, 0, -1);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
@@ -6189,11 +6157,11 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4831:
- GotoState(&KmScene2809::sub458550);
+ GotoState(&KmScene2809::stGrow);
break;
case 0x4832:
if (param.asInteger() == 1) {
- GotoState(&KmScene2809::sub458590);
+ GotoState(&KmScene2809::stDrinkPotion);
} else {
GotoState(&Klayman::stUseTube);
}
@@ -6202,7 +6170,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene2809::handleMessage457FC0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2809::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
@@ -6254,7 +6222,7 @@ uint32 KmScene2809::handleMessage457FC0(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 KmScene2809::handleMessage458340(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2809::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -6287,23 +6255,23 @@ uint32 KmScene2809::handleMessage458340(int messageNum, const MessageParam ¶
return messageResult;
}
-void KmScene2809::sub458550() {
+void KmScene2809::stGrow() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x2838C010, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2809::handleMessage458340);
+ SetMessageHandler(&KmScene2809::hmGrow);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
-void KmScene2809::sub458590() {
+void KmScene2809::stDrinkPotion() {
_status2 = 1;
_acceptInput = false;
_flag1 = false;
_flag2 = false;
startAnimation(0x1C388C04, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2809::handleMessage457FC0);
+ SetMessageHandler(&KmScene2809::hmDrinkPotion);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 25e6d38..787ad7e 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -311,23 +311,21 @@ protected:
int _status;
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void update4497D0();
+ void upSpitOutFall();
uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage449C90(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage449D60(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender);
void suFallDown();
void stJumpToRingVenusFlyTrap();
void stStandIdleSpecial();
- void sub449EF0();
- void sub449F70();
- void stSpitOutFall();
- void sub44A0D0();
- void sub44A150();
- void sub44A230();
+ void stSpitOutFall0();
+ void stFalling();
+ void stSpitOutFall2();
+ void stFallTouchdown();
void stJumpAndFall();
void stDropFromRing();
void stPressDoorButton();
@@ -650,8 +648,8 @@ public:
protected:
SoundResource _soundResource;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage460600(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub460670();
+ uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stShrink();
};
class KmScene2805 : public Klayman {
@@ -660,9 +658,9 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage404800(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub404890();
- void sub4048D0();
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stTeleporterAppear();
+ void stTeleporterDisappear();
};
class KmScene2806 : public Klayman {
@@ -697,10 +695,10 @@ protected:
bool _flag1;
bool _flag2;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage457FC0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage458340(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub458550();
- void sub458590();
+ uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stGrow();
+ void stDrinkPotion();
};
class KmScene2810Small : public Klayman {
Commit: d1927ef8e6e0ebcc02400e97fa8f2055fc86983e
https://github.com/scummvm/scummvm/commit/d1927ef8e6e0ebcc02400e97fa8f2055fc86983e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:43-07:00
Commit Message:
NEVERHOOD: Move Klayman teleporter appear/disappear animation code from the several subclasses to the base Klayman class; the code was equal except for the animation hashes
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 6ce39a7..2954852 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2310,6 +2310,38 @@ void Klayman::stIdleTeleporterHands2() {
NextState(&Klayman::stIdleSitBlinkSecond);
}
+void Klayman::teleporterAppear(uint32 fileHash) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(fileHash, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmTeleporterAppearDisappear);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::teleporterDisappear(uint32 fileHash) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(fileHash, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmTeleporterAppearDisappear);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ _soundResource1.play(0x85B10BB8);
+ } else if (param.asInteger() == 0x4E6A0CA0) {
+ _soundResource1.play(0xC5B709B0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
//##############################################################################
// KmScene1001
@@ -3004,47 +3036,15 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- stTeleporterAppear();
+ teleporterAppear(0x2C2A4A1C);
break;
case 0x483E:
- stTeleporterDisappear();
+ teleporterDisappear(0x3C2E4245);
break;
}
return 0;
}
-uint32 KmScene1109::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24) {
- _soundResource1.play(0x85B10BB8);
- } else if (param.asInteger() == 0x4E6A0CA0) {
- _soundResource1.play(0xC5B709B0);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1109::stTeleporterAppear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2C2A4A1C, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1109::hmTeleporterAppearDisappear);
-}
-
-void KmScene1109::stTeleporterDisappear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x3C2E4245, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1109::hmTeleporterAppearDisappear);
-}
-
// KmScene1201
KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
@@ -3540,10 +3540,10 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- stTeleporterAppear();
+ teleporterAppear(0xEE084A04);
break;
case 0x483E:
- stTeleporterDisappear();
+ teleporterDisappear(0xB86A4274);
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -3555,37 +3555,6 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-void KmScene1306::stTeleporterAppear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xEE084A04, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1306::hmTeleporterAppearDisappear);
-}
-
-void KmScene1306::stTeleporterDisappear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xB86A4274, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1306::hmTeleporterAppearDisappear);
-}
-
-uint32 KmScene1306::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24) {
- _soundResource1.play(0x85B10BB8);
- } else if (param.asInteger() == 0x4E6A0CA0) {
- _soundResource1.play(0xC5B709B0);
- }
- }
- return messageResult;
-}
-
KmScene1308::KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
@@ -4154,29 +4123,15 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- stTeleporterAppear();
+ teleporterAppear(0x5E0A4905);
break;
case 0x483E:
- stTeleporterDisappear();
+ teleporterDisappear(0xD86E4477);
break;
}
return messageResult;
}
-uint32 KmScene1705::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24) {
- _soundResource1.play(0x85B10BB8);
- } else if (param.asInteger() == 0x4E6A0CA0) {
- _soundResource1.play(0xC5B709B0);
- }
- break;
- }
- return messageResult;
-}
-
void KmScene1705::suFallSkipJump() {
updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
@@ -4197,24 +4152,6 @@ void KmScene1705::stFallSkipJump() {
NextState(&Klayman::stLandOnFeet);
}
-void KmScene1705::stTeleporterAppear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x5E0A4905, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1705::hmTeleporterAppearDisappear);
-}
-
-void KmScene1705::stTeleporterDisappear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xD86E4477, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1705::hmTeleporterAppearDisappear);
-}
-
KmScene1901::KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -4309,47 +4246,15 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- stTeleporterAppear();
+ teleporterAppear(0xBE68CC54);
break;
case 0x483E:
- stTeleporterDisappear();
+ teleporterDisappear(0x18AB4ED4);
break;
}
return 0;
}
-uint32 KmScene2001::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24) {
- _soundResource1.play(0x85B10BB8);
- } if (param.asInteger() == 0x4E6A0CA0) {
- _soundResource1.play(0xC5B709B0);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene2001::stTeleporterAppear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xBE68CC54, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2001::hmTeleporterAppearDisappear);
-}
-
-void KmScene2001::stTeleporterDisappear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x18AB4ED4, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2001::hmTeleporterAppearDisappear);
-}
-
KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
@@ -4427,10 +4332,10 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- stTeleporterAppear();
+ teleporterAppear(0xFF290E30);
break;
case 0x483E:
- stTeleporterDisappear();
+ teleporterDisappear(0x9A28CA1C);
break;
}
return messageResult;
@@ -4459,20 +4364,6 @@ uint32 KmScene2101::hmHitByDoor(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-uint32 KmScene2101::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24) {
- _soundResource1.play(0x85B10BB8);
- } else if (param.asInteger() == 0x4E6A0CA0) {
- _soundResource1.play(0xC5B709B0);
- }
- break;
- }
- return messageResult;
-}
-
void KmScene2101::stHitByDoor() {
_status2 = 1;
_acceptInput = false;
@@ -4483,24 +4374,6 @@ void KmScene2101::stHitByDoor() {
_soundResource1.play(0x402E82D4);
}
-void KmScene2101::stTeleporterAppear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xFF290E30, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2101::hmTeleporterAppearDisappear);
-}
-
-void KmScene2101::stTeleporterDisappear() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x9A28CA1C, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2101::hmTeleporterAppearDisappear);
-}
-
KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
// TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -5277,7 +5150,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-uint32 KmScene2401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 KmScene2401::hmSpit(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -5312,7 +5185,7 @@ void KmScene2401::stTrySpitIntoPipe() {
_contSpit = false;
startAnimation(0x1808B150, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::handleMessage);
+ SetMessageHandler(&KmScene2401::hmSpit);
SetSpriteUpdate(NULL);
}
}
@@ -5324,7 +5197,7 @@ void KmScene2401::spitIntoPipe() {
_acceptInput = false;
startAnimation(0x1B08B553, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::handleMessage);
+ SetMessageHandler(&KmScene2401::hmSpit);
SetSpriteUpdate(NULL);
NextState(&KmScene2401::stContSpitIntoPipe);
}
@@ -5334,7 +5207,7 @@ void KmScene2401::stContSpitIntoPipe() {
_acceptInput = true;
startAnimationByHash(0x1808B150, 0x16401CA6, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::handleMessage);
+ SetMessageHandler(&KmScene2401::hmSpit);
SetSpriteUpdate(NULL);
}
@@ -5908,46 +5781,15 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stGetUpFromTeleporter);
break;
case 0x483D:
- stTeleporterAppear();
+ teleporterAppear(0xDE284B74);
break;
case 0x483E:
- stTeleporterDisappear();
+ teleporterDisappear(0xD82A4094);
break;
}
return 0;
}
-uint32 KmScene2805::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24)
- _soundResource1.play(0x85B10BB8);
- else if (param.asInteger() == 0x4E6A0CA0)
- _soundResource1.play(0xC5B709B0);
- break;
- }
- return messageResult;
-}
-
-void KmScene2805::stTeleporterAppear() {
- _status2 = 0;
- _acceptInput = false;
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2805::hmTeleporterAppearDisappear);
- startAnimation(0xDE284B74, 0, -1);
-}
-
-void KmScene2805::stTeleporterDisappear() {
- _status2 = 0;
- _acceptInput = false;
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene2805::hmTeleporterAppearDisappear);
- startAnimation(0xD82A4094, 0, -1);
-}
-
KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000),
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 787ad7e..600cdbf 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -178,6 +178,10 @@ public:
void stDoIdleTeleporterHands2();
void stIdleTeleporterHands2();
+ void teleporterAppear(uint32 fileHash);
+ void teleporterDisappear(uint32 fileHash);
+ uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
@@ -351,7 +355,6 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
void stTeleporterAppear();
void stTeleporterDisappear();
};
@@ -410,7 +413,6 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
void stTeleporterAppear();
void stTeleporterDisappear();
};
@@ -467,7 +469,6 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
void suFallSkipJump();
void stFallSkipJump();
void stTeleporterAppear();
@@ -487,7 +488,6 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
void stTeleporterAppear();
void stTeleporterDisappear();
};
@@ -499,7 +499,6 @@ protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
void stHitByDoor();
void stTeleporterAppear();
void stTeleporterDisappear();
@@ -592,7 +591,7 @@ protected:
uint32 _spitDestPipeIndex;
uint32 _spitContDestPipeIndex;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender);
void stTrySpitIntoPipe();
void spitIntoPipe();
void stContSpitIntoPipe();
@@ -658,7 +657,6 @@ public:
protected:
bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
void stTeleporterAppear();
void stTeleporterDisappear();
};
Commit: e1943c1e2bd83bad9dfb55a54a365d2d54e0ec06
https://github.com/scummvm/scummvm/commit/e1943c1e2bd83bad9dfb55a54a365d2d54e0ec06
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Move more into the Klayman base class
- Fix header from previous commit
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 2954852..da3004d 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -56,11 +56,11 @@ static const KlaymanIdleTableItem klaymanTable4[] = {
// Klayman
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
- : AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm),
+ : AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
_idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0), _isWalkingOpenDoorNotified(false), _countdown1(0),
_tapesToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
_status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _flagF6(false), _isLeverDown(false),
- _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
+ _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -2342,6 +2342,41 @@ uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam &
return messageResult;
}
+uint32 Klayman::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5)
+ sendMessage(_parentScene, 0x482A, 0);
+ else if (param.asInteger() == 0x33288344)
+ _soundResource3.play(0x10688664);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stShrink() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x1AE88904, 0, -1);
+ _soundResource1.play(0x4C69EA53);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmShrink);
+}
+
+void Klayman::stStandWonderAbout() {
+ if (_x > 260)
+ setDoDeltaX(1);
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
+ _newStickFrameIndex = 10;
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteUpdate(NULL);
+}
+
//##############################################################################
// KmScene1001
@@ -2982,7 +3017,7 @@ void KmScene1004::stReadNote() {
}
KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -3019,7 +3054,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_isSittingInTeleporter)//CHECKME
+ if (_isSittingInTeleporter)
GotoState(&Klayman::stReturnFromUseInTeleporter);
break;
case 0x4834:
@@ -3432,7 +3467,6 @@ void KmScene1305::cbCrashDownEvent() {
KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- _isSittingInTeleporter = false;
}
uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3951,7 +3985,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1608::KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
}
uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4040,7 +4074,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1705
KmScene1705::KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -4192,7 +4226,7 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -4256,7 +4290,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5155,11 +5189,11 @@ uint32 KmScene2401::hmSpit(int messageNum, const MessageParam ¶m, Entity *se
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x16401CA6) {
- _canSpit = true;
- if (_contSpit)
+ _canSpitPipe = true;
+ if (_contSpitPipe)
spitIntoPipe();
} else if (param.asInteger() == 0xC11C0008) {
- _canSpit = false;
+ _canSpitPipe = false;
_acceptInput = false;
_readyToSpit = false;
} else if (param.asInteger() == 0x018A0001) {
@@ -5172,17 +5206,17 @@ uint32 KmScene2401::hmSpit(int messageNum, const MessageParam ¶m, Entity *se
void KmScene2401::stTrySpitIntoPipe() {
if (_readyToSpit) {
- _contSpit = true;
+ _contSpitPipe = true;
_spitContDestPipeIndex = _spitPipeIndex;
- if (_canSpit)
+ if (_canSpitPipe)
spitIntoPipe();
} else if (!stStartAction(AnimationCallback(&KmScene2401::stTrySpitIntoPipe))) {
_status2 = 2;
_acceptInput = true;
_spitDestPipeIndex = _spitPipeIndex;
_readyToSpit = true;
- _canSpit = false;
- _contSpit = false;
+ _canSpitPipe = false;
+ _contSpitPipe = false;
startAnimation(0x1808B150, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene2401::hmSpit);
@@ -5191,9 +5225,9 @@ void KmScene2401::stTrySpitIntoPipe() {
}
void KmScene2401::spitIntoPipe() {
- _contSpit = false;
+ _contSpitPipe = false;
_spitDestPipeIndex = _spitContDestPipeIndex;
- _canSpit = false;
+ _canSpitPipe = false;
_acceptInput = false;
startAnimation(0x1B08B553, 0, -1);
SetUpdateHandler(&Klayman::update);
@@ -5203,7 +5237,7 @@ void KmScene2401::spitIntoPipe() {
}
void KmScene2401::stContSpitIntoPipe() {
- _canSpit = true;
+ _canSpitPipe = true;
_acceptInput = true;
startAnimationByHash(0x1808B150, 0x16401CA6, 0);
SetUpdateHandler(&Klayman::update);
@@ -5225,7 +5259,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4004:
if (!getGlobalVar(0x92603A79))
- GotoState(&KmScene2402::stStandWonderAbout);
+ GotoState(&Klayman::stStandWonderAbout);
else
GotoState(&Klayman::stTryStandIdle);
break;
@@ -5283,18 +5317,6 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-void KmScene2402::stStandWonderAbout() {
- if (_x > 260)
- setDoDeltaX(1);
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xD820A114, 0, -1);
- _newStickFrameIndex = 10;
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteUpdate(NULL);
-}
-
KmScene2403::KmScene2403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5473,7 +5495,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2501::KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5659,10 +5681,9 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2803b::KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _soundResource(vm) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
_dataResource.load(0x81120132);
- _soundResource.load(0x10688664);
}
uint32 KmScene2803b::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5706,37 +5727,14 @@ uint32 KmScene2803b::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTurnToBackSmall);
break;
case 0x4830:
- GotoState(&KmScene2803b::stShrink);
+ GotoState(&Klayman::stShrink);
break;
}
return 0;
}
-uint32 KmScene2803b::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x80C110B5)
- sendMessage(_parentScene, 0x482A, 0);
- else if (param.asInteger() == 0x33288344)
- _soundResource.play();
- break;
- }
- return messageResult;
-}
-
-void KmScene2803b::stShrink() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x1AE88904, 0, -1);
- _soundResource1.play(0x4C69EA53);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene2803b::hmShrink);
-}
-
KmScene2805::KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _isSittingInTeleporter(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5854,23 +5852,23 @@ uint32 KmScene2806::hmDrinkPotion(int messageNum, const MessageParam ¶m, Ent
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
- if (_flag1) {
+ if (_potionFlag1) {
startAnimationByHash(0x1C388C04, 0x004A2148, 0);
messageResult = 0;
} else
- _flag2 = true;
+ _potionFlag2 = true;
break;
case 0x100D:
if (param.asInteger() == 0x0002418E)
sendMessage(_parentScene, 0x2000, 0);
else if (param.asInteger() == 0x924090C2) {
- _flag1 = true;
- if (_flag2) {
+ _potionFlag1 = true;
+ if (_potionFlag2) {
startAnimationByHash(0x1C388C04, 0x004A2148, 0);
messageResult = 0;
}
} else if (param.asInteger() == 0x004A2148)
- _flag1 = false;
+ _potionFlag1 = false;
else if (param.asInteger() == 0x02B20220)
_soundResource1.play(0xC5408620);
else if (param.asInteger() == 0x0A720138)
@@ -5945,8 +5943,8 @@ void KmScene2806::stGrow() {
void KmScene2806::stDrinkPotion() {
_status2 = 1;
_acceptInput = false;
- _flag1 = false;
- _flag2 = false;
+ _potionFlag1 = false;
+ _potionFlag2 = false;
startAnimation(0x1C388C04, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene2806::hmDrinkPotion);
@@ -6016,23 +6014,23 @@ uint32 KmScene2809::hmDrinkPotion(int messageNum, const MessageParam ¶m, Ent
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
- if (_flag1) {
+ if (_potionFlag1) {
startAnimationByHash(0x1C388C04, 0x004A2148, 0);
messageResult = 0;
} else
- _flag2 = true;
+ _potionFlag2 = true;
break;
case 0x100D:
if (param.asInteger() == 0x0002418E)
sendMessage(_parentScene, 0x2000, 0);
else if (param.asInteger() == 0x924090C2) {
- _flag1 = true;
- if (_flag2) {
+ _potionFlag1 = true;
+ if (_potionFlag2) {
startAnimationByHash(0x1C388C04, 0x004A2148, 0);
messageResult = 0;
}
} else if (param.asInteger() == 0x004A2148)
- _flag1 = false;
+ _potionFlag1 = false;
else if (param.asInteger() == 0x02B20220)
_soundResource1.play(0xC5408620);
else if (param.asInteger() == 0x0A720138)
@@ -6109,15 +6107,14 @@ void KmScene2809::stGrow() {
void KmScene2809::stDrinkPotion() {
_status2 = 1;
_acceptInput = false;
- _flag1 = false;
- _flag2 = false;
+ _potionFlag1 = false;
+ _potionFlag2 = false;
startAnimation(0x1C388C04, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&KmScene2809::hmDrinkPotion);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
-
KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 600cdbf..b32143d 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -178,10 +178,15 @@ public:
void stDoIdleTeleporterHands2();
void stIdleTeleporterHands2();
- void teleporterAppear(uint32 fileHash);
- void teleporterDisappear(uint32 fileHash);
+ void teleporterAppear(uint32 fileHash);
+ void teleporterDisappear(uint32 fileHash);
uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stShrink();
+
+ void stStandWonderAbout();
+
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
@@ -203,12 +208,16 @@ protected:
bool _flagFA;
SoundResource _soundResource1;
SoundResource _soundResource2;
+ SoundResource _soundResource3;
int _status3;
const KlaymanIdleTableItem *_idleTable;
int _idleTableCount;
int _idleTableMaxValue;
NPointArray *_pathPoints;
bool _soundFlag;
+
+ bool _isSittingInTeleporter;
+
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -353,10 +362,7 @@ class KmScene1109 : public Klayman {
public:
KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stTeleporterAppear();
- void stTeleporterDisappear();
};
class KmScene1201 : public Klayman {
@@ -411,10 +417,7 @@ class KmScene1306 : public Klayman {
public:
KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stTeleporterAppear();
- void stTeleporterDisappear();
};
class KmScene1308 : public Klayman {
@@ -459,7 +462,6 @@ class KmScene1608 : public Klayman {
public:
KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
@@ -467,12 +469,9 @@ class KmScene1705 : public Klayman {
public:
KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void suFallSkipJump();
void stFallSkipJump();
- void stTeleporterAppear();
- void stTeleporterDisappear();
};
class KmScene1901 : public Klayman {
@@ -486,22 +485,16 @@ class KmScene2001 : public Klayman {
public:
KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stTeleporterAppear();
- void stTeleporterDisappear();
};
class KmScene2101 : public Klayman {
public:
KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
void stHitByDoor();
- void stTeleporterAppear();
- void stTeleporterDisappear();
};
class KmScene2201 : public Klayman {
@@ -584,8 +577,8 @@ class KmScene2401 : public Klayman {
public:
KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _canSpit;
- bool _contSpit;
+ bool _canSpitPipe;
+ bool _contSpitPipe;
bool _readyToSpit;
uint32 _spitPipeIndex;
uint32 _spitDestPipeIndex;
@@ -602,7 +595,6 @@ public:
KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stStandWonderAbout();
};
class KmScene2403 : public Klayman {
@@ -623,7 +615,6 @@ class KmScene2501 : public Klayman {
public:
KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
@@ -645,20 +636,14 @@ class KmScene2803b : public Klayman {
public:
KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- SoundResource _soundResource;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender);
- void stShrink();
};
class KmScene2805 : public Klayman {
public:
KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _isSittingInTeleporter;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stTeleporterAppear();
- void stTeleporterDisappear();
};
class KmScene2806 : public Klayman {
@@ -671,8 +656,8 @@ protected:
SoundResource _soundRes3;
SoundResource _soundRes4;
SoundResource _soundRes5;
- bool _flag1;
- bool _flag2;
+ bool _potionFlag1;
+ bool _potionFlag2;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -690,8 +675,8 @@ protected:
SoundResource _soundRes3;
SoundResource _soundRes4;
SoundResource _soundRes5;
- bool _flag1;
- bool _flag2;
+ bool _potionFlag1;
+ bool _potionFlag2;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 6160ee3cf2f0cb93807ea115b94601b11d5543c4
https://github.com/scummvm/scummvm/commit/6160ee3cf2f0cb93807ea115b94601b11d5543c4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Move code from entity.h to new entity.cpp
Changed paths:
A engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/module.mk
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
new file mode 100644
index 0000000..e837225
--- /dev/null
+++ b/engines/neverhood/entity.cpp
@@ -0,0 +1,115 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/entity.h"
+
+namespace Neverhood {
+
+uint32 MessageParam::asInteger() const {
+ assert(_type == mptInteger);
+ return _integer;
+}
+
+NPoint MessageParam::asPoint() const {
+ assert(_type == mptInteger || _type == mptPoint);
+ if (_type == mptInteger) {
+ NPoint pt;
+ pt.x = _integer & 0xFFFF;
+ pt.y = (_integer >> 16) & 0xFFFF;
+ return pt;
+ }
+ return _point;
+}
+
+Entity *MessageParam::asEntity() const {
+ assert(_type == mptEntity);
+ return _entity;
+}
+
+// TODO: Disable heavy debug stuff in release mode
+
+#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); debug(2, "SetUpdateHandler(" #handler ")"); _updateHandlerCbName = #handler
+#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
+
+Entity::Entity(NeverhoodEngine *vm, int priority)
+ : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _name("Entity") {
+}
+
+Entity::~Entity() {
+}
+
+void Entity::draw() {
+}
+
+void Entity::handleUpdate() {
+ //debug("Entity(%s).handleUpdate", _name.c_str());
+ debug(2, "handleUpdate() -> [%s]", _updateHandlerCbName.c_str());
+ if (_updateHandlerCb)
+ (this->*_updateHandlerCb)();
+}
+
+uint32 Entity::receiveMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ debug(2, "receiveMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
+ return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
+}
+
+uint32 Entity::sendMessage(Entity *receiver, int messageNum, const MessageParam ¶m) {
+ return receiver ? receiver->receiveMessage(messageNum, param, this) : 0;
+}
+
+uint32 Entity::sendMessage(Entity *receiver, int messageNum, uint32 param) {
+ return sendMessage(receiver, messageNum, MessageParam(param));
+}
+
+uint32 Entity::sendPointMessage(Entity *receiver, int messageNum, const NPoint ¶m) {
+ return sendMessage(receiver, messageNum, MessageParam(param));
+}
+
+uint32 Entity::sendEntityMessage(Entity *receiver, int messageNum, Entity *param) {
+ return sendMessage(receiver, messageNum, MessageParam((Entity*)param));
+}
+
+uint32 Entity::getGlobalVar(uint32 nameHash) {
+ return _vm->_gameVars->getGlobalVar(nameHash);
+}
+
+void Entity::setGlobalVar(uint32 nameHash, uint32 value) {
+ _vm->_gameVars->setGlobalVar(nameHash, value);
+}
+
+uint32 Entity::getSubVar(uint32 nameHash, uint32 subNameHash) {
+ return _vm->_gameVars->getSubVar(nameHash, subNameHash);
+}
+
+void Entity::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
+ _vm->_gameVars->setSubVar(nameHash, subNameHash, value);
+}
+
+void Entity::incGlobalVar(uint32 nameHash, int incrValue) {
+ setGlobalVar(nameHash, getGlobalVar(nameHash) + incrValue);
+}
+
+void Entity::incSubVar(uint32 nameHash, uint32 subNameHash, int incrValue) {
+ setSubVar(nameHash, subNameHash, getSubVar(nameHash, subNameHash) + incrValue);
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 22eb780..0f96eba 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -44,24 +44,9 @@ public:
MessageParam(uint32 value) : _type(mptInteger), _integer(value) {}
MessageParam(NPoint value) : _type(mptPoint), _point(value) {}
MessageParam(Entity *entity) : _type(mptEntity), _entity(entity) {}
- uint32 asInteger() const {
- assert(_type == mptInteger);
- return _integer;
- }
- NPoint asPoint() const {
- assert(_type == mptInteger || _type == mptPoint);
- if (_type == mptInteger) {
- NPoint pt;
- pt.x = _integer & 0xFFFF;
- pt.y = (_integer >> 16) & 0xFFFF;
- return pt;
- }
- return _point;
- }
- Entity *asEntity() const {
- assert(_type == mptEntity);
- return _entity;
- }
+ uint32 asInteger() const;
+ NPoint asPoint() const;
+ Entity *asEntity() const;
protected:
union {
uint32 _integer;
@@ -75,66 +60,41 @@ protected:
// TODO: Disable heavy debug stuff in release mode
-#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); debug(2, "SetUpdateHandler(" #handler ")"); _updateHandlerCbName = #handler
-#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
+#define SetUpdateHandler(handler) \
+ _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); \
+ debug(2, "SetUpdateHandler(" #handler ")"); \
+ _updateHandlerCbName = #handler
+
+#define SetMessageHandler(handler) \
+ _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); \
+ debug(2, "SetMessageHandler(" #handler ")"); \
+ _messageHandlerCbName = #handler
class Entity {
public:
Common::String _name; // Entity name for debugging purposes
Common::String _updateHandlerCbName;
Common::String _messageHandlerCbName;
- Entity(NeverhoodEngine *vm, int priority)
- : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _name("Entity") {
- }
- virtual ~Entity() {
- }
- virtual void draw() {
- }
- void handleUpdate() {
- //debug("Entity(%s).handleUpdate", _name.c_str());
- debug(2, "handleUpdate() -> [%s]", _updateHandlerCbName.c_str());
- if (_updateHandlerCb)
- (this->*_updateHandlerCb)();
- }
- bool hasMessageHandler() const { return _messageHandlerCb != NULL; }
- uint32 receiveMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug(2, "receiveMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
- return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
- }
+ Entity(NeverhoodEngine *vm, int priority);
+ virtual ~Entity();
+ virtual void draw();
+ void handleUpdate();
+ uint32 receiveMessage(int messageNum, const MessageParam ¶m, Entity *sender);
// NOTE: These were overloaded before for the various message parameter types
// it caused some problems so each type gets its own sendMessage variant now
- uint32 sendMessage(Entity *receiver, int messageNum, const MessageParam ¶m) {
- return receiver ? receiver->receiveMessage(messageNum, param, this) : 0;
- }
- uint32 sendMessage(Entity *receiver, int messageNum, uint32 param) {
- return sendMessage(receiver, messageNum, MessageParam(param));
- }
- uint32 sendPointMessage(Entity *receiver, int messageNum, const NPoint ¶m) {
- return sendMessage(receiver, messageNum, MessageParam(param));
- }
- uint32 sendEntityMessage(Entity *receiver, int messageNum, Entity *param) {
- return sendMessage(receiver, messageNum, MessageParam((Entity*)param));
- }
- int getPriority() const { return _priority; }
+ uint32 sendMessage(Entity *receiver, int messageNum, const MessageParam ¶m);
+ uint32 sendMessage(Entity *receiver, int messageNum, uint32 param);
+ uint32 sendPointMessage(Entity *receiver, int messageNum, const NPoint ¶m);
+ uint32 sendEntityMessage(Entity *receiver, int messageNum, Entity *param);
// Shortcuts for game variable access
- uint32 getGlobalVar(uint32 nameHash) {
- return _vm->_gameVars->getGlobalVar(nameHash);
- }
- void setGlobalVar(uint32 nameHash, uint32 value) {
- _vm->_gameVars->setGlobalVar(nameHash, value);
- }
- uint32 getSubVar(uint32 nameHash, uint32 subNameHash) {
- return _vm->_gameVars->getSubVar(nameHash, subNameHash);
- }
- void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
- _vm->_gameVars->setSubVar(nameHash, subNameHash, value);
- }
- void incGlobalVar(uint32 nameHash, int incrValue) {
- setGlobalVar(nameHash, getGlobalVar(nameHash) + incrValue);
- }
- void incSubVar(uint32 nameHash, uint32 subNameHash, int incrValue) {
- setSubVar(nameHash, subNameHash, getSubVar(nameHash, subNameHash) + incrValue);
- }
+ uint32 getGlobalVar(uint32 nameHash);
+ void setGlobalVar(uint32 nameHash, uint32 value);
+ uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
+ void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value);
+ void incGlobalVar(uint32 nameHash, int incrValue);
+ void incSubVar(uint32 nameHash, uint32 subNameHash, int incrValue);
+ int getPriority() const { return _priority; }
+ bool hasMessageHandler() const { return _messageHandlerCb != NULL; }
protected:
void (Entity::*_updateHandlerCb)();
uint32 (Entity::*_messageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index f9f349b..2ee28d2 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -6,6 +6,7 @@ MODULE_OBJS = \
collisionman.o \
detection.o \
diskplayerscene.o \
+ entity.o \
gamemodule.o \
gamevars.o \
graphics.o \
Commit: 0f04a013380c07f76ca68a14917cd6bce607184e
https://github.com/scummvm/scummvm/commit/0f04a013380c07f76ca68a14917cd6bce607184e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound playing
Sounds can now be loaded/played by an entity without declaring/initializing a SoundResource which is a little nicer. I implemented this so far for Module1000 only, rest will follow.
Changed paths:
engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index e837225..f78d4cf 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/entity.h"
+#include "neverhood/sound.h"
namespace Neverhood {
@@ -51,10 +52,12 @@ Entity *MessageParam::asEntity() const {
#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
Entity::Entity(NeverhoodEngine *vm, int priority)
- : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _name("Entity") {
+ : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _soundResources(NULL),
+ _name("Entity") {
}
Entity::~Entity() {
+ deleteSoundResources();
}
void Entity::draw() {
@@ -112,4 +115,35 @@ void Entity::incSubVar(uint32 nameHash, uint32 subNameHash, int incrValue) {
setSubVar(nameHash, subNameHash, getSubVar(nameHash, subNameHash) + incrValue);
}
+SoundResource *Entity::getSoundResource(uint index) {
+ assert(index < kMaxSoundResources);
+ if (!_soundResources) {
+ _soundResources = new SoundResource*[kMaxSoundResources];
+ for (uint i = 0; i < kMaxSoundResources; ++i)
+ _soundResources[i] = NULL;
+ }
+ if (!_soundResources[index])
+ _soundResources[index] = new SoundResource(_vm);
+ return _soundResources[index];
+}
+
+void Entity::loadSound(uint index, uint32 fileHash) {
+ getSoundResource(index)->load(fileHash);
+}
+
+void Entity::playSound(uint index, uint32 fileHash) {
+ if (fileHash)
+ getSoundResource(index)->play(fileHash);
+ else
+ getSoundResource(index)->play();
+}
+
+void Entity::deleteSoundResources() {
+ if (_soundResources) {
+ for (uint i = 0; i < kMaxSoundResources; ++i)
+ delete _soundResources[i];
+ delete[] _soundResources;
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 0f96eba..f222437 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -32,6 +32,7 @@
namespace Neverhood {
class Entity;
+class SoundResource;
enum MessageParamType {
mptInteger,
@@ -70,6 +71,8 @@ protected:
debug(2, "SetMessageHandler(" #handler ")"); \
_messageHandlerCbName = #handler
+const uint kMaxSoundResources = 16;
+
class Entity {
public:
Common::String _name; // Entity name for debugging purposes
@@ -100,6 +103,12 @@ protected:
uint32 (Entity::*_messageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
NeverhoodEngine *_vm;
int _priority;
+ SoundResource **_soundResources;
+ SoundResource *getSoundResource(uint index);
+ // TODO Add other sound stuff
+ void loadSound(uint index, uint32 fileHash);
+ void playSound(uint index, uint32 fileHash = 0);
+ void deleteSoundResources();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 2db598b..f4932c0 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -115,13 +115,13 @@ void Module1000::updateScene() {
// Scene1001
AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm) {
+ : AnimatedSprite(vm, 1100) {
createSurface(800, 137, 242);
_x = 726;
_y = 440;
stShowIdleDoor();
- _soundResource2.load(0xED403E03);
+ loadSound(1, 0xED403E03);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1001Door::handleMessage);
}
@@ -143,12 +143,12 @@ void AsScene1001Door::hammerHitsDoor() {
switch (getGlobalVar(0x52371C95)) {
case 0:
case 1:
- _soundResource1.play(0x65482F03);
+ playSound(0, 0x65482F03);
startAnimation(0x624C0498, 1, 3);
NextState(&AsScene1001Door::stShowIdleDoor);
break;
case 2:
- _soundResource2.play();
+ playSound(1);
startAnimation(0x624C0498, 6, 6);
NextState(&AsScene1001Door::stBustedDoorMove);
break;
@@ -188,13 +188,13 @@ void AsScene1001Door::stBustedDoorMove() {
}
void AsScene1001Door::stBustedDoorGone() {
- _soundResource1.play();
+ playSound(0);
stopAnimation();
setVisible(false);
}
AsScene1001Hammer::AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _asDoor(asDoor) {
+ : AnimatedSprite(vm, 1100), _asDoor(asDoor) {
_x = 547;
_y = 206;
@@ -212,12 +212,12 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
if (param.asInteger() == 0x00352100) {
sendMessage(_asDoor, 0x2000, 0);
} else if (param.asInteger() == 0x0A1A0109) {
- _soundResource.play(0x66410886);
+ playSound(0, 0x66410886);
}
break;
case 0x2000:
startAnimation(0x022C90D4, 1, -1);
- _soundResource.play(0xE741020A);
+ playSound(0, 0xE741020A);
_newStickFrameIndex = -2;
break;
}
@@ -225,7 +225,7 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
}
AsScene1001Window::AsScene1001Window(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200), _soundResource(vm) {
+ : AnimatedSprite(vm, 1200) {
_x = 320;
_y = 240;
@@ -241,7 +241,7 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0E0A1410) {
- _soundResource.play(0x60803F10);
+ playSound(0, 0x60803F10);
}
break;
case 0x2001:
@@ -257,7 +257,7 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
}
AsScene1001Lever::AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
createSurface(1010, 71, 73);
setDoDeltaX(deltaXType);
@@ -276,7 +276,7 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
if (param.asInteger() == 0x00C0C444) {
sendMessage(_parentScene, 0x480F, 0);
} else if (param.asInteger() == 0xC41A02C0) {
- _soundResource.play(0x40581882);
+ playSound(0, 0x40581882);
}
break;
case 0x1011:
@@ -301,7 +301,7 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
}
SsCommonButtonSprite::SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, int surfacePriority, uint32 soundFileHash)
- : StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene), _soundResource(vm), _countdown(0) {
+ : StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene), _countdown(0) {
_priority = 1100;
_soundFileHash = soundFileHash ? soundFileHash : 0x44141000;
@@ -323,7 +323,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
sendMessage(_parentScene, 0x480B, 0);
setVisible(true);
_countdown = 8;
- _soundResource.play(_soundFileHash);
+ playSound(0, _soundFileHash);
break;
}
return messageResult;
@@ -497,7 +497,7 @@ uint32 Class599::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _flag1(flag1) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _flag1(flag1) {
SetUpdateHandler(&AsScene1002Ring::update);
@@ -628,7 +628,7 @@ uint32 AsScene1002Ring::hmRingReleased(int messageNum, const MessageParam ¶m
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x05410F72) {
- _soundResource.play(0x21EE40A9);
+ playSound(0, 0x21EE40A9);
}
break;
case 0x3002:
@@ -742,8 +742,7 @@ uint32 AsScene1002BoxingGloveHitEffect::handleMessage(int messageNum, const Mess
}
AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *asScene1002BoxingGloveHitEffect)
- : AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(asScene1002BoxingGloveHitEffect),
- _soundResource(vm) {
+ : AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(asScene1002BoxingGloveHitEffect) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
@@ -751,7 +750,7 @@ AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Sce
createSurface(800, 136, 147);
setClipRect(clipRect);
suDoorSpy();
- _soundResource.load(0xC0C40298);
+ loadSound(0, 0xC0C40298);
startAnimation(0x586C1D48, 0, 0);
}
@@ -762,7 +761,7 @@ uint32 AsScene1002DoorSpy::handleMessage(int messageNum, const MessageParam &par
if (param.asInteger() == 0xA61CA1C2) {
sendMessage(_asBoxingGloveHitEffect, 0x2004, 0);
} else if (param.asInteger() == 0x14CE0620) {
- _soundResource.play();
+ playSound(0);
}
break;
case 0x2003:
@@ -803,7 +802,7 @@ void AsScene1002DoorSpy::stDoorSpyBoxingGlove() {
}
Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
- : StaticSprite(vm, 1100), _parentScene(parentScene), _soundResource(vm), _status(0) {
+ : StaticSprite(vm, 1100), _parentScene(parentScene), _status(0) {
_soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
@@ -895,15 +894,14 @@ uint32 Class426::handleMessage(int messageNum, const MessageParam ¶m, Entity
_status = 1;
_countdown = 4;
setVisible(true);
- _soundResource.play(_soundFileHash);
+ playSound(0, _soundFileHash);
break;
}
return messageResult;
}
AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool flag)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _klayman(klayman),
- _flag(flag), _countdown(0) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _flag(flag), _countdown(0) {
createSurface(995, 175, 195);
@@ -956,9 +954,9 @@ uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x000890C4) {
- _soundResource.play(0xC21190D8);
+ playSound(0, 0xC21190D8);
} else if (param.asInteger() == 0x522200A0) {
- _soundResource.play(0x931080C8);
+ playSound(0, 0x931080C8);
}
break;
case 0x1011:
@@ -1036,7 +1034,7 @@ uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessagePara
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x000890C4) {
- _soundResource.play(0xC21190D8);
+ playSound(0, 0xC21190D8);
} else if (param.asInteger() == 0x41881801) {
if (_flag) {
if (_x > 330) {
@@ -1052,7 +1050,7 @@ uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessagePara
sendMessage(_klayman, 0x4811, 0);
}
} else if (param.asInteger() == 0x522200A0) {
- _soundResource.play(0x931080C8);
+ playSound(0, 0x931080C8);
}
break;
case 0x3002:
@@ -1309,8 +1307,7 @@ uint32 AsScene1002KlaymanPeekHand::handleMessage(int messageNum, const MessagePa
}
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _flag1B4(false), _flag1BE(false) {
+ : Scene(vm, parentModule, true), _flag1B4(false), _flag1BE(false) {
NRect tempClipRect;
Sprite *tempSprite;
@@ -1404,8 +1401,8 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B43A0);
- _soundResource2.load(0x60755842);
- _soundResource3.load(0x616D5821);
+ loadSound(1, 0x60755842);
+ loadSound(2, 0x616D5821);
}
@@ -1517,26 +1514,26 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
_flag1BE = true;
if (sender == _asRing1) {
setGlobalVar(0x4DE80AC0, 0);
- _soundResource1.play(0x665198C0);
+ playSound(0, 0x665198C0);
} else if (sender == _asRing2) {
setGlobalVar(0x4DE80AC0, 0);
- _soundResource1.play(0xE2D389C0);
+ playSound(0, 0xE2D389C0);
} else if (sender == _asRing3) {
setGlobalVar(0x4DE80AC0, 0);
- _soundResource2.play();
+ playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
} else if (sender == _asRing4) {
setGlobalVar(0x4DE80AC0, 0);
- _soundResource1.play(0xE0558848);
+ playSound(0, 0xE0558848);
} else if (sender == _asRing5) {
setGlobalVar(0x4DE80AC0, 1);
- _soundResource1.play(0x44014282);
+ playSound(0, 0x44014282);
}
break;
case 0x4807:
if (sender == _asRing3) {
- _soundResource3.play();
+ playSound(2);
sendMessage(_asDoor, 0x4809, 0);
sendMessage(_asOutsideDoorBackground, 0x4809, 0);
} else if (sender == _asVenusFlyTrap) {
@@ -1550,7 +1547,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480F:
setGlobalVar(0x4DE80AC0, 0);
- _soundResource2.play();
+ playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
break;
@@ -1586,7 +1583,7 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity
// Scene1004
AsScene1004TrashCan::AsScene1004TrashCan(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100), _soundResource(vm) {
+ : AnimatedSprite(vm, 1100) {
_x = 330;
_y = 327;
@@ -1601,7 +1598,7 @@ uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam &pa
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x225A8587) {
- _soundResource.play(0x109AFC4C);
+ playSound(0, 0x109AFC4C);
}
break;
case 0x2002:
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index b8fa636..60eb2fb 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -47,8 +47,6 @@ class AsScene1001Door : public AnimatedSprite {
public:
AsScene1001Door(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void hammerHitsDoor();
void stShowIdleDoor();
@@ -61,7 +59,6 @@ public:
AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor);
protected:
Sprite *_asDoor;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -69,7 +66,6 @@ class AsScene1001Window : public AnimatedSprite {
public:
AsScene1001Window(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -78,7 +74,6 @@ public:
AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -87,7 +82,6 @@ public:
SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, int surfacePriority, uint32 soundFileHash);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 _soundFileHash;
int16 _countdown;
void update();
@@ -140,7 +134,6 @@ public:
protected:
Scene *_parentScene;
bool _flag1;
- SoundResource _soundResource;
void update();
uint32 hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmRingPulled1(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -173,7 +166,6 @@ protected:
Scene *_parentScene;
Sprite *_asDoor;
Sprite *_asBoxingGloveHitEffect;
- SoundResource _soundResource;
NRect _clipRect;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmDoorSpyAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -191,7 +183,6 @@ protected:
int _countdown;
uint32 _fileHashes[2];
int _status;
- SoundResource _soundResource;
uint32 _soundFileHash;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -204,7 +195,6 @@ protected:
Scene *_parentScene;
Sprite *_klayman;
int _countdown;
- SoundResource _soundResource;
bool _flag;
void update();
void upIdle();
@@ -279,9 +269,6 @@ protected:
Sprite *_asKlaymanPeekHand;
Sprite *_asOutsideDoorBackground;
Sprite *_class426;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
bool _flag1B4;
bool _flag1BE;
bool _flag;
@@ -295,7 +282,6 @@ class AsScene1004TrashCan : public AnimatedSprite {
public:
AsScene1004TrashCan(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 7adc1d312e5d09c0566345d5264db7f4b2322f98
https://github.com/scummvm/scummvm/commit/7adc1d312e5d09c0566345d5264db7f4b2322f98
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1100
- Implement Entity::isSoundPlaying
Changed paths:
engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/module1100.cpp
engines/neverhood/module1100.h
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index f78d4cf..d7d7896 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -138,6 +138,10 @@ void Entity::playSound(uint index, uint32 fileHash) {
getSoundResource(index)->play();
}
+bool Entity::isSoundPlaying(uint index) {
+ return getSoundResource(index)->isPlaying();
+}
+
void Entity::deleteSoundResources() {
if (_soundResources) {
for (uint i = 0; i < kMaxSoundResources; ++i)
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index f222437..eafc467 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -108,6 +108,7 @@ protected:
// TODO Add other sound stuff
void loadSound(uint index, uint32 fileHash);
void playSound(uint index, uint32 fileHash = 0);
+ bool isSoundPlaying(uint index);
void deleteSoundResources();
};
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index e5cca26..257ee27 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -272,8 +272,7 @@ static const uint32 kSsScene1105SymbolDieFileHashes[] = {
};
SsScene1105Button::SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &rect)
- : StaticSprite(vm, fileHash, 200), _soundResource(vm), _parentScene(parentScene),
- _countdown(0) {
+ : StaticSprite(vm, fileHash, 200), _parentScene(parentScene), _countdown(0) {
_rect = rect;
SetMessageHandler(&SsScene1105Button::handleMessage);
@@ -300,7 +299,7 @@ uint32 SsScene1105Button::handleMessage(int messageNum, const MessageParam ¶
case 0x480B:
_countdown = 8;
setVisible(true);
- _soundResource.play(0x44141000);
+ playSound(0, 0x44141000);
break;
}
return messageResult;
@@ -356,8 +355,7 @@ void SsScene1105SymbolDie::hide() {
}
AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm),
- _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
// TODO createSurface3(100, dword_4AF4C0);
createSurface(100, 640, 480); //TODO: Remeove once the line above is done
@@ -370,8 +368,8 @@ AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentSce
setVisible(false);
_needRefresh = true;
updatePosition();
- _soundResource1.load(0xCE840261);
- _soundResource2.load(0xCCA41A62);
+ loadSound(0, 0xCE840261);
+ loadSound(1, 0xCCA41A62);
}
uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -380,10 +378,10 @@ uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam &p
case 0x2002:
if (getGlobalVar(0x610210B7)) {
startAnimation(0x6B0C0432, 0, -1);
- _soundResource1.play();
+ playSound(0);
} else {
startAnimation(0x65084002, 0, -1);
- _soundResource2.play();
+ playSound(1);
}
break;
case 0x3002:
@@ -407,8 +405,7 @@ void AsScene1105TeddyBear::hide() {
}
SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 900), _soundResource(vm), _parentScene(parentScene),
- _countdown(0), _flag1(false) {
+ : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _flag1(false) {
_spriteResource.load2(0x8228A46C);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -422,7 +419,7 @@ SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentS
_needRefresh = true;
processDelta();
setVisible(false);
- _soundResource.load(0x44045140);
+ loadSound(0, 0x44045140);
SetUpdateHandler(&SsScene1105OpenButton::update);
SetMessageHandler(&SsScene1105OpenButton::handleMessage);
}
@@ -441,7 +438,7 @@ uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam &
switch (messageNum) {
case 0x1011:
if (_countdown == 0 && !_flag1) {
- _soundResource.play();
+ playSound(0);
setVisible(true);
_flag1 = true;
_countdown = 4;
@@ -453,8 +450,7 @@ uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam &
}
Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _countdown(0), _flag1(false), _flag2(false), _flag3(false),
+ : Scene(vm, parentModule, true), _countdown(0), _flag1(false), _flag2(false), _flag3(false),
_flag4(false), _flag5(false), _backgroundIndex(0) {
Sprite *ssOpenButton;
@@ -473,9 +469,9 @@ Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(ssOpenButton);
insertMouse435(0x10006208, 20, 620);
- _soundResource1.load(0x48442057);
- _soundResource2.load(0xC025014F);
- _soundResource3.load(0x68E25540);
+ loadSound(0, 0x48442057);
+ loadSound(1, 0xC025014F);
+ loadSound(2, 0x68E25540);
}
@@ -514,7 +510,7 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
getSubVar(0x7500993A, 1) == getSubVar(0x61084036, 1) &&
getSubVar(0x7500993A, 2) == getSubVar(0x61084036, 2)) {
setGlobalVar(0x610210B7, 1);
- _soundResource3.play();
+ playSound(2);
_flag3 = true;
} else {
sendMessage(_asTeddyBear, 0x2002, 0);
@@ -617,7 +613,7 @@ void Scene1105::upOpenPanel() {
_palette->addPalette(backgroundFileHash, 0, 256, 0);
}
if (_backgroundIndex == 10) {
- _soundResource1.play();
+ playSound(0);
}
if (_backgroundIndex == 0) {
SetUpdateHandler(&Scene1105::update);
@@ -642,7 +638,7 @@ void Scene1105::upClosePanel() {
if (_backgroundIndex < 6 && _backgroundIndex % 2 == 0) {
uint32 backgroundFileHash = kScene1105BackgroundFileHashes[3 - _backgroundIndex / 2]; // CHECKME
if (_backgroundIndex == 4) {
- _soundResource2.play();
+ playSound(1);
_asTeddyBear->hide();
}
changeBackground(backgroundFileHash);
@@ -667,10 +663,10 @@ void Scene1105::update() {
if (_countdown != 0 && (--_countdown == 0)) {
createObjects();
}
- if (_flag4 && !_soundResource2.isPlaying()) {
+ if (_flag4 && !isSoundPlaying(1)) {
leaveScene(_flag5);
}
- if (_flag3 && !_soundResource3.isPlaying()) {
+ if (_flag3 && !isSoundPlaying(2)) {
sendMessage(_asTeddyBear, 0x2002, 0);
_flag3 = false;
}
diff --git a/engines/neverhood/module1100.h b/engines/neverhood/module1100.h
index c46c1df..98d1ae6 100644
--- a/engines/neverhood/module1100.h
+++ b/engines/neverhood/module1100.h
@@ -46,7 +46,6 @@ public:
SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &rect);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -75,8 +74,6 @@ public:
void hide();
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -85,7 +82,6 @@ public:
SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
int _countdown;
bool _flag1;
void update();
@@ -96,9 +92,6 @@ class Scene1105 : public Scene {
public:
Scene1105(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
int _countdown;
int _backgroundIndex;
bool _flag1;
Commit: fc359abd08c2553201f6965c23e9ee972a2514fc
https://github.com/scummvm/scummvm/commit/fc359abd08c2553201f6965c23e9ee972a2514fc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1200
Changed paths:
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 33b791a..d6ca51b 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -220,7 +220,7 @@ uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m,
}
Class466::Class466(NeverhoodEngine *vm, bool flag)
- : AnimatedSprite(vm, 1200), _soundResource(vm) {
+ : AnimatedSprite(vm, 1200) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class466::handleMessage);
@@ -239,7 +239,7 @@ uint32 Class466::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02060018) {
- _soundResource.play(0x47900E06);
+ playSound(0, 0x47900E06);
}
break;
case 0x2006:
@@ -265,7 +265,7 @@ void Class466::sub40D380() {
}
AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _countdown(0) {
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) {
createSurface1(0xD088AC30, 100);
_x = 320;
@@ -307,14 +307,14 @@ void AsScene1201RightDoor::sub40D7E0() {
startAnimation(0xD088AC30, 0, -1);
_newStickFrameIndex = -2;
setVisible(true);
- _soundResource.play(calcHash("fxDoorOpen20"));
+ playSound(0, calcHash("fxDoorOpen20"));
}
void AsScene1201RightDoor::sub40D830() {
startAnimation(0xD088AC30, -1, -1);
_playBackwards = true;
setVisible(true);
- _soundResource.play(calcHash("fxDoorClose20"));
+ playSound(0, calcHash("fxDoorClose20"));
NextState(&AsScene1201RightDoor::sub40D880);
}
@@ -352,7 +352,7 @@ uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _class466(class466),
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _class466(class466),
_flag(false) {
flag = false;
@@ -381,7 +381,7 @@ uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶
if (param.asInteger() == 0x092870C0) {
sendMessage(_class466, 0x2006, 0);
} else if (param.asInteger() == 0x11CA0144) {
- _soundResource.play(0x51800A04);
+ playSound(0, 0x51800A04);
}
break;
case 0x1011:
@@ -466,7 +466,7 @@ void Class465::spriteUpdate40D150() {
}
AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
createSurface(1100, 57, 60);
SetUpdateHandler(&AsScene1201Match::update);
@@ -485,7 +485,7 @@ AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
_y = 112;
_status = 2;
sub40C470();
- _soundResource.load(0xD00230CD);
+ loadSound(0, 0xD00230CD);
break;
case 2:
setDoDeltaX(1);
@@ -511,7 +511,7 @@ uint32 AsScene1201Match::handleMessage40C2D0(int messageNum, const MessageParam
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x86668011) {
- _soundResource.play();
+ playSound(0);
}
break;
}
@@ -589,8 +589,7 @@ void AsScene1201Match::sub40C4F0() {
}
AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman)
- : AnimatedSprite(vm, 900), _soundResource(vm), _parentScene(parentScene), _klayman(klayman),
- _flag(false) {
+ : AnimatedSprite(vm, 900), _parentScene(parentScene), _klayman(klayman), _flag(false) {
createSurface(1100, 203, 199);
SetUpdateHandler(&AsScene1201Creature::update);
@@ -619,7 +618,7 @@ uint32 AsScene1201Creature::handleMessage40C710(int messageNum, const MessagePar
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02060018) {
- _soundResource.play(0xCD298116);
+ playSound(0, 0xCD298116);
}
break;
case 0x2004:
@@ -654,7 +653,7 @@ uint32 AsScene1201Creature::handleMessage40C830(int messageNum, const MessagePar
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02060018) {
- _soundResource.play(0xCD298116);
+ playSound(0, 0xCD298116);
sendMessage(_parentScene, 0x4814, 0);
sendMessage(_klayman, 0x4814, 0);
}
@@ -709,7 +708,7 @@ void AsScene1201Creature::sub40C9E0() {
}
AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman) {
+ : AnimatedSprite(vm, 1100), _klayman(klayman) {
_x = 320;
_y = 240;
@@ -717,7 +716,7 @@ AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
if (_klayman->getX() < 100) {
startAnimation(0x508A111B, 0, -1);
_newStickFrameIndex = -2;
- _soundResource.play(calcHash("fxDoorOpen03"));
+ playSound(0, calcHash("fxDoorOpen03"));
} else {
startAnimation(0x508A111B, -1, -1);
_newStickFrameIndex = -2;
@@ -1109,8 +1108,7 @@ void AsScene1202TntItem::sub454160() {
}
Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _paletteResource(vm), _soundResource1(vm),
- _soundResource2(vm), _soundResource3(vm), _soundResource4(vm),
+ : Scene(vm, parentModule, true), _paletteResource(vm),
_flag(true), _soundFlag(false), _counter(0), _index(-1) {
SetMessageHandler(&Scene1202::handleMessage453C10);
@@ -1139,10 +1137,10 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1202::handleMessage453D90);
}
- _soundResource1.play(0x40106542);
- _soundResource2.load(0x40005446);
- _soundResource2.load(0x40005446);
- _soundResource2.load(0x68E25540);
+ playSound(0, 0x40106542);
+ loadSound(1, 0x40005446);
+ loadSound(2, 0x40005446);
+ loadSound(3, 0x68E25540);
}
@@ -1155,13 +1153,13 @@ Scene1202::~Scene1202() {
void Scene1202::update() {
Scene::update();
if (_soundFlag) {
- if (!_soundResource4.isPlaying())
+ if (!isSoundPlaying(3))
leaveScene(0);
} else if (_counter == 0 && isSolved()) {
SetMessageHandler(&Scene1202::handleMessage453D90);
setGlobalVar(0x000CF819, 1);
doPaletteEffect();
- _soundResource4.play();
+ playSound(3);
_soundFlag = true;
} else if (_index >= 0 && _counter == 0) {
int index2 = kScene1202Table[_index];
@@ -1173,9 +1171,9 @@ void Scene1202::update() {
_counter = 2;
_index = -1;
if (_flag) {
- _soundResource2.play();
+ playSound(1);
} else {
- _soundResource3.play();
+ playSound(2);
}
_flag = !_flag;
}
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index dc8e903..1733fb4 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -55,7 +55,6 @@ class Class466 : public AnimatedSprite {
public:
Class466(NeverhoodEngine *vm, bool flag);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub40D340();
void sub40D360();
@@ -66,7 +65,6 @@ class AsScene1201RightDoor : public AnimatedSprite {
public:
AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag);
protected:
- SoundResource _soundResource;
Sprite *_klayman;
int _countdown;
void update();
@@ -91,7 +89,6 @@ protected:
Scene *_parentScene;
Sprite *_class466;
Sprite *_sprite;
- SoundResource _soundResource;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -116,7 +113,6 @@ public:
AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
int _countdown;
int _status;
void update();
@@ -136,7 +132,6 @@ public:
protected:
Scene *_parentScene;
Sprite *_klayman;
- SoundResource _soundResource;
int _countdown1;
int _countdown2;
int _countdown3;
@@ -158,7 +153,6 @@ public:
AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman);
protected:
Sprite *_klayman;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub40D590();
};
@@ -176,8 +170,6 @@ public:
Scene1201(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Scene1201();
protected:
- // TODO ResourceTable _resourceTable1;
- // TODO ResourceTable _resourceTable2;
Sprite *_asMatch;
AsScene1201TntMan *_asTntMan;
Sprite *_asCreature;
@@ -211,10 +203,6 @@ public:
Scene1202(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Scene1202();
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
PaletteResource _paletteResource;
Sprite *_asTntItems[18];
int _counter;
Commit: 5ab4eb6555bea4d2716720eff03b832de16ab87a
https://github.com/scummvm/scummvm/commit/5ab4eb6555bea4d2716720eff03b832de16ab87a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1300
- Also fix a very stupid bug in AsScene1307Key which messed up the key moving animation
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 56812ba..09299de 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -298,9 +298,9 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule(1500, 0); // Logos and intro video //Real
-#if 0
- _vm->gameState().sceneNum = 0;
- createModule(1200, -1);
+#if 1
+ _vm->gameState().sceneNum = 6;
+ createModule(1300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -314,7 +314,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 45c6842..1c980b0 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -298,7 +298,7 @@ void Module1300::updateScene() {
}
AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
_x = 320;
_y = 240;
@@ -312,8 +312,8 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
startAnimation(0x88148150, -1, -1);
_newStickFrameIndex = -2;
}
- _soundResource1.load(0x68895082);
- _soundResource2.load(0x689BD0C1);
+ loadSound(0, 0x68895082);
+ loadSound(1, 0x689BD0C1);
}
uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -335,14 +335,14 @@ uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶
void AsScene1302Bridge::stLowerBridge() {
startAnimation(0x88148150, 0, -1);
NextState(&AsScene1302Bridge::cbLowerBridgeEvent);
- _soundResource2.play();
+ playSound(1);
}
void AsScene1302Bridge::stRaiseBridge() {
startAnimation(0x88148150, 7, -1);
_playBackwards = true;
_newStickFrameIndex = 0;
- _soundResource1.play();
+ playSound(0);
}
void AsScene1302Bridge::cbLowerBridgeEvent() {
@@ -352,7 +352,7 @@ void AsScene1302Bridge::cbLowerBridgeEvent() {
}
SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
- : StaticSprite(vm, 0x11122122, 200), _soundResource1(vm), _soundResource2(vm) {
+ : StaticSprite(vm, 0x11122122, 200) {
SetUpdateHandler(&SsScene1302Fence::update);
SetMessageHandler(&SsScene1302Fence::handleMessage);
@@ -360,8 +360,8 @@ SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
_firstY = _y;
if (getGlobalVar(0x80101B1E))
_y += 152;
- _soundResource1.load(0x7A00400C);
- _soundResource2.load(0x78184098);
+ loadSound(0, 0x7A00400C);
+ loadSound(1, 0x78184098);
}
void SsScene1302Fence::update() {
@@ -373,12 +373,12 @@ uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4808:
- _soundResource1.play();
+ playSound(0);
SetSpriteUpdate(&SsScene1302Fence::suMoveDown);
SetMessageHandler(NULL);
break;
case 0x4809:
- _soundResource2.play();
+ playSound(1);
SetSpriteUpdate(&SsScene1302Fence::suMoveUp);
SetMessageHandler(NULL);
break;
@@ -424,7 +424,7 @@ uint32 Class595::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm) {
+ : Scene(vm, parentModule, true) {
SetMessageHandler(&Scene1302::handleMessage);
setHitRects(0x004B0858);
@@ -541,17 +541,17 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x4806:
sendMessage(_parentModule, 0x1024, 2);
if (sender == _asRing1) {
- _soundResource.play(0x665198C0);
+ playSound(0, 0x665198C0);
} else if (sender == _asRing2) {
sendMessage(_asBridge, 0x4808, 0);
setGlobalVar(0x13206309, 1);
} else if (sender == _asRing3) {
- _soundResource.play(0xE2D389C0);
+ playSound(0, 0xE2D389C0);
} else if (sender == _asRing4) {
sendMessage(_ssFence, 0x4808, 0);
setGlobalVar(0x80101B1E, 1);
} else if (sender == _asRing5) {
- _soundResource.play(0x40428A09);
+ playSound(0, 0x40428A09);
}
break;
case 0x4807:
@@ -572,11 +572,11 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480F:
if (sender == _asRing2) {
- _soundResource.play(0x60755842);
+ playSound(0, 0x60755842);
sendMessage(_asBridge, 0x4808, 0);
setGlobalVar(0x13206309, 1);
} else if (sender == _asRing4) {
- _soundResource.play(0x60755842);
+ playSound(0, 0x60755842);
sendMessage(_ssFence, 0x4808, 0);
setGlobalVar(0x80101B1E, 1);
}
@@ -592,7 +592,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
// TODO createSurface3(200, dword_4AF9F8);
createSurface(200, 640, 480); //TODO: Remeove once the line above is done
@@ -623,11 +623,11 @@ uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x020B0003) {
- _soundResource.play(0x742B0055);
+ playSound(0, 0x742B0055);
}
break;
case 0x3002:
- _soundResource.play(0x470007EE);
+ playSound(0, 0x470007EE);
stopAnimation();
SetMessageHandler(NULL);
setVisible(false);
@@ -802,8 +802,7 @@ uint32 Scene1305::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene, AnimatedSprite *asElevatorDoor)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _parentScene(parentScene), _asElevatorDoor(asElevatorDoor), _isUp(false), _isDown(true),
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _asElevatorDoor(asElevatorDoor), _isUp(false), _isDown(true),
_countdown(0) {
_x = 320;
@@ -812,9 +811,9 @@ AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene
startAnimation(0x043B0270, 0, -1);
_newStickFrameIndex = 0;
SetMessageHandler(&AsScene1306Elevator::handleMessage);
- _soundResource1.load(0x1C100E83);
- _soundResource2.load(0x1C08CEC5);
- _soundResource3.load(0x5D011E87);
+ loadSound(0, 0x1C100E83);
+ loadSound(1, 0x1C08CEC5);
+ loadSound(2, 0x5D011E87);
}
void AsScene1306Elevator::update() {
@@ -823,7 +822,7 @@ void AsScene1306Elevator::update() {
}
AnimatedSprite::update();
if (_currFrameIndex == 7) {
- _soundResource3.play();
+ playSound(1);
_asElevatorDoor->setVisible(false);
}
}
@@ -860,7 +859,7 @@ void AsScene1306Elevator::stGoingUp() {
SetUpdateHandler(&AsScene1306Elevator::update);
startAnimation(0x043B0270, 0, -1);
NextState(&AsScene1306Elevator::cbGoingUpEvent);
- _soundResource1.play();
+ playSound(0);
}
void AsScene1306Elevator::cbGoingUpEvent() {
@@ -879,7 +878,7 @@ void AsScene1306Elevator::stGoingDown() {
startAnimation(0x043B0270, -1, -1);
_playBackwards = true;
NextState(&AsScene1306Elevator::cbGoingDownEvent);
- _soundResource2.play();
+ playSound(1);
}
void AsScene1306Elevator::cbGoingDownEvent() {
@@ -1124,8 +1123,7 @@ const int16 kAsScene1307KeyXDelta = 70;
const int16 kAsScene1307KeyYDelta = -12;
AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _soundResource4(vm), _parentScene(parentScene), _index(index), _clipRects(clipRects),
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index), _clipRects(clipRects),
_isClickable(true) {
NPoint pt;
@@ -1146,10 +1144,10 @@ AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint ind
startAnimation(fileHashes[0], 0, -1);
- _soundResource1.load(0xDC4A1280);
- _soundResource2.load(0xCC021233);
- _soundResource3.load(0xC4C23844);
- _soundResource3.load(0xC4523208);
+ loadSound(0, 0xDC4A1280);
+ loadSound(1, 0xCC021233);
+ loadSound(2, 0xC4C23844);
+ loadSound(3, 0xC4523208);
}
@@ -1171,11 +1169,11 @@ uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m,
stMoveKey();
break;
case 0x2003:
- _soundResource4.play();
+ playSound(3);
stUnlock();
break;
case 0x2004:
- _soundResource3.play();
+ playSound(2);
stInsert();
break;
}
@@ -1200,7 +1198,7 @@ void AsScene1307Key::suInsertKey() {
processDelta();
_pointIndex++;
if (_pointIndex == 7)
- _soundResource1.play();
+ playSound(0);
} else {
SetSpriteUpdate(NULL);
sendMessage(_parentScene, 0x2002, 0);
@@ -1209,9 +1207,9 @@ void AsScene1307Key::suInsertKey() {
void AsScene1307Key::suMoveKey() {
if (_pointIndex < kAsScene1307KeyFrameIndicesCount) {
- _currFrameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
- _x = _prevX + (_deltaX * _currFrameIndex) / kAsScene1307KeyDivValue;
- _y = _prevY + (_deltaY * _currFrameIndex) / kAsScene1307KeyDivValue;
+ _frameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
+ _x = _prevX + (_deltaX * _frameIndex) / kAsScene1307KeyDivValue;
+ _y = _prevY + (_deltaY * _frameIndex) / kAsScene1307KeyDivValue;
processDelta();
_pointIndex++;
} else {
@@ -1227,7 +1225,7 @@ void AsScene1307Key::stRemoveKey() {
_pointIndex = 0;
SetSpriteUpdate(&AsScene1307Key::suRemoveKey);
startAnimation(fileHashes[0], 0, -1);
- _soundResource2.play();
+ playSound(1);
}
void AsScene1307Key::stInsertKey() {
@@ -1251,7 +1249,7 @@ void AsScene1307Key::stMoveKey() {
} else {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
_pointIndex = 0;
- _currFrameIndex = 0;
+ _frameIndex = 0;
_deltaX = newX - _x;
_deltaY = newY - _y;
SetSpriteUpdate(&AsScene1307Key::suMoveKey);
@@ -1272,8 +1270,8 @@ void AsScene1307Key::stInsert() {
}
Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm), _countdown(0),
- _asCurrKey(NULL), _isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
+ : Scene(vm, parentModule, true), _countdown(0), _asCurrKey(NULL),
+ _isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
//DEBUG
setSubVar(0x08D0AB11, 0, 1);
@@ -1325,7 +1323,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
}
}
- _soundResource.load(0x68E25540);
+ loadSound(0, 0x68E25540);
}
@@ -1336,7 +1334,7 @@ void Scene1307::update() {
} else if (_countdown == 20) {
_palette->startFadeToWhite(40);
}
- if (_doLeaveScene && !_soundResource.isPlaying()) {
+ if (_doLeaveScene && !isSoundPlaying(0)) {
leaveScene(1);
setGlobalVar(0x80455A41, 1);
}
@@ -1392,7 +1390,7 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_asKeys[keyIndex])
sendMessage(_asKeys[keyIndex], 0x2003, 1);
}
- _soundResource.play();
+ playSound(0);
_isPuzzleSolved = true;
_countdown = 47;
} else {
@@ -1438,8 +1436,7 @@ static const uint32 kScene1308FileHashes[] = {
};
Class549::Class549(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _soundResource(vm),
- _parentScene(parentScene) {
+ : AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _parentScene(parentScene) {
SetMessageHandler(&Class549::handleMessage);
setVisible(false);
@@ -1466,7 +1463,7 @@ void Class549::sub455470() {
startAnimation(0xBA0AE050, 0, -1);
setVisible(true);
NextState(&Class549::hide);
- _soundResource.play(calcHash("fxDoorOpen38"));
+ playSound(0, calcHash("fxDoorOpen38"));
}
void Class549::hide() {
@@ -1480,7 +1477,7 @@ void Class549::sub4554F0() {
_playBackwards = true;
setVisible(true);
NextState(&Class549::sub455550);
- _soundResource.play(calcHash("fxDoorClose38"));
+ playSound(0, calcHash("fxDoorClose38"));
}
void Class549::sub455550() {
@@ -1489,12 +1486,11 @@ void Class549::sub455550() {
}
Class592::Class592(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _soundResource(vm),
- _parentScene(parentScene) {
+ : AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _parentScene(parentScene) {
SetMessageHandler(&Class592::handleMessage);
NextState(&Class592::sub455710);
- _soundResource.play(0x51456049);
+ playSound(0, 0x51456049);
}
uint32 Class592::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1571,7 +1567,7 @@ Class601::Class601(NeverhoodEngine *vm, uint32 fileHash, int index)
}
Class513::Class513(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100), _soundResource(vm) {
+ : AnimatedSprite(vm, 1100) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Class513::handleMessage);
@@ -1586,11 +1582,11 @@ uint32 Class513::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x66382026) {
- _soundResource.play(0x0CD84468);
+ playSound(0, 0x0CD84468);
} else if (param.asInteger() == 0x6E28061C) {
- _soundResource.play(0x78C8402C);
+ playSound(0, 0x78C8402C);
} else if (param.asInteger() == 0x462F0410) {
- _soundResource.play(0x60984E28);
+ playSound(0, 0x60984E28);
}
break;
}
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index e404127..b6761dd 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -47,8 +47,6 @@ public:
AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stLowerBridge();
void stRaiseBridge();
@@ -59,8 +57,6 @@ class SsScene1302Fence : public StaticSprite {
public:
SsScene1302Fence(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
int16 _firstY;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -80,7 +76,6 @@ class Scene1302 : public Scene {
public:
Scene1302(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource;
Sprite *_asVenusFlyTrap;
Sprite *_asBridge;
Sprite *_ssFence;
@@ -101,7 +96,6 @@ public:
AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender);
void stPopBalloon();
@@ -147,9 +141,6 @@ public:
protected:
Scene *_parentScene;
AnimatedSprite *_asElevatorDoor;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
bool _isUp;
bool _isDown;
int _countdown;
@@ -182,10 +173,6 @@ public:
AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects);
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
NPointArray *_pointList;
uint _pointIndex;
int _frameIndex;
@@ -209,7 +196,6 @@ class Scene1307 : public Scene {
public:
Scene1307(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource;
NPointArray *_keyHolePoints;
NRect _keyHoleRects[16];
NRect _clipRects[4];
@@ -228,7 +214,6 @@ public:
Class549(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub455470();
void hide();
@@ -241,7 +226,6 @@ public:
Class592(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub455710();
void sub455740();
@@ -267,7 +251,6 @@ class Class513 : public AnimatedSprite {
public:
Class513(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: b119efd5ed8e210fdaedcdd5e9cda58f59d63148
https://github.com/scummvm/scummvm/commit/b119efd5ed8e210fdaedcdd5e9cda58f59d63148
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1400
Changed paths:
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 8d40c34..a8c8b3c 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -135,8 +135,7 @@ void Module1400::updateScene() {
// Scene1401
Class525::Class525(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm),
- _countdown1(0), _countdown2(0) {
+ : AnimatedSprite(vm, 1100), _countdown1(0), _countdown2(0) {
// TODO createSurface3(900, dword_4B6768);
createSurface(900, 640, 480); //TODO: Remeove once the line above is done
@@ -174,7 +173,7 @@ uint32 Class525::handleMessage466320(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0A8A1490) {
- _soundResource2.play(0x6AB6666F);
+ playSound(1, 0x6AB6666F);
}
break;
case 0x2000:
@@ -207,12 +206,12 @@ uint32 Class525::handleMessage4663C0(int messageNum, const MessageParam ¶m,
void Class525::sub466420() {
startAnimation(0x4C240100, 0, -1);
- _soundResource1.play(0x4A30063F);
+ playSound(0, 0x4A30063F);
}
void Class525::sub466460() {
_vm->_soundMan->deleteSound(0x4A116437);
- _soundResource1.play(0x4A120435);
+ playSound(0, 0x4A120435);
startAnimation(0x4C210500, 0, -1);
}
@@ -223,7 +222,7 @@ void Class525::sub4664B0() {
}
Class526::Class526(NeverhoodEngine *vm, Sprite *class525)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _class525(class525) {
+ : AnimatedSprite(vm, 1100), _class525(class525) {
// TODO createSurface3(100, dword_4B6778);
createSurface(100, 640, 480); //TODO: Remeove once the line above is done
@@ -239,11 +238,11 @@ uint32 Class526::handleMessage(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x66382026) {
- _soundResource.play(0x0CD84468);
+ playSound(0, 0x0CD84468);
} else if (param.asInteger() == 0x6E28061C) {
- _soundResource.play(0x78C8402C);
+ playSound(0, 0x78C8402C);
} else if (param.asInteger() == 0x462F0410) {
- _soundResource.play(0x60984E28);
+ playSound(0, 0x60984E28);
}
break;
case 0x4839:
@@ -256,7 +255,7 @@ uint32 Class526::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class526::spriteUpdate466720() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
- _soundResource.play(0x0E32247F);
+ playSound(0, 0x0E32247F);
stopAnimation();
SetSpriteUpdate(NULL);
SetMessageHandler(NULL);
@@ -270,7 +269,7 @@ void Class526::sub466770() {
}
Class527::Class527(NeverhoodEngine *vm, Sprite *class526)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _class526(class526) {
+ : AnimatedSprite(vm, 1100), _class526(class526) {
// TODO createSurface3(200, dword_4B6768);
createSurface(200, 640, 480); //TODO: Remeove once the line above is done
@@ -294,7 +293,7 @@ uint32 Class527::handleMessage(int messageNum, const MessageParam ¶m, Entity
void Class527::spriteUpdate466920() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
- _soundResource.play(0x18020439);
+ playSound(0, 0x18020439);
stopAnimation();
SetSpriteUpdate(NULL);
SetMessageHandler(NULL);
@@ -308,7 +307,7 @@ void Class527::sub466970() {
}
Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _countdown(0) {
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) {
_x = 320;
_y = 240;
@@ -360,14 +359,14 @@ void Class528::sub466BF0() {
setVisible(true);
startAnimation(0x04551900, 0, -1);
_newStickFrameIndex = -2;
- _soundResource.play(calcHash("fxDoorOpen24"));
+ playSound(0, calcHash("fxDoorOpen24"));
}
void Class528::sub466C50() {
_flag = false;
setVisible(true);
startAnimation(0x04551900, -1, -1);
- _soundResource.play(calcHash("fxDoorClose24"));
+ playSound(0, calcHash("fxDoorClose24"));
_playBackwards = true;
NextState(&Class528::sub466CB0);
}
@@ -386,8 +385,7 @@ static const Class489Item kClass489Items[] = {
};
Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *class525)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _class525(class525),
- _soundResource1(vm), _soundResource2(vm), _soundResource3(vm) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _class525(class525) {
_class489Item = &kClass489Items[getGlobalVar(0x04A105B3)];
// TODO createSurface3(990, dword_4B26D8);
@@ -402,7 +400,7 @@ Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Spr
if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex2) {
sub434E90();
}
- _soundResource3.load(0xC8C2507C);
+ loadSound(2, 0xC8C2507C);
}
Class489::~Class489() {
@@ -565,7 +563,7 @@ void Class489::sub434C80() {
_flag = false;
}
} else if (soundFlag) {
- _soundResource2.play(0x5440E474);
+ playSound(1, 0x5440E474);
_flag = true;
}
@@ -593,7 +591,7 @@ void Class489::sub434DF0() {
startAnimation(0x14A10137, 0, -1);
SetSpriteUpdate(&Class489::spriteUpdate434B60);
SetMessageHandler(&Class489::handleMessage);
- _soundResource2.play(0xEC008474);
+ playSound(1, 0xEC008474);
}
void Class489::sub434E60() {
@@ -615,7 +613,7 @@ void Class489::sub434EC0() {
SetSpriteUpdate(NULL);
NextState(&Class489::sub434F40);
setGlobalVar(0x12A10DB3, 1);
- _soundResource1.play(0xCC4A8456);
+ playSound(0, 0xCC4A8456);
_vm->_soundMan->addSound(0x05331081, 0xCE428854);
_vm->_soundMan->playSoundLooping(0xCE428854);
}
@@ -633,7 +631,7 @@ void Class489::sub434F80() {
SetMessageHandler(&Class489::handleMessage434B20);
NextState(&Class489::sub434E90);
setGlobalVar(0x12A10DB3, 0);
- _soundResource1.play(0xCC4A8456);
+ playSound(0, 0xCC4A8456);
_vm->_soundMan->deleteSound(0xCE428854);
}
@@ -651,7 +649,7 @@ void Class489::sub435040() {
SetSpriteUpdate(&Class489::sub434D80);
SetMessageHandler(&Sprite::handleMessage);
startAnimation(0x708D4712, 0, -1);
- _soundResource3.play();
+ playSound(2);
}
Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -813,8 +811,7 @@ Class454::Class454(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority)
}
Class482::Class482(NeverhoodEngine *vm, Scene *parentScene, int which)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _soundResource1(vm),
- _soundResource2(vm) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
// TODO createSurface3(900, dword_4B6768);
createSurface(900, 640, 480); //TODO: Remeove once the line above is done
@@ -826,14 +823,14 @@ Class482::Class482(NeverhoodEngine *vm, Scene *parentScene, int which)
_y = 270;
if (which == 2) {
startAnimation(0x20060259, 0, -1);
- _soundResource1.play(0x419014AC);
- _soundResource2.load(0x61901C29);
+ playSound(0, 0x419014AC);
+ loadSound(1, 0x61901C29);
} else if (which == 1) {
startAnimation(0x210A0213, 0, -1);
- _soundResource1.play(0x41809C6C);
+ playSound(0, 0x41809C6C);
} else {
startAnimation(0x20060259, 0, -1);
- _soundResource2.load(0x61901C29);
+ loadSound(1, 0x61901C29);
_newStickFrameIndex = -2;
}
}
@@ -842,7 +839,7 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2002:
- _soundResource2.play();
+ playSound(1);
startAnimation(0x20060259, -1, -1);
_playBackwards = true;
NextState(&Class482::sub428530);
@@ -1257,8 +1254,7 @@ void AsScene1407Mouse::stArriveAtHole() {
}
Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm), _puzzleSolvedCountdown(0),
- _resetButtonCountdown(0) {
+ : Scene(vm, parentModule, true), _puzzleSolvedCountdown(0), _resetButtonCountdown(0) {
_surfaceFlag = true;
@@ -1298,7 +1294,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// The reset button was clicked
sendMessage(_asMouse, 0x2001, 0);
_ssResetButton->setVisible(true);
- _soundResource.play(0x44045000);
+ playSound(0, 0x44045000);
_resetButtonCountdown = 12;
} else {
// Handle the mouse
@@ -1312,7 +1308,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
// The mouse got the cheese (nomnom)
setGlobalVar(0x70A1189C, 1);
- _soundResource.play(0x68E25540);
+ playSound(0, 0x68E25540);
showMouse(false);
_puzzleSolvedCountdown = 72;
break;
@@ -1587,10 +1583,9 @@ static const NPoint kAsScene1405TileItemPositions[] = {
};
AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 index)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _soundResource(vm),
- _index(index), _countdown(0), _flag(false) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index), _countdown(0), _flag(false) {
- _soundResource.load(0x05308101);
+ loadSound(0, 0x05308101);
// TODO _soundResource.setPan
_x = kAsScene1405TileItemPositions[_index].x;
_y = kAsScene1405TileItemPositions[_index].y;
@@ -1632,7 +1627,7 @@ uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m,
void AsScene1405Tile::show() {
if (!_flag) {
_flag = true;
- _soundResource.play();
+ playSound(0);
setVisible(true);
}
}
@@ -1640,14 +1635,13 @@ void AsScene1405Tile::show() {
void AsScene1405Tile::hide() {
if (_flag) {
_flag = false;
- _soundResource.play();
+ playSound(0);
setVisible(false);
}
}
Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm), _selectFirstTile(true),
- _tilesLeft(48), _countdown(0) {
+ : Scene(vm, parentModule, true), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
_vm->gameModule()->initScene1405Vars();
_surfaceFlag = true;
@@ -1675,7 +1669,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
_tilesLeft--;
}
- _soundResource.load(0x68E25540);
+ loadSound(0, 0x68E25540);
SetMessageHandler(&Scene1405::handleMessage);
SetUpdateHandler(&Scene1405::update);
@@ -1722,7 +1716,7 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
setSubVar(0xCCE0280F, _secondTileIndex, 1);
_tilesLeft -= 2;
if (_tilesLeft == 0) {
- _soundResource.play();
+ playSound(0);
}
} else {
_countdown = 10;
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index d256b82..aed7ba9 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -48,8 +48,6 @@ public:
protected:
int _countdown1;
int _countdown2;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
void update4662A0();
void update466300();
uint32 handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -64,7 +62,6 @@ public:
Class526(NeverhoodEngine *vm, Sprite *class525);
protected:
Sprite *_class525;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void spriteUpdate466720();
void sub466770();
@@ -75,7 +72,6 @@ public:
Class527(NeverhoodEngine *vm, Sprite *class526);
protected:
Sprite *_class526;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void spriteUpdate466920();
void sub466970();
@@ -86,7 +82,6 @@ public:
Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag);
protected:
Sprite *_klayman;
- SoundResource _soundResource;
int _countdown;
bool _flag;
void update();
@@ -115,9 +110,6 @@ protected:
Sprite *_klayman;
Sprite *_class525;
const Class489Item *_class489Item;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
int16 _remX;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -168,8 +160,6 @@ public:
Class482(NeverhoodEngine *vm, Scene *parentScene, int which);
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub428500();
void sub428530();
@@ -217,7 +207,6 @@ class Scene1407 : public Scene {
public:
Scene1407(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource;
Sprite *_asMouse;
Sprite *_ssResetButton;
int _puzzleSolvedCountdown;
@@ -267,7 +256,6 @@ public:
void hide();
protected:
Scene1405 *_parentScene;
- SoundResource _soundResource;
bool _flag;
uint32 _index;
int _countdown;
@@ -280,7 +268,6 @@ public:
Scene1405(NeverhoodEngine *vm, Module *parentModule, int which);
int getCountdown() const { return _countdown; }
protected:
- SoundResource _soundResource;
bool _selectFirstTile;
int _firstTileIndex;
int _secondTileIndex;
Commit: 2df0a0a2e18049da5c1b6822ebc5c98f521ac3bd
https://github.com/scummvm/scummvm/commit/2df0a0a2e18049da5c1b6822ebc5c98f521ac3bd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1500
Changed paths:
engines/neverhood/module1500.cpp
engines/neverhood/module1500.h
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 76afb95..88b7e73 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -83,8 +83,7 @@ void Module1500::updateScene() {
// Scene1501
Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
- : Scene(vm, parentModule, true), _soundResource(vm),
- _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
+ : Scene(vm, parentModule, true), _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
@@ -98,13 +97,8 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
_palette->addBasePalette(backgroundFileHash, 0, 256, 0);
_palette->startFadeToPalette(12);
- /*
- if (soundFileHash != 0) {
- _soundResource.set(soundFileHash);
- _soundResource.load();
- _soundResource.play();
- }
- */
+ if (soundFileHash != 0)
+ playSound(0, soundFileHash);
}
@@ -121,7 +115,7 @@ void Scene1501::update() {
_vm->_screen->clear();
leaveScene(0);
}
- } else if ((_countdown2 != 0 && (--_countdown2 == 0)) /*|| !_soundResource.isPlaying()*/) {
+ } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !isSoundPlaying(0)) {
_countdown1 = 12;
_palette->startFadeToBlack(11);
}
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index eeabec0..c562a24 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -45,7 +45,6 @@ class Scene1501 : public Scene {
public:
Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3);
protected:
- SoundResource _soundResource;
int _countdown1;
int _countdown2;
int _countdown3;
Commit: 0c272631df66fc574e2d1bb67d4aa22f434dd178
https://github.com/scummvm/scummvm/commit/0c272631df66fc574e2d1bb67d4aa22f434dd178
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1600
Changed paths:
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 864e4a6..8b35942 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -983,8 +983,7 @@ void Class521::sub45E0A0() {
}
Class546::Class546(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0x08C80144, 900, 320, 240), _soundResource(vm),
- _parentScene(parentScene) {
+ : AnimatedSprite(vm, 0x08C80144, 900, 320, 240), _parentScene(parentScene) {
setVisible(false);
SetMessageHandler(&Class546::handleMessage);
@@ -1011,7 +1010,7 @@ void Class546::sub44D710() {
startAnimation(0x08C80144, 0, -1);
setVisible(true);
NextState(&Class546::sub44D760);
- _soundResource.play(calcHash("fxDoorOpen23"));
+ playSound(0, calcHash("fxDoorOpen23"));
}
void Class546::sub44D760() {
@@ -1024,7 +1023,7 @@ void Class546::sub44D790() {
startAnimation(0x08C80144, -1, -1);
setVisible(true);
NextState(&Class546::sub44D7F0);
- _soundResource.play(calcHash("fxDoorClose23"));
+ playSound(0, calcHash("fxDoorClose23"));
}
void Class546::sub44D7F0() {
@@ -1388,8 +1387,7 @@ uint32 Scene1608::handleMessage44D510(int messageNum, const MessageParam ¶m,
}
Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm), _countdown1(1),
- _index1(0), _index3(0), _flag5(true), _flag6(false) {
+ : Scene(vm, parentModule, true), _countdown1(1), _index1(0), _index3(0), _flag5(true), _flag6(false) {
// TODO _vm->gameModule()->initScene3011Vars();
_index2 = getGlobalVar(0x2414C2F2);
@@ -1409,7 +1407,7 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x24A10929, 20, 620);
- _soundResource.load(0x68E25540);
+ loadSound(0, 0x68E25540);
}
@@ -1428,7 +1426,7 @@ void Scene1609::update() {
_countdown1 = 12;
}
}
- if (_flag6 && !_soundResource.isPlaying()) {
+ if (_flag6 && !isSoundPlaying(0)) {
leaveScene(1);
}
Scene::update();
@@ -1451,7 +1449,7 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
_index3++;
if (_index3 >= 12) {
if (testVars()) {
- _soundResource.play();
+ playSound(0);
setGlobalVar(0x2C531AF8, 1);
_flag6 = true;
} else {
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index efb2b94..b5b8e6b 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -110,7 +110,6 @@ public:
Class546(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub44D710();
void sub44D760();
@@ -175,7 +174,6 @@ class Scene1609 : public Scene {
public:
Scene1609(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource;
Sprite *_ssButton;
AsScene3011Symbol *_asSymbols[12];
int _index1;
Commit: 0a1a228a883b3c13915a9e83886464b85ed2c81e
https://github.com/scummvm/scummvm/commit/0a1a228a883b3c13915a9e83886464b85ed2c81e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1700
- Add Entity::setSoundVolume
Changed paths:
engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/module1700.cpp
engines/neverhood/module1700.h
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index d7d7896..0cb906a 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -142,6 +142,10 @@ bool Entity::isSoundPlaying(uint index) {
return getSoundResource(index)->isPlaying();
}
+void Entity::setSoundVolume(uint index, int volume) {
+ getSoundResource(index)->setVolume(volume);
+}
+
void Entity::deleteSoundResources() {
if (_soundResources) {
for (uint i = 0; i < kMaxSoundResources; ++i)
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index eafc467..b0348ea 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -109,6 +109,7 @@ protected:
void loadSound(uint index, uint32 fileHash);
void playSound(uint index, uint32 fileHash = 0);
bool isSoundPlaying(uint index);
+ void setSoundVolume(uint index, int volume);
void deleteSoundResources();
};
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 13d0f35..f914fa9 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -34,7 +34,7 @@ static const uint32 kModule1700SoundList[] = {
};
Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _soundResource(vm) {
+ : Module(vm, parentModule) {
_vm->_soundMan->addMusic(0x04212331, 0x31114225);
_vm->_soundMan->addSoundList(0x04212331, kModule1700SoundList);
@@ -105,9 +105,9 @@ void Module1700::updateScene() {
} else if (_moduleResult == 1) {
createScene(1, 1);
} else if (_moduleResult == 2) {
- if (!_soundResource.isPlaying()) {
- _soundResource.setVolume(60);
- _soundResource.play(0x58B45E58);
+ if (!isSoundPlaying(0)) {
+ setSoundVolume(0, 60);
+ playSound(0, 0x58B45E58);
}
createScene(2, 2);
}
diff --git a/engines/neverhood/module1700.h b/engines/neverhood/module1700.h
index f738848..2488c46 100644
--- a/engines/neverhood/module1700.h
+++ b/engines/neverhood/module1700.h
@@ -35,7 +35,6 @@ public:
Module1700(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1700();
protected:
- SoundResource _soundResource;
void createScene(int sceneNum, int which);
void updateScene();
};
Commit: a8dda6c5b69657023b6b3c472c083af86a74cb0c
https://github.com/scummvm/scummvm/commit/a8dda6c5b69657023b6b3c472c083af86a74cb0c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:44-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module1900
Changed paths:
engines/neverhood/module1900.cpp
engines/neverhood/module1900.h
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index c6ce15c..77f031b 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -190,8 +190,7 @@ int AsScene1907Symbol::_symbolFlag1 = 0;
int AsScene1907Symbol::_symbolFlag2 = 0;
AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene, int elementIndex, int positionIndex)
- : AnimatedSprite(vm, 1000 - positionIndex), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _parentScene(parentScene), _elementIndex(elementIndex), _isMoving(false) {
+ : AnimatedSprite(vm, 1000 - positionIndex), _parentScene(parentScene), _elementIndex(elementIndex), _isMoving(false) {
_symbolFlag1 = 0;
_symbolFlag2 = 0;
@@ -212,9 +211,9 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
} else {
_isPluggedIn = false;
_currPositionIndex = positionIndex;
- _soundResource1.load(0x74231924);
- _soundResource2.load(0x36691914);
- _soundResource3.load(0x5421D806);
+ loadSound(0, 0x74231924);
+ loadSound(1, 0x36691914);
+ loadSound(2, 0x5421D806);
_parentScene->setPositionFree(_currPositionIndex, false);
_x = kAsScene1907SymbolGroundPositions[_currPositionIndex].x;
_y = kAsScene1907SymbolGroundPositions[_currPositionIndex].y;
@@ -389,7 +388,7 @@ void AsScene1907Symbol::fallOff(int newPositionIndex, int fallOffDelay) {
}
void AsScene1907Symbol::stFallOffHitGround() {
- _soundResource2.play();
+ playSound(1);
sendMessage(_parentScene, 0x1022, 1000 + _newPositionIndex);
// TODO: Meh...
Entity::_priority = 1000 - _newPositionIndex;
@@ -418,11 +417,11 @@ void AsScene1907Symbol::cbFallOffHitGroundEvent() {
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteUpdate(NULL);
processDelta();
- _soundResource3.play();
+ playSound(2);
}
void AsScene1907Symbol::stPlugIn() {
- _soundResource1.play();
+ playSound(0);
_currPositionIndex = _newPositionIndex;
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
@@ -456,7 +455,7 @@ void AsScene1907Symbol::moveDown() {
}
SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 *parentScene, AsScene1907Symbol *asScene1907Symbol)
- : StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene), _asScene1907Symbol(asScene1907Symbol),
+ : StaticSprite(vm, 1400), _parentScene(parentScene), _asScene1907Symbol(asScene1907Symbol),
_countdown1(0) {
_spriteResource.load2(0x64516424);
@@ -468,7 +467,7 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907
_y = _spriteResource.getPosition().y;
processDelta();
_needRefresh = true;
- _soundResource.load(0x44061000);
+ loadSound(0, 0x44061000);
SetUpdateHandler(&SsScene1907UpDownButton::update);
SetMessageHandler(&SsScene1907UpDownButton::handleMessage);
if (getGlobalVar(0xA9035F60)) {
@@ -495,7 +494,7 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam
setVisible(true);
_countdown1 = 4;
StaticSprite::update();
- _soundResource.play();
+ playSound(0);
}
messageResult = 1;
}
@@ -558,8 +557,7 @@ void AsScene1907WaterHint::hide() {
}
Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _soundResource4(vm), _currMovingSymbolIndex(0), _pluggedInCount(0),
+ : Scene(vm, parentModule, true), _currMovingSymbolIndex(0), _pluggedInCount(0),
_moveDownCountdown(0), _moveUpCountdown(0), _countdown3(0), _hasPlugInFailed(false) {
_surfaceFlag = true;
@@ -590,10 +588,10 @@ Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0xA9035F60))
_pluggedInCount = 9;
- _soundResource1.load(0x72004A10);
- _soundResource2.load(0x22082A12);
- _soundResource3.load(0x21100A10);
- _soundResource4.load(0x68E25540);
+ loadSound(0, 0x72004A10);
+ loadSound(1, 0x22082A12);
+ loadSound(2, 0x21100A10);
+ loadSound(3, 0x68E25540);
}
@@ -646,17 +644,17 @@ uint32 Scene1907::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO Debug stuff
case 0x2000:
if (getGlobalVar(0x09221A62)) {
- _soundResource1.play();
+ playSound(0);
for (int i = 0; i < 9; i++)
_asSymbols[i]->moveUp();
_ssUpDownButton->setToUpPosition();
setGlobalVar(0x09221A62, 0);
} else {
if (!getGlobalVar(0x10938830)) {
- _soundResource3.play();
+ playSound(2);
_countdown3 = 5;
} else {
- _soundResource2.play();
+ playSound(1);
_ssUpDownButton->setToDownPosition();
setGlobalVar(0x09221A62, 1);
}
@@ -665,7 +663,7 @@ uint32 Scene1907::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2001:
- _soundResource4.play();
+ playSound(3);
setGlobalVar(0xA9035F60, 1);
break;
}
diff --git a/engines/neverhood/module1900.h b/engines/neverhood/module1900.h
index 2eadd06..386d1c9 100644
--- a/engines/neverhood/module1900.h
+++ b/engines/neverhood/module1900.h
@@ -60,9 +60,6 @@ public:
bool isPluggedIn() { return _isPluggedIn; }
bool isMoving() { return _isMoving; }
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
Scene1907 *_parentScene;
int _elementIndex;
int _currPositionIndex;
@@ -111,7 +108,6 @@ public:
void setToUpPosition();
void setToDownPosition();
protected:
- SoundResource _soundResource;
Scene1907 *_parentScene;
AsScene1907Symbol *_asScene1907Symbol;
int _countdown1;
@@ -126,10 +122,6 @@ public:
void setPositionFree(int index, bool value) { _positionFree[index] = value; }
int getNextPosition() { return _pluggedInCount++; }
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
AsScene1907Symbol *_asSymbols[9];
SsScene1907UpDownButton *_ssUpDownButton;
AsScene1907WaterHint *_asWaterHint;
Commit: 78df19c6486612ad57f0625099355b69c41badb8
https://github.com/scummvm/scummvm/commit/78df19c6486612ad57f0625099355b69c41badb8
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2100
Changed paths:
engines/neverhood/module2100.cpp
engines/neverhood/module2100.h
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index fd2a793..98b6e03 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -78,7 +78,7 @@ void Module2100::updateScene() {
// Scene2101
Class538::Class538(NeverhoodEngine *vm, bool flag)
- : AnimatedSprite(vm, 1100), _soundResource(vm) {
+ : AnimatedSprite(vm, 1100) {
// TODO createSurface3(100, dword_4B9018);
createSurface(100, 640, 480); //TODO: Remove once the line above is done
@@ -114,7 +114,7 @@ void Class538::openDoor() {
startAnimation(0x0C202B9C, 0, -1);
_newStickFrameIndex = -2;
setVisible(true);
- _soundResource.play(calcHash("fxDoorOpen32"));
+ playSound(0, calcHash("fxDoorOpen32"));
}
void Class538::closeDoor() {
@@ -122,7 +122,7 @@ void Class538::closeDoor() {
_newStickFrameIndex = -2;
setVisible(true);
NextState(&Class538::hide);
- _soundResource.play(calcHash("fxDoorClose32"));
+ playSound(0, calcHash("fxDoorClose32"));
}
void Class538::hide() {
@@ -157,7 +157,7 @@ uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
Class427::Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
- : StaticSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene), _countdown(0),
+ : StaticSprite(vm, 1100), _parentScene(parentScene), _countdown(0),
_fileHash1(fileHash1), _fileHash2(fileHash2), _soundFileHash(soundFileHash) {
SetUpdateHandler(&Class427::update);
@@ -193,7 +193,7 @@ uint32 Class427::handleMessage(int messageNum, const MessageParam ¶m, Entity
load(_fileHash2, true, true);
StaticSprite::update();
_countdown = 16;
- _soundResource.play(_soundFileHash);
+ playSound(0, _soundFileHash);
break;
}
return messageResult;
diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h
index 65846d7..ff6898c 100644
--- a/engines/neverhood/module2100.h
+++ b/engines/neverhood/module2100.h
@@ -45,7 +45,6 @@ class Class538 : public AnimatedSprite {
public:
Class538(NeverhoodEngine *vm, bool flag);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void openDoor();
void closeDoor();
@@ -65,7 +64,6 @@ public:
Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 _soundFileHash;
uint32 _fileHash1, _fileHash2;
int16 _countdown;
Commit: 3651d982c4229fb77d371836cdc3ddbca156d980
https://github.com/scummvm/scummvm/commit/3651d982c4229fb77d371836cdc3ddbca156d980
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2200
- Add Entity::stopSound
Changed paths:
engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index 0cb906a..f66d129 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -138,6 +138,10 @@ void Entity::playSound(uint index, uint32 fileHash) {
getSoundResource(index)->play();
}
+void Entity::stopSound(uint index) {
+ getSoundResource(index)->stop();
+}
+
bool Entity::isSoundPlaying(uint index) {
return getSoundResource(index)->isPlaying();
}
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index b0348ea..4bcd0c4 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -108,6 +108,7 @@ protected:
// TODO Add other sound stuff
void loadSound(uint index, uint32 fileHash);
void playSound(uint index, uint32 fileHash = 0);
+ void stopSound(uint index);
bool isSoundPlaying(uint index);
void setSoundVolume(uint index, int volume);
void deleteSoundResources();
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index bb2f59b..f703971 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -412,8 +412,7 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
}
AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *doorLightSprite, bool flag1)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman), _doorLightSprite(doorLightSprite),
- _countdown(0), _doorOpen(flag1) {
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _doorLightSprite(doorLightSprite), _countdown(0), _doorOpen(flag1) {
_x = 408;
_y = 290;
@@ -471,7 +470,7 @@ void AsScene2201Door::stOpenDoor() {
_doorOpen = true;
startAnimation(0xE2CB0412, 0, -1);
_newStickFrameIndex = -2;
- _soundResource.play(calcHash("fxDoorOpen33"));
+ playSound(0, calcHash("fxDoorOpen33"));
}
void AsScene2201Door::stCloseDoor() {
@@ -479,7 +478,7 @@ void AsScene2201Door::stCloseDoor() {
startAnimation(0xE2CB0412, -1, -1);
_playBackwards = true;
_newStickFrameIndex = 0;
- _soundResource.play(calcHash("fxDoorClose33"));
+ playSound(0, calcHash("fxDoorClose33"));
}
Class444::Class444(NeverhoodEngine *vm, int pointIndex, int spriteIndex)
@@ -671,8 +670,7 @@ static const uint32 kSsScene2202PuzzleTileFileHashes2[] = {
};
SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value)
- : StaticSprite(vm, 900), _soundResource1(vm), _soundResource2(vm), _parentScene(parentScene),
- _value(value), _tileIndex(tileIndex), _isMoving(false) {
+ : StaticSprite(vm, 900), _parentScene(parentScene), _value(value), _tileIndex(tileIndex), _isMoving(false) {
SetUpdateHandler(&SsScene2202PuzzleTile::update);
SetMessageHandler(&SsScene2202PuzzleTile::handleMessage);
@@ -694,8 +692,8 @@ SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentS
processDelta();
_needRefresh = true;
StaticSprite::update();
- _soundResource1.load(0x40958621);
- _soundResource2.load(0x51108241);
+ loadSound(0, 0x40958621);
+ loadSound(1, 0x51108241);
}
void SsScene2202PuzzleTile::update() {
@@ -853,7 +851,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
else
_xFlagPos = _x / 2 + _newX;
}
- _soundResource1.play();
+ playSound(0);
} else {
SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileY);
if (_yIncr > 0) {
@@ -867,7 +865,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
else
_xFlagPos = _y / 2 + _newY;
}
- _soundResource2.play();
+ playSound(1);
}
}
@@ -885,8 +883,8 @@ void SsScene2202PuzzleTile::stopMoving() {
}
Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
- _isSolved(false), _leaveScene(false), _isTileMoving(false), _movingTileSprite(NULL), _doneMovingTileSprite(NULL) {
+ : Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isTileMoving(false),
+ _movingTileSprite(NULL), _doneMovingTileSprite(NULL) {
// TODO initScene2201Vars();
SetMessageHandler(&Scene2202::handleMessage);
@@ -915,8 +913,8 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x85500158, 400);
insertStaticSprite(0x25547028, 600);
- _soundResource1.load(0x68E25540);
- _soundResource2.load(0x40400457);
+ loadSound(0, 0x68E25540);
+ loadSound(1, 0x40400457);
_vm->_soundMan->addSound(0x60400854, 0x8101A241);
_vm->_soundMan->playSoundLooping(0x8101A241);
@@ -930,12 +928,12 @@ Scene2202::~Scene2202() {
void Scene2202::update() {
Scene::update();
- if (_leaveScene && !_soundResource2.isPlaying()) {
+ if (_leaveScene && !isSoundPlaying(1)) {
leaveScene(0);
}
- if (_isSolved && !_soundResource1.isPlaying()) {
- _soundResource2.play();
+ if (_isSolved && !isSoundPlaying(0)) {
+ playSound(1);
_isSolved = false;
_leaveScene = true;
}
@@ -954,7 +952,7 @@ void Scene2202::update() {
setSurfacePriority(_doneMovingTileSprite->getSurface(), _surfacePriority);
_doneMovingTileSprite = NULL;
if (testIsSolved()) {
- _soundResource1.play();
+ playSound(0);
setGlobalVar(0x404290D5, 1);
_isSolved = true;
}
@@ -1055,8 +1053,7 @@ static const uint32 kAsScene2203DoorFileHashes[] = {
};
AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint index)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene),
- _index(index) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2203Door::handleMessage);
@@ -1104,7 +1101,7 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
}
void AsScene2203Door::openDoor() {
- _soundResource.play(0x341014C4);
+ playSound(0, 0x341014C4);
startAnimation(kAsScene2203DoorFileHashes[_index], 1, -1);
}
@@ -1407,7 +1404,7 @@ static const int16 kClass603XDeltas2[] = {
};
Class603::Class603(NeverhoodEngine *vm, uint32 fileHash)
- : StaticSprite(vm, fileHash, 200), _soundResource(vm) {
+ : StaticSprite(vm, fileHash, 200) {
if (getGlobalVar(0x18890C91))
_x -= 63;
@@ -1428,13 +1425,13 @@ uint32 Class603::handleMessage(int messageNum, const MessageParam ¶m, Entity
_index = 0;
SetMessageHandler(NULL);
SetSpriteUpdate(&Class603::spriteUpdate481E60);
- _soundResource.play(0x032746E0);
+ playSound(0, 0x032746E0);
break;
case 0x4809:
_index = 0;
SetMessageHandler(NULL);
SetSpriteUpdate(&Class603::spriteUpdate481E90);
- _soundResource.play(0x002642C0);
+ playSound(0, 0x002642C0);
break;
}
return messageResult;
@@ -1520,7 +1517,7 @@ uint32 Class607::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm) {
+ : Scene(vm, parentModule, true) {
uint32 fileHash;
@@ -1580,7 +1577,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
sub4819D0();
- _soundResource.play(0x53B8284A);
+ playSound(0, 0x53B8284A);
} else if (which == 3) {
insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
if (getGlobalVar(0xC0418A02))
@@ -1695,8 +1692,7 @@ static const uint32 kScene2207FileHashes[] = {
};
AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 900), _parentScene(parentScene), _soundResource(vm),
- _pointIndex(0), _destPointIndex(0), _destPointIndexDelta(0) {
+ : AnimatedSprite(vm, 900), _parentScene(parentScene), _pointIndex(0), _destPointIndex(0), _destPointIndexDelta(0) {
NPoint pt;
@@ -1728,7 +1724,7 @@ void AsScene2207Elevator::update() {
_destPointIndexDelta = 0;
} else {
_vm->_soundMan->deleteSound(0xD3B02847);
- _soundResource.play(0x53B8284A);
+ playSound(0, 0x53B8284A);
}
}
}
@@ -1744,7 +1740,7 @@ void AsScene2207Elevator::update() {
_destPointIndexDelta = 0;
} else {
_vm->_soundMan->deleteSound(0xD3B02847);
- _soundResource.play(0x53B8284A);
+ playSound(0, 0x53B8284A);
}
}
}
@@ -1811,7 +1807,7 @@ void AsScene2207Elevator::moveToY(int16 y) {
}
AsScene2207Lever::AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX)
- : AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2207Lever::handleMessage);
@@ -1853,7 +1849,7 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
void AsScene2207Lever::stLeverDown() {
startAnimation(0x80880090, 1, -1);
FinalizeState(&AsScene2207Lever::stLeverDownEvent);
- _soundResource.play(0x40581882);
+ playSound(0, 0x40581882);
}
void AsScene2207Lever::stLeverDownEvent() {
@@ -1864,7 +1860,7 @@ void AsScene2207Lever::stLeverUp() {
startAnimation(0x80880090, 6, -1);
FinalizeState(&AsScene2207Lever::stLeverUpEvent);
_playBackwards = true;
- _soundResource.play(0x40581882);
+ playSound(0, 0x40581882);
}
void AsScene2207Lever::stLeverUpEvent() {
@@ -1872,8 +1868,7 @@ void AsScene2207Lever::stLeverUpEvent() {
}
AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1200), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _soundResource4(vm), _idle(true) {
+ : AnimatedSprite(vm, 1200), _idle(true) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);
@@ -1882,9 +1877,9 @@ AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm
_y = 320;
startAnimation(0xCCFD6090, 0, -1);
_newStickFrameIndex = 0;
- _soundResource2.load(0x40330872);
- _soundResource3.load(0x72A2914A);
- _soundResource4.load(0xD4226080);
+ loadSound(1, 0x40330872);
+ loadSound(2, 0x72A2914A);
+ loadSound(3, 0xD4226080);
}
AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() {
@@ -1900,19 +1895,19 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
_vm->_soundMan->addSound(0x80D00820, 0x12121943);
_vm->_soundMan->playSoundLooping(0x12121943);
} else if (param.asInteger() == 0x834AB011) {
- _soundResource1.stop();
- _soundResource2.stop();
- _soundResource3.stop();
- _soundResource4.stop();
+ stopSound(0);
+ stopSound(1);
+ stopSound(2);
+ stopSound(3);
_vm->_soundMan->deleteSound(0x12121943);
} else if (param.asInteger() == 0x3A980501) {
- _soundResource2.play();
+ playSound(1);
} else if (param.asInteger() == 0x2A2AD498) {
- _soundResource3.play();
+ playSound(2);
} else if (param.asInteger() == 0xC4980008) {
- _soundResource4.play();
+ playSound(3);
} else if (param.asInteger() == 0x06B84228) {
- _soundResource1.play(0xE0702146);
+ playSound(0, 0xE0702146);
}
}
break;
@@ -1945,10 +1940,10 @@ void AsScene2207WallRobotAnimation::stStopAnimation() {
void AsScene2207WallRobotAnimation::cbStopAnimation() {
stopAnimation();
- _soundResource1.stop();
- _soundResource2.stop();
- _soundResource3.stop();
- _soundResource4.stop();
+ stopSound(0);
+ stopSound(1);
+ stopSound(2);
+ stopSound(3);
_vm->_soundMan->deleteSound(0x12121943);
_idle = true;
setVisible(false);
@@ -2011,8 +2006,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
}
Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm),
- _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
+ : Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
//DEBUG
setGlobalVar(0x4D080E54, 1);
@@ -2094,7 +2088,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
sendMessage(_klayman, 0x2001, 0);
sendMessage(_asElevator, 0x2000, 480);
- _soundResource2.load(calcHash("fxFogHornSoft"));
+ loadSound(1, calcHash("fxFogHornSoft"));
}
@@ -2166,10 +2160,10 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _ssButton) {
if (getSubVar(0x14800353, 0x40119852)) {
setSubVar(0x14800353, 0x40119852, 0);
- _soundResource1.play(calcHash("fx3LocksDisable"));
+ playSound(0, calcHash("fx3LocksDisable"));
} else {
setSubVar(0x14800353, 0x40119852, 1);
- _soundResource2.play();
+ playSound(1);
}
}
break;
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 76a5950..3767b7b 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -76,7 +76,6 @@ class AsScene2201Door : public AnimatedSprite {
public:
AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *doorLightSprite, bool flag1);
protected:
- SoundResource _soundResource;
Klayman *_klayman;
Sprite *_doorLightSprite;
bool _doorOpen;
@@ -124,8 +123,6 @@ protected:
int16 _xFlagPos;
bool _counterDirection;
bool _isMoving;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void suMoveTileX();
@@ -139,8 +136,6 @@ public:
Scene2202(NeverhoodEngine *vm, Module *parentModule, int which);
~Scene2202();
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
Sprite *_movingTileSprite;
Sprite *_doneMovingTileSprite;
bool _isTileMoving;
@@ -168,7 +163,6 @@ public:
AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint index);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
Sprite *_otherDoor;
uint _index;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -216,7 +210,6 @@ public:
Class603(NeverhoodEngine *vm, uint32 fileHash);
protected:
int _index;
- SoundResource _soundResource;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void spriteUpdate481E60();
@@ -253,7 +246,6 @@ protected:
Sprite *_sprite5;
Sprite *_class604;
Sprite *_class607;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void sub481950();
void sub4819D0();
@@ -266,7 +258,6 @@ public:
~AsScene2207Elevator();
protected:
Scene *_parentScene;
- SoundResource _soundResource;
NPointArray *_pointArray;
int16 _pointIndex;
int16 _destPointIndex, _destPointIndexDelta;
@@ -282,7 +273,6 @@ public:
AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stLeverDown();
void stLeverDownEvent();
@@ -295,10 +285,6 @@ public:
AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene);
~AsScene2207WallRobotAnimation();
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
bool _idle;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stStartAnimation();
@@ -326,8 +312,6 @@ class Scene2207 : public Scene {
public:
Scene2207(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
Sprite *_asElevator;
Sprite *_ssMaskPart1;
Sprite *_ssMaskPart2;
Commit: 0c5a5b3c62826904166847b2626fe37b62023547
https://github.com/scummvm/scummvm/commit/0c5a5b3c62826904166847b2626fe37b62023547
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2400
Changed paths:
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index f1f9f04..6c12006 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -201,7 +201,7 @@ static const uint32 kAsScene2401WaterSpitFileHashes1[] = {
};
AsScene2401WaterSpit::AsScene2401WaterSpit(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200), _soundResource(vm) {
+ : AnimatedSprite(vm, 1200) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2401WaterSpit::handleMessage);
@@ -217,13 +217,13 @@ uint32 AsScene2401WaterSpit::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x120A0013)
- _soundResource.play(kAsScene2401WaterSpitFileHashes1[_soundIndex]);
+ playSound(0, kAsScene2401WaterSpitFileHashes1[_soundIndex]);
break;
case 0x2000:
_x = 240;
_y = 447;
_soundIndex = getSubVar(0x0800547C, param.asInteger());
- _soundResource.play(0x48640244);
+ playSound(0, 0x48640244);
startAnimation(kAsScene2401WaterSpitFileHashes2[param.asInteger()], 0, -1);
setVisible(true);
break;
@@ -323,7 +323,7 @@ uint32 AsScene2401WaterFlushing::handleMessage(int messageNum, const MessagePara
}
AsScene2401Door::AsScene2401Door(NeverhoodEngine *vm, bool isOpen)
- : AnimatedSprite(vm, 1100), _countdown(0), _isOpen(isOpen), _soundResource(vm) {
+ : AnimatedSprite(vm, 1100), _countdown(0), _isOpen(isOpen) {
createSurface1(0x44687810, 100);
_x = 320;
@@ -348,7 +348,7 @@ void AsScene2401Door::update() {
startAnimation(0x44687810, -1, -1);
_newStickFrameIndex = 0;
_playBackwards = true;
- _soundResource.play(calcHash("fxDoorClose38"));
+ playSound(0, calcHash("fxDoorClose38"));
}
AnimatedSprite::update();
}
@@ -370,7 +370,7 @@ uint32 AsScene2401Door::handleMessage(int messageNum, const MessageParam ¶m,
_isOpen = true;
setVisible(true);
startAnimation(0x44687810, 0, -1);
- _soundResource.play(calcHash("fxDoorOpen38"));
+ playSound(0, calcHash("fxDoorOpen38"));
NextState(&AsScene2401Door::stDoorOpenFinished);
}
break;
@@ -385,7 +385,7 @@ void AsScene2401Door::stDoorOpenFinished() {
Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _flag(false),
- _soundToggle(false), _asWaterSpitIndex(0), _soundResource1(vm), _soundResource2(vm) {
+ _soundToggle(false), _asWaterSpitIndex(0) {
_vm->gameModule()->initScene2401Vars();
@@ -545,7 +545,7 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (sender == _ssFloorButton && getGlobalVar(0x4E0BE910)) {
_countdown2 = 144;
sendMessage(_asFlowingWater, 0x2002, 0);
- _soundResource1.play(0xE1130324);
+ playSound(0, 0xE1130324);
}
break;
case 0x482A:
@@ -562,9 +562,9 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2401::playPipeSound(uint32 fileHash) {
if (_soundToggle)
- _soundResource1.play(fileHash);
+ playSound(0, fileHash);
else
- _soundResource2.play(fileHash);
+ playSound(1, fileHash);
_soundToggle = !_soundToggle;
}
@@ -577,7 +577,7 @@ static const uint32 kScene2402FileHashes[] = {
};
AsScene2402Door::AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool isOpen)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isOpen(isOpen), _soundResource(vm) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isOpen(isOpen) {
SetUpdateHandler(&AsScene2402Door::update);
SetMessageHandler(&AsScene2402Door::handleMessage);
@@ -600,7 +600,7 @@ void AsScene2402Door::update() {
setVisible(true);
startAnimation(0x80495831, -1, -1);
_playBackwards = true;
- _soundResource.play(calcHash("fxDoorClose38"));
+ playSound(0, calcHash("fxDoorClose38"));
NextState(&AsScene2402Door::stDoorClosingFinished);
}
AnimatedSprite::update();
@@ -623,7 +623,7 @@ uint32 AsScene2402Door::handleMessage(int messageNum, const MessageParam ¶m,
setVisible(true);
startAnimation(0x80495831, 0, -1);
_newStickFrameIndex = -2;
- _soundResource.play(calcHash("fxDoorOpen38"));
+ playSound(0, calcHash("fxDoorOpen38"));
break;
}
return messageResult;
@@ -635,8 +635,7 @@ void AsScene2402Door::stDoorClosingFinished() {
}
AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
- : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown1(0), _countdown2(0),
- _soundResource(vm) {
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown1(0), _countdown2(0) {
createSurface(100, 640, 480); // TODO Use correct size from the two hashes
SetMessageHandler(&Sprite::handleMessage);
@@ -645,7 +644,7 @@ AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
setDoDeltaX(1);
if (!getGlobalVar(0x92603A79)) {
- _soundResource.load(0x58208810);
+ loadSound(0, 0x58208810);
_countdown1 = 48;
startAnimation(0x4919397A, 0, -1);
_newStickFrameIndex = 0;
@@ -709,7 +708,7 @@ uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x431EA0B0) {
- _soundResource.play();
+ playSound(0);
}
break;
case 0x3002:
@@ -720,8 +719,7 @@ uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *
}
Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _soundToggle(false),
- _soundResource1(vm), _soundResource2(vm) {
+ : Scene(vm, parentModule, true), _countdown(0), _soundToggle(false) {
_surfaceFlag = true;
SetMessageHandler(&Scene2402::handleMessage);
@@ -816,14 +814,14 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2402::playPipeSound(uint32 fileHash) {
if (_soundToggle)
- _soundResource1.play(fileHash);
+ playSound(0, fileHash);
else
- _soundResource2.play(fileHash);
+ playSound(1, fileHash);
_soundToggle = !_soundToggle;
}
Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource1(vm), _soundResource2(vm) {
+ : Scene(vm, parentModule, true) {
Sprite *tempSprite;
@@ -868,7 +866,7 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite->setClipRect(_sprite1->getDrawRect().x, 0, 640, _sprite2->getDrawRect().y2());
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, _sprite2->getDrawRect().y2());
- _soundResource2.load(calcHash("fxFogHornSoft"));
+ loadSound(1, calcHash("fxFogHornSoft"));
}
@@ -894,10 +892,10 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _ssButton) {
if (getSubVar(0x14800353, 0x304008D2)) {
setSubVar(0x14800353, 0x304008D2, 0);
- _soundResource1.play(calcHash("fx3LocksDisable"));
+ playSound(0, calcHash("fx3LocksDisable"));
} else {
setSubVar(0x14800353, 0x304008D2, 1);
- _soundResource2.play();
+ playSound(1);
}
}
break;
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index e29f03d..bbfa47d 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -54,7 +54,6 @@ public:
AsScene2401WaterSpit(NeverhoodEngine *vm);
protected:
int _soundIndex;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -83,7 +82,6 @@ public:
protected:
int _countdown;
bool _isOpen;
- SoundResource _soundResource;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stDoorOpenFinished();
@@ -107,8 +105,6 @@ protected:
int _countdown2;
int _pipeStatus;
int _asWaterSpitIndex;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void playPipeSound(uint32 fileHash);
@@ -121,7 +117,6 @@ protected:
Scene *_parentScene;
int _countdown;
bool _isOpen;
- SoundResource _soundResource;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stDoorClosingFinished();
@@ -135,7 +130,6 @@ protected:
Klayman *_klayman;
int _countdown1;
int _countdown2;
- SoundResource _soundResource;
void upWait();
void upFocusKlayman();
void stJokeFinished();
@@ -155,8 +149,6 @@ protected:
int _pipeStatus;
int _countdown;
bool _soundToggle;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void playPipeSound(uint32 fileHash);
@@ -173,8 +165,6 @@ protected:
Sprite *_class545;
Sprite *_asLightCord;
bool _flag1;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: fb9d9c30e6a35de21c128abc09e40e1997d882b6
https://github.com/scummvm/scummvm/commit/fb9d9c30e6a35de21c128abc09e40e1997d882b6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2500
Changed paths:
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index a12c516..1efcb25 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -56,8 +56,7 @@ static const uint32 kScene2508StaticSprites2[] = {
static const NRect kScene2508ClipRect2 = NRect(0, 0, 594, 448);
Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _soundResource4(vm), _soundIndex(0) {
+ : Module(vm, parentModule), _soundIndex(0) {
_vm->_soundMan->addMusic(0x29220120, 0x05343184);
_vm->_soundMan->startMusic(0x05343184, 0, 0);
@@ -69,10 +68,10 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- _soundResource1.load(0x00880CCC);
- _soundResource2.load(0x00880CC0);
- _soundResource3.load(0x00880CCC);
- _soundResource4.load(0x00880CC0);
+ loadSound(0, 0x00880CCC);
+ loadSound(1, 0x00880CC0);
+ loadSound(2, 0x00880CCC);
+ loadSound(3, 0x00880CC0);
}
@@ -203,20 +202,7 @@ uint32 Module2500::handleMessage(int messageNum, const MessageParam ¶m, Enti
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x200D:
- switch (_soundIndex) {
- case 0:
- _soundResource1.play();
- break;
- case 1:
- _soundResource2.play();
- break;
- case 2:
- _soundResource3.play();
- break;
- case 3:
- _soundResource4.play();
- break;
- }
+ playSound(_soundIndex);
_soundIndex++;
if (_soundIndex >= 4)
_soundIndex = 0;
@@ -513,8 +499,7 @@ void Scene2501::updateKlaymanCliprect() {
}
Class450::Class450(NeverhoodEngine *vm)
- : StaticSprite(vm, 1400), _countdown(0), _flag1(false), _soundResource1(vm),
- _soundResource2(vm), _soundResource3(vm), _soundResource4(vm) {
+ : StaticSprite(vm, 1400), _countdown(0), _flag1(false) {
_spriteResource.load2(0x070220D9);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -528,26 +513,26 @@ Class450::Class450(NeverhoodEngine *vm)
processDelta();
_needRefresh = true;
setVisible(false);
- _soundResource3.load(0x44043000);
- _soundResource4.load(0x44045000);
- _soundResource1.load(0x4600204C);
- _soundResource2.load(0x408C0034);
+ loadSound(0, 0x4600204C);
+ loadSound(1, 0x408C0034);
+ loadSound(2, 0x44043000);
+ loadSound(3, 0x44045000);
SetMessageHandler(&Class450::handleMessage);
SetUpdateHandler(&Class450::update);
}
void Class450::update() {
StaticSprite::update();
- if (_flag1 && !_soundResource1.isPlaying() && !_soundResource2.isPlaying()) {
- _soundResource4.play();
+ if (_flag1 && !isSoundPlaying(0) && !isSoundPlaying(1)) {
+ playSound(3);
setVisible(false);
_flag1 = false;
}
if (_countdown != 0 && (--_countdown) == 0) {
if (getSubVar(0x14800353, 0x01180951)) {
- _soundResource1.play();
+ playSound(0);
} else {
- _soundResource2.play();
+ playSound(1);
}
_flag1 = true;
}
@@ -565,7 +550,7 @@ uint32 Class450::handleMessage(int messageNum, const MessageParam ¶m, Entity
} else {
setSubVar(0x14800353, 0x01180951, 1);
}
- _soundResource3.play();
+ playSound(2);
}
messageResult = 1;
break;
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index 756c75e..fb61ba5 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -39,10 +39,6 @@ public:
Module2500(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2500();
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
int _soundIndex;
void createScene(int sceneNum, int which);
void updateScene();
@@ -99,10 +95,6 @@ public:
protected:
int _countdown;
bool _flag1;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 26188a3a695d47feea6240695eb87488d67c969a
https://github.com/scummvm/scummvm/commit/26188a3a695d47feea6240695eb87488d67c969a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2600
Changed paths:
engines/neverhood/module2600.cpp
engines/neverhood/module2600.h
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 43c55ea..435c38c 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -206,9 +206,7 @@ void Module2600::updateScene() {
}
SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 1400), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _soundResource4(vm), _parentScene(parentScene),
- _countdown(0) {
+ : StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) {
_spriteResource.load2(0x825A6923);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -222,10 +220,10 @@ SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
processDelta();
_needRefresh = true;
- _soundResource1.load(0x10267160);
- _soundResource2.load(0x7027FD64);
- _soundResource3.load(0x44043000);
- _soundResource4.load(0x44045000);
+ loadSound(0, 0x10267160);
+ loadSound(1, 0x7027FD64);
+ loadSound(2, 0x44043000);
+ loadSound(3, 0x44045000);
SetUpdateHandler(&SsScene2609Button::update);
SetMessageHandler(&SsScene2609Button::handleMessage);
@@ -253,13 +251,13 @@ uint32 SsScene2609Button::handleMessage(int messageNum, const MessageParam ¶
sendMessage(_parentScene, 0x2000, 0);
if (getGlobalVar(0x4E0BE910)) {
setVisible(false);
- _soundResource4.play();
- _soundResource2.play();
+ playSound(3);
+ playSound(1);
_countdown = 12;
} else {
setVisible(true);
- _soundResource3.play();
- _soundResource1.play();
+ playSound(2);
+ playSound(0);
_countdown = 96;
}
}
diff --git a/engines/neverhood/module2600.h b/engines/neverhood/module2600.h
index 04c7800..107ee91 100644
--- a/engines/neverhood/module2600.h
+++ b/engines/neverhood/module2600.h
@@ -45,10 +45,6 @@ public:
SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 73f4e4bcac93cb96b2a6b5cde5b3c0342819fe13
https://github.com/scummvm/scummvm/commit/73f4e4bcac93cb96b2a6b5cde5b3c0342819fe13
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2700
Changed paths:
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index aa5c98e..0a59abf 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -83,8 +83,7 @@ static const uint32 kScene2725StaticSprites[] = {
};
Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _soundResource1(vm), _soundResource2(vm),
- _soundResource3(vm), _soundResource4(vm), _soundIndex(0), _flag1(false) {
+ : Module(vm, parentModule), _soundIndex(0), _flag1(false) {
_vm->_soundMan->addMusic(0x42212411, 0x04020210);
_vm->_soundMan->startMusic(0x04020210, 24, 2);
@@ -99,10 +98,10 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
createScene(0, 0);
}
- _soundResource1.load(0x00880CCC);
- _soundResource2.load(0x00880CC0);
- _soundResource3.load(0x00880CCC);
- _soundResource4.load(0x00880CC0);
+ loadSound(0, 0x00880CCC);
+ loadSound(1, 0x00880CC0);
+ loadSound(2, 0x00880CCC);
+ loadSound(3, 0x00880CC0);
}
@@ -482,20 +481,7 @@ uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Enti
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x200D:
- switch (_soundIndex) {
- case 0:
- _soundResource1.play();
- break;
- case 1:
- _soundResource2.play();
- break;
- case 2:
- _soundResource3.play();
- break;
- case 3:
- _soundResource4.play();
- break;
- }
+ playSound(_soundIndex);
_soundIndex++;
if (_soundIndex >= 4)
_soundIndex = 0;
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index bed9a7d..70c1a80 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -37,10 +37,6 @@ public:
Module2700(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2700();
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
int _soundIndex;
bool _flag1;
uint32 _scene2711StaticSprites[6];
Commit: eca881bd3ece18de6cc24087d66052632d9a7170
https://github.com/scummvm/scummvm/commit/eca881bd3ece18de6cc24087d66052632d9a7170
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module2800
Changed paths:
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 597227c..6d7e49f 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -477,7 +477,7 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
AsScene2803LightCord::AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
- _flag1(false), _flag2(false), _soundResource(vm) {
+ _flag1(false), _flag2(false) {
createSurface(1010, 640, 480); // TODO Use correct size from the two hashes
SetUpdateHandler(&AnimatedSprite::update);
@@ -493,7 +493,7 @@ uint32 AsScene2803LightCord::handleMessage(int messageNum, const MessageParam &p
case 0x100D:
if (!_flag2 && param.asInteger() == calcHash("ClickSwitch")) {
sendMessage(_parentScene, 0x480F, 0);
- _soundResource.play(0x4E1CA4A0);
+ playSound(0, 0x4E1CA4A0);
}
break;
case 0x480F:
@@ -1184,8 +1184,7 @@ void Scene2803b::sub4601F0(bool flag) {
}
SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene)
- : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene),
- _soundResource(vm) {
+ : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene) {
if (getGlobalVar(0x190A1D18))
_spriteResource.load2(0x51A10202);
@@ -1204,7 +1203,7 @@ SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *paren
_needRefresh = true;
SetUpdateHandler(&SsScene2804RedButton::update);
SetMessageHandler(&SsScene2804RedButton::handleMessage);
- _soundResource.load(0x44241240);
+ loadSound(0, 0x44241240);
}
void SsScene2804RedButton::update() {
@@ -1219,7 +1218,7 @@ uint32 SsScene2804RedButton::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x1011:
if (_countdown == 0 && !_parentScene->isWorking()) {
- _soundResource.play();
+ playSound(0);
setVisible(true);
_countdown = 4;
sendMessage(_parentScene, 0x2000, 0);
@@ -1299,7 +1298,7 @@ uint32 SsScene2804LightTarget::handleMessage(int messageNum, const MessageParam
}
SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm)
- : StaticSprite(vm, 900), _soundResource(vm) {
+ : StaticSprite(vm, 900) {
_spriteResource.load2(0x211003A0);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -1312,13 +1311,13 @@ SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm)
setVisible(false);
_needRefresh = true;
StaticSprite::update();
- _soundResource.load(0xCB36BA54);
+ loadSound(0, 0xCB36BA54);
}
void SsScene2804Flash::show() {
setVisible(true);
StaticSprite::update();
- _soundResource.play();
+ playSound(0);
}
SsScene2804BeamCoilBody::SsScene2804BeamCoilBody(NeverhoodEngine *vm)
@@ -1381,8 +1380,7 @@ static const uint32 kAsScene2804CrystalFileHashes[] = {
};
AsScene2804Crystal::AsScene2804Crystal(NeverhoodEngine *vm, AsScene2804CrystalWaves *asCrystalWaves, uint crystalIndex)
- : AnimatedSprite(vm, 1100), _asCrystalWaves(asCrystalWaves), _crystalIndex(crystalIndex),
- _isShowing(false), _soundResource(vm) {
+ : AnimatedSprite(vm, 1100), _asCrystalWaves(asCrystalWaves), _crystalIndex(crystalIndex), _isShowing(false) {
static const NPoint kAsScene2804CrystalPoints[] = {
{204, 196},
@@ -1410,7 +1408,7 @@ AsScene2804Crystal::AsScene2804Crystal(NeverhoodEngine *vm, AsScene2804CrystalWa
_needRefresh = true;
_newStickFrameIndex = _colorNum;
}
- _soundResource.load(0x725294D4);
+ loadSound(0, 0x725294D4);
SetUpdateHandler(&AnimatedSprite::update);
}
@@ -1420,7 +1418,7 @@ void AsScene2804Crystal::show() {
_isShowing = true;
if (_asCrystalWaves)
_asCrystalWaves->show();
- _soundResource.play();
+ playSound(0);
}
}
@@ -1452,8 +1450,7 @@ void AsScene2804Crystal::activate() {
}
SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene2804 *parentScene, AsScene2804Crystal *asCrystal, uint crystalIndex)
- : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene), _asCrystal(asCrystal),
- _crystalIndex(crystalIndex), _soundResource(vm) {
+ : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene), _asCrystal(asCrystal), _crystalIndex(crystalIndex) {
static const uint32 kSsScene2804CrystalButtonFileHashes1[] = {
0x911101B0,
@@ -1486,7 +1483,7 @@ SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene280
_deltaRect = _drawRect;
processDelta();
setVisible(false);
- _soundResource.load(0x44045140);
+ loadSound(0, 0x44045140);
_needRefresh = true;
SetUpdateHandler(&SsScene2804CrystalButton::update);
SetMessageHandler(&SsScene2804CrystalButton::handleMessage);
@@ -1504,7 +1501,7 @@ uint32 SsScene2804CrystalButton::handleMessage(int messageNum, const MessagePara
switch (messageNum) {
case 0x1011:
if (_countdown == 0 && !_parentScene->isWorking()) {
- _soundResource.play();
+ playSound(0);
setVisible(true);
_countdown = 4;
_asCrystal->activate();
@@ -1516,8 +1513,7 @@ uint32 SsScene2804CrystalButton::handleMessage(int messageNum, const MessagePara
}
AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2804BeamCoilBody *ssBeamCoilBody)
- : AnimatedSprite(vm, 1400), _parentScene(parentScene), _ssBeamCoilBody(ssBeamCoilBody),
- _countdown(0), _soundResource(vm) {
+ : AnimatedSprite(vm, 1400), _parentScene(parentScene), _ssBeamCoilBody(ssBeamCoilBody), _countdown(0) {
createSurface1(0x00494891, 1000);
_x = 125;
@@ -1525,7 +1521,7 @@ AsScene2804BeamCoil::AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene
setVisible(false);
_needRefresh = true;
AnimatedSprite::updatePosition();
- _soundResource.load(0x6352F051);
+ loadSound(0, 0x6352F051);
_vm->_soundMan->addSound(0xC5EA0B28, 0xEF56B094);
SetUpdateHandler(&AsScene2804BeamCoil::update);
SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
@@ -1564,7 +1560,7 @@ void AsScene2804BeamCoil::show() {
// TODO _ssBeamCoilBody->update(); -> show()
setVisible(true);
startAnimation(0x00494891, 0, -1);
- _soundResource.play();
+ playSound(0);
SetMessageHandler(&AsScene2804BeamCoil::hmBeaming);
NextState(&AsScene2804BeamCoil::stBeaming);
}
@@ -1842,7 +1838,7 @@ uint32 Scene2805::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
AsScene2806Spew::AsScene2806Spew(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200), _soundResource(vm) {
+ : AnimatedSprite(vm, 1200) {
createSurface1(0x04211490, 1200);
_x = 378;
@@ -1857,7 +1853,7 @@ uint32 AsScene2806Spew::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
- _soundResource.play(0x48640244);
+ playSound(0, 0x48640244);
startAnimation(0x04211490, 0, -1);
setVisible(true);
break;
@@ -2137,10 +2133,7 @@ void SsScene2808Dispenser::startCountdown(int index) {
}
AsScene2808TestTube::AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum, int testTubeIndex, SsScene2808Dispenser *ssDispenser)
- : AnimatedSprite(vm, 1100), _testTubeSetNum(testTubeSetNum), _testTubeIndex(testTubeIndex), _ssDispenser(ssDispenser),
- _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _soundResource4(vm), _soundResource5(vm), _soundResource6(vm),
- _soundResource7(vm), _soundResource8(vm), _soundResource9(vm), _fillLevel(0) {
+ : AnimatedSprite(vm, 1100), _testTubeSetNum(testTubeSetNum), _testTubeIndex(testTubeIndex), _ssDispenser(ssDispenser), _fillLevel(0) {
if (testTubeSetNum == 0) {
_x = 504;
@@ -2154,16 +2147,16 @@ AsScene2808TestTube::AsScene2808TestTube(NeverhoodEngine *vm, int testTubeSetNum
createSurface1(kClass490FileHashes[testTubeIndex], 1100);
if (testTubeSetNum == 0) {
- _soundResource1.load(0x30809E2D);
- _soundResource2.load(0x72811E2D);
- _soundResource3.load(0x78B01625);
+ loadSound(0, 0x30809E2D);
+ loadSound(1, 0x72811E2D);
+ loadSound(2, 0x78B01625);
} else {
- _soundResource4.load(0x70A41E0C);
- _soundResource5.load(0x50205E2D);
- _soundResource6.load(0xF8621E2D);
- _soundResource7.load(0xF1A03C2D);
- _soundResource8.load(0x70A43D2D);
- _soundResource9.load(0xF0601E2D);
+ loadSound(3, 0x70A41E0C);
+ loadSound(4, 0x50205E2D);
+ loadSound(5, 0xF8621E2D);
+ loadSound(6, 0xF1A03C2D);
+ loadSound(7, 0x70A43D2D);
+ loadSound(8, 0xF0601E2D);
}
startAnimation(kClass490FileHashes[testTubeIndex], 0, -1);
@@ -2194,16 +2187,18 @@ void AsScene2808TestTube::fill() {
if ((int)_fillLevel >= _testTubeSetNum * 3 + 3)
return;
+ // TODO Remove the two switches
+
if (_testTubeSetNum == 0) {
switch (_fillLevel) {
case 0:
- _soundResource1.play();
+ playSound(0);
break;
case 1:
- _soundResource2.play();
+ playSound(1);
break;
case 2:
- _soundResource3.play();
+ playSound(2);
break;
}
setVisible(true);
@@ -2212,22 +2207,22 @@ void AsScene2808TestTube::fill() {
} else {
switch (_fillLevel) {
case 0:
- _soundResource4.play();
+ playSound(3);
break;
case 1:
- _soundResource5.play();
+ playSound(4);
break;
case 2:
- _soundResource6.play();
+ playSound(5);
break;
case 3:
- _soundResource7.play();
+ playSound(6);
break;
case 4:
- _soundResource8.play();
+ playSound(7);
break;
case 5:
- _soundResource9.play();
+ playSound(8);
break;
}
setVisible(true);
@@ -2252,10 +2247,9 @@ void AsScene2808TestTube::flush() {
}
AsScene2808Handle::AsScene2808Handle(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum)
- : AnimatedSprite(vm, 1300), _parentScene(parentScene), _testTubeSetNum(testTubeSetNum), _isActivated(false),
- _soundResource(vm) {
+ : AnimatedSprite(vm, 1300), _parentScene(parentScene), _testTubeSetNum(testTubeSetNum), _isActivated(false) {
- _soundResource.load(0xE18D1F30);
+ loadSound(0, 0xE18D1F30);
_x = 320;
_y = 240;
if (_testTubeSetNum == 1)
@@ -2275,7 +2269,7 @@ uint32 AsScene2808Handle::handleMessage(int messageNum, const MessageParam ¶
case 0x1011:
if (!_isActivated) {
sendMessage(_parentScene, 0x2001, 0);
- _soundResource.play();
+ playSound(0);
activate();
}
messageResult = 1;
@@ -2308,8 +2302,7 @@ void AsScene2808Handle::stActivated() {
}
AsScene2808Flow::AsScene2808Flow(NeverhoodEngine *vm, Scene *parentScene, int testTubeSetNum)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _testTubeSetNum(testTubeSetNum),
- _soundResource(vm) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _testTubeSetNum(testTubeSetNum) {
if (testTubeSetNum == 0) {
_x = 312;
@@ -2323,7 +2316,7 @@ AsScene2808Flow::AsScene2808Flow(NeverhoodEngine *vm, Scene *parentScene, int te
setVisible(false);
_newStickFrameIndex = 0;
_needRefresh = true;
- _soundResource.load(0x6389B652);
+ loadSound(0, 0x6389B652);
SetUpdateHandler(&AnimatedSprite::update);
AnimatedSprite::updatePosition();
}
@@ -2343,7 +2336,7 @@ void AsScene2808Flow::start() {
setVisible(true);
SetMessageHandler(&AsScene2808Flow::hmFlowing);
NextState(&AsScene2808Flow::stKeepFlowing);
- _soundResource.play();
+ playSound(0);
}
void AsScene2808Flow::stKeepFlowing() {
@@ -2481,7 +2474,7 @@ bool Scene2808::isAnyTestTubeFilled() {
}
AsScene2809Spew::AsScene2809Spew(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200), _soundResource(vm) {
+ : AnimatedSprite(vm, 1200) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2809Spew::handleMessage);
@@ -2496,7 +2489,7 @@ uint32 AsScene2809Spew::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
- _soundResource.play(0x48640244);
+ playSound(0, 0x48640244);
startAnimation(0x04211490, 0, -1);
setVisible(true);
break;
@@ -2955,7 +2948,7 @@ void AsScene2812Rope::sub413E00() {
}
AsScene2812TrapDoor::AsScene2812TrapDoor(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 0x805D0029, 100, 320, 240), _soundResource(vm) {
+ : AnimatedSprite(vm, 0x805D0029, 100, 320, 240) {
SetMessageHandler(&AsScene2812TrapDoor::handleMessage);
_newStickFrameIndex = 0;
@@ -2966,7 +2959,7 @@ uint32 AsScene2812TrapDoor::handleMessage(int messageNum, const MessageParam &pa
switch (messageNum) {
case 0x2000:
startAnimation(0x805D0029, 0, -1);
- _soundResource.play(0xEA005F40);
+ playSound(0, 0xEA005F40);
_newStickFrameIndex = -2;
break;
}
@@ -3133,8 +3126,7 @@ void Scene2812::setPalStatus(int fadeTime) {
}
Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _scrollIndex(0),
- _soundResource1(vm), _soundResource2(vm), _soundResource3(vm) {
+ : Scene(vm, parentModule, true), _countdown(0), _scrollIndex(0) {
SetMessageHandler(&Scene2822::handleMessage);
SetUpdateHandler(&Scene2822::update);
@@ -3145,7 +3137,7 @@ Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x0028D089, 20, 620);
_ssButton = insertStaticSprite(0x1A4D4120, 1100);
_ssButton->setVisible(false);
- _soundResource3.load(0x19044E72);
+ loadSound(2, 0x19044E72);
}
void Scene2822::update() {
@@ -3163,7 +3155,7 @@ void Scene2822::update() {
_countdownStatus = 1;
_countdown = 48;
} else if (_countdownStatus == 1) {
- _soundResource1.play(0x1384CB60);
+ playSound(0, 0x1384CB60);
_countdownStatus = 2;
_countdown = 12;
} else if (_countdownStatus == 2 && getGlobalVar(0x00188211)) {
@@ -3192,12 +3184,12 @@ uint32 Scene2822::handleMessage(int messageNum, const MessageParam ¶m, Entit
_ssButton->setVisible(true);
_countdownStatus = 0;
_countdown = 12;
- _soundResource2.play(0x44061000);
+ playSound(1, 0x44061000);
if (getGlobalVar(0x0018CA22) == 0) {
setGlobalVar(0x0018CA22, 1);
setGlobalVar(0x00188211, 1);
SetMessageHandler(NULL);
- _soundResource3.play();
+ playSound(2);
_mouseCursor->setVisible(false);
}
}
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 89e4d71..b5827bf 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -62,7 +62,6 @@ public:
void setFileHashes(uint32 fileHash1, uint32 fileHash2);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
uint32 _fileHash1, _fileHash2;
bool _flag1, _flag2;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -149,7 +148,6 @@ class SsScene2804RedButton : public StaticSprite {
public:
SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene);
protected:
- SoundResource _soundResource;
Scene2804 *_parentScene;
int _countdown;
void update();
@@ -179,8 +177,6 @@ class SsScene2804Flash : public StaticSprite {
public:
SsScene2804Flash(NeverhoodEngine *vm);
void show();
-protected:
- SoundResource _soundResource;
};
class AsScene2804CrystalWaves : public AnimatedSprite {
@@ -205,14 +201,12 @@ protected:
int16 _colorNum;
bool _isLightOn;
bool _isShowing;
- SoundResource _soundResource;
};
class SsScene2804CrystalButton : public StaticSprite {
public:
SsScene2804CrystalButton(NeverhoodEngine *vm, Scene2804 *parentScene, AsScene2804Crystal *asCrystal, uint crystalIndex);
protected:
- SoundResource _soundResource;
Scene2804 *_parentScene;
AsScene2804Crystal *_asCrystal;
uint _crystalIndex;
@@ -226,7 +220,6 @@ public:
AsScene2804BeamCoil(NeverhoodEngine *vm, Scene *parentScene, SsScene2804BeamCoilBody *ssBeamCoilBody);
virtual ~AsScene2804BeamCoil();
protected:
- SoundResource _soundResource;
Scene *_parentScene;
SsScene2804BeamCoilBody *_ssBeamCoilBody;
int _countdown;
@@ -280,7 +273,6 @@ class AsScene2806Spew : public AnimatedSprite {
public:
AsScene2806Spew(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -332,15 +324,6 @@ protected:
int _testTubeSetNum;
uint32 _fillLevel;
int _testTubeIndex;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
- SoundResource _soundResource4;
- SoundResource _soundResource5;
- SoundResource _soundResource6;
- SoundResource _soundResource7;
- SoundResource _soundResource8;
- SoundResource _soundResource9;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -353,7 +336,6 @@ protected:
Scene *_parentScene;
int _testTubeSetNum;
bool _isActivated;
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmActivating(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -366,7 +348,6 @@ public:
protected:
Scene *_parentScene;
int _testTubeSetNum;
- SoundResource _soundResource;
uint32 hmFlowing(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -398,7 +379,6 @@ class AsScene2809Spew : public AnimatedSprite {
public:
AsScene2809Spew(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -468,7 +448,6 @@ class AsScene2812TrapDoor : public AnimatedSprite {
public:
AsScene2812TrapDoor(NeverhoodEngine *vm);
protected:
- SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -503,9 +482,6 @@ protected:
int _scrollIndex;
int _countdown;
int _countdownStatus;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 45da15adce31f2f46d52ab8a9f81f367bcbc9e2e
https://github.com/scummvm/scummvm/commit/45da15adce31f2f46d52ab8a9f81f367bcbc9e2e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Module3000 (dirty, TODO)
Changed paths:
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 3a6209e..9ccda91 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -456,8 +456,7 @@ static const uint32 kSsScene3009SymbolArrowFileHashes2[] = {
};
SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene)
- : StaticSprite(vm, 1400), _soundResource(vm), _parentScene(parentScene),
- _flag1(false) {
+ : StaticSprite(vm, 1400), _parentScene(parentScene), _flag1(false) {
_spriteResource.load2(0x120B24B0);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -476,12 +475,12 @@ SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Sc
_needRefresh = true;
SetUpdateHandler(&SsScene3009FireCannonButton::update);
SetMessageHandler(&SsScene3009FireCannonButton::handleMessage);
- _soundResource.load(0x3901B44F);
+ loadSound(0, 0x3901B44F);
}
void SsScene3009FireCannonButton::update() {
StaticSprite::update();
- if (_flag1 && !_soundResource.isPlaying()) {
+ if (_flag1 && !isSoundPlaying(0)) {
sendMessage(_parentScene, 0x2000, 0);
setVisible(false);
}
@@ -494,7 +493,7 @@ uint32 SsScene3009FireCannonButton::handleMessage(int messageNum, const MessageP
if (!_flag1 && !_parentScene->sub462E90()) {
_flag1 = true;
setVisible(true);
- _soundResource.play();
+ playSound(0);
}
messageResult = 1;
break;
@@ -575,8 +574,7 @@ void SsScene3009TargetLine::show() {
}
SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSymbol, int index)
- : StaticSprite(vm, 1400), _soundResource(vm), _asSymbol(asSymbol),
- _index(index), _enabled(true), _countdown(0) {
+ : StaticSprite(vm, 1400), _asSymbol(asSymbol), _index(index), _enabled(true), _countdown(0) {
_incrDecr = _index % 2;
@@ -593,7 +591,7 @@ SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSy
_needRefresh = true;
SetUpdateHandler(&SsScene3009SymbolArrow::update);
SetMessageHandler(&SsScene3009SymbolArrow::handleMessage);
- _soundResource.load(0x2C852206);
+ loadSound(0, 0x2C852206);
}
void SsScene3009SymbolArrow::hide() {
@@ -625,7 +623,7 @@ uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam
_drawRect.y = 0;
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
- _soundResource.play();
+ playSound(0);
sendMessage(_asSymbol, 0x2005, _incrDecr);
}
messageResult = 1;
@@ -1072,9 +1070,7 @@ static const uint32 kAsScene3010DeadBoltFileHashes1[] = {
};
SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene *parentScene, int buttonIndex, int initCountdown, bool initDisabled)
- : StaticSprite(vm, 900), _parentScene(parentScene), _soundResource1(vm),
- _soundResource2(vm), _soundResource3(vm), _buttonLocked(false), _countdown1(0),
- _countdown2(0), _buttonIndex(buttonIndex) {
+ : StaticSprite(vm, 900), _parentScene(parentScene), _buttonLocked(false), _countdown1(0), _countdown2(0), _buttonIndex(buttonIndex) {
NDimensions dimensions1, dimensions2;
@@ -1092,9 +1088,9 @@ SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene
} else if (_buttonEnabled) {
_countdown1 = initCountdown * 12 + 1;
}
- _soundResource1.load(0xF4217243);
- _soundResource2.load(0x44049000);
- _soundResource3.load(0x6408107E);
+ loadSound(0, 0xF4217243);
+ loadSound(1, 0x44049000);
+ loadSound(2, 0x6408107E);
SetUpdateHandler(&SsScene3010DeadBoltButton::update);
SetMessageHandler(&SsScene3010DeadBoltButton::handleMessage);
}
@@ -1102,7 +1098,7 @@ SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene
void SsScene3010DeadBoltButton::update() {
if (_countdown1 != 0 && (--_countdown1 == 0)) {
- _soundResource1.play();
+ playSound(0);
setVisible(false);
setSprite(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
}
@@ -1120,8 +1116,8 @@ uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessagePar
case 0x1011:
if (!_buttonLocked && _countdown1 == 0) {
if (_buttonEnabled) {
- _soundResource2.play();
- _soundResource3.play();
+ playSound(1);
+ playSound(2);
setVisible(true);
_buttonLocked = true;
sendMessage(_parentScene, 0x2000, _buttonIndex);
@@ -1162,9 +1158,8 @@ void SsScene3010DeadBoltButton::setCountdown(int count) {
}
AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene, int boltIndex, bool initUnlocked)
- : AnimatedSprite(vm, 1100), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _parentScene(parentScene), _boltIndex(boltIndex), _soundToggle(true), _unlocked(false), _locked(false),
- _countdown(0) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _boltIndex(boltIndex), _soundToggle(true),
+ _unlocked(false), _locked(false), _countdown(0) {
_x = kAsScene3010DeadBoltPoints[_boltIndex].x;
_y = kAsScene3010DeadBoltPoints[_boltIndex].y;
@@ -1172,12 +1167,12 @@ AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene
if (getSubVar(0x14800353, kScene3010ButtonNameHashes[_boltIndex])) {
createSurface1(kAsScene3010DeadBoltFileHashes1[_boltIndex], 1200);
startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
- _soundResource1.load(0x46005BC4);
+ loadSound(0, 0x46005BC4);
} else {
createSurface1(kAsScene3010DeadBoltFileHashes2[_boltIndex], 1200);
startAnimation(kAsScene3010DeadBoltFileHashes2[_boltIndex], 0, -1);
- _soundResource1.load(0x420073DC);
- _soundResource2.load(0x420073DC);
+ loadSound(0, 0x420073DC);
+ loadSound(1, 0x420073DC);
}
setVisible(false);
@@ -1226,10 +1221,10 @@ void AsScene3010DeadBolt::unlock(bool skipAnim) {
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
FinalizeState(&AsScene3010DeadBolt::stIdleMessage);
NextState(&AsScene3010DeadBolt::stIdle);
- _soundResource1.play();
+ playSound(0);
}
_unlocked = true;
- _soundResource3.load(0x4010C345);
+ loadSound(2, 0x4010C345);
}
}
@@ -1248,9 +1243,9 @@ void AsScene3010DeadBolt::lock() {
FinalizeState(&AsScene3010DeadBolt::stDisabledMessage);
NextState(&AsScene3010DeadBolt::stIdle);
if (_soundToggle) {
- _soundResource1.play();
+ playSound(0);
} else {
- _soundResource2.play();
+ playSound(1);
}
_soundToggle = !_soundToggle;
}
@@ -1267,7 +1262,7 @@ void AsScene3010DeadBolt::stDisabled() {
FinalizeState(&AsScene3010DeadBolt::stDisabledMessage);
NextState(&AsScene3010DeadBolt::stIdle);
_playBackwards = true;
- _soundResource3.play();
+ playSound(2);
}
void AsScene3010DeadBolt::stDisabledMessage() {
@@ -1276,8 +1271,7 @@ void AsScene3010DeadBolt::stDisabledMessage() {
}
Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundResource(vm), _countdown(0),
- _doorUnlocked(false), _checkUnlocked(false) {
+ : Scene(vm, parentModule, true), _countdown(0), _doorUnlocked(false), _checkUnlocked(false) {
int initCountdown = 0;
@@ -1305,7 +1299,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x02622800, 20, 620);
}
- _soundResource.load(0x68E25540);
+ loadSound(0, 0x68E25540);
SetMessageHandler(&Scene3010::handleMessage);
SetUpdateHandler(&Scene3010::update);
@@ -1369,7 +1363,7 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_boltUnlocked[0] && _boltUnlocked[1] && _boltUnlocked[2]) {
if (!getGlobalVar(0x00040153)) {
setGlobalVar(0x00040153, 1);
- _soundResource.play();
+ playSound(0);
_countdown = 60;
} else {
_countdown = 48;
@@ -1419,15 +1413,14 @@ static const uint32 kAsScene3011SymbolFileHashes[] = {
};
SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bool flag)
- : StaticSprite(vm, 1400), _parentScene(parentScene), _soundResource(vm),
- _countdown(0) {
+ : StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) {
if (flag) {
_spriteResource.load2(0x11282020);
} else {
_spriteResource.load2(0x994D0433);
}
- _soundResource.load(0x44061000);
+ loadSound(0, 0x44061000);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
@@ -1459,7 +1452,7 @@ uint32 SsScene3011Button::handleMessage(int messageNum, const MessageParam ¶
setVisible(true);
_countdown = 4;
sendMessage(_parentScene, 0x2000, 0);
- _soundResource.play();
+ playSound(0);
}
messageResult = 1;
break;
@@ -1468,22 +1461,21 @@ uint32 SsScene3011Button::handleMessage(int messageNum, const MessageParam ¶
}
AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
- : AnimatedSprite(vm, 1000), _soundResource1(vm), _soundResource2(vm),
- _index(index), _flag1(flag), _flag2(false) {
+ : AnimatedSprite(vm, 1000), _index(index), _flag1(flag), _flag2(false) {
if (flag) {
_x = 310;
_y = 200;
createSurface1(kAsScene3011SymbolFileHashes[_index], 1200);
- _soundResource1.load(0x6052C60F);
- _soundResource2.load(0x6890433B);
+ loadSound(0, 0x6052C60F);
+ loadSound(1, 0x6890433B);
} else {
_index = 12;
_x = index * 39 + 96;
_y = 225;
createSurface(1200, 41, 48);
- _soundResource1.load(0x64428609);
- _soundResource2.load(0x7080023B);
+ loadSound(0, 0x64428609);
+ loadSound(1, 0x7080023B);
}
setVisible(false);
_needRefresh = true;
@@ -1495,9 +1487,9 @@ void AsScene3011Symbol::show(bool flag) {
startAnimation(kAsScene3011SymbolFileHashes[_index], 0, -1);
setVisible(true);
if (flag) {
- _soundResource2.play();
+ playSound(1);
} else {
- _soundResource1.play();
+ playSound(0);
}
}
@@ -1508,9 +1500,10 @@ void AsScene3011Symbol::hide() {
void AsScene3011Symbol::stopSound() {
if (_flag2) {
- _soundResource2.stop();
+ Entity::stopSound(1);
} else {
- _soundResource2.stop();
+ // CHECKME this is wrong
+ //_soundResource2.stop();
}
}
@@ -1520,9 +1513,9 @@ void AsScene3011Symbol::change(int index, bool flag) {
startAnimation(kAsScene3011SymbolFileHashes[_index], 0, -1);
setVisible(true);
if (flag) {
- _soundResource2.play();
+ playSound(1);
} else {
- _soundResource1.play();
+ playSound(0);
}
}
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 2e25a0d..0c1df86 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -50,7 +50,6 @@ public:
SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene);
protected:
Scene3009 *_parentScene;
- SoundResource _soundResource;
bool _flag1;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -80,7 +79,6 @@ public:
SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSymbol, int index);
void hide();
protected:
- SoundResource _soundResource;
Sprite *_asSymbol;
int _index;
int _incrDecr;
@@ -162,9 +160,6 @@ public:
void setCountdown(int count);
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
int _buttonIndex;
bool _buttonEnabled;
bool _buttonLocked;
@@ -184,9 +179,6 @@ public:
void unlock(bool skipAnim);
protected:
Scene *_parentScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
int _boltIndex;
int _countdown;
bool _soundToggle;
@@ -204,7 +196,6 @@ class Scene3010 : public Scene {
public:
Scene3010(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- SoundResource _soundResource;
int _countdown;
bool _doorUnlocked;
bool _checkUnlocked;
@@ -223,7 +214,6 @@ public:
SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bool flag);
protected:
Scene *_parentScene;
- SoundResource _soundResource;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -239,8 +229,6 @@ public:
bool getFlag1() { return _flag1; }
int getIndex() { return _index; }
protected:
- SoundResource _soundResource1;
- SoundResource _soundResource2;
bool _flag1;
bool _flag2;
int _index;
Commit: 1b3a686cac9e6c7afab2bec7545ddb18938f1447
https://github.com/scummvm/scummvm/commit/1b3a686cac9e6c7afab2bec7545ddb18938f1447
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Fix AsScene3011Symbol
Changed paths:
engines/neverhood/module1600.cpp
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 8b35942..5c890e0 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1445,7 +1445,7 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (!_flag6) {
if (_flag5)
_asSymbols[_index3]->change(_index1 + 12, false);
- _asSymbols[_index3]->stopSound();
+ _asSymbols[_index3]->stopSymbolSound();
_index3++;
if (_index3 >= 12) {
if (testVars()) {
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 9ccda91..78ab74d 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1498,12 +1498,11 @@ void AsScene3011Symbol::hide() {
setVisible(false);
}
-void AsScene3011Symbol::stopSound() {
+void AsScene3011Symbol::stopSymbolSound() {
if (_flag2) {
- Entity::stopSound(1);
+ stopSound(1);
} else {
- // CHECKME this is wrong
- //_soundResource2.stop();
+ stopSound(0);
}
}
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 0c1df86..2f7c21f 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -224,7 +224,7 @@ public:
AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag);
void show(bool flag);
void hide();
- void stopSound();
+ void stopSymbolSound();
void change(int index, bool flag);
bool getFlag1() { return _flag1; }
int getIndex() { return _index; }
Commit: acdc0256bb6081cc82e4453c79e37b4a651b4feb
https://github.com/scummvm/scummvm/commit/acdc0256bb6081cc82e4453c79e37b4a651b4feb
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:45-07:00
Commit Message:
NEVERHOOD: Change sound stuff in DiskplayerScene
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/diskplayerscene.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 94a5323..cb37a24 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -194,8 +194,7 @@ void Class494::sub43BE20() {
}
DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene)
- : StaticSprite(vm, 1400), _soundResource1(vm), _soundResource2(vm),
- _diskplayerScene(diskplayerScene), _isPlaying(false) {
+ : StaticSprite(vm, 1400), _diskplayerScene(diskplayerScene), _isPlaying(false) {
_spriteResource.load2(0x24A4A664);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -213,8 +212,8 @@ DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene
processDelta();
_needRefresh = true;
StaticSprite::update();
- _soundResource1.load(0x44043000);
- _soundResource2.load(0x44045000);
+ loadSound(0, 0x44043000);
+ loadSound(1, 0x44045000);
SetMessageHandler(&DiskplayerPlayButton::handleMessage);
}
@@ -243,7 +242,7 @@ void DiskplayerPlayButton::press() {
if (!_isPlaying) {
_surface->setVisible(true);
StaticSprite::update();
- _soundResource1.play();
+ playSound(0);
_isPlaying = true;
}
}
@@ -252,24 +251,23 @@ void DiskplayerPlayButton::release() {
if (_isPlaying) {
_surface->setVisible(false);
StaticSprite::update();
- _soundResource2.play();
+ playSound(1);
_isPlaying = false;
}
}
DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int elementIndex, int value)
- : Entity(vm, 0), _diskplayerScene(diskplayerScene), _soundResource(vm), _elementIndex(elementIndex),
- _value(value), _flag2(false), _flag(false), _countdown(0), _initialCountdown(2),
- _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
+ : Entity(vm, 0), _diskplayerScene(diskplayerScene), _elementIndex(elementIndex), _value(value),
+ _flag2(false), _flag(false), _countdown(0), _initialCountdown(2), _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
if (value != 0 && elementIndex < 20) {
_inactiveSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes1[_elementIndex], 1100));
_appearSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes2[_elementIndex], 1000));
_activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes3[_elementIndex], 1100));
- _inactiveSlot->getSurface()->setVisible(false);
- _appearSlot->getSurface()->setVisible(false);
- _activeSlot->getSurface()->setVisible(false);
- _soundResource.load(0x46210074);
+ _inactiveSlot->setVisible(false);
+ _appearSlot->setVisible(false);
+ _activeSlot->setVisible(false);
+ loadSound(0, 0x46210074);
// TODO sound panning stuff
} else if (elementIndex != 20) {
_activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes4[_elementIndex], 1100));
@@ -281,20 +279,16 @@ DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerS
void DiskplayerSlot::update() {
if (_countdown != 0 && (--_countdown == 0)) {
if (_flag) {
- if (_inactiveSlot) {
+ if (_inactiveSlot)
_inactiveSlot->getSurface()->setVisible(true);
- }
- if (_activeSlot) {
+ if (_activeSlot)
_activeSlot->getSurface()->setVisible(false);
- }
_countdown = _initialCountdown / 2;
} else {
- if (_inactiveSlot) {
+ if (_inactiveSlot)
_inactiveSlot->getSurface()->setVisible(false);
- }
- if (_activeSlot) {
+ if (_activeSlot)
_activeSlot->getSurface()->setVisible(true);
- }
_countdown = _initialCountdown;
}
_flag = !_flag;
@@ -302,44 +296,36 @@ void DiskplayerSlot::update() {
}
void DiskplayerSlot::appear() {
- if (_inactiveSlot) {
+ if (_inactiveSlot)
_inactiveSlot->getSurface()->setVisible(true);
- }
- if (_appearSlot) {
+ if (_appearSlot)
_appearSlot->getSurface()->setVisible(true);
- }
- if (_inactiveSlot) {
- _soundResource.play();
- }
+ if (_inactiveSlot)
+ playSound(0);
}
void DiskplayerSlot::play() {
if (!_flag2) {
- if (_inactiveSlot) {
+ if (_inactiveSlot)
_inactiveSlot->getSurface()->setVisible(false);
- }
- if (_activeSlot) {
+ if (_activeSlot)
_activeSlot->getSurface()->setVisible(true);
- }
_flag = true;
_countdown = 0;
}
}
void DiskplayerSlot::activate() {
- if (!_flag2) {
+ if (!_flag2)
_countdown = _initialCountdown;
- }
}
void DiskplayerSlot::stop() {
if (!_flag2) {
- if (_inactiveSlot) {
+ if (_inactiveSlot)
_inactiveSlot->getSurface()->setVisible(true);
- }
- if (_activeSlot) {
+ if (_activeSlot)
_activeSlot->getSurface()->setVisible(false);
- }
_flag = false;
_countdown = 0;
}
diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h
index 7969a7a..d005f79 100644
--- a/engines/neverhood/diskplayerscene.h
+++ b/engines/neverhood/diskplayerscene.h
@@ -48,8 +48,6 @@ public:
void release();
protected:
DiskplayerScene *_diskplayerScene;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
bool _isPlaying;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -64,7 +62,6 @@ public:
void setFlag2(bool value) { _flag2 = value; }
protected:
DiskplayerScene *_diskplayerScene;
- SoundResource _soundResource;
Sprite *_inactiveSlot;
Sprite *_appearSlot;
Sprite *_activeSlot;
Commit: e97bd306824dfbe47f08060b383fd79c163ab7fd
https://github.com/scummvm/scummvm/commit/e97bd306824dfbe47f08060b383fd79c163ab7fd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: Change sound stuff in Klayman
- Also merge some more code into the Klayman class
- Rename hmInsertDiskSide to hmInsertKey (also related code)
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index da3004d..06e6a43 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -56,11 +56,10 @@ static const KlaymanIdleTableItem klaymanTable4[] = {
// Klayman
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
- : AnimatedSprite(vm, objectPriority), _soundResource1(vm), _soundResource2(vm), _soundResource3(vm),
- _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0), _isWalkingOpenDoorNotified(false), _countdown1(0),
- _tapesToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false),
- _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _flagF6(false), _isLeverDown(false),
- _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
+ : AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
+ _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
+ _attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
+ _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -139,7 +138,7 @@ uint32 Klayman::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x04DBC02C) {
- _soundResource1.play(0x44528AA1);
+ playSound(0, 0x44528AA1);
}
break;
}
@@ -147,7 +146,7 @@ uint32 Klayman::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity
}
void Klayman::evIdlePickEarDone() {
- _soundResource1.stop();
+ stopSound(0);
}
void Klayman::stDoIdleSpinHead() {
@@ -169,7 +168,7 @@ uint32 Klayman::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x808A0008) {
- _soundResource1.play(0xD948A340);
+ playSound(0, 0xD948A340);
}
break;
}
@@ -192,7 +191,7 @@ void Klayman::stIdleArms() {
}
void Klayman::evIdleArmsDone() {
- _soundResource1.stop();
+ stopSound(0);
}
uint32 Klayman::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -200,11 +199,11 @@ uint32 Klayman::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *se
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x5A0F0104) {
- _soundResource1.play(0x7970A100);
+ playSound(0, 0x7970A100);
} else if (param.asInteger() == 0x9A9A0109) {
- _soundResource1.play(0xD170CF04);
+ playSound(0, 0xD170CF04);
} else if (param.asInteger() == 0x989A2169) {
- _soundResource1.play(0xD073CF14);
+ playSound(0, 0xD073CF14);
}
break;
}
@@ -230,7 +229,7 @@ uint32 Klayman::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *s
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0D2A0288) {
- _soundResource1.play(0xD192A368);
+ playSound(0, 0xD192A368);
}
break;
}
@@ -256,13 +255,13 @@ uint32 Klayman::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC006000C) {
- _soundResource1.play(0x9D406340);
+ playSound(0, 0x9D406340);
} else if (param.asInteger() == 0x2E4A2940) {
- _soundResource1.play(0x53A4A1D4);
+ playSound(0, 0x53A4A1D4);
} else if (param.asInteger() == 0xAA0A0860) {
- _soundResource1.play(0x5BE0A3C6);
+ playSound(0, 0x5BE0A3C6);
} else if (param.asInteger() == 0xC0180260) {
- _soundResource1.play(0x5D418366);
+ playSound(0, 0x5D418366);
}
break;
}
@@ -355,16 +354,16 @@ uint32 Klayman::handleMessage41D640(int messageNum, const MessageParam ¶m, E
if (param.asInteger() == 0xC1380080) {
if (_attachedSprite) {
sendMessage(_attachedSprite, 0x4806, 0);
- _soundResource1.play(0xC8004340);
+ playSound(0, 0xC8004340);
}
} else if (param.asInteger() == 0x02B20220) {
- _soundResource1.play(0xC5408620);
+ playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x03020231) {
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
} else if (param.asInteger() == 0x67221A03) {
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
} else if (param.asInteger() == 0x925A0C1E) {
- _soundResource1.play(0x40E5884D);
+ playSound(0, 0x40E5884D);
}
break;
}
@@ -416,7 +415,7 @@ uint32 Klayman::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Ent
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x001A2832) {
- _soundResource1.play(0xC0E4884C);
+ playSound(0, 0xC0E4884C);
}
break;
}
@@ -600,9 +599,9 @@ uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x271AA210) {
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x2B22AA81) {
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
}
break;
}
@@ -663,7 +662,7 @@ uint32 Klayman::hmSleeping(int messageNum, const MessageParam ¶m, Entity *se
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x03060012) {
- _soundResource1.play(0xC0238244);
+ playSound(0, 0xC0238244);
}
break;
}
@@ -785,13 +784,13 @@ uint32 Klayman::hmSneaking(int messageNum, const MessageParam ¶m, Entity *se
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
} else if (param.asInteger() == 0x32188010) {
- _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x02A2909C) {
- _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
case 0x3002:
@@ -826,9 +825,9 @@ uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
}
@@ -857,9 +856,9 @@ uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sen
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
}
@@ -977,17 +976,17 @@ uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entit
if (_attachedSprite) {
sendMessage(_attachedSprite, 0x4806, 0);
}
- _soundResource1.play(0x40208200);
+ playSound(0, 0x40208200);
} else if (param.asInteger() == 0x02B20220) {
- _soundResource1.play(0xC5408620);
+ playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x03020231) {
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
} else if (param.asInteger() == 0x67221A03) {
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
} else if (param.asInteger() == 0x2EAE0303) {
- _soundResource1.play(0x03630300);
+ playSound(0, 0x03630300);
} else if (param.asInteger() == 0x61CE4467) {
- _soundResource1.play(0x03630300);
+ playSound(0, 0x03630300);
}
break;
}
@@ -1015,9 +1014,9 @@ uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity
sendMessage(_attachedSprite, 0x480B, 0);
}
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
}
break;
}
@@ -1107,9 +1106,9 @@ uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101)
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
else if (param.asInteger() == 0x0A2A9098)
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
}
return messageResult;
}
@@ -1168,9 +1167,9 @@ uint32 Klayman::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m,
else if (param.asInteger() == 0x110010D1)
sendMessage(_parentScene, 0x482B, 0);
else if (param.asInteger() == 0x32180101)
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
else if (param.asInteger() == 0x0A2A9098)
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
break;
}
return messageResult;
@@ -1272,21 +1271,21 @@ uint32 Klayman::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sen
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02B20220)
- _soundResource1.play(0xC5408620);
+ playSound(0, 0xC5408620);
else if (param.asInteger() == 0x0A720138)
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
else if (param.asInteger() == 0x03020231)
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
else if (param.asInteger() == 0xB613A180)
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
else if (param.asInteger() == 0x67221A03)
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
else if (param.asInteger() == 0x038A010B)
- _soundResource1.play(0x00018040);
+ playSound(0, 0x00018040);
else if (param.asInteger() == 0x422B0280)
- _soundResource1.play(0x166FC6E0);
+ playSound(0, 0x166FC6E0);
else if (param.asInteger() == 0x925A0C1E)
- _soundResource1.play(0x40E5884D);
+ playSound(0, 0x40E5884D);
break;
}
return messageResult;
@@ -1428,9 +1427,9 @@ uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *s
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
}
break;
case 0x3002:
@@ -1473,9 +1472,9 @@ uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *s
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
}
break;
}
@@ -1519,9 +1518,9 @@ uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se
return 0;
case 0x100D:
if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x405002D8);
+ playSound(0, 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0460E2FA);
+ playSound(0, 0x0460E2FA);
}
break;
}
@@ -1555,7 +1554,7 @@ uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *
}
_acceptInput = true;
} else if (param.asInteger() == 0x320AC306) {
- _soundResource1.play(0x5860C640);
+ playSound(0, 0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
@@ -1610,7 +1609,7 @@ uint32 Klayman::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity
sendMessage(_attachedSprite, 0x4806, 0);
}
} else if (param.asInteger() == 0x320AC306) {
- _soundResource1.play(0x5860C640);
+ playSound(0, 0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
@@ -1733,13 +1732,13 @@ uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x489B025C) {
- _soundResource1.play(0x52C4C2D7);
+ playSound(0, 0x52C4C2D7);
} else if (param.asInteger() == 0x400A0E64) {
- _soundResource1.play(0x50E081D9);
+ playSound(0, 0x50E081D9);
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x405002D8);
+ playSound(0, 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0460E2FA);
+ playSound(0, 0x0460E2FA);
}
break;
}
@@ -1753,9 +1752,9 @@ uint32 Klayman::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, E
if (param.asInteger() == 0x01084280) {
_acceptInput = true;
} else if (param.asInteger() == 0x489B025C) {
- _soundResource1.play(0x52C4C2D7);
+ playSound(0, 0x52C4C2D7);
} else if (param.asInteger() == 0x400A0E64) {
- _soundResource1.play(0x50E081D9);
+ playSound(0, 0x50E081D9);
} else if (param.asInteger() == 0x02421405) {
if (_ladderStatus == 1) {
startAnimationByHash(0x3A292504, 0x01084280, 0);
@@ -1817,9 +1816,9 @@ uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity
} else if (param.asInteger() == 0x110010D1) {
sendMessage(_parentScene, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(_soundFlag ? 0x48498E46 : 0x405002D8);
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(_soundFlag ? 0x50399F64 : 0x0460E2FA);
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
}
break;
}
@@ -1873,7 +1872,7 @@ uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x320AC306) {
- _soundResource1.play(0x5860C640);
+ playSound(0, 0x5860C640);
}
break;
}
@@ -1896,11 +1895,11 @@ uint32 Klayman::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Ent
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC61A0119) {
- _soundResource1.play(0x402338C2);
+ playSound(0, 0x402338C2);
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x4924AAC4);
+ playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0A2AA8E0);
+ playSound(0, 0x0A2AA8E0);
}
break;
}
@@ -1997,9 +1996,9 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti
SetMessageHandler(&Klayman::handleMessage41D480);
}
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x405002D8);
+ playSound(0, 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0460E2FA);
+ playSound(0, 0x0460E2FA);
}
break;
case 0x480A:
@@ -2125,29 +2124,27 @@ void Klayman::stInsertDisk() {
}
uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x06040580) {
- if (_tapesToInsert == 0) {
- // TODO: Calc calcHash value somewhere else
- nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
- }
+ if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) {
+ nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
} else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
_tapesToInsert--;
startAnimationByHash(0xD8C8D100, 0x01084280, 0);
} else if (param.asInteger() == 0x062A1510) {
- _soundResource1.play(0x41688704);
+ playSound(0, 0x41688704);
} else if (param.asInteger() == 0x02B20220) {
- _soundResource1.play(0xC5408620);
+ playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x0A720138) {
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
} else if (param.asInteger() == 0xB613A180) {
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
} else if (param.asInteger() == 0x0E040501) {
- _soundResource1.play(0xC6A129C1);
+ playSound(1, 0xC6A129C1);
}
}
- return handleMessage41D480(messageNum, param, sender);
+ return messageResult;
}
void Klayman::walkAlongPathPoints() {
@@ -2232,7 +2229,7 @@ uint32 Klayman::handleMessage41F1D0(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x040C4C01)
- _soundResource1.play(0x01E11140);
+ playSound(0, 0x01E11140);
break;
}
return messageResult;
@@ -2276,7 +2273,7 @@ uint32 Klayman::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, E
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x320AC306)
- _soundResource1.play(0x5860C640);
+ playSound(0, 0x5860C640);
break;
}
return messageResult;
@@ -2333,9 +2330,9 @@ uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam &
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4E0A2C24) {
- _soundResource1.play(0x85B10BB8);
+ playSound(0, 0x85B10BB8);
} else if (param.asInteger() == 0x4E6A0CA0) {
- _soundResource1.play(0xC5B709B0);
+ playSound(0, 0xC5B709B0);
}
break;
}
@@ -2349,7 +2346,7 @@ uint32 Klayman::hmShrink(int messageNum, const MessageParam ¶m, Entity *send
if (param.asInteger() == 0x80C110B5)
sendMessage(_parentScene, 0x482A, 0);
else if (param.asInteger() == 0x33288344)
- _soundResource3.play(0x10688664);
+ playSound(2, 0x10688664);
break;
}
return messageResult;
@@ -2359,7 +2356,7 @@ void Klayman::stShrink() {
_status2 = 0;
_acceptInput = false;
startAnimation(0x1AE88904, 0, -1);
- _soundResource1.play(0x4C69EA53);
+ playSound(0, 0x4C69EA53);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&Klayman::hmShrink);
@@ -2377,6 +2374,172 @@ void Klayman::stStandWonderAbout() {
SetSpriteUpdate(NULL);
}
+uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1008:
+ if (_potionFlag1) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ } else
+ _potionFlag2 = true;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x0002418E)
+ sendMessage(_parentScene, 0x2000, 0);
+ else if (param.asInteger() == 0x924090C2) {
+ _potionFlag1 = true;
+ if (_potionFlag2) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ }
+ } else if (param.asInteger() == 0x004A2148)
+ _potionFlag1 = false;
+ else if (param.asInteger() == 0x02B20220)
+ playSound(0, 0xC5408620);
+ else if (param.asInteger() == 0x0A720138)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0x03020231)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0xB613A180)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x67221A03)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x038A010B)
+ playSound(0, 0x00018040);
+ else if (param.asInteger() == 0x422B0280)
+ playSound(0, 0x166FC6E0);
+ else if (param.asInteger() == 0x925A0C1E)
+ playSound(0, 0x40E5884D);
+ else if (param.asInteger() == 0x000F0082)
+ playSound(0, 0x546CDCC1);
+ else if (param.asInteger() == 0x00020814)
+ playSound(0, 0x786CC6D0);
+ else if (param.asInteger() == 0x06020500)
+ playSound(0, 0x1069C0E1);
+ else if (param.asInteger() == 0x02128C00)
+ playSound(0, 0x5068C4C3);
+ else if (param.asInteger() == 0x82022030)
+ playSound(0, 0x5C48C0E8);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klayman::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101)
+ playSound(0, 0x405002D8);
+ else if (param.asInteger() == 0x0A2A9098)
+ playSound(0, 0x0460E2FA);
+ else if (param.asInteger() == 0xD00A0C0C)
+ playSound(3);
+ else if (param.asInteger() == 0x04121920)
+ playSound(4);
+ else if (param.asInteger() == 0x030B4480)
+ playSound(5);
+ else if (param.asInteger() == 0x422B0280)
+ playSound(6);
+ else if (param.asInteger() == 0x038A010B)
+ playSound(7);
+ else if (param.asInteger() == 0x67221A03)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x02B20220)
+ playSound(0, 0xC5408620);
+ else if (param.asInteger() == 0x925A0C1E)
+ playSound(0, 0x40E5884D);
+ else if (param.asInteger() == 0x03020231)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0x08040840)
+ setDoDeltaX(2);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stGrow() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2838C010, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmGrow);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+void Klayman::stDrinkPotion() {
+ _status2 = 1;
+ _acceptInput = false;
+ _potionFlag1 = false;
+ _potionFlag2 = false;
+ startAnimation(0x1C388C04, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmDrinkPotion);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+uint32 Klayman::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (_keysToInsert == 0 && param.asInteger() == 0x06040580) {
+ nextAnimationByHash(0xDC409440, 0x46431401, 0);
+ } else if (_keysToInsert != 0 && param.asInteger() == 0x46431401) {
+ _keysToInsert--;
+ startAnimationByHash(0xDC409440, 0x01084280, 0);
+ } else if (param.asInteger() == 0x062A1510) {
+ playSound(0, 0x41688704);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ playSound(0, 0x44051000);
+ } else if (param.asInteger() == 0x0E4C8141) {
+ playSound(0, 0xDC4A1280);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stInsertKey() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertKey))) {
+ _status2 = 2;
+ _keysToInsert = 0;
+ for (uint32 i = 0; i < 3; i++) {
+ if (getSubVar(0x0090EA95, i)) {
+ bool more;
+ setSubVar(0x08D0AB11, i, 1);
+ setSubVar(0x0090EA95, i, 0);
+ do {
+ more = false;
+ setSubVar(0xA010B810, i, _vm->_rnd->getRandomNumber(16 - 1));
+ for (uint j = 0; j < i && !more; j++) {
+ if (getSubVar(0x08D0AB11, j) && getSubVar(0xA010B810, j) == getSubVar(0xA010B810, i))
+ more = true;
+ }
+ if (getSubVar(0xA010B810, i) == getSubVar(0x0C10A000, i))
+ more = true;
+ } while (more);
+ _keysToInsert++;
+ }
+ }
+ if (_keysToInsert == 0) {
+ GotoState(NULL);
+ gotoNextStateExt();
+ } else {
+ _acceptInput = false;
+ startAnimation(0xDC409440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F250);
+ SetMessageHandler(&Klayman::hmInsertKey);
+ _keysToInsert--;
+ }
+ }
+}
+
//##############################################################################
// KmScene1001
@@ -2641,7 +2804,7 @@ uint32 KmScene1002::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam
uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x4811:
- _soundResource1.play(0x5252A0E4);
+ playSound(0, 0x5252A0E4);
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
if (_doDeltaX) {
_x = ((Sprite*)sender)->getX() - 75;
@@ -2697,9 +2860,9 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m
} else if (param.asInteger() == 0x88001184) {
sendMessage(_attachedSprite, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x405002D8);
+ playSound(0, 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0460E2FA);
+ playSound(0, 0x0460E2FA);
}
break;
case 0x480A:
@@ -2718,9 +2881,9 @@ uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &
} else if (param.asInteger() == 0x88001184) {
sendMessage(_attachedSprite, 0x482B, 0);
} else if (param.asInteger() == 0x32180101) {
- _soundResource1.play(0x405002D8);
+ playSound(0, 0x405002D8);
} else if (param.asInteger() == 0x0A2A9098) {
- _soundResource1.play(0x0460E2FA);
+ playSound(0, 0x0460E2FA);
}
break;
}
@@ -2741,9 +2904,9 @@ uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m
break;
case 0x100D:
if (param.asInteger() == 0x1A1A0785) {
- _soundResource1.play(0x40F0A342);
+ playSound(0, 0x40F0A342);
} else if (param.asInteger() == 0x60428026) {
- _soundResource1.play(0x40608A59);
+ playSound(0, 0x40608A59);
}
break;
}
@@ -2755,7 +2918,7 @@ uint32 KmScene1002::hmJumpAndFall(int messageNum, const MessageParam ¶m, Ent
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x1307050A) {
- _soundResource1.play(0x40428A09);
+ playSound(0, 0x40428A09);
}
break;
}
@@ -2787,7 +2950,7 @@ void KmScene1002::stJumpToRingVenusFlyTrap() {
}
void KmScene1002::stStandIdleSpecial() {
- _soundResource1.play(0x56548280);
+ playSound(0, 0x56548280);
_status2 = 0;
_acceptInput = false;
_surface->setVisible(false);
@@ -2812,7 +2975,7 @@ void KmScene1002::stSpitOutFall0() {
void KmScene1002::stFalling() {
sendMessage(_parentScene, 0x1024, 1);
- _soundResource1.play(0x41648271);
+ playSound(0, 0x41648271);
_status2 = 1;
_acceptInput = false;
_isWalking = false;
@@ -3166,13 +3329,13 @@ uint32 KmScene1201::hmMatch(int messageNum, const MessageParam ¶m, Entity *s
if (param.asInteger() == 0x51281850) {
setGlobalVar(0x20A0C516, 1);
} else if (param.asInteger() == 0x43000538) {
- _soundResource1.play(0x21043059);
+ playSound(0, 0x21043059);
} else if (param.asInteger() == 0x02B20220) {
- _soundResource1.play(0xC5408620);
+ playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x0A720138) {
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
} else if (param.asInteger() == 0xB613A180) {
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
}
break;
}
@@ -3206,7 +3369,7 @@ uint32 KmScene1201::hmMoveObject(int messageNum, const MessageParam ¶m, Enti
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
- _soundResource1.play(0x405002D8);
+ playSound(0, 0x405002D8);
if (_attachedSprite) {
sendMessage(_attachedSprite, 0x480B, 0);
}
@@ -3228,7 +3391,7 @@ uint32 KmScene1201::hmTumbleHeadless(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x000F0082) {
- _soundResource1.play(0x74E2810F);
+ playSound(0, 0x74E2810F);
}
break;
}
@@ -3267,7 +3430,7 @@ void KmScene1201::stTumbleHeadless() {
SetMessageHandler(&KmScene1201::hmTumbleHeadless);
NextState(&Klayman::stTryStandIdle);
sendMessage(_class464, 0x2006, 0);
- _soundResource1.play(0x62E0A356);
+ playSound(0, 0x62E0A356);
}
}
@@ -3310,11 +3473,11 @@ uint32 KmScene1303::hmPeekWallReturn(int messageNum, const MessageParam ¶m,
if (param.asInteger() == calcHash("PopBalloon")) {
sendMessage(_parentScene, 0x2000, 0);
} else if (param.asInteger() == 0x02B20220) {
- _soundResource1.play(0xC5408620);
+ playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x0A720138) {
- _soundResource1.play(0xD4C08010);
+ playSound(0, 0xD4C08010);
} else if (param.asInteger() == 0xB613A180) {
- _soundResource1.play(0x44051000);
+ playSound(0, 0x44051000);
}
break;
}
@@ -3449,17 +3612,17 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene1305::stCrashDown() {
- _soundResource1.play(0x41648271);
+ playSound(0, 0x41648271);
_status2 = 1;
_acceptInput = false;
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::handleMessage41D480);
- NextState(&KmScene1305::cbCrashDownEvent);
+ NextState(&KmScene1305::stCrashDownFinished);
}
-void KmScene1305::cbCrashDownEvent() {
+void KmScene1305::stCrashDownFinished() {
setDoDeltaX(2);
stTryStandIdle();
}
@@ -3590,7 +3753,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1308::KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -3629,7 +3792,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_INSERT_DISK:
if (param.asInteger() == 1) {
- GotoState(&KmScene1308::stInsertDiskSide);
+ GotoState(&Klayman::stInsertKey);
} else {
GotoState(&Klayman::stInsertDisk);
}
@@ -3663,67 +3826,6 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene1308::hmInsertDiskSide(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (!_flag1 && param.asInteger() == 0x06040580) {
- nextAnimationByHash(0xDC409440, 0x46431401, 0);
- } else if (_flag1 && param.asInteger() == 0x46431401) {
- _flag1 = false;
- startAnimationByHash(0xDC409440, 0x01084280, 0);
- } else if (param.asInteger() == 0x062A1510) {
- _soundResource1.play(0x41688704);
- } else if (param.asInteger() == 0x02B20220) {
- _soundResource1.play(0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- _soundResource1.play(0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- _soundResource1.play(0x44051000);
- } else if (param.asInteger() == 0x0E4C8141) {
- _soundResource1.play(0xDC4A1280);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1308::stInsertDiskSide() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1308::stInsertDiskSide))) {
- _status2 = 2;
- _flag1 = false;
- for (uint i = 0; i < 3; i++) {
- if (getSubVar(0x0090EA95, i)) {
- bool more;
- setSubVar(0x08D0AB11, i, 1);
- setSubVar(0x0090EA95, i, 0);
- do {
- more = false;
- setSubVar(0xA010B810, i, _vm->_rnd->getRandomNumber(16 - 1));
- for (uint j = 0; j < i && !more; j++) {
- if (getSubVar(0x08D0AB11, j) && getSubVar(0xA010B810, j) == getSubVar(0xA010B810, i))
- more = true;
- }
- if (getSubVar(0xA010B810, i) == getSubVar(0x0C10A000, i))
- more = true;
- } while (more);
- _flag1 = true;
- }
- }
- if (!_flag1) {
- gotoState(NULL);
- gotoNextStateExt();
- } else {
- _acceptInput = false;
- startAnimation(0xDC409440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F250);
- SetMessageHandler(&KmScene1308::hmInsertDiskSide);
- _flag1 = false;
- }
- }
-}
-
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4389,9 +4491,9 @@ uint32 KmScene2101::hmHitByDoor(int messageNum, const MessageParam ¶m, Entit
break;
case 0x100D:
if (param.asInteger() == 0x1A1A0785) {
- _soundResource1.play(0x40F0A342);
+ playSound(0, 0x40F0A342);
} else if (param.asInteger() == 0x60428026) {
- _soundResource1.play(0x40608A59);
+ playSound(0, 0x40608A59);
}
break;
}
@@ -4405,7 +4507,7 @@ void KmScene2101::stHitByDoor() {
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene2101::hmHitByDoor);
- _soundResource1.play(0x402E82D4);
+ playSound(0, 0x402E82D4);
}
KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
@@ -5790,17 +5892,16 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000),
- _soundRes1(vm), _soundRes2(vm), _soundRes3(vm), _soundRes4(vm), _soundRes5(vm) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
if (flag) {
// TODO Maybe? Don't know. Set Klayman clip rects
- _soundRes1.load(0x58E0C341);
- _soundRes2.load(0x40A00342);
- _soundRes3.load(0xD0A1C348);
- _soundRes4.load(0x166FC6E0);
- _soundRes5.load(0x00018040);
+ loadSound(3, 0x58E0C341);
+ loadSound(4, 0x40A00342);
+ loadSound(5, 0xD0A1C348);
+ loadSound(6, 0x166FC6E0);
+ loadSound(7, 0x00018040);
}
_dataResource.load(0x98182003);
@@ -5839,7 +5940,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4832:
if (param.asInteger() == 1) {
- GotoState(&KmScene2806::stDrinkPotion);
+ GotoState(&Klayman::stDrinkPotion);
} else {
GotoState(&Klayman::stUseTube);
}
@@ -5848,121 +5949,17 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene2806::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x1008:
- if (_potionFlag1) {
- startAnimationByHash(0x1C388C04, 0x004A2148, 0);
- messageResult = 0;
- } else
- _potionFlag2 = true;
- break;
- case 0x100D:
- if (param.asInteger() == 0x0002418E)
- sendMessage(_parentScene, 0x2000, 0);
- else if (param.asInteger() == 0x924090C2) {
- _potionFlag1 = true;
- if (_potionFlag2) {
- startAnimationByHash(0x1C388C04, 0x004A2148, 0);
- messageResult = 0;
- }
- } else if (param.asInteger() == 0x004A2148)
- _potionFlag1 = false;
- else if (param.asInteger() == 0x02B20220)
- _soundResource1.play(0xC5408620);
- else if (param.asInteger() == 0x0A720138)
- _soundResource1.play(0xD4C08010);
- else if (param.asInteger() == 0x03020231)
- _soundResource1.play(0xD4C08010);
- else if (param.asInteger() == 0xB613A180)
- _soundResource1.play(0x44051000);
- else if (param.asInteger() == 0x67221A03)
- _soundResource1.play(0x44051000);
- else if (param.asInteger() == 0x038A010B)
- _soundResource1.play(0x00018040);
- else if (param.asInteger() == 0x422B0280)
- _soundResource1.play(0x166FC6E0);
- else if (param.asInteger() == 0x925A0C1E)
- _soundResource1.play(0x40E5884D);
- else if (param.asInteger() == 0x00020814)
- _soundResource1.play(0x786CC6D0);
- else if (param.asInteger() == 0x06020500)
- _soundResource1.play(0x1069C0E1);
- else if (param.asInteger() == 0x02128C00)
- _soundResource1.play(0x5068C4C3);
- else if (param.asInteger() == 0x82022030)
- _soundResource1.play(0x5C48C0E8);
- break;
- }
- return messageResult;
-}
-
-uint32 KmScene2806::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101)
- _soundResource1.play(0x405002D8);
- else if (param.asInteger() == 0x0A2A9098)
- _soundResource1.play(0x0460E2FA);
- else if (param.asInteger() == 0xD00A0C0C)
- _soundRes1.play();
- else if (param.asInteger() == 0x04121920)
- _soundRes2.play();
- else if (param.asInteger() == 0x030B4480)
- _soundRes3.play();
- else if (param.asInteger() == 0x422B0280)
- _soundRes4.play();
- else if (param.asInteger() == 0x038A010B)
- _soundRes5.play();
- else if (param.asInteger() == 0x67221A03)
- _soundResource1.play(0x44051000);
- else if (param.asInteger() == 0x02B20220)
- _soundResource1.play(0xC5408620);
- else if (param.asInteger() == 0x925A0C1E)
- _soundResource1.play(0x40E5884D);
- else if (param.asInteger() == 0x03020231)
- _soundResource1.play(0xD4C08010);
- else if (param.asInteger() == 0x08040840)
- setDoDeltaX(2);
- break;
- }
- return messageResult;
-}
-
-void KmScene2806::stGrow() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2838C010, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2806::hmGrow);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-void KmScene2806::stDrinkPotion() {
- _status2 = 1;
- _acceptInput = false;
- _potionFlag1 = false;
- _potionFlag2 = false;
- startAnimation(0x1C388C04, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2806::hmDrinkPotion);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000),
- _soundRes1(vm), _soundRes2(vm), _soundRes3(vm), _soundRes4(vm), _soundRes5(vm) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
if (flag) {
- // TODO Maybe? Don't know. Set Klayman clip rects
- _soundRes1.load(0x58E0C341);
- _soundRes2.load(0x40A00342);
- _soundRes3.load(0xD0A1C348);
- _soundRes4.load(0x166FC6E0);
- _soundRes5.load(0x00018040);
+ // TODO Maybe? Don't know. Set Klayman clip rects
+ loadSound(3, 0x58E0C341);
+ loadSound(4, 0x40A00342);
+ loadSound(5, 0xD0A1C348);
+ loadSound(6, 0x166FC6E0);
+ loadSound(7, 0x00018040);
}
_dataResource.load(0x1830009A);
@@ -6001,7 +5998,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4832:
if (param.asInteger() == 1) {
- GotoState(&KmScene2809::stDrinkPotion);
+ GotoState(&Klayman::stDrinkPotion);
} else {
GotoState(&Klayman::stUseTube);
}
@@ -6010,111 +6007,6 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene2809::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x1008:
- if (_potionFlag1) {
- startAnimationByHash(0x1C388C04, 0x004A2148, 0);
- messageResult = 0;
- } else
- _potionFlag2 = true;
- break;
- case 0x100D:
- if (param.asInteger() == 0x0002418E)
- sendMessage(_parentScene, 0x2000, 0);
- else if (param.asInteger() == 0x924090C2) {
- _potionFlag1 = true;
- if (_potionFlag2) {
- startAnimationByHash(0x1C388C04, 0x004A2148, 0);
- messageResult = 0;
- }
- } else if (param.asInteger() == 0x004A2148)
- _potionFlag1 = false;
- else if (param.asInteger() == 0x02B20220)
- _soundResource1.play(0xC5408620);
- else if (param.asInteger() == 0x0A720138)
- _soundResource1.play(0xD4C08010);
- else if (param.asInteger() == 0x03020231)
- _soundResource1.play(0xD4C08010);
- else if (param.asInteger() == 0xB613A180)
- _soundResource1.play(0x44051000);
- else if (param.asInteger() == 0x67221A03)
- _soundResource1.play(0x44051000);
- else if (param.asInteger() == 0x038A010B)
- _soundResource1.play(0x00018040);
- else if (param.asInteger() == 0x422B0280)
- _soundResource1.play(0x166FC6E0);
- else if (param.asInteger() == 0x925A0C1E)
- _soundResource1.play(0x40E5884D);
- else if (param.asInteger() == 0x000F0082)
- _soundResource1.play(0x546CDCC1);
- else if (param.asInteger() == 0x00020814)
- _soundResource1.play(0x786CC6D0);
- else if (param.asInteger() == 0x06020500)
- _soundResource1.play(0x1069C0E1);
- else if (param.asInteger() == 0x02128C00)
- _soundResource1.play(0x5068C4C3);
- else if (param.asInteger() == 0x82022030)
- _soundResource1.play(0x5C48C0E8);
- break;
- }
- return messageResult;
-}
-
-uint32 KmScene2809::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101)
- _soundResource1.play(0x405002D8);
- else if (param.asInteger() == 0x0A2A9098)
- _soundResource1.play(0x0460E2FA);
- else if (param.asInteger() == 0xD00A0C0C)
- _soundRes1.play();
- else if (param.asInteger() == 0x04121920)
- _soundRes2.play();
- else if (param.asInteger() == 0x030B4480)
- _soundRes3.play();
- else if (param.asInteger() == 0x422B0280)
- _soundRes4.play();
- else if (param.asInteger() == 0x038A010B)
- _soundRes5.play();
- else if (param.asInteger() == 0x67221A03)
- _soundResource1.play(0x44051000);
- else if (param.asInteger() == 0x02B20220)
- _soundResource1.play(0xC5408620);
- else if (param.asInteger() == 0x925A0C1E)
- _soundResource1.play(0x40E5884D);
- else if (param.asInteger() == 0x03020231)
- _soundResource1.play(0xD4C08010);
- else if (param.asInteger() == 0x08040840)
- setDoDeltaX(2);
- break;
- }
- return messageResult;
-}
-
-void KmScene2809::stGrow() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2838C010, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2809::hmGrow);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-void KmScene2809::stDrinkPotion() {
- _status2 = 1;
- _acceptInput = false;
- _potionFlag1 = false;
- _potionFlag2 = false;
- startAnimation(0x1C388C04, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2809::hmDrinkPotion);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index b32143d..a52e7f6 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -187,6 +187,14 @@ public:
void stStandWonderAbout();
+ uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stGrow();
+ void stDrinkPotion();
+
+ uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stInsertKey();
+
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
@@ -200,15 +208,12 @@ protected:
int16 _idleCounter, _idleCounterMax;
int16 _blinkCounter, _blinkCounterMax;
int16 _countdown1;
- int16 _tapesToInsert;
+ int16 _tapesToInsert, _keysToInsert;
bool _flagF6;
bool _isLeverDown;
bool _isWalkingOpenDoorNotified;
int _status2;
bool _flagFA;
- SoundResource _soundResource1;
- SoundResource _soundResource2;
- SoundResource _soundResource3;
int _status3;
const KlaymanIdleTableItem *_idleTable;
int _idleTableCount;
@@ -218,6 +223,9 @@ protected:
bool _isSittingInTeleporter;
+ bool _potionFlag1;
+ bool _potionFlag2;
+
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -410,7 +418,7 @@ public:
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void stCrashDown();
- void cbCrashDownEvent();
+ void stCrashDownFinished();
};
class KmScene1306 : public Klayman {
@@ -424,10 +432,7 @@ class KmScene1308 : public Klayman {
public:
KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _flag1;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmInsertDiskSide(int messageNum, const MessageParam ¶m, Entity *sender);
- void stInsertDiskSide();
};
class KmScene1401 : public Klayman {
@@ -651,18 +656,7 @@ public:
KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount);
protected:
- SoundResource _soundRes1;
- SoundResource _soundRes2;
- SoundResource _soundRes3;
- SoundResource _soundRes4;
- SoundResource _soundRes5;
- bool _potionFlag1;
- bool _potionFlag2;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
- void stGrow();
- void stDrinkPotion();
};
class KmScene2809 : public Klayman {
@@ -670,18 +664,7 @@ public:
KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount);
protected:
- SoundResource _soundRes1;
- SoundResource _soundRes2;
- SoundResource _soundRes3;
- SoundResource _soundRes4;
- SoundResource _soundRes5;
- bool _potionFlag1;
- bool _potionFlag2;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
- void stGrow();
- void stDrinkPotion();
};
class KmScene2810Small : public Klayman {
Commit: 7e4faf3505c8124838f7e89b873aa6e5844b3e43
https://github.com/scummvm/scummvm/commit/7e4faf3505c8124838f7e89b873aa6e5844b3e43
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: More Klayman merging
- Also clean up parameter list of two Klayman subclass constructors and send a message to the parent class instead of operating on the entities inside the Klayman class
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/module1300.cpp
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 06e6a43..1155c57 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2540,6 +2540,185 @@ void Klayman::stInsertKey() {
}
}
+uint32 Klayman::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x04684052) {
+ _acceptInput = true;
+ sendMessage(_parentScene, 0x2002, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stReadNote() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x123E9C9F, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmReadNote);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+uint32 Klayman::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ int16 speedUpFrameIndex;
+ switch (messageNum) {
+ case 0x1008:
+ speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
+ if (_currFrameIndex < speedUpFrameIndex) {
+ startAnimation(0x35AA8059, speedUpFrameIndex, -1);
+ _y = 438;
+ }
+ messageResult = 0;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x1A1A0785) {
+ playSound(0, 0x40F0A342);
+ } else if (param.asInteger() == 0x60428026) {
+ playSound(0, 0x40608A59);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stHitByDoor() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x35AA8059, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmHitByDoor);
+ playSound(0, 0x402E82D4);
+}
+
+uint32 Klayman::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == calcHash("PopBalloon")) {
+ sendMessage(_parentScene, 0x2000, 0);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ playSound(0, 0x44051000);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::upPeekWallBlink() {
+ Klayman::update();
+ _blinkCounter++;
+ if (_blinkCounter >= _blinkCounterMax)
+ stPeekWallBlink();
+}
+
+void Klayman::stPeekWall1() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 8, 37);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+ NextState(&Klayman::stPeekWallBlink);
+}
+
+void Klayman::stPeekWall2() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0xAC20C012, 43, 49);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D480);
+}
+
+void Klayman::stPeekWallBlink() {
+ _blinkCounter = 0;
+ _status2 = 0;
+ _acceptInput = true;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
+ startAnimation(0xAC20C012, 38, 42);
+ SetUpdateHandler(&Klayman::upPeekWallBlink);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ _newStickFrameIndex = 42;
+}
+
+void Klayman::stPeekWallReturn() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2426932E, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmPeekWallReturn);
+}
+
+void Klayman::stPullHammerLever() {
+ if (!stStartAction(AnimationCallback(&Klayman::stPullHammerLever))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x00648953, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmPullHammerLever);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ }
+}
+
+uint32 Klayman::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209)
+ sendMessage(_attachedSprite, 0x480F, 0);
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::suRidePlatformDown() {
+ _platformDeltaY++;
+ _y += _platformDeltaY;
+ if (_y > 600)
+ sendMessage(this, 0x1019, 0);
+}
+
+void Klayman::stRidePlatformDown() {
+ if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::stRidePlatformDown))) {
+ _status2 = 1;
+ sendMessage(_parentScene, 0x4803, 0);
+ _acceptInput = false;
+ _platformDeltaY = 0;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::handleMessage41D360);
+ SetSpriteUpdate(&Klayman::suRidePlatformDown);
+ _vm->_soundMan->playSoundLooping(0xD3B02847);
+ }
+}
+
+void Klayman::startWalkingResume(int16 frameIncr) {
+ // TODO Make the parameter a field and change this method back to a callback (or similar)
+ int16 frameIndex = getGlobalVar(0x18288913) + frameIncr;
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmWalking);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
+ NextState(&Klayman::stUpdateWalking);
+ FinalizeState(&Klayman::stStartWalkingDone);
+}
+
//##############################################################################
// KmScene1001
@@ -2562,7 +2741,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stSleeping);
break;
case 0x480D:
- GotoState(&KmScene1001::stPullLever);
+ GotoState(&Klayman::stPullHammerLever);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
@@ -2621,34 +2800,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1001::stPullLever() {
- if (!stStartAction(AnimationCallback(&KmScene1001::stPullLever))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x00648953, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1001::hmPullLever);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- }
-}
-
-uint32 KmScene1001::hmPullLever(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x480F, 0);
- }
- break;
- }
- return messageResult;
-}
-
// KmScene1002
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _class599(class599), _ssLadderArch(ssLadderArch),
- _status(0) {
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _idleTableNum(0) {
setKlaymanIdleTable1();
@@ -2656,13 +2811,13 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
void KmScene1002::xUpdate() {
if (_x >= 250 && _x <= 435 && _y >= 420) {
- if (_status == 0) {
+ if (_idleTableNum == 0) {
// TODO setKlaymanIdleTable(stru_4B44C8);
- _status = 1;
+ _idleTableNum = 1;
}
- } else if (_status == 1) {
+ } else if (_idleTableNum == 1) {
setKlaymanIdleTable1();
- _status = 0;
+ _idleTableNum = 0;
}
}
@@ -2780,21 +2935,17 @@ uint32 KmScene1002::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite) {
+ if (_attachedSprite)
sendMessage(_attachedSprite, 0x480F, 0);
- }
} else if (param.asInteger() == 0x586B0300) {
- if (_otherSprite) {
+ if (_otherSprite)
sendMessage(_otherSprite, 0x480E, 1);
- }
} else if (param.asInteger() == 0x4AB28209) {
- if (_attachedSprite) {
+ if (_attachedSprite)
sendMessage(_attachedSprite, 0x482A, 0);
- }
} else if (param.asInteger() == 0x88001184) {
- if (_attachedSprite) {
+ if (_attachedSprite)
sendMessage(_attachedSprite, 0x482B, 0);
- }
}
break;
}
@@ -2969,8 +3120,7 @@ void KmScene1002::stSpitOutFall0() {
SetMessageHandler(&Klayman::handleMessage41D360);
SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&KmScene1002::stFalling);
- sendMessage(_class599, 0x482A, 0);
- sendMessage(_ssLadderArch, 0x482A, 0);
+ sendMessage(_parentScene, 0x8000, 0);
}
void KmScene1002::stFalling() {
@@ -2987,8 +3137,7 @@ void KmScene1002::stFalling() {
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
- sendMessage(_class599, 0x482B, 0);
- sendMessage(_ssLadderArch, 0x482B, 0);
+ sendMessage(_parentScene, 0x8001, 0);
}
void KmScene1002::stSpitOutFall2() {
@@ -3000,8 +3149,7 @@ void KmScene1002::stSpitOutFall2() {
SetMessageHandler(&Klayman::handleMessage41D480);
SetSpriteUpdate(&KmScene1002::suFallDown);
NextState(&KmScene1002::stFalling);
- sendMessage(_class599, 0x482A, 0);
- sendMessage(_ssLadderArch, 0x482A, 0);
+ sendMessage(_parentScene, 0x8000, 0);
}
void KmScene1002::stFallTouchdown() {
@@ -3114,7 +3262,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x481E:
- GotoState(&KmScene1004::stReadNote);
+ GotoState(&Klayman::stReadNote);
break;
case 0x4820:
sendMessage(_parentScene, 0x2000, 0);
@@ -3157,28 +3305,6 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-uint32 KmScene1004::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x04684052) {
- _acceptInput = true;
- sendMessage(_parentScene, 0x2002, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1004::stReadNote() {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x123E9C9F, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1004::hmReadNote);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3245,8 +3371,8 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1201
-KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) {
+KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) {
// TODO setKlaymanIdleTable(dword_4AEF10, 3);
_flagF6 = true;
@@ -3429,7 +3555,7 @@ void KmScene1201::stTumbleHeadless() {
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene1201::hmTumbleHeadless);
NextState(&Klayman::stTryStandIdle);
- sendMessage(_class464, 0x2006, 0);
+ sendMessage(_parentScene, 0x8000, 0);
playSound(0, 0x62E0A356);
}
}
@@ -3454,83 +3580,18 @@ KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4804:
- GotoState(&KmScene1303::stPeekWall1);
+ GotoState(&Klayman::stPeekWall1);
break;
case 0x483B:
- GotoState(&KmScene1303::stPeekWallReturn);
+ GotoState(&Klayman::stPeekWallReturn);
break;
case 0x483C:
- GotoState(&KmScene1303::stPeekWall2);
+ GotoState(&Klayman::stPeekWall2);
break;
}
return 0;
}
-uint32 KmScene1303::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == calcHash("PopBalloon")) {
- sendMessage(_parentScene, 0x2000, 0);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- playSound(0, 0x44051000);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1303::upPeekWallBlink() {
- Klayman::update();
- _blinkCounter++;
- if (_blinkCounter >= _blinkCounterMax)
- stPeekWallBlink();
-}
-
-void KmScene1303::stPeekWall1() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xAC20C012, 8, 37);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
- NextState(&KmScene1303::stPeekWallBlink);
-}
-
-void KmScene1303::stPeekWall2() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0xAC20C012, 43, 49);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
-}
-
-void KmScene1303::stPeekWallBlink() {
- _blinkCounter = 0;
- _status2 = 0;
- _acceptInput = true;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
- startAnimation(0xAC20C012, 38, 42);
- SetUpdateHandler(&KmScene1303::upPeekWallBlink);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D360);
- _newStickFrameIndex = 42;
-}
-
-void KmScene1303::stPeekWallReturn() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2426932E, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1303::hmPeekWallReturn);
-}
-
KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -4415,7 +4476,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4811:
- GotoState(&KmScene2101::stHitByDoor);
+ GotoState(&Klayman::stHitByDoor);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4477,39 +4538,6 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-uint32 KmScene2101::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
- int16 speedUpFrameIndex;
- switch (messageNum) {
- case 0x1008:
- speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_currFrameIndex < speedUpFrameIndex) {
- startAnimation(0x35AA8059, speedUpFrameIndex, -1);
- _y = 438;
- }
- messageResult = 0;
- break;
- case 0x100D:
- if (param.asInteger() == 0x1A1A0785) {
- playSound(0, 0x40F0A342);
- } else if (param.asInteger() == 0x60428026) {
- playSound(0, 0x40608A59);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene2101::stHitByDoor() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x35AA8059, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene2101::hmHitByDoor);
- playSound(0, 0x402E82D4);
-}
-
KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
// TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -4704,18 +4732,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene2205::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(0x18288913);
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ startWalkingResume(0);
}
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -4742,7 +4759,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4803:
- GotoState(&KmScene2206::stRidePlatformDown);
+ GotoState(&Klayman::stRidePlatformDown);
break;
case 0x4804:
if (param.asInteger() != 0) {
@@ -4823,40 +4840,8 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2206::suRidePlatformDown() {
- _yDelta++;
- _y += _yDelta;
- if (_y > 600)
- sendMessage(this, 0x1019, 0);
-}
-
-void KmScene2206::stRidePlatformDown() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::stRidePlatformDown))) {
- _status2 = 1;
- sendMessage(_parentScene, 0x4803, 0);
- _acceptInput = false;
- _yDelta = 0;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteUpdate(&KmScene2206::suRidePlatformDown);
- _vm->_soundMan->playSoundLooping(0xD3B02847);
- }
-}
-
void KmScene2206::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(0x18288913) + 1;
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ startWalkingResume(1);
}
KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -5051,18 +5036,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene2242::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(0x18288913);
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ startWalkingResume(0);
}
KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -5120,18 +5094,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
}
void KmHallOfRecords::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(0x18288913);
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ startWalkingResume(0);
}
KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -5189,18 +5152,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
void KmScene2247::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(0x18288913);
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ startWalkingResume(0);
}
KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a52e7f6..a84ef96 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -195,6 +195,27 @@ public:
uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender);
void stInsertKey();
+ uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stReadNote();
+
+ uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stHitByDoor();
+
+ uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
+ void upPeekWallBlink();
+ void stPeekWall1();
+ void stPeekWall2();
+ void stPeekWallBlink();
+ void stPeekWallReturn();
+
+ void stPullHammerLever();
+ uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void suRidePlatformDown();
+ void stRidePlatformDown();
+
+ void startWalkingResume(int16 frameIncr);
+
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
@@ -226,6 +247,8 @@ protected:
bool _potionFlag1;
bool _potionFlag2;
+ int16 _platformDeltaY;
+
virtual void xUpdate();
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -318,18 +341,14 @@ public:
KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stPullLever();
- uint32 hmPullLever(int messageNum, const MessageParam ¶m, Entity *sender);
};
class KmScene1002 : public Klayman {
public:
- KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch);
+ KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- Sprite *_class599;
- Sprite *_ssLadderArch;
Sprite *_otherSprite;
- int _status;
+ int _idleTableNum;
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void upSpitOutFall();
@@ -362,8 +381,6 @@ public:
KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender);
- void stReadNote();
};
class KmScene1109 : public Klayman {
@@ -375,9 +392,8 @@ protected:
class KmScene1201 : public Klayman {
public:
- KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464);
+ KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- Entity *_class464;
int _countdown;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void upMoveObject();
@@ -397,12 +413,6 @@ public:
KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
- void upPeekWallBlink();
- void stPeekWall1();
- void stPeekWall2();
- void stPeekWallBlink();
- void stPeekWallReturn();
};
class KmScene1304 : public Klayman {
@@ -498,8 +508,6 @@ public:
KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
- void stHitByDoor();
};
class KmScene2201 : public Klayman {
@@ -530,11 +538,8 @@ public:
KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
~KmScene2206();
protected:
- int16 _yDelta;
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void suRidePlatformDown();
- void stRidePlatformDown();
void stStartWalkingResume();
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index f4932c0..1e844c7 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1336,28 +1336,28 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
- insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
+ insertKlayman<KmScene1002>(90, 226);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
_asKlaymanLadderHands->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
- insertKlayman<KmScene1002>(379, 435, _class599, _ssLadderArch);
+ insertKlayman<KmScene1002>(379, 435);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
- insertKlayman<KmScene1002>(650, 435, _class599, _ssLadderArch);
+ insertKlayman<KmScene1002>(650, 435);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4478);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
} else if (which == 2) {
- insertKlayman<KmScene1002>(68, 645, _class599, _ssLadderArch);
+ insertKlayman<KmScene1002>(68, 645);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4298);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
@@ -1365,7 +1365,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.field2 = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
- insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
+ insertKlayman<KmScene1002>(90, 226);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4470);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
@@ -1550,7 +1550,15 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
- break;
+ break;
+ case 0x8000:
+ sendMessage(_class599, 0x482A, 0);
+ sendMessage(_ssLadderArch, 0x482A, 0);
+ break;
+ case 0x8001:
+ sendMessage(_class599, 0x482B, 0);
+ sendMessage(_ssLadderArch, 0x482B, 0);
+ break;
}
return messageResult;
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index d6ca51b..a903759 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -747,7 +747,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
int16 topY1, topY2, topY3, topY4;
int16 x1, x2;
- Sprite *tempSprite, *class464;
+ Sprite *tempSprite;
SetUpdateHandler(&Scene1201::update);
SetMessageHandler(&Scene1201::handleMessage);
@@ -791,34 +791,34 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0xA29223FA, 1200);
x2 = tempSprite->getX() + tempSprite->getDrawRect().width;
- class464 = insertSprite<Class464>();
+ _class464 = insertSprite<Class464>();
debug("Scene1201: which = %d", which);
if (which < 0) {
- insertKlayman<KmScene1201>(364, 333, class464);
+ insertKlayman<KmScene1201>(364, 333);
setMessageList(0x004AEC08);
} else if (which == 3) {
- insertKlayman<KmScene1201>(400, 329, class464);
+ insertKlayman<KmScene1201>(400, 329);
setMessageList(0x004AEC08);
} else if (which == 2) {
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- insertKlayman<KmScene1201>(374, 333, class464);
+ insertKlayman<KmScene1201>(374, 333);
setMessageList(0x004AEC08);
} else {
- insertKlayman<KmScene1201>(640, 329, class464);
+ insertKlayman<KmScene1201>(640, 329);
setMessageList(0x004AEC20);
}
} else if (which == 1) {
if (getGlobalVar(0xC0418A02)) {
- insertKlayman<KmScene1201>(364, 333, class464);
+ insertKlayman<KmScene1201>(364, 333);
_klayman->setDoDeltaX(1);
} else {
- insertKlayman<KmScene1201>(246, 333, class464);
+ insertKlayman<KmScene1201>(246, 333);
}
setMessageList(0x004AEC30);
} else {
- insertKlayman<KmScene1201>(0, 336, class464);
+ insertKlayman<KmScene1201>(0, 336);
setMessageList(0x004AEC10);
}
@@ -989,6 +989,9 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4829:
sendMessage(_asRightDoor, 0x4829, 0);
+ break;
+ case 0x8000:
+ sendMessage(_class464, 0x2006, 0);
break;
}
return messageResult;
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index 1733fb4..b92ff92 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -177,6 +177,7 @@ protected:
Sprite *_asLeftDoor;
Sprite *_asRightDoor;
Sprite *_asTape;
+ Sprite *_class464;
bool _flag;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 1c980b0..f3677a1 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -451,10 +451,10 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
- insertKlayman<KmScene1002>(380, 364, _class595, (Sprite*)NULL);
+ insertKlayman<KmScene1002>(380, 364);
setMessageList(0x004B0868);
} else {
- insertKlayman<KmScene1002>(293, 330, _class595, (Sprite*)NULL);
+ insertKlayman<KmScene1002>(293, 330);
setMessageList(0x004B0870);
}
@@ -587,6 +587,12 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x482B:
sendMessage(_asVenusFlyTrap, 0x482A, 0);
break;
+ case 0x8000:
+ sendMessage(_class595, 0x482A, 0);
+ break;
+ case 0x8001:
+ sendMessage(_class595, 0x482B, 0);
+ break;
}
return messageResult;
}
Commit: 22cfd04b1273beab28f09a9e7a852634aa2367a8
https://github.com/scummvm/scummvm/commit/22cfd04b1273beab28f09a9e7a852634aa2367a8
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: Rename handleMessage41D640
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 1155c57..49f88aa 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -342,12 +342,12 @@ void Klayman::stPickUpTube() {
_acceptInput = false;
startAnimation(0x0018C032, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D640);
+ SetMessageHandler(&Klayman::hmPickUpTube);
SetSpriteUpdate(NULL);
}
}
-uint32 Klayman::handleMessage41D640(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a84ef96..77001c3 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -318,7 +318,7 @@ protected:
uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41D640(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 4fef1ac9f21ba3f86dc453d1b11d9233ecd11bc0
https://github.com/scummvm/scummvm/commit/4fef1ac9f21ba3f86dc453d1b11d9233ecd11bc0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: Some more merging and renaming in the Klayman class
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 49f88aa..76a2ebf 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -59,7 +59,8 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
: AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
_isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
_attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
- _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
+ _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
+ _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -134,7 +135,7 @@ void Klayman::stIdlePickEar() {
}
uint32 Klayman::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x04DBC02C) {
@@ -164,7 +165,7 @@ void Klayman::stIdleSpinHead() {
}
uint32 Klayman::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x808A0008) {
@@ -195,7 +196,7 @@ void Klayman::evIdleArmsDone() {
}
uint32 Klayman::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x5A0F0104) {
@@ -225,7 +226,7 @@ void Klayman::stIdleChest() {
}
uint32 Klayman::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0D2A0288) {
@@ -251,7 +252,7 @@ void Klayman::stIdleHeadOff() {
}
uint32 Klayman::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC006000C) {
@@ -275,7 +276,7 @@ void Klayman::stSitIdleTeleporter() {
_idleCounter = 0;
SetSpriteUpdate(NULL);
SetUpdateHandler(&Klayman::upSitIdleTeleporter);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
_blinkCounter = 0;
_idleCounterMax = 8;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
@@ -309,7 +310,7 @@ void Klayman::stIdleSitBlink() {
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -319,7 +320,7 @@ void Klayman::stIdleSitBlinkSecond() {
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::upSitIdleTeleporter);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
@@ -348,14 +349,12 @@ void Klayman::stPickUpTube() {
}
uint32 Klayman::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC1380080) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- playSound(0, 0xC8004340);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
+ playSound(0, 0xC8004340);
} else if (param.asInteger() == 0x02B20220) {
playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x03020231) {
@@ -375,7 +374,7 @@ void Klayman::stTurnToUseInTeleporter() {
_acceptInput = false;
startAnimation(0xD229823D, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -384,7 +383,7 @@ void Klayman::stReturnFromUseInTeleporter() {
_acceptInput = false;
startAnimation(0x9A2801E0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -411,7 +410,7 @@ void Klayman::stSitInTeleporter() {
}
uint32 Klayman::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x001A2832) {
@@ -427,7 +426,7 @@ void Klayman::stGetUpFromTeleporter() {
_acceptInput = false;
startAnimation(0x913AB120, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(&Klayman::suUpdateDestX);
}
@@ -504,7 +503,7 @@ void Klayman::stTryStandIdle() {
_blinkCounter = 0;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
SetUpdateHandler(&Klayman::upIdle);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
}
@@ -530,7 +529,7 @@ void Klayman::upIdle() {
}
}
-uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender) {
Sprite::handleMessage(messageNum, param, sender);
uint32 messageResult = xHandleMessage(messageNum, param);
switch (messageNum) {
@@ -570,13 +569,13 @@ void Klayman::stIdleBlink() {
_acceptInput = true;
startAnimation(0x5900C41E, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
-uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+uint32 Klayman::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextStateExt();
@@ -590,12 +589,12 @@ void Klayman::stStandAround() {
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::upIdle);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x271AA210) {
@@ -644,7 +643,7 @@ void Klayman::stWakeUp() {
_acceptInput = false;
startAnimation(0x527AC970, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -658,7 +657,7 @@ void Klayman::stSleeping() {
}
uint32 Klayman::hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x03060012) {
@@ -780,7 +779,7 @@ void Klayman::stWalkingDone() {
}
uint32 Klayman::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -821,7 +820,7 @@ void Klayman::stStartWalkingDone() {
}
uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -852,7 +851,7 @@ void Klayman::spriteUpdate41F300() {
}
uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -942,8 +941,8 @@ void Klayman::suWalkingTestExit() {
}
-uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmLever(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -969,13 +968,11 @@ void Klayman::stPickUpGeneric() {
}
uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC1380080) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
playSound(0, 0x40208200);
} else if (param.asInteger() == 0x02B20220) {
playSound(0, 0xC5408620);
@@ -1006,13 +1003,11 @@ void Klayman::stTurnPressButton() {
}
uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0D01B294) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x480B, 0);
- }
+ sendMessage(_attachedSprite, 0x480B, 0);
} else if (param.asInteger() == 0x32180101) {
playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
@@ -1102,7 +1097,7 @@ void Klayman::stStartWalkingSmall() {
}
uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101)
@@ -1118,7 +1113,7 @@ void Klayman::stStandIdleSmall() {
_acceptInput = true;
startAnimation(0x90D0D1D0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
@@ -1127,7 +1122,7 @@ void Klayman::stWonderAboutAfterSmall() {
_acceptInput = true;
startAnimation(0x11C8D156, 30, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1136,7 +1131,7 @@ void Klayman::stWonderAboutHalfSmall() {
_acceptInput = true;
startAnimation(0x11C8D156, 0, 10);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1145,7 +1140,7 @@ void Klayman::stWonderAboutSmall() {
_acceptInput = true;
startAnimation(0x11C8D156, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1159,7 +1154,7 @@ void Klayman::stWalkToFrontNoStepSmall() {
}
uint32 Klayman::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5)
@@ -1241,7 +1236,7 @@ void Klayman::stReleaseCord() {
}
uint32 Klayman::hmPullCord(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -1267,7 +1262,7 @@ void Klayman::stUseTube() {
}
uint32 Klayman::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02B20220)
@@ -1423,7 +1418,7 @@ void Klayman::suLargeStep() {
}
uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -1445,7 +1440,7 @@ void Klayman::stWonderAboutHalf() {
_acceptInput = true;
startAnimation(0xD820A114, 0, 10);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1454,7 +1449,7 @@ void Klayman::stWonderAboutAfter() {
_acceptInput = true;
startAnimation(0xD820A114, 30, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1468,7 +1463,7 @@ void Klayman::stTurnToUseHalf() {
}
uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -1495,7 +1490,7 @@ void Klayman::stWonderAbout() {
_acceptInput = true;
startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1524,7 +1519,7 @@ uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se
}
break;
}
- return handleMessage41D480(messageNum, param, sender);
+ return hmLowLevelAnimation(messageNum, param, sender);
}
void Klayman::stJumpToRing1() {
@@ -1545,13 +1540,11 @@ void Klayman::setupJumpToRing() {
}
uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
_acceptInput = true;
} else if (param.asInteger() == 0x320AC306) {
playSound(0, 0x5860C640);
@@ -1575,7 +1568,7 @@ void Klayman::stHangOnRing() {
_acceptInput = true;
startAnimation(0x4829E0B8, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
@@ -1601,13 +1594,11 @@ void Klayman::stJumpToRing3() {
}
uint32 Klayman::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
} else if (param.asInteger() == 0x320AC306) {
playSound(0, 0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
@@ -1634,19 +1625,17 @@ uint32 Klayman::hmHoldRing(int messageNum, const MessageParam ¶m, Entity *se
stReleaseRing();
return 0;
}
- return handleMessage41D360(messageNum, param, sender);
+ return hmLowLevel(messageNum, param, sender);
}
void Klayman::stReleaseRing() {
_status2 = 1;
_acceptInput = false;
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4807, 0);
- _attachedSprite = NULL;
- }
+ sendMessage(_attachedSprite, 0x4807, 0);
+ _attachedSprite = NULL;
startAnimation(0xB869A4B9, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1669,7 +1658,7 @@ void Klayman::stContinueClimbLadderUp() {
startAnimationByHash(0x3A292504, 0x01084280, 0);
_newStickFrameHash = 0x01084280;
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
gotoNextStateExt();
}
@@ -1728,7 +1717,7 @@ void Klayman::stClimbLadderHalf() {
}
uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x489B025C) {
@@ -1746,7 +1735,7 @@ uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam ¶m, E
}
uint32 Klayman::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -1808,7 +1797,7 @@ void Klayman::stWalkToFrontNoStep() {
}
uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5) {
@@ -1868,7 +1857,7 @@ void Klayman::stLandOnFeet() {
}
uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x320AC306) {
@@ -1891,7 +1880,7 @@ void Klayman::stTurnToBackToUse() {
}
uint32 Klayman::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC61A0119) {
@@ -1918,13 +1907,11 @@ void Klayman::stClayDoorOpen() {
}
uint32 Klayman::hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x040D4186) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4808, 0);
- }
+ sendMessage(_attachedSprite, 0x4808, 0);
}
break;
}
@@ -1986,14 +1973,13 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
+ sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
} else if (param.asInteger() == 0x02421405) {
if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
stMoveObjectSkipTurn();
} else {
FinalizeState(&Klayman::evMoveObjectTurnDone);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
}
} else if (param.asInteger() == 0x32180101) {
playSound(0, 0x405002D8);
@@ -2005,7 +1991,7 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti
_isMoveObjectRequested = true;
return 0;
}
- return handleMessage41D480(messageNum, param, sender);
+ return hmLowLevelAnimation(messageNum, param, sender);
}
void Klayman::stMoveObjectSkipTurn() {
@@ -2040,7 +2026,7 @@ void Klayman::stUseLever() {
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
+ SetMessageHandler(&Klayman::hmLever);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
}
@@ -2058,7 +2044,7 @@ void Klayman::stHoldLeverDown() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
_isLeverDown = true;
_acceptInput = true;
}
@@ -2067,7 +2053,7 @@ void Klayman::stUseLeverRelease() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
+ SetMessageHandler(&Klayman::hmLever);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
@@ -2079,7 +2065,7 @@ void Klayman::stReleaseLever() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
+ SetMessageHandler(&Klayman::hmLever);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stLetGoOfLever);
_acceptInput = false;
@@ -2124,7 +2110,7 @@ void Klayman::stInsertDisk() {
}
uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) {
@@ -2199,7 +2185,7 @@ void Klayman::suJumpToGrab() {
}
uint32 Klayman::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0)
@@ -2225,7 +2211,7 @@ void Klayman::sub421230() {//stGrow
}
uint32 Klayman::handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x040C4C01)
@@ -2269,7 +2255,7 @@ void Klayman::stJumpToGrabRelease() {
}
uint32 Klayman::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x320AC306)
@@ -2288,7 +2274,7 @@ void Klayman::stIdleTeleporterHands() {
_acceptInput = true;
startAnimation(0x90EF8D38, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -2302,7 +2288,7 @@ void Klayman::stIdleTeleporterHands2() {
_acceptInput = true;
startAnimation(0x900F0930, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -2326,7 +2312,7 @@ void Klayman::teleporterDisappear(uint32 fileHash) {
}
uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4E0A2C24) {
@@ -2340,7 +2326,7 @@ uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam &
}
uint32 Klayman::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5)
@@ -2370,12 +2356,12 @@ void Klayman::stStandWonderAbout() {
startAnimation(0xD820A114, 0, -1);
_newStickFrameIndex = 10;
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
if (_potionFlag1) {
@@ -2427,7 +2413,7 @@ uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity
}
uint32 Klayman::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101)
@@ -2480,7 +2466,7 @@ void Klayman::stDrinkPotion() {
}
uint32 Klayman::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (_keysToInsert == 0 && param.asInteger() == 0x06040580) {
@@ -2541,7 +2527,7 @@ void Klayman::stInsertKey() {
}
uint32 Klayman::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x04684052) {
@@ -2563,7 +2549,7 @@ void Klayman::stReadNote() {
}
uint32 Klayman::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
int16 speedUpFrameIndex;
switch (messageNum) {
case 0x1008:
@@ -2596,7 +2582,7 @@ void Klayman::stHitByDoor() {
}
uint32 Klayman::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == calcHash("PopBalloon")) {
@@ -2626,7 +2612,7 @@ void Klayman::stPeekWall1() {
startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
NextState(&Klayman::stPeekWallBlink);
}
@@ -2636,7 +2622,7 @@ void Klayman::stPeekWall2() {
startAnimation(0xAC20C012, 43, 49);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
}
void Klayman::stPeekWallBlink() {
@@ -2647,7 +2633,7 @@ void Klayman::stPeekWallBlink() {
startAnimation(0xAC20C012, 38, 42);
SetUpdateHandler(&Klayman::upPeekWallBlink);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
_newStickFrameIndex = 42;
}
@@ -2672,7 +2658,7 @@ void Klayman::stPullHammerLever() {
}
uint32 Klayman::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
+ uint32 messageResult = Klayman::hmLever(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209)
@@ -2697,232 +2683,29 @@ void Klayman::stRidePlatformDown() {
_platformDeltaY = 0;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(&Klayman::suRidePlatformDown);
_vm->_soundMan->playSoundLooping(0xD3B02847);
}
}
-void Klayman::startWalkingResume(int16 frameIncr) {
- // TODO Make the parameter a field and change this method back to a callback (or similar)
- int16 frameIndex = getGlobalVar(0x18288913) + frameIncr;
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
+void Klayman::stCrashDown() {
+ playSound(0, 0x41648271);
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
-}
-
-//##############################################################################
-
-// KmScene1001
-
-KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-}
-
-uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() == 2)
- GotoState(&Klayman::stSleeping);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullHammerLever);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- // TODO: It's not really a point but an x1/x2 pair
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4836:
- if (param.asInteger() == 1) {
- sendMessage(_parentScene, 0x2002, 0);
- GotoState(&Klayman::stWakeUp);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-// KmScene1002
-
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _idleTableNum(0) {
-
- setKlaymanIdleTable1();
-
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ NextState(&KmScene1305::stCrashDownFinished);
}
-void KmScene1002::xUpdate() {
- if (_x >= 250 && _x <= 435 && _y >= 420) {
- if (_idleTableNum == 0) {
- // TODO setKlaymanIdleTable(stru_4B44C8);
- _idleTableNum = 1;
- }
- } else if (_idleTableNum == 1) {
- setKlaymanIdleTable1();
- _idleTableNum = 0;
- }
-}
-
-uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x2001:
- GotoState(&KmScene1002::stStandIdleSpecial);
- break;
- case 0x2007:
- _otherSprite = (Sprite*)param.asEntity();
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4803:
- if (param.asInteger() == 1) {
- GotoState(&KmScene1002::stJumpAndFall);
- } else if (param.asInteger() == 2) {
- GotoState(&KmScene1002::stDropFromRing);
- }
- break;
- case 0x4804:
- GotoState(&Klayman::stPeekWall);
- break;
- case 0x4805:
- switch (param.asInteger()) {
- case 1:
- GotoState(&Klayman::stJumpToRing1);
- break;
- case 2:
- GotoState(&Klayman::stJumpToRing2);
- break;
- case 3:
- GotoState(&Klayman::stJumpToRing3);
- break;
- case 4:
- GotoState(&Klayman::stJumpToRing4);
- break;
- }
- break;
- case 0x480A:
- GotoState(&KmScene1002::stMoveVenusFlyTrap);
- break;
- case 0x480D:
- GotoState(&KmScene1002::stJumpToRingVenusFlyTrap);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 0) {
- GotoState(&KmScene1002::stPressDoorButton);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- sub41CCE0(param.asInteger());
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2005, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2005, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2005, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2006, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
+void Klayman::stCrashDownFinished() {
+ setDoDeltaX(2);
+ stTryStandIdle();
}
-void KmScene1002::upSpitOutFall() {
+void Klayman::upSpitOutFall() {
Klayman::update();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
_surface->setVisible(true);
@@ -2930,29 +2713,25 @@ void KmScene1002::upSpitOutFall() {
}
}
-uint32 KmScene1002::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x480F, 0);
+ sendMessage(_attachedSprite, 0x480F, 0);
} else if (param.asInteger() == 0x586B0300) {
- if (_otherSprite)
- sendMessage(_otherSprite, 0x480E, 1);
+ sendMessage(_otherSprite, 0x480E, 1);
} else if (param.asInteger() == 0x4AB28209) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x482A, 0);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x482B, 0);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
break;
}
return messageResult;
}
-uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x4811:
playSound(0, 0x5252A0E4);
@@ -2976,8 +2755,8 @@ uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam ¶m
return 0;
}
-uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x942D2081) {
@@ -2994,7 +2773,7 @@ uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -3004,7 +2783,7 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m
if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0)
stContinueMovingVenusFlyTrap();
} else {
- SetMessageHandler(&KmScene1002::hmFirstMoveVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmFirstMoveVenusFlyTrap);
}
} else if (param.asInteger() == 0x4AB28209) {
sendMessage(_attachedSprite, 0x482A, 0);
@@ -3020,11 +2799,11 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m
_isMoveObjectRequested = true;
return 0;
}
- return handleMessage41D480(messageNum, param, sender);
+ return hmLowLevelAnimation(messageNum, param, sender);
}
-uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -3041,9 +2820,9 @@ uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &
return messageResult;
}
-uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) {
int16 speedUpFrameIndex;
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
@@ -3064,8 +2843,8 @@ uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m
return messageResult;
}
-uint32 KmScene1002::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+uint32 Klayman::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x1307050A) {
@@ -3076,7 +2855,7 @@ uint32 KmScene1002::hmJumpAndFall(int messageNum, const MessageParam ¶m, Ent
return messageResult;
}
-void KmScene1002::suFallDown() {
+void Klayman::suFallDown() {
AnimatedSprite::updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
@@ -3087,20 +2866,20 @@ void KmScene1002::suFallDown() {
_vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
}
-void KmScene1002::stJumpToRingVenusFlyTrap() {
- if (!stStartAction(AnimationCallback(&KmScene1002::stJumpToRingVenusFlyTrap))) {
+void Klayman::stJumpToRingVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToRingVenusFlyTrap))) {
_status2 = 2;
_acceptInput = false;
startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1002::hmJumpToRingVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmJumpToRingVenusFlyTrap);
NextState(&Klayman::stLandOnFeet);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
-void KmScene1002::stStandIdleSpecial() {
+void Klayman::stStandIdleSpecial() {
playSound(0, 0x56548280);
_status2 = 0;
_acceptInput = false;
@@ -3108,22 +2887,22 @@ void KmScene1002::stStandIdleSpecial() {
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1002::hmStandIdleSpecial);
+ SetMessageHandler(&Klayman::hmStandIdleSpecial);
}
-void KmScene1002::stSpitOutFall0() {
+void Klayman::stSpitOutFall0() {
_countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x000BAB02, 0, -1);
- SetUpdateHandler(&KmScene1002::upSpitOutFall);
- SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteUpdate(&KmScene1002::suFallDown);
- NextState(&KmScene1002::stFalling);
+ SetUpdateHandler(&Klayman::upSpitOutFall);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(&Klayman::suFallDown);
+ NextState(&Klayman::stFalling);
sendMessage(_parentScene, 0x8000, 0);
}
-void KmScene1002::stFalling() {
+void Klayman::stFalling() {
sendMessage(_parentScene, 0x1024, 1);
playSound(0, 0x41648271);
_status2 = 1;
@@ -3132,45 +2911,45 @@ void KmScene1002::stFalling() {
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1002::handleMessage41D480);
- NextState(&KmScene1002::stFallTouchdown);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ NextState(&Klayman::stFallTouchdown);
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
sendMessage(_parentScene, 0x8001, 0);
}
-void KmScene1002::stSpitOutFall2() {
+void Klayman::stSpitOutFall2() {
_countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
- SetUpdateHandler(&KmScene1002::upSpitOutFall);
- SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteUpdate(&KmScene1002::suFallDown);
- NextState(&KmScene1002::stFalling);
+ SetUpdateHandler(&Klayman::upSpitOutFall);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(&Klayman::suFallDown);
+ NextState(&Klayman::stFalling);
sendMessage(_parentScene, 0x8000, 0);
}
-void KmScene1002::stFallTouchdown() {
+void Klayman::stFallTouchdown() {
setDoDeltaX(2);
stTryStandIdle();
}
-void KmScene1002::stJumpAndFall() {
- if (!stStartAction(AnimationCallback(&KmScene1002::stJumpAndFall))) {
+void Klayman::stJumpAndFall() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpAndFall))) {
sendMessage(_parentScene, 0x1024, 3);
_status2 = 2;
_acceptInput = false;
startAnimation(0xB93AB151, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmJumpAndFall);
- SetSpriteUpdate(&KmScene1002::suFallDown);
+ SetMessageHandler(&Klayman::hmJumpAndFall);
+ SetSpriteUpdate(&Klayman::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
}
-void KmScene1002::stDropFromRing() {
+void Klayman::stDropFromRing() {
if (_attachedSprite) {
_x = _attachedSprite->getX();
sendMessage(_attachedSprite, 0x4807, 0);
@@ -3180,61 +2959,545 @@ void KmScene1002::stDropFromRing() {
_acceptInput = false;
startAnimation(0x586984B1, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage41D360);
- SetSpriteUpdate(&KmScene1002::suFallDown);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(&Klayman::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
-void KmScene1002::stPressDoorButton() {
+void Klayman::stPressDoorButton() {
_status2 = 2;
_acceptInput = true;
setDoDeltaX(0);
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmPressDoorButton);
+ SetMessageHandler(&Klayman::hmPressDoorButton);
SetSpriteUpdate(&Klayman::spriteUpdate41F250);
}
-void KmScene1002::stHitByBoxingGlove() {
+void Klayman::stHitByBoxingGlove() {
_status2 = 1;
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmHitByBoxingGlove);
+ SetMessageHandler(&Klayman::hmHitByBoxingGlove);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&KmScene1002::stHitByBoxingGloveDone);
+ FinalizeState(&Klayman::stHitByBoxingGloveDone);
}
-void KmScene1002::stHitByBoxingGloveDone() {
+void Klayman::stHitByBoxingGloveDone() {
sendMessage(_parentScene, 0x1024, 1);
}
-void KmScene1002::stMoveVenusFlyTrap() {
- if (!stStartAction(AnimationCallback(&KmScene1002::stMoveVenusFlyTrap))) {
+void Klayman::stMoveVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&Klayman::stMoveVenusFlyTrap))) {
_status2 = 2;
_isMoveObjectRequested = false;
_acceptInput = true;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x5C01A870, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
+ FinalizeState(&Klayman::stMoveVenusFlyTrapDone);
+ }
+}
+
+void Klayman::stContinueMovingVenusFlyTrap() {
+ _isMoveObjectRequested = false;
+ _acceptInput = true;
+ startAnimationByHash(0x5C01A870, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ FinalizeState(&Klayman::stMoveVenusFlyTrapDone);
+}
+
+void Klayman::stMoveVenusFlyTrapDone() {
+ sendMessage(_attachedSprite, 0x482A, 0);
+}
+
+void Klayman::suFallSkipJump() {
+ updateDeltaXY();
+ HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
+ if (hitRect->type == 0x5001) {
+ _y = hitRect->rect.y1;
+ processDelta();
+ sendMessage(this, 0x1019, 0);
+ }
+}
+
+void Klayman::stFallSkipJump() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suFallSkipJump);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ NextState(&Klayman::stLandOnFeet);
+}
+
+void Klayman::upMoveObject() {
+ if (_x >= 380)
+ gotoNextStateExt();
+ Klayman::update();
+}
+
+uint32 Klayman::hmMatch(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x51281850) {
+ setGlobalVar(0x20A0C516, 1);
+ } else if (param.asInteger() == 0x43000538) {
+ playSound(0, 0x21043059);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ playSound(0, 0x44051000);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stFetchMatch() {
+ if (!stStartAction(AnimationCallback(&Klayman::stFetchMatch))) {
+ _status2 = 0;
+ _acceptInput = false;
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ startAnimation(0x9CAA0218, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmMatch);
+ NextState(&Klayman::stLightMatch);
+ }
+}
+
+void Klayman::stLightMatch() {
+ _status2 = 1;
+ _acceptInput = false;
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ startAnimation(0x1222A513, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmMatch);
+}
+
+uint32 Klayman::hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ playSound(0, 0x405002D8);
+ sendMessage(_attachedSprite, 0x480B, 0);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_moveObjectCountdown != 0) {
+ _moveObjectCountdown--;
+ stContinueMoveObject();
+ } else {
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ }
+ }
+ break;
+ }
+ return Klayman::hmLowLevelAnimation(messageNum, param, sender);
+}
+
+uint32 Klayman::hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x000F0082) {
+ playSound(0, 0x74E2810F);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stMoveObject() {
+ if (!stStartAction(AnimationCallback(&Klayman::stMoveObject))) {
+ _status2 = 2;
+ _acceptInput = false;
+ _moveObjectCountdown = 8;
+ setDoDeltaX(0);
+ startAnimation(0x0C1CA072, 0, -1);
+ SetUpdateHandler(&Klayman::upMoveObject);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmMoveObject);
+ }
+}
+
+void Klayman::stContinueMoveObject() {
+ _acceptInput = false;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::upMoveObject);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmMoveObject);
+}
+
+void Klayman::stTumbleHeadless() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTumbleHeadless))) {
+ _status2 = 1;
+ _acceptInput = false;
+ setDoDeltaX(0);
+ startAnimation(0x2821C590, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmTumbleHeadless);
+ NextState(&Klayman::stTryStandIdle);
+ sendMessage(_parentScene, 0x8000, 0);
+ playSound(0, 0x62E0A356);
+ }
+}
+
+void Klayman::stCloseEyes() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stCloseEyes))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ }
+}
+
+uint32 Klayman::hmSpit(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x16401CA6) {
+ _canSpitPipe = true;
+ if (_contSpitPipe)
+ spitIntoPipe();
+ } else if (param.asInteger() == 0xC11C0008) {
+ _canSpitPipe = false;
+ _acceptInput = false;
+ _readyToSpit = false;
+ } else if (param.asInteger() == 0x018A0001) {
+ sendMessage(_parentScene, 0x2001, _spitDestPipeIndex);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stTrySpitIntoPipe() {
+ if (_readyToSpit) {
+ _contSpitPipe = true;
+ _spitContDestPipeIndex = _spitPipeIndex;
+ if (_canSpitPipe)
+ spitIntoPipe();
+ } else if (!stStartAction(AnimationCallback(&Klayman::stTrySpitIntoPipe))) {
+ _status2 = 2;
+ _acceptInput = true;
+ _spitDestPipeIndex = _spitPipeIndex;
+ _readyToSpit = true;
+ _canSpitPipe = false;
+ _contSpitPipe = false;
+ startAnimation(0x1808B150, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmSpit);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+void Klayman::spitIntoPipe() {
+ _contSpitPipe = false;
+ _spitDestPipeIndex = _spitContDestPipeIndex;
+ _canSpitPipe = false;
+ _acceptInput = false;
+ startAnimation(0x1B08B553, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmSpit);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::stContSpitIntoPipe);
+}
+
+void Klayman::stContSpitIntoPipe() {
+ _canSpitPipe = true;
+ _acceptInput = true;
+ startAnimationByHash(0x1808B150, 0x16401CA6, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmSpit);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::suRidePlatform() {
+ _x = _attachedSprite->getX() - 20;
+ _y = _attachedSprite->getY() + 46;
+ processDelta();
+}
+
+void Klayman::stRidePlatform() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatform))) {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suRidePlatform);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ }
+}
+
+void Klayman::stInteractLever() {
+ if (!stStartAction(AnimationCallback(&Klayman::stInteractLever))) {
+ _status2 = 0;
+ if (_isLeverDown) {
+ stUseLeverRelease();
+ } else {
+ _acceptInput = false;
+ startAnimation(0x0C303040, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ SetMessageHandler(&Klayman::hmLever);
+ NextState(&Klayman::stPullLever);
+ }
+ }
+}
+
+void Klayman::stPullLever() {
+ startAnimation(0x0D318140, 0, -1);
+ sendMessage(_attachedSprite, 0x480F, 0);
+ NextState(&Klayman::stLookLeverDown);
+}
+
+void Klayman::stLookLeverDown() {
+ startAnimation(0x1564A2C0, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ NextState(&Klayman::stWaitLeverDown);
+ _acceptInput = true;
+ _isLeverDown = true;
+}
+
+void Klayman::stWaitLeverDown() {
+ startAnimation(0x4464A440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ _acceptInput = true;
+ _isLeverDown = true;
+}
+
+void Klayman::startWalkingResume(int16 frameIncr) {
+ // TODO Make the parameter a field and change this method back to a callback (or similar)
+ int16 frameIndex = getGlobalVar(0x18288913) + frameIncr;
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmWalking);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
+ NextState(&Klayman::stUpdateWalking);
+ FinalizeState(&Klayman::stStartWalkingDone);
+}
+
+//##############################################################################
+
+// KmScene1001
+
+KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+}
+
+uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4804:
+ if (param.asInteger() == 2)
+ GotoState(&Klayman::stSleeping);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::stPullHammerLever);
+ break;
+ case NM_KLAYMAN_PICKUP:
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case NM_KLAYMAN_PRESS_BUTTON:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnPressButton);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ // TODO: It's not really a point but an x1/x2 pair
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x4836:
+ if (param.asInteger() == 1) {
+ sendMessage(_parentScene, 0x2002, 0);
+ GotoState(&Klayman::stWakeUp);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+// KmScene1002
+
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ setKlaymanIdleTable1();
+
+}
+
+void KmScene1002::xUpdate() {
+ if (_x >= 250 && _x <= 435 && _y >= 420) {
+ if (_idleTableNum == 0) {
+ // TODO setKlaymanIdleTable(stru_4B44C8);
+ _idleTableNum = 1;
+ }
+ } else if (_idleTableNum == 1) {
+ setKlaymanIdleTable1();
+ _idleTableNum = 0;
+ }
+}
+
+uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x2001:
+ GotoState(&Klayman::stStandIdleSpecial);
+ break;
+ case 0x2007:
+ _otherSprite = (Sprite*)param.asEntity();
+ break;
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4803:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stJumpAndFall);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stDropFromRing);
+ }
+ break;
+ case 0x4804:
+ GotoState(&Klayman::stPeekWall);
+ break;
+ case 0x4805:
+ switch (param.asInteger()) {
+ case 1:
+ GotoState(&Klayman::stJumpToRing1);
+ break;
+ case 2:
+ GotoState(&Klayman::stJumpToRing2);
+ break;
+ case 3:
+ GotoState(&Klayman::stJumpToRing3);
+ break;
+ case 4:
+ GotoState(&Klayman::stJumpToRing4);
+ break;
+ }
+ break;
+ case 0x480A:
+ GotoState(&Klayman::stMoveVenusFlyTrap);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::stJumpToRingVenusFlyTrap);
+ break;
+ case NM_KLAYMAN_PRESS_BUTTON:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stPressDoorButton);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ sub41CCE0(param.asInteger());
+ break;
+ case 0x4820:
+ sendMessage(_parentScene, 0x2005, 0);
+ GotoState(&Klayman::stContinueClimbLadderUp);
+ break;
+ case 0x4821:
+ sendMessage(_parentScene, 0x2005, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4822:
+ sendMessage(_parentScene, 0x2005, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x4823:
+ sendMessage(_parentScene, 0x2006, 0);
+ GotoState(&Klayman::stClimbLadderHalf);
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWalkToFrontNoStep);
+ } else {
+ GotoState(&Klayman::stWalkToFront);
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnToFront);
+ } else {
+ GotoState(&Klayman::stTurnToBack);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
}
-}
-
-void KmScene1002::stContinueMovingVenusFlyTrap() {
- _isMoveObjectRequested = false;
- _acceptInput = true;
- startAnimationByHash(0x5C01A870, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
-}
-
-void KmScene1002::stMoveVenusFlyTrapDone() {
- sendMessage(_attachedSprite, 0x482A, 0);
+ return 0;
}
// KmScene1004
@@ -3372,7 +3635,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1201
KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// TODO setKlaymanIdleTable(dword_4AEF10, 3);
_flagF6 = true;
@@ -3389,19 +3652,19 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
- GotoState(&KmScene1201::stMoveObject);
+ GotoState(&Klayman::stMoveObject);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4813:
- GotoState(&KmScene1201::stFetchMatch);
+ GotoState(&Klayman::stFetchMatch);
break;
case 0x4814:
- GotoState(&KmScene1201::stTumbleHeadless);
+ GotoState(&Klayman::stTumbleHeadless);
break;
case 0x4815:
- GotoState(&KmScene1201::stCloseEyes);
+ GotoState(&Klayman::stCloseEyes);
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
@@ -3442,135 +3705,6 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1201::upMoveObject() {
- if (_x >= 380)
- gotoNextStateExt();
- Klayman::update();
-}
-
-uint32 KmScene1201::hmMatch(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x51281850) {
- setGlobalVar(0x20A0C516, 1);
- } else if (param.asInteger() == 0x43000538) {
- playSound(0, 0x21043059);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- playSound(0, 0x44051000);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1201::stFetchMatch() {
- if (!stStartAction(AnimationCallback(&KmScene1201::stFetchMatch))) {
- _status2 = 0;
- _acceptInput = false;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x9CAA0218, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1201::hmMatch);
- NextState(&KmScene1201::stLightMatch);
- }
-}
-
-void KmScene1201::stLightMatch() {
- _status2 = 1;
- _acceptInput = false;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x1222A513, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1201::hmMatch);
-}
-
-uint32 KmScene1201::hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x01084280) {
- playSound(0, 0x405002D8);
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x480B, 0);
- }
- } else if (param.asInteger() == 0x02421405) {
- if (_countdown != 0) {
- _countdown--;
- stMoveObjectSkipTurn();
- } else {
- SetMessageHandler(&Klayman::handleMessage41D480);
- }
- }
- break;
- }
- return Klayman::handleMessage41D480(messageNum, param, sender);
-}
-
-uint32 KmScene1201::hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x000F0082) {
- playSound(0, 0x74E2810F);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1201::stMoveObject() {
- if (!stStartAction(AnimationCallback(&KmScene1201::stMoveObject))) {
- _status2 = 2;
- _acceptInput = false;
- _countdown = 8;
- setDoDeltaX(0);
- startAnimation(0x0C1CA072, 0, -1);
- SetUpdateHandler(&KmScene1201::upMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::hmMoveObject);
- }
-}
-
-void KmScene1201::stMoveObjectSkipTurn() {
- _acceptInput = false;
- startAnimationByHash(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&KmScene1201::upMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::hmMoveObject);
-}
-
-void KmScene1201::stTumbleHeadless() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stTumbleHeadless))) {
- _status2 = 1;
- _acceptInput = false;
- setDoDeltaX(0);
- startAnimation(0x2821C590, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::hmTumbleHeadless);
- NextState(&Klayman::stTryStandIdle);
- sendMessage(_parentScene, 0x8000, 0);
- playSound(0, 0x62E0A356);
- }
-}
-
-void KmScene1201::stCloseEyes() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stCloseEyes))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D360);
- }
-}
-
KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3662,7 +3796,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
- GotoState(&KmScene1305::stCrashDown);
+ GotoState(&Klayman::stCrashDown);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3672,22 +3806,6 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene1305::stCrashDown() {
- playSound(0, 0x41648271);
- _status2 = 1;
- _acceptInput = false;
- startAnimationByHash(0x000BAB02, 0x88003000, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
- NextState(&KmScene1305::stCrashDownFinished);
-}
-
-void KmScene1305::stCrashDownFinished() {
- setDoDeltaX(2);
- stTryStandIdle();
-}
-
KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3836,7 +3954,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x480D:
- GotoState(&KmScene1001::stUseLever);
+ GotoState(&Klayman::stUseLever);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4032,7 +4150,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x480D:
- GotoState(&KmScene1001::stUseLever);
+ GotoState(&Klayman::stUseLever);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4261,7 +4379,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x4803:
- GotoState(&KmScene1705::stFallSkipJump);
+ GotoState(&Klayman::stFallSkipJump);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4329,26 +4447,6 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-void KmScene1705::suFallSkipJump() {
- updateDeltaXY();
- HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
- if (hitRect->type == 0x5001) {
- _y = hitRect->rect.y1;
- processDelta();
- sendMessage(this, 0x1019, 0);
- }
-}
-
-void KmScene1705::stFallSkipJump() {
- _status2 = 2;
- _acceptInput = false;
- startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene1705::suFallSkipJump);
- SetMessageHandler(&Klayman::handleMessage41D360);
- NextState(&Klayman::stLandOnFeet);
-}
-
KmScene1901::KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -4852,11 +4950,11 @@ KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2001:
- GotoState(&KmScene2207::stRidePlatform);
+ GotoState(&Klayman::stRidePlatform);
break;
case 0x2005:
suRidePlatform();
- GotoState(&KmScene2207::stTryStandIdle);
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4001:
case 0x4800:
@@ -4866,7 +4964,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480D:
- GotoState(&KmScene2207::stInteractLever);
+ GotoState(&Klayman::stInteractLever);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
@@ -4908,63 +5006,6 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2207::suRidePlatform() {
- _x = _attachedSprite->getX() - 20;
- _y = _attachedSprite->getY() + 46;
- processDelta();
-}
-
-void KmScene2207::stRidePlatform() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene2207::stRidePlatform))) {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene2207::suRidePlatform);
- SetMessageHandler(&Klayman::handleMessage41D360);
- }
-}
-
-void KmScene2207::stInteractLever() {
- if (!stStartAction(AnimationCallback(&KmScene2207::stInteractLever))) {
- _status2 = 0;
- if (_isLeverDown) {
- stUseLeverRelease();
- } else {
- _acceptInput = false;
- startAnimation(0x0C303040, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene2207::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
- NextState(&KmScene2207::stPullLever);
- }
- }
-}
-
-void KmScene2207::stPullLever() {
- startAnimation(0x0D318140, 0, -1);
- sendMessage(_attachedSprite, 0x480F, 0);
- NextState(&KmScene2207::stLookLeverDown);
-}
-
-void KmScene2207::stLookLeverDown() {
- startAnimation(0x1564A2C0, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- NextState(&KmScene2207::stWaitLeverDown);
- _acceptInput = true;
- _isLeverDown = true;
-}
-
-void KmScene2207::stWaitLeverDown() {
- startAnimation(0x4464A440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41D360);
- _acceptInput = true;
- _isLeverDown = true;
-}
-
KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5156,7 +5197,7 @@ void KmScene2247::stStartWalkingResume() {
}
KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _readyToSpit(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5170,7 +5211,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -5225,7 +5266,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stWonderAbout);
else {
_spitPipeIndex = sendMessage(_parentScene, 0x2000, 0);
- GotoState(&KmScene2401::stTrySpitIntoPipe);
+ GotoState(&Klayman::stTrySpitIntoPipe);
}
break;
case 0x483F:
@@ -5238,67 +5279,6 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-uint32 KmScene2401::hmSpit(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x16401CA6) {
- _canSpitPipe = true;
- if (_contSpitPipe)
- spitIntoPipe();
- } else if (param.asInteger() == 0xC11C0008) {
- _canSpitPipe = false;
- _acceptInput = false;
- _readyToSpit = false;
- } else if (param.asInteger() == 0x018A0001) {
- sendMessage(_parentScene, 0x2001, _spitDestPipeIndex);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene2401::stTrySpitIntoPipe() {
- if (_readyToSpit) {
- _contSpitPipe = true;
- _spitContDestPipeIndex = _spitPipeIndex;
- if (_canSpitPipe)
- spitIntoPipe();
- } else if (!stStartAction(AnimationCallback(&KmScene2401::stTrySpitIntoPipe))) {
- _status2 = 2;
- _acceptInput = true;
- _spitDestPipeIndex = _spitPipeIndex;
- _readyToSpit = true;
- _canSpitPipe = false;
- _contSpitPipe = false;
- startAnimation(0x1808B150, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::hmSpit);
- SetSpriteUpdate(NULL);
- }
-}
-
-void KmScene2401::spitIntoPipe() {
- _contSpitPipe = false;
- _spitDestPipeIndex = _spitContDestPipeIndex;
- _canSpitPipe = false;
- _acceptInput = false;
- startAnimation(0x1B08B553, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::hmSpit);
- SetSpriteUpdate(NULL);
- NextState(&KmScene2401::stContSpitIntoPipe);
-}
-
-void KmScene2401::stContSpitIntoPipe() {
- _canSpitPipe = true;
- _acceptInput = true;
- startAnimationByHash(0x1808B150, 0x16401CA6, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::hmSpit);
- SetSpriteUpdate(NULL);
-}
-
KmScene2402::KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5325,10 +5305,10 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -5389,10 +5369,10 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klayman::stPullCord);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -5480,7 +5460,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2)
GotoState(&Klayman::stPickUpNeedle);
else if (param.asInteger() == 1)
@@ -5888,7 +5868,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4831:
- GotoState(&KmScene2806::stGrow);
+ GotoState(&Klayman::stGrow);
break;
case 0x4832:
if (param.asInteger() == 1) {
@@ -5946,7 +5926,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4831:
- GotoState(&KmScene2809::stGrow);
+ GotoState(&Klayman::stGrow);
break;
case 0x4832:
if (param.asInteger() == 1) {
@@ -6033,7 +6013,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 3)
GotoState(&Klayman::sub421230);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4817:
@@ -6122,7 +6102,7 @@ uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
_destY = param.asInteger();
GotoState(&Klayman::stJumpToGrabFall);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2)
GotoState(&Klayman::stPickUpNeedle);
else if (param.asInteger() == 1)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 77001c3..4d0c969 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -129,10 +129,10 @@ public:
void spriteUpdate41F300();
void suWalkingTestExit();
- uint32 handleMessage41D360(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41D480(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41E210(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLever(int messageNum, const MessageParam ¶m, Entity *sender);
void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
void setKlaymanIdleTable1();
@@ -214,6 +214,59 @@ public:
void suRidePlatformDown();
void stRidePlatformDown();
+ void stCrashDown();
+ void stCrashDownFinished();
+
+ void upSpitOutFall();
+ uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suFallDown();
+ void stJumpToRingVenusFlyTrap();
+ void stStandIdleSpecial();
+ void stSpitOutFall0();
+ void stFalling();
+ void stSpitOutFall2();
+ void stFallTouchdown();
+ void stJumpAndFall();
+ void stDropFromRing();
+ void stPressDoorButton();
+ void stHitByBoxingGlove();
+ void stHitByBoxingGloveDone();
+ void stMoveVenusFlyTrap();
+ void stContinueMovingVenusFlyTrap();
+ void stMoveVenusFlyTrapDone();
+
+ void suFallSkipJump();
+ void stFallSkipJump();
+
+ void upMoveObject();
+ uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stFetchMatch();
+ void stLightMatch();
+ uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stMoveObject();
+ void stContinueMoveObject();
+ void stTumbleHeadless();
+ void stCloseEyes();
+
+ uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stTrySpitIntoPipe();
+ void spitIntoPipe();
+ void stContSpitIntoPipe();
+
+ void suRidePlatform();
+ void stRidePlatform();
+ void stInteractLever();
+ void stPullLever();
+ void stLookLeverDown();
+ void stWaitLeverDown();
+
void startWalkingResume(int16 frameIncr);
protected:
@@ -249,7 +302,20 @@ protected:
int16 _platformDeltaY;
+ Sprite *_otherSprite;
+ int _idleTableNum;
+
+ int _moveObjectCountdown;
+
+ bool _canSpitPipe;
+ bool _contSpitPipe;
+ bool _readyToSpit;
+ uint32 _spitPipeIndex;
+ uint32 _spitDestPipeIndex;
+ uint32 _spitContDestPipeIndex;
+
virtual void xUpdate();
+ // TODO Check if this can be turned into a void result
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void stIdlePickEar();
@@ -347,33 +413,8 @@ class KmScene1002 : public Klayman {
public:
KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- Sprite *_otherSprite;
- int _idleTableNum;
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void upSpitOutFall();
- uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender);
- void suFallDown();
- void stJumpToRingVenusFlyTrap();
- void stStandIdleSpecial();
- void stSpitOutFall0();
- void stFalling();
- void stSpitOutFall2();
- void stFallTouchdown();
- void stJumpAndFall();
- void stDropFromRing();
- void stPressDoorButton();
- void stHitByBoxingGlove();
- void stHitByBoxingGloveDone();
- void stMoveVenusFlyTrap();
- void stContinueMovingVenusFlyTrap();
- void stMoveVenusFlyTrapDone();
};
class KmScene1004 : public Klayman {
@@ -394,18 +435,7 @@ class KmScene1201 : public Klayman {
public:
KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- int _countdown;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void upMoveObject();
- uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
- void stFetchMatch();
- void stLightMatch();
- uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
- void stMoveObject();
- void stMoveObjectSkipTurn();
- void stTumbleHeadless();
- void stCloseEyes();
};
class KmScene1303 : public Klayman {
@@ -427,8 +457,6 @@ public:
KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stCrashDown();
- void stCrashDownFinished();
};
class KmScene1306 : public Klayman {
@@ -485,8 +513,6 @@ public:
KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void suFallSkipJump();
- void stFallSkipJump();
};
class KmScene1901 : public Klayman {
@@ -548,12 +574,6 @@ public:
KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void suRidePlatform();
- void stRidePlatform();
- void stInteractLever();
- void stPullLever();
- void stLookLeverDown();
- void stWaitLeverDown();
};
class KmScene2242 : public Klayman {
@@ -587,17 +607,7 @@ class KmScene2401 : public Klayman {
public:
KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _canSpitPipe;
- bool _contSpitPipe;
- bool _readyToSpit;
- uint32 _spitPipeIndex;
- uint32 _spitDestPipeIndex;
- uint32 _spitContDestPipeIndex;
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender);
- void stTrySpitIntoPipe();
- void spitIntoPipe();
- void stContSpitIntoPipe();
};
class KmScene2402 : public Klayman {
Commit: 3ef691f1afe733e21371eca11e170b8d71783f5c
https://github.com/scummvm/scummvm/commit/3ef691f1afe733e21371eca11e170b8d71783f5c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: Rename
- Also fix compilation (oops)
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 76a2ebf..1036478 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -502,13 +502,13 @@ void Klayman::stTryStandIdle() {
_idleCounter = 0;
_blinkCounter = 0;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
- SetUpdateHandler(&Klayman::upIdle);
+ SetUpdateHandler(&Klayman::upStandIdle);
SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
}
-void Klayman::upIdle() {
+void Klayman::upStandIdle() {
update();
if (++_idleCounter >= 720) {
_idleCounter = 0;
@@ -588,7 +588,7 @@ void Klayman::stStandAround() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::upIdle);
+ SetUpdateHandler(&Klayman::upStandIdle);
SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 4d0c969..a7ea670 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -318,6 +318,19 @@ protected:
// TODO Check if this can be turned into a void result
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+ void startWalkToX(int16 x, bool flag);
+ void startWalkToXExt(int16 x);
+ void startWalkToXSmall(int16 x);
+ void startSpecialWalkLeft(int16 x);
+ void startSpecialWalkRight(int16 x);
+ void sub41CC40(int16 x1, int16 x2);
+ void sub41CCE0(int16 x);
+
+ bool stStartActionFromIdle(AnimationCb callback);
+ void gotoNextStateExt();
+ void sub41C770();
+ void sub41C790();
+
void stIdlePickEar();
void evIdlePickEarDone();
uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -338,20 +351,13 @@ protected:
void startIdleAnimation(uint32 fileHash, AnimationCb callback);
void upIdleAnimation();
- bool stStartActionFromIdle(AnimationCb callback);
- void gotoNextStateExt();
- void sub41C770();
- void sub41C790();
-
- void upIdle();
+ void upStandIdle();
void stIdleBlink();
void stStandAround();
uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
- void startWalkToX(int16 x, bool flag);
-
uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender);
bool stStartAction(AnimationCb callback3);
@@ -359,7 +365,6 @@ protected:
void stSneak();
void stWalkingDone();
uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender);
- void startSpecialWalkLeft(int16 x);
void stStartWalking();
uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -367,10 +372,6 @@ protected:
uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender);
- void startSpecialWalkRight(int16 x);
- void sub41CC40(int16 x1, int16 x2);
- void startWalkToXExt(int16 x);
- void sub41CCE0(int16 x);
void stLargeStepDone();
uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -393,7 +394,6 @@ protected:
uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
- void startWalkToXSmall(int16 x);
void stStartWalkingSmall();
uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: debc7e953d3cda85aefc2fae9325eb8ddf47d5c7
https://github.com/scummvm/scummvm/commit/debc7e953d3cda85aefc2fae9325eb8ddf47d5c7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: More changes to the Klayman class:
- Rename some stuff
- Reorder methods (in the Klayman header only until I'm happy with it :)
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 1036478..ae08de9 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -60,7 +60,7 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
_attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
_flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
- _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false) {
+ _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -301,21 +301,21 @@ void Klayman::upSitIdleTeleporter() {
} else if (++_blinkCounter >= _blinkCounterMax) {
_blinkCounter = 0;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
- stIdleSitBlink();
+ stSitIdleTeleporterBlink();
}
}
-void Klayman::stIdleSitBlink() {
+void Klayman::stSitIdleTeleporterBlink() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
- NextState(&Klayman::stIdleSitBlinkSecond);
+ NextState(&Klayman::stSitIdleTeleporterBlinkSecond);
}
-void Klayman::stIdleSitBlinkSecond() {
+void Klayman::stSitIdleTeleporterBlinkSecond() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
@@ -331,7 +331,7 @@ void Klayman::stPickUpNeedle() {
_acceptInput = false;
startAnimation(0x1449C169, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPickUpGeneric);
+ SetMessageHandler(&Klayman::hmPickUpObject);
SetSpriteUpdate(NULL);
}
}
@@ -675,7 +675,7 @@ bool Klayman::stStartAction(AnimationCb callback3) {
startAnimation(0x5C7080D4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartAction);
- SetSpriteUpdate(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::suAction);
NextState(callback3);
return true;
} else {
@@ -684,7 +684,7 @@ bool Klayman::stStartAction(AnimationCb callback3) {
}
}
-void Klayman::spriteUpdate41F250() {
+void Klayman::suAction() {
int16 xdiff = _destX - _x;
@@ -715,7 +715,7 @@ void Klayman::spriteUpdate41F250() {
}
-void Klayman::suWalking() {
+void Klayman::suSneaking() {
int16 xdiff = _destX - _x;
@@ -770,11 +770,11 @@ void Klayman::stSneak() {
startAnimation(0x5C48C506, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmSneaking);
- SetSpriteUpdate(&Klayman::suWalking);
- FinalizeState(&Klayman::stWalkingDone);
+ SetSpriteUpdate(&Klayman::suSneaking);
+ FinalizeState(&Klayman::evSneakingDone);
}
-void Klayman::stWalkingDone() {
+void Klayman::evSneakingDone() {
_isSneaking = false;
}
@@ -810,12 +810,12 @@ void Klayman::stStartWalking() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::stStartWalkingDone);
- NextState(&Klayman::stWalking);
+ FinalizeState(&Klayman::evStartWalkingDone);
+ NextState(&Klayman::stWalkingFirst);
}
}
-void Klayman::stStartWalkingDone() {
+void Klayman::evStartWalkingDone() {
_isWalking = false;
}
@@ -833,19 +833,19 @@ uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Klayman::stWalking() {
+void Klayman::stWalkingFirst() {
_status2 = 0;
_isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- FinalizeState(&Klayman::stStartWalkingDone);
- NextState(&Klayman::stUpdateWalking);
+ SetSpriteUpdate(&Klayman::suWalkingFirst);
+ FinalizeState(&Klayman::evStartWalkingDone);
+ NextState(&Klayman::stUpdateWalkingFirst);
}
-void Klayman::spriteUpdate41F300() {
+void Klayman::suWalkingFirst() {
SetSpriteUpdate(&Klayman::suWalkingTestExit);
_deltaX = 0;
}
@@ -864,7 +864,7 @@ uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sen
return messageResult;
}
-void Klayman::stUpdateWalking() {
+void Klayman::stUpdateWalkingFirst() {
if (_status3 == 2) {
gotoNextStateExt();
} else if (_status3 == 3) {
@@ -891,8 +891,8 @@ void Klayman::stUpdateWalking() {
}
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmSneaking);
- SetSpriteUpdate(&Klayman::suWalking);
- FinalizeState(&Klayman::stWalkingDone);
+ SetSpriteUpdate(&Klayman::suSneaking);
+ FinalizeState(&Klayman::evSneakingDone);
}
}
@@ -962,12 +962,12 @@ void Klayman::stPickUpGeneric() {
_acceptInput = false;
startAnimation(0x1C28C178, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPickUpGeneric);
+ SetMessageHandler(&Klayman::hmPickUpObject);
SetSpriteUpdate(NULL);
}
}
-uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -991,8 +991,8 @@ uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entit
}
-void Klayman::stTurnPressButton() {
- if (!stStartAction(AnimationCallback(&Klayman::stTurnPressButton))) {
+void Klayman::stPressButton() {
+ if (!stStartAction(AnimationCallback(&Klayman::stPressButton))) {
_status2 = 2;
_acceptInput = true;
startAnimation(0x1C02B03D, 0, -1);
@@ -1018,8 +1018,8 @@ uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Klayman::stStampFloorButton() {
- if (!stStartAction(AnimationCallback(&Klayman::stStampFloorButton))) {
+void Klayman::stPressFloorButton() {
+ if (!stStartAction(AnimationCallback(&Klayman::stPressFloorButton))) {
_status2 = 2;
_acceptInput = true;
startAnimation(0x1C16B033, 0, -1);
@@ -1036,7 +1036,7 @@ void Klayman::stPressButtonSide() {
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteUpdate(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::suAction);
}
}
@@ -1093,7 +1093,7 @@ void Klayman::stStartWalkingSmall() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkingSmall);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::stStartWalkingDone);
+ FinalizeState(&Klayman::evStartWalkingDone);
}
uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1221,7 +1221,7 @@ void Klayman::stPullCord() {
_acceptInput = false;
startAnimation(0x3F28E094, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPullCord);
+ SetMessageHandler(&Klayman::hmPullReleaseCord);
SetSpriteUpdate(NULL);
NextState(&Klayman::stReleaseCord);
}
@@ -1231,11 +1231,11 @@ void Klayman::stReleaseCord() {
_acceptInput = false;
startAnimation(0x3A28C094, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPullCord);
+ SetMessageHandler(&Klayman::hmPullReleaseCord);
SetSpriteUpdate(NULL);
}
-uint32 Klayman::hmPullCord(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1286,16 +1286,16 @@ uint32 Klayman::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sen
return messageResult;
}
-void Klayman::stWalkingExt() {
+void Klayman::stWalkingFirstExt() {
_status2 = 0;
_isWalking = true;
_acceptInput = true;
startAnimation(0x5A2CBC00, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ SetSpriteUpdate(&Klayman::suWalkingFirst);
+ NextState(&Klayman::stUpdateWalkingFirst);
+ FinalizeState(&Klayman::evStartWalkingDone);
}
void Klayman::stStartWalkingExt() {
@@ -1308,8 +1308,8 @@ void Klayman::stStartWalkingExt() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::stStartWalkingDone);
- NextState(&Klayman::stWalkingExt);
+ FinalizeState(&Klayman::evStartWalkingDone);
+ NextState(&Klayman::stWalkingFirstExt);
}
}
@@ -1588,7 +1588,7 @@ void Klayman::stJumpToRing3() {
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmJumpToRing3);
- NextState(&Klayman::stHoldRing);
+ NextState(&Klayman::stHoldRing3);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
@@ -1611,16 +1611,16 @@ uint32 Klayman::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Klayman::stHoldRing() {
+void Klayman::stHoldRing3() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x4A293FB0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmHoldRing);
+ SetMessageHandler(&Klayman::hmHoldRing3);
SetSpriteUpdate(NULL);
}
-uint32 Klayman::hmHoldRing(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
if (messageNum == 0x1008) {
stReleaseRing();
return 0;
@@ -1702,21 +1702,21 @@ void Klayman::stClimbLadderHalf() {
_acceptInput = false;
startAnimationByHash(0x3A292504, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DFD0);
+ SetMessageHandler(&Klayman::hmClimbLadderHalf);
SetSpriteUpdate(&Klayman::suUpdateDestX);
} else if (_ladderStatus == 2) {
_ladderStatus = 0;
_acceptInput = false;
startAnimationByHash(0x122D1505, 0x02421405, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41DFD0);
+ SetMessageHandler(&Klayman::hmClimbLadderHalf);
SetSpriteUpdate(&Klayman::suUpdateDestX);
} else {
gotoNextStateExt();
}
}
-uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -2077,10 +2077,10 @@ void Klayman::stReleaseLever() {
void Klayman::stLetGoOfLever() {
startAnimation(0x0928C048, 0, -1);
- FinalizeState(&Klayman::cbLeverReleasedEvent);
+ FinalizeState(&Klayman::evLeverReleasedEvent);
}
-void Klayman::cbLeverReleasedEvent() {
+void Klayman::evLeverReleasedEvent() {
sendMessage(_attachedSprite, 0x482A, 0);
}
@@ -2101,7 +2101,7 @@ void Klayman::stInsertDisk() {
} else {
startAnimation(0xD8C8D100, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::suAction);
SetMessageHandler(&Klayman::hmInsertDisk);
_acceptInput = false;
_tapesToInsert--;
@@ -2249,8 +2249,8 @@ void Klayman::stJumpToGrabRelease() {
_acceptInput = false;
startAnimationByHash(0x00AB8C10, 0x320AC306, 0);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmJumpToGrabRelease);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stReleaseRing);
}
@@ -2276,7 +2276,7 @@ void Klayman::stIdleTeleporterHands() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
- NextState(&Klayman::stIdleSitBlinkSecond);
+ NextState(&Klayman::stSitIdleTeleporterBlinkSecond);
}
void Klayman::stDoIdleTeleporterHands2() {
@@ -2290,7 +2290,7 @@ void Klayman::stIdleTeleporterHands2() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
- NextState(&Klayman::stIdleSitBlinkSecond);
+ NextState(&Klayman::stSitIdleTeleporterBlinkSecond);
}
void Klayman::teleporterAppear(uint32 fileHash) {
@@ -2519,7 +2519,7 @@ void Klayman::stInsertKey() {
_acceptInput = false;
startAnimation(0xDC409440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::suAction);
SetMessageHandler(&Klayman::hmInsertKey);
_keysToInsert--;
}
@@ -2676,7 +2676,7 @@ void Klayman::suRidePlatformDown() {
}
void Klayman::stRidePlatformDown() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::stRidePlatformDown))) {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatformDown))) {
_status2 = 1;
sendMessage(_parentScene, 0x4803, 0);
_acceptInput = false;
@@ -2697,7 +2697,7 @@ void Klayman::stCrashDown() {
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmLowLevelAnimation);
- NextState(&KmScene1305::stCrashDownFinished);
+ NextState(&Klayman::stCrashDownFinished);
}
void Klayman::stCrashDownFinished() {
@@ -2902,6 +2902,18 @@ void Klayman::stSpitOutFall0() {
sendMessage(_parentScene, 0x8000, 0);
}
+void Klayman::stSpitOutFall2() {
+ _countdown1 = 1;
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x9308C132, 0, -1);
+ SetUpdateHandler(&Klayman::upSpitOutFall);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(&Klayman::suFallDown);
+ NextState(&Klayman::stFalling);
+ sendMessage(_parentScene, 0x8000, 0);
+}
+
void Klayman::stFalling() {
sendMessage(_parentScene, 0x1024, 1);
playSound(0, 0x41648271);
@@ -2919,18 +2931,6 @@ void Klayman::stFalling() {
sendMessage(_parentScene, 0x8001, 0);
}
-void Klayman::stSpitOutFall2() {
- _countdown1 = 1;
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x9308C132, 0, -1);
- SetUpdateHandler(&Klayman::upSpitOutFall);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(&Klayman::suFallDown);
- NextState(&Klayman::stFalling);
- sendMessage(_parentScene, 0x8000, 0);
-}
-
void Klayman::stFallTouchdown() {
setDoDeltaX(2);
stTryStandIdle();
@@ -2971,7 +2971,7 @@ void Klayman::stPressDoorButton() {
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmPressDoorButton);
- SetSpriteUpdate(&Klayman::spriteUpdate41F250);
+ SetSpriteUpdate(&Klayman::suAction);
}
void Klayman::stHitByBoxingGlove() {
@@ -2981,10 +2981,10 @@ void Klayman::stHitByBoxingGlove() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmHitByBoxingGlove);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&Klayman::stHitByBoxingGloveDone);
+ FinalizeState(&Klayman::evHitByBoxingGloveDone);
}
-void Klayman::stHitByBoxingGloveDone() {
+void Klayman::evHitByBoxingGloveDone() {
sendMessage(_parentScene, 0x1024, 1);
}
@@ -2998,7 +2998,7 @@ void Klayman::stMoveVenusFlyTrap() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&Klayman::stMoveVenusFlyTrapDone);
+ FinalizeState(&Klayman::evMoveVenusFlyTrapDone);
}
}
@@ -3009,10 +3009,10 @@ void Klayman::stContinueMovingVenusFlyTrap() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&Klayman::stMoveVenusFlyTrapDone);
+ FinalizeState(&Klayman::evMoveVenusFlyTrapDone);
}
-void Klayman::stMoveVenusFlyTrapDone() {
+void Klayman::evMoveVenusFlyTrapDone() {
sendMessage(_attachedSprite, 0x482A, 0);
}
@@ -3292,9 +3292,9 @@ void Klayman::startWalkingResume(int16 frameIncr) {
startAnimation(0x1A249001, frameIndex, -1);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
+ SetSpriteUpdate(&Klayman::suWalkingFirst);
+ NextState(&Klayman::stUpdateWalkingFirst);
+ FinalizeState(&Klayman::evStartWalkingDone);
}
//##############################################################################
@@ -3326,9 +3326,9 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -3592,7 +3592,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&Klayman::stWalking);
+ GotoState(&Klayman::stWalkingFirst);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -3838,9 +3838,9 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4031,9 +4031,9 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4510,7 +4510,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&Klayman::stWalking);
+ GotoState(&Klayman::stWalkingFirst);
} else
GotoState(&Klayman::stPeekWall);
break;
@@ -4587,9 +4587,9 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4734,9 +4734,9 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4836,6 +4836,7 @@ void KmScene2205::stStartWalkingResume() {
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
+ _walkResumeFrameIncr = 1;
_vm->_soundMan->addSound(0x80101800, 0xD3B02847);
}
@@ -4876,9 +4877,9 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -4971,9 +4972,9 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -5213,9 +5214,9 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -5300,7 +5301,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&Klayman::stWalking);
+ GotoState(&Klayman::stWalkingFirst);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5310,9 +5311,9 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -5374,9 +5375,9 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
+ GotoState(&Klayman::stPressButton);
} else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
+ GotoState(&Klayman::stPressFloorButton);
} else {
GotoState(&Klayman::stPressButtonSide);
}
@@ -5455,7 +5456,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&Klayman::stWalking);
+ GotoState(&Klayman::stWalkingFirst);
} else {
GotoState(&Klayman::stPeekWall);
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index a7ea670..89c59b6 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -52,223 +52,330 @@ public:
void update();
+ void startIdleAnimation(uint32 fileHash, AnimationCb callback);
+ void upIdleAnimation();
+
void stDoIdlePickEar();
+ void stIdlePickEar();
+ void evIdlePickEarDone();
+ uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
+
void stDoIdleSpinHead();
+ void stIdleSpinHead();
+ uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender);
+
void stDoIdleArms();
+ void stIdleArms();
+ void evIdleArmsDone();
+ uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender);
+
void stDoIdleChest();
+ void stIdleChest();
+ uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender);
+
void stDoIdleHeadOff();
+ void stIdleHeadOff();
+ uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stDoIdleTeleporterHands();
+ void stIdleTeleporterHands();
+
+ void stDoIdleTeleporterHands2();
+ void stIdleTeleporterHands2();
+
void stTryStandIdle();
- void stWakeUp();
- void stSleeping();
- void stPickUpGeneric();
- void stTurnPressButton();
- void stStampFloorButton();
- void stPressButtonSide();
- void stLargeStep();
- void stWonderAboutHalf();
- void stWonderAboutAfter();
- void stTurnToUseHalf();
- void stTurnAwayFromUse();
- void stWonderAbout();
- void stPeekWall();
- void stJumpToRing1();
- void setupJumpToRing();
- void stHangOnRing();
- void stJumpToRing2();
- void stJumpToRing3();
- void stHoldRing();
- void stReleaseRing();
- void stJumpToRing4();
- void stContinueClimbLadderUp();
- void stStartClimbLadderDown();
- void stClimbLadderHalf();
- void stStartClimbLadderUp();
+ void stStandAround();
+ void upStandIdle();
+ void stIdleBlink();
+
+ bool stStartAction(AnimationCb callback3);
+ bool stStartActionFromIdle(AnimationCb callback);
+ uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stSneak();
+ uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suSneaking();
+ void evSneakingDone();
+
+ void stStartWalking();
+ void stStartWalkingExt();
+ void stWalkingOpenDoor();
+ void suWalkingOpenDoor();
+ void stStepOver();
+ uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
+ void evStartWalkingDone();
+
+ void stWalkingFirst();
+ void stWalkingFirstExt();
+ void startWalkingResume(int16 frameIncr);
+ void stUpdateWalkingFirst();
+ uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suWalkingFirst();
+
void stWalkToFrontNoStep();
void stWalkToFront();
void stTurnToFront();
void stTurnToBack();
- void stLandOnFeet();
+ uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender);
+
void stTurnToBackToUse();
- void stClayDoorOpen();
- void stTurnToUse();
- void stReturnFromUse();
- void stWalkingOpenDoor();
- void stSitIdleTeleporter();
- void stIdleSitBlink();
- void stIdleSitBlinkSecond();
+ uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPickUpGeneric();
void stPickUpNeedle();
- void stPickUpTube();
- void stTurnToUseInTeleporter();
- void stReturnFromUseInTeleporter();
- void stStepOver();
- void stSitInTeleporter();
- void stGetUpFromTeleporter();
- void stMoveObjectSkipTurnFaceObject();
- void evMoveObjectTurnDone();
- void stMoveObjectSkipTurn();
- void stMoveObjectFaceObject();
- void stUseLever();
- void stPullLeverDown();
- void stHoldLeverDown();
- void stUseLeverRelease();
- void stReleaseLever();
- void stLetGoOfLever();
- void cbLeverReleasedEvent();
- void stInsertDisk();
- void stWalking();
- void stUpdateWalking();
- void stStartWalkingDone();
+ uint32 hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender);
- void stopWalking();
+ void stPickUpTube();
+ uint32 hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate41F250();
- void suWalking();
- void suLargeStep();
- void suUpdateDestX();
- void suWalkingOpenDoor();
- void spriteUpdate41F300();
- void suWalkingTestExit();
+ void stTurnToUse();
+ void stTurnToUseHalf();
+ void stTurnAwayFromUse();
+ void stReturnFromUse();
+ void stTurnToUseExt();
+ uint32 hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmLever(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stLargeStep();
+ uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
- void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
- void setKlaymanIdleTable1();
- void setKlaymanIdleTable2();
- void setKlaymanIdleTable3();
-
- void setSoundFlag(bool value) { _soundFlag = value; }
+ void stInsertKey();
+ uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stReadNote();
+ uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stHitByDoor();
+ uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPeekWall();
+ uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPeekWallReturn();
+ uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPeekWallBlink();
+ void upPeekWallBlink();
+
+ void stPeekWall1();
+
+ void stPeekWall2();
+
+ void stPullHammerLever();
+ uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stRidePlatformDown();
+ void suRidePlatformDown();
+
+ void stCrashDown();
+ void stCrashDownFinished();
+
+ void stShrink();
+ uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stGrow();
+ uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stDrinkPotion();
+ uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
- void stStandIdleSmall();
- void stWonderAboutAfterSmall();
- void stWonderAboutHalfSmall();
- void stWonderAboutSmall();
- void stWalkToFrontNoStepSmall();
- void stWalkToFront2Small();
- void stWalkToFrontSmall();
- void stTurnToBackHalfSmall();
- void stTurnToBackWalkSmall();
- void stTurnToBackSmall();
void stPullCord();
void stReleaseCord();
- uint32 hmPullCord(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender);
+
void stUseTube();
uint32 hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender);
- void stWalkingExt();
- void stStartWalkingExt();
-
+
+ void stUseLever();
+ void stUseLeverRelease();
+ void stReleaseLever();
+ void stInteractLever();
+ uint32 hmLever(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stLetGoOfLever();
+ void evLeverReleasedEvent();
+
+ void stWakeUp();
+
+ void stSleeping();
+ uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPressButton();
+ void stPressFloorButton();
+ void stPressButtonSide();
+ uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stWonderAbout();
+ void stWonderAboutHalf();
+ void stWonderAboutAfter();
+
+ void stStandWonderAbout();
+
+ void stStartClimbLadderUp();
+ void stStartClimbLadderDown();
+ uint32 hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stContinueClimbLadderUp();
+
+ void stClimbLadderHalf();
+ uint32 hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void setupJumpToRing();
+ void stJumpToRing1();
+ void stJumpToRing2();
+ void stJumpToRing4();
+ uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stHangOnRing();
+
+ void stJumpToRing3();
+ uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stHoldRing3();
+ uint32 hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stReleaseRing();
+
+ void stLandOnFeet();
+ uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPullLeverDown();
+ void stHoldLeverDown();
+
+ void stInsertDisk();
+ uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stMoveObjectSkipTurnFaceObject();
+ void stMoveObjectSkipTurn();
+ void stMoveObjectFaceObject();
+ uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender);
+ void evMoveObjectTurnDone();
+
void stJumpToGrab();
- void suJumpToGrab();
- uint32 hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void sub421230();//stGrow??
- uint32 handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stTurnToUseExt();
void stJumpToGrabFall();
+ uint32 hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suJumpToGrab();
void stJumpToGrabRelease();
uint32 hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender);
- void stDoIdleTeleporterHands();
- void stIdleTeleporterHands();
-
- void stDoIdleTeleporterHands2();
- void stIdleTeleporterHands2();
+ void stSitInTeleporter();
+ uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stSitIdleTeleporter();
+ void upSitIdleTeleporter();
+
+ void stSitIdleTeleporterBlink();
+
+ void stSitIdleTeleporterBlinkSecond();
+
+ void stTurnToUseInTeleporter();
+
+ void stReturnFromUseInTeleporter();
+
+ void stGetUpFromTeleporter();
void teleporterAppear(uint32 fileHash);
void teleporterDisappear(uint32 fileHash);
uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender);
- void stShrink();
-
- void stStandWonderAbout();
+ void stClayDoorOpen();
+ uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
- void stGrow();
- void stDrinkPotion();
+ void stFallSkipJump();
+ void suFallSkipJump();
- uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender);
- void stInsertKey();
+ void stMoveObject();
+ void stContinueMoveObject();
+ uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender);
+ void upMoveObject();
- uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender);
- void stReadNote();
+ void stCloseEyes();
- uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
- void stHitByDoor();
+ void stTumbleHeadless();
+ uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
- void upPeekWallBlink();
- void stPeekWall1();
- void stPeekWall2();
- void stPeekWallBlink();
- void stPeekWallReturn();
+ void stFetchMatch();
+ void stLightMatch();
+ uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
- void stPullHammerLever();
- uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stHitByBoxingGlove();
+ uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender);
+ void evHitByBoxingGloveDone();
- void suRidePlatformDown();
- void stRidePlatformDown();
+ void stStandIdleSmall();
+ void stWonderAboutSmall();
+ void stWonderAboutHalfSmall();
+ void stWonderAboutAfterSmall();
- void stCrashDown();
- void stCrashDownFinished();
+ void stWalkToFrontNoStepSmall();
+ void stWalkToFrontSmall();
+ void stWalkToFront2Small();
+ void stTurnToBackHalfSmall();
+ void stTurnToBackWalkSmall();
+ void stTurnToBackSmall();
+ uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender);
- void upSpitOutFall();
+ void sub421230();//stGrow??
+ uint32 handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stJumpToRingVenusFlyTrap();
uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stDropFromRing();
+
+ void stStandIdleSpecial();
uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stPressDoorButton();
uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender);
- void suFallDown();
- void stJumpToRingVenusFlyTrap();
- void stStandIdleSpecial();
+
void stSpitOutFall0();
- void stFalling();
void stSpitOutFall2();
- void stFallTouchdown();
+ void suFallDown();
+ void upSpitOutFall();
+
void stJumpAndFall();
- void stDropFromRing();
- void stPressDoorButton();
- void stHitByBoxingGlove();
- void stHitByBoxingGloveDone();
+ uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void stFalling();
+ void stFallTouchdown();
+
void stMoveVenusFlyTrap();
void stContinueMovingVenusFlyTrap();
- void stMoveVenusFlyTrapDone();
+ uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
+ void evMoveVenusFlyTrapDone();
- void suFallSkipJump();
- void stFallSkipJump();
+ ////////////////////////////////////////////////////////////////////////////
- void upMoveObject();
- uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
- void stFetchMatch();
- void stLightMatch();
- uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
- void stMoveObject();
- void stContinueMoveObject();
- void stTumbleHeadless();
- void stCloseEyes();
+ void stopWalking();
+
+ void suAction();
+ void suLargeStep();
+ void suUpdateDestX();
+ void suWalkingTestExit();
+
+ uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
+
+ void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
+ void setKlaymanIdleTable1();
+ void setKlaymanIdleTable2();
+ void setKlaymanIdleTable3();
+
+ void setSoundFlag(bool value) { _soundFlag = value; }
- uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender);
- void stTrySpitIntoPipe();
void spitIntoPipe();
+ void stTrySpitIntoPipe();
void stContSpitIntoPipe();
+ uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender);
- void suRidePlatform();
void stRidePlatform();
- void stInteractLever();
+ void suRidePlatform();
void stPullLever();
void stLookLeverDown();
void stWaitLeverDown();
- void startWalkingResume(int16 frameIncr);
-
protected:
Entity *_parentScene;
Sprite *_attachedSprite;
@@ -305,6 +412,8 @@ protected:
Sprite *_otherSprite;
int _idleTableNum;
+ int16 _walkResumeFrameIncr;
+
int _moveObjectCountdown;
bool _canSpitPipe;
@@ -326,77 +435,14 @@ protected:
void sub41CC40(int16 x1, int16 x2);
void sub41CCE0(int16 x);
- bool stStartActionFromIdle(AnimationCb callback);
void gotoNextStateExt();
void sub41C770();
void sub41C790();
-
- void stIdlePickEar();
- void evIdlePickEarDone();
- uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stIdleSpinHead();
- uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stIdleArms();
- void evIdleArmsDone();
- uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stIdleChest();
- uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stIdleHeadOff();
- uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender);
- void startIdleAnimation(uint32 fileHash, AnimationCb callback);
- void upIdleAnimation();
-
- void upStandIdle();
-
- void stIdleBlink();
- void stStandAround();
-
- uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
-
- uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender);
-
- bool stStartAction(AnimationCb callback3);
-
- void stSneak();
- void stWalkingDone();
- uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender);
- void stStartWalking();
- uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
-
- uint32 hmPickUpGeneric(int messageNum, const MessageParam ¶m, Entity *sender);
-
- uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender);
-
void stLargeStepDone();
- uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmHoldRing(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage41DFD0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void upSitIdleTeleporter();
-
- uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
-
void stStartWalkingSmall();
uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender);
void walkAlongPathPoints();
Commit: bb4bda740489193ee13b4b7f4bff9e839df3f63a
https://github.com/scummvm/scummvm/commit/bb4bda740489193ee13b4b7f4bff9e839df3f63a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: More minor Klayman changes:
- Normalize the calling order of the Set... macros
- Actually use _walkResumeFrameIncr, change stStartWalkingResume
Changed paths:
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index ae08de9..93cc49e 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -273,10 +273,10 @@ void Klayman::stSitIdleTeleporter() {
_status2 = 0;
_acceptInput = true;
startAnimation(0x582EC138, 0, -1);
- _idleCounter = 0;
- SetSpriteUpdate(NULL);
SetUpdateHandler(&Klayman::upSitIdleTeleporter);
SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(NULL);
+ _idleCounter = 0;
_blinkCounter = 0;
_idleCounterMax = 8;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
@@ -475,7 +475,7 @@ void Klayman::gotoNextStateExt() {
AnimationCb cb = _nextStateCb;
_nextStateCb = NULL;
(this->*cb)();
-#if 0 // TODO
+#if 0 // TODO (So far, with almost all Klayman subclasses implemented, _callbackList and related code seems unused)
} else if (_callbackList) {
removeCallbackList();
#endif
@@ -499,12 +499,12 @@ void Klayman::stTryStandIdle() {
_status2 = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
- _idleCounter = 0;
- _blinkCounter = 0;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
SetUpdateHandler(&Klayman::upStandIdle);
SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
+ _idleCounter = 0;
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
}
}
@@ -810,8 +810,8 @@ void Klayman::stStartWalking() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::evStartWalkingDone);
NextState(&Klayman::stWalkingFirst);
+ FinalizeState(&Klayman::evStartWalkingDone);
}
}
@@ -841,8 +841,8 @@ void Klayman::stWalkingFirst() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalking);
SetSpriteUpdate(&Klayman::suWalkingFirst);
- FinalizeState(&Klayman::evStartWalkingDone);
NextState(&Klayman::stUpdateWalkingFirst);
+ FinalizeState(&Klayman::evStartWalkingDone);
}
void Klayman::suWalkingFirst() {
@@ -1308,8 +1308,8 @@ void Klayman::stStartWalkingExt() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmStartWalking);
SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::evStartWalkingDone);
NextState(&Klayman::stWalkingFirstExt);
+ FinalizeState(&Klayman::evStartWalkingDone);
}
}
@@ -1373,10 +1373,10 @@ void Klayman::stLargeStep() {
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLargeStep);
SetSpriteUpdate(&Klayman::suLargeStep);
- FinalizeState(&Klayman::stLargeStepDone);
+ FinalizeState(&Klayman::evLargeStepDone);
}
-void Klayman::stLargeStepDone() {
+void Klayman::evLargeStepDone() {
_isLargeStep = false;
}
@@ -1901,8 +1901,8 @@ void Klayman::stClayDoorOpen() {
_acceptInput = false;
startAnimation(0x5CCCB330, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmClayDoorOpen);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -1934,8 +1934,8 @@ void Klayman::stReturnFromUse() {
_acceptInput = false;
startAnimation(0x98F88391, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmTurnToUse);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
void Klayman::stWalkingOpenDoor() {
@@ -1943,8 +1943,8 @@ void Klayman::stWalkingOpenDoor() {
_acceptInput = false;
startAnimation(0x11A8E012, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suWalkingOpenDoor);
SetMessageHandler(&Klayman::hmStartWalking);
+ SetSpriteUpdate(&Klayman::suWalkingOpenDoor);
}
void Klayman::suWalkingOpenDoor() {
@@ -2011,8 +2011,8 @@ void Klayman::stMoveObjectFaceObject() {
_acceptInput = true;
startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmMoveObjectTurn);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
}
@@ -2024,9 +2024,9 @@ void Klayman::stUseLever() {
} else {
sendMessage(_attachedSprite, 0x482B, 0);
startAnimation(0x0C303040, 0, -1);
- SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmLever);
+ SetUpdateHandler(&Klayman::update);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
}
@@ -2043,8 +2043,8 @@ void Klayman::stPullLeverDown() {
void Klayman::stHoldLeverDown() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
_isLeverDown = true;
_acceptInput = true;
}
@@ -2052,8 +2052,8 @@ void Klayman::stHoldLeverDown() {
void Klayman::stUseLeverRelease() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmLever);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
@@ -2064,8 +2064,8 @@ void Klayman::stReleaseLever() {
_status2 = 2;
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmLever);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stLetGoOfLever);
_acceptInput = false;
@@ -2101,8 +2101,8 @@ void Klayman::stInsertDisk() {
} else {
startAnimation(0xD8C8D100, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suAction);
SetMessageHandler(&Klayman::hmInsertDisk);
+ SetSpriteUpdate(&Klayman::suAction);
_acceptInput = false;
_tapesToInsert--;
}
@@ -2341,11 +2341,11 @@ uint32 Klayman::hmShrink(int messageNum, const MessageParam ¶m, Entity *send
void Klayman::stShrink() {
_status2 = 0;
_acceptInput = false;
- startAnimation(0x1AE88904, 0, -1);
playSound(0, 0x4C69EA53);
+ startAnimation(0x1AE88904, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&Klayman::hmShrink);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
void Klayman::stStandWonderAbout() {
@@ -2354,10 +2354,10 @@ void Klayman::stStandWonderAbout() {
_status2 = 0;
_acceptInput = true;
startAnimation(0xD820A114, 0, -1);
- _newStickFrameIndex = 10;
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
+ _newStickFrameIndex = 10;
}
uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2519,8 +2519,8 @@ void Klayman::stInsertKey() {
_acceptInput = false;
startAnimation(0xDC409440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suAction);
SetMessageHandler(&Klayman::hmInsertKey);
+ SetSpriteUpdate(&Klayman::suAction);
_keysToInsert--;
}
}
@@ -2576,8 +2576,8 @@ void Klayman::stHitByDoor() {
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&Klayman::hmHitByDoor);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
playSound(0, 0x402E82D4);
}
@@ -2611,8 +2611,8 @@ void Klayman::stPeekWall1() {
_acceptInput = true;
startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stPeekWallBlink);
}
@@ -2642,8 +2642,8 @@ void Klayman::stPeekWallReturn() {
_acceptInput = false;
startAnimation(0x2426932E, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmPeekWallReturn);
+ SetSpriteUpdate(NULL);
}
void Klayman::stPullHammerLever() {
@@ -2872,8 +2872,8 @@ void Klayman::stJumpToRingVenusFlyTrap() {
_acceptInput = false;
startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&Klayman::hmJumpToRingVenusFlyTrap);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
NextState(&Klayman::stLandOnFeet);
sendMessage(_attachedSprite, 0x482B, 0);
}
@@ -2886,8 +2886,8 @@ void Klayman::stStandIdleSpecial() {
_surface->setVisible(false);
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmStandIdleSpecial);
+ SetSpriteUpdate(NULL);
}
void Klayman::stSpitOutFall0() {
@@ -2926,7 +2926,7 @@ void Klayman::stFalling() {
SetMessageHandler(&Klayman::hmLowLevelAnimation);
NextState(&Klayman::stFallTouchdown);
sendMessage(_parentScene, 0x2002, 0);
- // TODO _callbackList = NULL;
+ // TODO _callbackList = NULL; (See comment above)
_attachedSprite = NULL;
sendMessage(_parentScene, 0x8001, 0);
}
@@ -3069,8 +3069,8 @@ void Klayman::stFetchMatch() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x9CAA0218, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmMatch);
+ SetSpriteUpdate(NULL);
NextState(&Klayman::stLightMatch);
}
}
@@ -3081,8 +3081,8 @@ void Klayman::stLightMatch() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x1222A513, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmMatch);
+ SetSpriteUpdate(NULL);
}
uint32 Klayman::hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -3124,8 +3124,8 @@ void Klayman::stMoveObject() {
setDoDeltaX(0);
startAnimation(0x0C1CA072, 0, -1);
SetUpdateHandler(&Klayman::upMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&Klayman::hmMoveObject);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
}
@@ -3144,8 +3144,8 @@ void Klayman::stTumbleHeadless() {
setDoDeltaX(0);
startAnimation(0x2821C590, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&Klayman::hmTumbleHeadless);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
NextState(&Klayman::stTryStandIdle);
sendMessage(_parentScene, 0x8000, 0);
playSound(0, 0x62E0A356);
@@ -3158,8 +3158,8 @@ void Klayman::stCloseEyes() {
_acceptInput = false;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(NULL);
}
}
@@ -3236,8 +3236,8 @@ void Klayman::stRidePlatform() {
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suRidePlatform);
SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(&Klayman::suRidePlatform);
}
}
@@ -3250,8 +3250,8 @@ void Klayman::stInteractLever() {
_acceptInput = false;
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmLever);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
NextState(&Klayman::stPullLever);
}
}
@@ -3259,31 +3259,30 @@ void Klayman::stInteractLever() {
void Klayman::stPullLever() {
startAnimation(0x0D318140, 0, -1);
- sendMessage(_attachedSprite, 0x480F, 0);
NextState(&Klayman::stLookLeverDown);
+ sendMessage(_attachedSprite, 0x480F, 0);
}
void Klayman::stLookLeverDown() {
+ _acceptInput = true;
+ _isLeverDown = true;
startAnimation(0x1564A2C0, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
NextState(&Klayman::stWaitLeverDown);
- _acceptInput = true;
- _isLeverDown = true;
}
void Klayman::stWaitLeverDown() {
+ _acceptInput = true;
+ _isLeverDown = true;
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
SetMessageHandler(&Klayman::hmLowLevel);
- _acceptInput = true;
- _isLeverDown = true;
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
}
-void Klayman::startWalkingResume(int16 frameIncr) {
- // TODO Make the parameter a field and change this method back to a callback (or similar)
- int16 frameIndex = getGlobalVar(0x18288913) + frameIncr;
+void Klayman::stStartWalkingResume() {
+ int16 frameIndex = getGlobalVar(0x18288913) + _walkResumeFrameIncr;
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
@@ -4802,7 +4801,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2205::stStartWalkingResume);
+ GotoState(&Klayman::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -4829,10 +4828,6 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2205::stStartWalkingResume() {
- startWalkingResume(0);
-}
-
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -4863,7 +4858,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2206::stStartWalkingResume);
+ GotoState(&Klayman::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -4939,10 +4934,6 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2206::stStartWalkingResume() {
- startWalkingResume(1);
-}
-
KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5028,7 +5019,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2242::stStartWalkingResume);
+ GotoState(&Klayman::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5077,10 +5068,6 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2242::stStartWalkingResume() {
- startWalkingResume(0);
-}
-
KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5102,7 +5089,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmHallOfRecords::stStartWalkingResume);
+ GotoState(&Klayman::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5135,10 +5122,6 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
return 0;
}
-void KmHallOfRecords::stStartWalkingResume() {
- startWalkingResume(0);
-}
-
KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5160,7 +5143,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4804:
if (param.asInteger() != 0) {
_destX = param.asInteger();
- GotoState(&KmScene2247::stStartWalkingResume);
+ GotoState(&Klayman::stStartWalkingResume);
} else {
GotoState(&Klayman::stPeekWall);
}
@@ -5193,10 +5176,6 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-void KmScene2247::stStartWalkingResume() {
- startWalkingResume(0);
-}
-
KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 89c59b6..b83eb14 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -107,7 +107,7 @@ public:
void stWalkingFirst();
void stWalkingFirstExt();
- void startWalkingResume(int16 frameIncr);
+ void stStartWalkingResume();
void stUpdateWalkingFirst();
uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
void suWalkingFirst();
@@ -137,6 +137,8 @@ public:
void stLargeStep();
uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suLargeStep();
+ void evLargeStepDone();
void stInsertKey();
uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -351,7 +353,6 @@ public:
void stopWalking();
void suAction();
- void suLargeStep();
void suUpdateDestX();
void suWalkingTestExit();
@@ -439,8 +440,6 @@ protected:
void sub41C770();
void sub41C790();
- void stLargeStepDone();
-
void stStartWalkingSmall();
uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -599,7 +598,6 @@ protected:
class KmScene2205 : public Klayman {
public:
KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void stStartWalkingResume();
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -612,7 +610,6 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stStartWalkingResume();
};
class KmScene2207 : public Klayman {
@@ -628,7 +625,6 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stStartWalkingResume();
};
class KmHallOfRecords : public Klayman {
@@ -637,7 +633,6 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stStartWalkingResume();
};
class KmScene2247 : public Klayman {
@@ -646,7 +641,6 @@ public:
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void stStartWalkingResume();
};
class KmScene2401 : public Klayman {
Commit: c88fdc34dd6ef0f26c65150ba35bff13854f7d93
https://github.com/scummvm/scummvm/commit/c88fdc34dd6ef0f26c65150ba35bff13854f7d93
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: Rename Class152 to StaticScene
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 09299de..f281a17 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -300,7 +300,7 @@ void GameModule::startup() {
// createModule(1500, 0); // Logos and intro video //Real
#if 1
_vm->gameState().sceneNum = 6;
- createModule(1300, -1);
+ createModule(1000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 1e844c7..ab4c051 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -62,7 +62,7 @@ void Module1000::createScene(int sceneNum, int which) {
break;
case 2:
_vm->_soundMan->startMusic(0x061880C6, 0, 0);
- _childObject = new Class152(_vm, this, 0xC084110C, 0x41108C00);
+ _childObject = new StaticScene(_vm, this, 0xC084110C, 0x41108C00);
break;
case 3:
_vm->_soundMan->stopMusic(0x061880C6, 0, 2);
@@ -1563,21 +1563,21 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-// Class152
+// StaticScene
-Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
+StaticScene::StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
: Scene(vm, parentModule, true) {
_surfaceFlag = false;
- SetMessageHandler(&Class152::handleMessage);
+ SetMessageHandler(&StaticScene::handleMessage);
setBackground(backgroundFileHash);
setPalette(backgroundFileHash);
insertMouse435(cursorFileHash, 20, 620);
}
-uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 StaticScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 60eb2fb..db8fdb6 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -103,9 +103,9 @@ protected:
// TODO: Move this to some common file since it's used several times
-class Class152 : public Scene {
+class StaticScene : public Scene {
public:
- Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash);
+ StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index f703971..36be19a 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -202,14 +202,14 @@ void Module2200::createScene(int sceneNum, int which) {
case 47:
if (!getGlobalVar(0x98109F12)) {
if (getGlobalVar(0x4D080E54))
- _childObject = new Class152(_vm, this, 0x83110287, 0x10283839);
+ _childObject = new StaticScene(_vm, this, 0x83110287, 0x10283839);
else
- _childObject = new Class152(_vm, this, 0x83412B9D, 0x12B9983C);
+ _childObject = new StaticScene(_vm, this, 0x83412B9D, 0x12B9983C);
} else {
if (getGlobalVar(0x4D080E54))
- _childObject = new Class152(_vm, this, 0x48632087, 0x3208348E);
+ _childObject = new StaticScene(_vm, this, 0x48632087, 0x3208348E);
else
- _childObject = new Class152(_vm, this, 0x08C74886, 0x74882084);
+ _childObject = new StaticScene(_vm, this, 0x08C74886, 0x74882084);
}
break;
}
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 6c12006..5dcfa8d 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -70,13 +70,13 @@ void Module2400::createScene(int sceneNum, int which) {
createSmackerScene(0x20D80001, true, true, false);
break;
case 7:
- _childObject = new Class152(_vm, this, 0x81523218, 0x2321C81D);
+ _childObject = new StaticScene(_vm, this, 0x81523218, 0x2321C81D);
break;
case 8:
- _childObject = new Class152(_vm, this, 0x08100210, 0x00214089);
+ _childObject = new StaticScene(_vm, this, 0x08100210, 0x00214089);
break;
case 9:
- _childObject = new Class152(_vm, this, 0x8C020505, 0x205018C8);
+ _childObject = new StaticScene(_vm, this, 0x8C020505, 0x205018C8);
break;
}
SetUpdateHandler(&Module2400::updateScene);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 1efcb25..cc0dda9 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -126,9 +126,9 @@ void Module2500::createScene(int sceneNum, int which) {
break;
case 9:
if (getGlobalVar(0xD0A14D10))
- _childObject = new Class152(_vm, this, 0xC62A0645, 0xA0641C6A);
+ _childObject = new StaticScene(_vm, this, 0xC62A0645, 0xA0641C6A);
else
- _childObject = new Class152(_vm, this, 0x7A343546, 0x435427AB);
+ _childObject = new StaticScene(_vm, this, 0x7A343546, 0x435427AB);
break;
}
SetUpdateHandler(&Module2500::updateScene);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 0a59abf..f9a5c2a 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -267,7 +267,7 @@ void Module2700::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B1E60, 150);
break;
case 30:
- _childObject = new Class152(_vm, this, 0x09507248, 0x0724C09D);
+ _childObject = new StaticScene(_vm, this, 0x09507248, 0x0724C09D);
break;
case 31:
//TODO _childObject = new Scene2732(_vm, this, which);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 6d7e49f..7a35ddd 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -70,7 +70,7 @@ void Module2800::createScene(int sceneNum, int which) {
if (_flag) {
_childObject = new Scene2802(_vm, this, which);
} else {
- _childObject = new Class152(_vm, this, 0x000C6444, 0xC6440008);
+ _childObject = new StaticScene(_vm, this, 0x000C6444, 0xC6440008);
}
#endif
break;
@@ -119,39 +119,39 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 12:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x0000A245, 0x0A241008);
+ _childObject = new StaticScene(_vm, this, 0x0000A245, 0x0A241008);
break;
case 13:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x81C60635, 0x60631814);
+ _childObject = new StaticScene(_vm, this, 0x81C60635, 0x60631814);
break;
case 14:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0xCA811204, 0x11200CA0);
+ _childObject = new StaticScene(_vm, this, 0xCA811204, 0x11200CA0);
break;
case 15:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x2D438A00, 0x38A042DC);
+ _childObject = new StaticScene(_vm, this, 0x2D438A00, 0x38A042DC);
break;
case 16:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x0A806204, 0x062000A0);
+ _childObject = new StaticScene(_vm, this, 0x0A806204, 0x062000A0);
break;
case 17:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x010F9284, 0xF9280018);
+ _childObject = new StaticScene(_vm, this, 0x010F9284, 0xF9280018);
break;
case 18:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x0100022B, 0x0022F018);
+ _childObject = new StaticScene(_vm, this, 0x0100022B, 0x0022F018);
break;
case 19:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x10866205, 0x66201100);
+ _childObject = new StaticScene(_vm, this, 0x10866205, 0x66201100);
break;
case 20:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x01C58000, 0x58004014);
+ _childObject = new StaticScene(_vm, this, 0x01C58000, 0x58004014);
break;
case 21:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
@@ -159,22 +159,22 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 22:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x9408121E, 0x8121A948);
+ _childObject = new StaticScene(_vm, this, 0x9408121E, 0x8121A948);
break;
case 23:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x048C0600, 0xC0604040);
+ _childObject = new StaticScene(_vm, this, 0x048C0600, 0xC0604040);
break;
case 24:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new Class152(_vm, this, 0x04270A94, 0x70A9004A);
+ _childObject = new StaticScene(_vm, this, 0x04270A94, 0x70A9004A);
break;
case 25:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
if (getGlobalVar(0x190A1D18))
- _childObject = new Class152(_vm, this, 0x01600204, 0x0020001E);
+ _childObject = new StaticScene(_vm, this, 0x01600204, 0x0020001E);
else
- _childObject = new Class152(_vm, this, 0x08611204, 0x1120008E);
+ _childObject = new StaticScene(_vm, this, 0x08611204, 0x1120008E);
break;
case 26:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
Commit: 81667d492a5513ebc390b2d563dca25db681729a
https://github.com/scummvm/scummvm/commit/81667d492a5513ebc390b2d563dca25db681729a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:46-07:00
Commit Message:
NEVERHOOD: Remove SsScene1002LadderArch and Class599 and turn them into static sprites; the classes were only used to set the sprite surface priority with a message, which is now handled in the scene
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index f281a17..e378775 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -299,7 +299,7 @@ void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule(1500, 0); // Logos and intro video //Real
#if 1
- _vm->gameState().sceneNum = 6;
+ _vm->gameState().sceneNum = 1;
createModule(1000, -1);
#endif
#if 0
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index ab4c051..4fdb3db 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -458,44 +458,6 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1002
-SsScene1002LadderArch::SsScene1002LadderArch(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 0x152C1313, 1015), _parentScene(parentScene) {
-
- SetMessageHandler(&SsScene1002LadderArch::handleMessage);
-}
-
-uint32 SsScene1002LadderArch::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 995);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1015);
- break;
- }
- return messageResult;
-}
-
-Class599::Class599(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 0x316C4BB4, 1015), _parentScene(parentScene) {
-
- SetMessageHandler(&Class599::handleMessage);
-}
-
-uint32 Class599::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 995);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1015);
- break;
- }
- return messageResult;
-}
-
AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _flag1(flag1) {
@@ -1327,12 +1289,12 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x06149428, 1100);
insertStaticSprite(0x312C8774, 1100);
- _ssLadderArch = insertSprite<SsScene1002LadderArch>(this);
+ _ssLadderArch = insertStaticSprite(0x152C1313, 1015);
_ssLadderArchPart1 = insertStaticSprite(0x060000A0, 1200);
_ssLadderArchPart2 = insertStaticSprite(0xB2A423B0, 1100);
_ssLadderArchPart3 = insertStaticSprite(0x316E0772, 1100);
- _class599 = insertSprite<Class599>(this);
+ _class599 = insertStaticSprite(0x316C4BB4, 1015);
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
@@ -1552,12 +1514,12 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
break;
case 0x8000:
- sendMessage(_class599, 0x482A, 0);
- sendMessage(_ssLadderArch, 0x482A, 0);
+ setSpriteSurfacePriority(_class599, 995);
+ setSpriteSurfacePriority(_ssLadderArch, 995);
break;
case 0x8001:
- sendMessage(_class599, 0x482B, 0);
- sendMessage(_ssLadderArch, 0x482B, 0);
+ setSpriteSurfacePriority(_class599, 1015);
+ setSpriteSurfacePriority(_ssLadderArch, 1015);
break;
}
return messageResult;
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index db8fdb6..864b5cc 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -112,22 +112,6 @@ protected:
// Scene1002
-class SsScene1002LadderArch : public StaticSprite {
-public:
- SsScene1002LadderArch(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Class599 : public StaticSprite {
-public:
- Class599(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
class AsScene1002Ring : public AnimatedSprite {
public:
AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 8520d64..dde437d 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -169,6 +169,11 @@ void Scene::setSurfacePriority(BaseSurface *surface, int priority) {
addSurface(surface);
}
+void Scene::setSpriteSurfacePriority(Sprite *sprite, int priority) {
+ if (sprite)
+ setSurfacePriority(sprite->getSurface(), priority);
+}
+
void Scene::deleteSprite(Sprite **sprite) {
_vm->_collisionMan->removeSprite(*sprite);
removeSurface((*sprite)->getSurface());
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index f9e221a..35adb44 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -49,6 +49,7 @@ public:
Sprite *addSprite(Sprite *sprite);
void removeSprite(Sprite *sprite);
void setSurfacePriority(BaseSurface *surface, int priority);
+ void setSpriteSurfacePriority(Sprite *sprite, int priority);
void deleteSprite(Sprite **sprite);
Background *addBackground(Background *background);
void setBackground(uint32 fileHash, bool dirtyBackground = true);
Commit: 5e08ab3e3f3d02a55765c9c5f22934666578fddc
https://github.com/scummvm/scummvm/commit/5e08ab3e3f3d02a55765c9c5f22934666578fddc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Rename Class426 to SsCommonPressButton
Changed paths:
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 4fdb3db..dce4b8c 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -763,7 +763,7 @@ void AsScene1002DoorSpy::stDoorSpyBoxingGlove() {
NextState(&AsScene1002DoorSpy::stDoorSpyIdle);
}
-Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
+SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
: StaticSprite(vm, 1100), _parentScene(parentScene), _status(0) {
_soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
@@ -784,12 +784,12 @@ Class426::Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, ui
setVisible(false);
_needRefresh = true;
- SetUpdateHandler(&Class426::update);
- SetMessageHandler(&Class426::handleMessage);
+ SetUpdateHandler(&SsCommonPressButton::update);
+ SetMessageHandler(&SsCommonPressButton::handleMessage);
}
-void Class426::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
+void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHashes[0] = fileHash1;
_fileHashes[1] = fileHash2;
if (_status == 2) {
@@ -815,7 +815,7 @@ void Class426::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
}
}
-void Class426::update() {
+void SsCommonPressButton::update() {
if (_countdown != 0 && (--_countdown) == 0) {
if (_status == 1) {
_status = 2;
@@ -848,7 +848,7 @@ void Class426::update() {
}
}
-uint32 Class426::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsCommonPressButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x480B:
@@ -1353,7 +1353,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asDoor = insertSprite<AsScene1002Door>(tempClipRect);
tempSprite = insertSprite<AsScene1002BoxingGloveHitEffect>();
_asDoorSpy = insertSprite<AsScene1002DoorSpy>(tempClipRect, this, _asDoor, tempSprite);
- _class426 = insertSprite<Class426>(this, 0x00412692, 0x140B60BE, 800, 0);
+ _ssPressButton = insertSprite<SsCommonPressButton>(this, 0x00412692, 0x140B60BE, 800, 0);
_asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, false);
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
@@ -1440,7 +1440,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x42845B19) {
sendEntityMessage(_klayman, 0x1014, _asRing5);
} else if (param.asInteger() == 0xC0A07458) {
- sendEntityMessage(_klayman, 0x1014, _class426);
+ sendEntityMessage(_klayman, 0x1014, _ssPressButton);
}
break;
case 0x1024:
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 864b5cc..f63d1f0 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -158,9 +158,9 @@ protected:
void stDoorSpyBoxingGlove();
};
-class Class426 : public StaticSprite {
+class SsCommonPressButton : public StaticSprite {
public:
- Class426(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
+ SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
void setFileHashes(uint32 fileHash1, uint32 fileHash2);
protected:
Scene *_parentScene;
@@ -252,7 +252,7 @@ protected:
Sprite *_asKlaymanLadderHands;
Sprite *_asKlaymanPeekHand;
Sprite *_asOutsideDoorBackground;
- Sprite *_class426;
+ Sprite *_ssPressButton;
bool _flag1B4;
bool _flag1BE;
bool _flag;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 36be19a..4460314 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -518,7 +518,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _ssDoorButton = insertSprite<Class426>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
+ _ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 i = 0; i < 9; i++) {
if ((int16)getSubVar(0x484498D0, i) >= 0) {
@@ -1279,14 +1279,14 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x0008028D);
addEntity(_palette);
insertMouse433(0x80289008);
- _ssLightSwitch = insertSprite<Class426>(this, 0x2D339030, 0x2D309030, 100, 0);
+ _ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0x2D309030, 100, 0);
} else {
_isLightOn = false;
setBackground(0xD00A028D);
setPalette(0xD00A028D);
addEntity(_palette);
insertMouse433(0xA0289D08);
- _ssLightSwitch = insertSprite<Class426>(this, 0x2D339030, 0xDAC86E84, 100, 0);
+ _ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0xDAC86E84, 100, 0);
}
_palette->addBasePalette(0xD00A028D, 0, 256, 0);
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 3767b7b..53b9469 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -197,7 +197,7 @@ class Scene2205 : public Scene {
public:
Scene2205(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Class426 *_ssLightSwitch;
+ SsCommonPressButton *_ssLightSwitch;
Sprite *_ssDoorFrame;
bool _isKlaymanInLight;
bool _isLightOn;
Commit: f77b12cf96aaebb47a1ead1b7daf25e75dd5abf4
https://github.com/scummvm/scummvm/commit/f77b12cf96aaebb47a1ead1b7daf25e75dd5abf4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Rename stuff in Module1200
- Fix Scene1201 (tnt man, match)
Changed paths:
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index a903759..efdb6de 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -219,22 +219,24 @@ uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m,
return messageResult;
}
-Class466::Class466(NeverhoodEngine *vm, bool flag)
+AsScene1201TntManRope::AsScene1201TntManRope(NeverhoodEngine *vm, bool flag)
: AnimatedSprite(vm, 1200) {
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class466::handleMessage);
+ SetMessageHandler(&AsScene1201TntManRope::handleMessage);
createSurface(10, 34, 149);
_x = 202;
_y = -32;
if (flag) {
- sub40D380();
+ startAnimation(0x928F0C10, 15, -1);
+ _newStickFrameIndex = -2;
} else {
- sub40D340();
+ startAnimation(0x928F0C10, 0, -1);
+ _newStickFrameIndex = 0;
}
}
-uint32 Class466::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201TntManRope::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -243,27 +245,13 @@ uint32 Class466::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
break;
case 0x2006:
- sub40D360();
+ startAnimation(0x928F0C10, 1, -1);
+ _newStickFrameIndex = -2;
break;
}
return messageResult;
}
-void Class466::sub40D340() {
- startAnimation(0x928F0C10, 0, -1);
- _newStickFrameIndex = 0;
-}
-
-void Class466::sub40D360() {
- startAnimation(0x928F0C10, 1, -1);
- _newStickFrameIndex = -2;
-}
-
-void Class466::sub40D380() {
- startAnimation(0x928F0C10, 15, -1);
- _newStickFrameIndex = -2;
-}
-
AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag)
: AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) {
@@ -285,7 +273,7 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
void AsScene1201RightDoor::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- sub40D830();
+ stCloseDoor();
}
AnimatedSprite::update();
}
@@ -297,43 +285,43 @@ uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam &p
gotoNextState();
break;
case 0x4829:
- sub40D7E0();
+ stOpenDoor();
break;
}
return messageResult;
}
-void AsScene1201RightDoor::sub40D7E0() {
+void AsScene1201RightDoor::stOpenDoor() {
startAnimation(0xD088AC30, 0, -1);
_newStickFrameIndex = -2;
setVisible(true);
playSound(0, calcHash("fxDoorOpen20"));
}
-void AsScene1201RightDoor::sub40D830() {
+void AsScene1201RightDoor::stCloseDoor() {
startAnimation(0xD088AC30, -1, -1);
_playBackwards = true;
setVisible(true);
playSound(0, calcHash("fxDoorClose20"));
- NextState(&AsScene1201RightDoor::sub40D880);
+ NextState(&AsScene1201RightDoor::stCloseDoorDone);
}
-void AsScene1201RightDoor::sub40D880() {
+void AsScene1201RightDoor::stCloseDoorDone() {
stopAnimation();
setVisible(false);
}
-Class464::Class464(NeverhoodEngine *vm)
+AsScene1201KlaymanHead::AsScene1201KlaymanHead(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200) {
createSurface(1200, 69, 98);
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class464::handleMessage);
+ SetMessageHandler(&AsScene1201KlaymanHead::handleMessage);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
setVisible(false);
}
-uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201KlaymanHead::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2006:
@@ -351,22 +339,20 @@ uint32 Class464::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _class466(class466),
- _flag(false) {
+AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *asTntManRope, bool isComingDown)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _asTntManRope(asTntManRope),
+ _isMoving(false) {
- flag = false;
-
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
createSurface(990, 106, 181);
_x = 201;
- if (flag) {
+ if (isComingDown) {
_y = 297;
- sub40CD60();
+ stComingDown();
} else {
_y = 334;
- sub40CD30();
+ stStanding();
}
}
@@ -379,7 +365,7 @@ uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x092870C0) {
- sendMessage(_class466, 0x2006, 0);
+ sendMessage(_asTntManRope, 0x2006, 0);
} else if (param.asInteger() == 0x11CA0144) {
playSound(0, 0x51800A04);
}
@@ -387,10 +373,11 @@ uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶
case 0x1011:
sendMessage(_parentScene, 0x2002, 0);
messageResult = 1;
+ break;
case 0x480B:
- if (!_flag) {
+ if (!_isMoving) {
_sprite = (Sprite*)sender;
- sub40CD90();
+ stMoving();
}
break;
}
@@ -398,7 +385,7 @@ uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶
}
-uint32 AsScene1201TntMan::handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201TntMan::hmComingDown(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = AsScene1201TntMan::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -408,49 +395,49 @@ uint32 AsScene1201TntMan::handleMessage40CCD0(int messageNum, const MessageParam
return messageResult;
}
-void AsScene1201TntMan::spriteUpdate40CD10() {
+void AsScene1201TntMan::suMoving() {
_x = _sprite->getX() + 100;
}
-void AsScene1201TntMan::sub40CD30() {
+void AsScene1201TntMan::stStanding() {
startAnimation(0x654913D0, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
SetSpriteUpdate(NULL);
}
-void AsScene1201TntMan::sub40CD60() {
+void AsScene1201TntMan::stComingDown() {
startAnimation(0x356803D0, 0, -1);
- SetMessageHandler(&AsScene1201TntMan::handleMessage40CCD0);
+ SetMessageHandler(&AsScene1201TntMan::hmComingDown);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- NextState(&AsScene1201TntMan::sub40CD30);
+ NextState(&AsScene1201TntMan::stStanding);
}
-void AsScene1201TntMan::sub40CD90() {
+void AsScene1201TntMan::stMoving() {
_vm->_soundMan->addSound(0x01D00560, 0x4B044624);
_vm->_soundMan->playSoundLooping(0x4B044624);
- _flag = true;
+ _isMoving = true;
startAnimation(0x85084190, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
- SetSpriteUpdate(&AsScene1201TntMan::spriteUpdate40CD10);
+ SetSpriteUpdate(&AsScene1201TntMan::suMoving);
_newStickFrameIndex = -2;
}
-Class465::Class465(NeverhoodEngine *vm, Sprite *asTntMan)
+AsScene1201TntManFlame::AsScene1201TntManFlame(NeverhoodEngine *vm, Sprite *asTntMan)
: AnimatedSprite(vm, 1200), _asTntMan(asTntMan) {
createSurface1(0x828C0411, 995);
- SetUpdateHandler(&Class465::update);
+ SetUpdateHandler(&AsScene1201TntManFlame::update);
SetMessageHandler(&Sprite::handleMessage);
- SetSpriteUpdate(&Class465::spriteUpdate40D150);
+ SetSpriteUpdate(&AsScene1201TntManFlame::suUpdate);
startAnimation(0x828C0411, 0, -1);
setVisible(false);
}
-Class465::~Class465() {
+AsScene1201TntManFlame::~AsScene1201TntManFlame() {
_vm->_soundMan->deleteSoundGroup(0x041080A4);
}
-void Class465::update() {
+void AsScene1201TntManFlame::update() {
AnimatedSprite::update();
if (getGlobalVar(0x20A0C516)) {
setVisible(true);
@@ -460,31 +447,30 @@ void Class465::update() {
}
}
-void Class465::spriteUpdate40D150() {
+void AsScene1201TntManFlame::suUpdate() {
_x = _asTntMan->getX() - 18;
_y = _asTntMan->getY() - 158;
}
AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _countdown(0) {
createSurface(1100, 57, 60);
SetUpdateHandler(&AsScene1201Match::update);
- SetMessageHandler(&AsScene1201Match::handleMessage40C2D0);
+ SetMessageHandler(&AsScene1201Match::hmOnDoorFrameAboutToMove);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-
switch (getGlobalVar(0x0112090A)) {
case 0:
_x = 521;
_y = 112;
_status = 0;
- sub40C4C0();
+ stIdleOnDoorFrame();
break;
case 1:
_x = 521;
_y = 112;
_status = 2;
- sub40C470();
+ stOnDoorFrameAboutToMove();
loadSound(0, 0xD00230CD);
break;
case 2:
@@ -492,21 +478,20 @@ AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
_x = 403;
_y = 337;
_status = 0;
- sub40C4F0();
+ stIdleOnFloor();
break;
}
}
void AsScene1201Match::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
gotoNextState();
- }
updateAnim();
handleSpriteUpdate();
updatePosition();
}
-uint32 AsScene1201Match::handleMessage40C2D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201Match::hmOnDoorFrameAboutToMove(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -518,8 +503,8 @@ uint32 AsScene1201Match::handleMessage40C2D0(int messageNum, const MessageParam
return messageResult;
}
-uint32 AsScene1201Match::handleMessage40C320(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage40C2D0(messageNum, param, sender);
+uint32 AsScene1201Match::hmOnDoorFrameMoving(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmOnDoorFrameAboutToMove(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextState();
@@ -528,8 +513,8 @@ uint32 AsScene1201Match::handleMessage40C320(int messageNum, const MessageParam
return messageResult;
}
-uint32 AsScene1201Match::handleMessage40C360(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage40C2D0(messageNum, param, sender);
+uint32 AsScene1201Match::hmIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmOnDoorFrameAboutToMove(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
sendMessage(_parentScene, 0x2001, 0);
@@ -543,48 +528,48 @@ uint32 AsScene1201Match::handleMessage40C360(int messageNum, const MessageParam
return messageResult;
}
-void AsScene1201Match::sub40C3E0() {
+void AsScene1201Match::stOnDoorFrameMoving() {
startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::handleMessage40C320);
+ SetMessageHandler(&AsScene1201Match::hmOnDoorFrameMoving);
if (_status == 0) {
- NextState(&AsScene1201Match::sub40C420);
+ NextState(&AsScene1201Match::stFallingFromDoorFrame);
} else {
- NextState(&AsScene1201Match::sub40C470);
+ NextState(&AsScene1201Match::stOnDoorFrameAboutToMove);
}
}
-void AsScene1201Match::sub40C420() {
+void AsScene1201Match::stFallingFromDoorFrame() {
setGlobalVar(0x0112090A, 2);
_x -= 199;
_y += 119;
startAnimation(0x018D0240, 0, -1);
- SetMessageHandler(&AsScene1201Match::handleMessage40C320);
- NextState(&AsScene1201Match::sub40C4F0);
+ SetMessageHandler(&AsScene1201Match::hmOnDoorFrameMoving);
+ NextState(&AsScene1201Match::stIdleOnFloor);
}
-void AsScene1201Match::sub40C470() {
+void AsScene1201Match::stOnDoorFrameAboutToMove() {
startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::handleMessage40C2D0);
+ SetMessageHandler(&AsScene1201Match::hmOnDoorFrameAboutToMove);
_newStickFrameIndex = 0;
if (_status != 0) {
_countdown = 36;
_status--;
- NextState(&AsScene1201Match::sub40C3E0);
+ NextState(&AsScene1201Match::stOnDoorFrameMoving);
}
}
-void AsScene1201Match::sub40C4C0() {
+void AsScene1201Match::stIdleOnDoorFrame() {
startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::handleMessage40C360);
+ SetMessageHandler(&AsScene1201Match::hmIdle);
_newStickFrameIndex = 0;
}
-void AsScene1201Match::sub40C4F0() {
+void AsScene1201Match::stIdleOnFloor() {
setDoDeltaX(1);
_x = 403;
_y = 337;
startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::handleMessage40C360);
+ SetMessageHandler(&AsScene1201Match::hmIdle);
_newStickFrameIndex = 0;
}
@@ -743,7 +728,7 @@ void AsScene1201LeftDoor::sub40D590() {
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _flag(false), _asMatch(NULL), _asTntMan(NULL),
- _asCreature(NULL), _class466(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
+ _asCreature(NULL), _asTntManRope(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
int16 topY1, topY2, topY3, topY4;
int16 x1, x2;
@@ -780,8 +765,8 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x04063110, 500);
topY4 = tempSprite->getY() + 1;
- _class466 = insertSprite<Class466>(getGlobalVar(0x000CF819) && which != 1);
- _class466->setClipRect(0, topY4, 640, 480);
+ _asTntManRope = insertSprite<AsScene1201TntManRope>(getGlobalVar(0x000CF819) && which != 1);
+ _asTntManRope->setClipRect(0, topY4, 640, 480);
insertStaticSprite(0x400B04B0, 1200);
@@ -791,9 +776,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0xA29223FA, 1200);
x2 = tempSprite->getX() + tempSprite->getDrawRect().width;
- _class464 = insertSprite<Class464>();
-
- debug("Scene1201: which = %d", which);
+ _asKlaymanHead = insertSprite<AsScene1201KlaymanHead>();
if (which < 0) {
insertKlayman<KmScene1201>(364, 333);
@@ -838,11 +821,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(0x000CF819)) {
insertStaticSprite(0x10002ED8, 500);
if (!getGlobalVar(0x0A18CA33)) {
- _asTntMan = insertSprite<AsScene1201TntMan>(this, _class466, which == 1);
+ _asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
_asTntMan->setClipRect(x1, 0, x2, 480);
_asTntMan->setRepl(64, 0);
_vm->_collisionMan->addSprite(_asTntMan);
- tempSprite = insertSprite<Class465>(_asTntMan);
+ tempSprite = insertSprite<AsScene1201TntManFlame>(_asTntMan);
tempSprite->setClipRect(x1, 0, x2, 480);
}
@@ -909,7 +892,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asLeftDoor = insertSprite<AsScene1201LeftDoor>(_klayman);
_asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
- if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
+ if (getGlobalVar(0x0A310817) && getGlobalVar(0x0112090A) == 0) {
setGlobalVar(0x0112090A, 1);
}
@@ -920,7 +903,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asMatch);
}
- if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(0x0A310817) && getGlobalVar(0x0A18CA33) == 0) {
_asCreature = insertSprite<AsScene1201Creature>(this, _klayman);
_asCreature->setClipRect(x1, 0, x2, 480);
}
@@ -932,9 +915,8 @@ Scene1201::~Scene1201() {
void Scene1201::update() {
Scene::update();
- if (_asMatch && getGlobalVar(0x0112090A)) {
+ if (_asMatch && getGlobalVar(0x0112090A) == 3)
deleteSprite(&_asMatch);
- }
}
uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -967,9 +949,11 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2002:
if (getGlobalVar(0x20A0C516)) {
+ // Move the TNT dummy
sendEntityMessage(_klayman, 0x1014, _asTntMan);
setMessageList2(0x004AECF0, false);
} else if (getGlobalVar(0x0112090A) == 3) {
+ // Light the TNT dummy
sendEntityMessage(_klayman, 0x1014, _asTntMan);
if (_klayman->getX() > _asTntMan->getX()) {
setMessageList(0x004AECD0);
@@ -991,7 +975,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asRightDoor, 0x4829, 0);
break;
case 0x8000:
- sendMessage(_class464, 0x2006, 0);
+ sendMessage(_asKlaymanHead, 0x2006, 0);
break;
}
return messageResult;
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index b92ff92..671d1d7 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -51,14 +51,11 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class466 : public AnimatedSprite {
+class AsScene1201TntManRope : public AnimatedSprite {
public:
- Class466(NeverhoodEngine *vm, bool flag);
+ AsScene1201TntManRope(NeverhoodEngine *vm, bool flag);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40D340();
- void sub40D360();
- void sub40D380();
};
class AsScene1201RightDoor : public AnimatedSprite {
@@ -69,43 +66,43 @@ protected:
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40D7E0();
- void sub40D830();
- void sub40D880();
+ void stOpenDoor();
+ void stCloseDoor();
+ void stCloseDoorDone();
};
-class Class464 : public AnimatedSprite {
+class AsScene1201KlaymanHead : public AnimatedSprite {
public:
- Class464(NeverhoodEngine *vm);
+ AsScene1201KlaymanHead(NeverhoodEngine *vm);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene1201TntMan : public AnimatedSprite {
public:
- AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *class466, bool flag);
+ AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *asTntManRope, bool isDown);
virtual ~AsScene1201TntMan();
protected:
Scene *_parentScene;
- Sprite *_class466;
+ Sprite *_asTntManRope;
Sprite *_sprite;
- bool _flag;
+ bool _isMoving;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40CCD0(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate40CD10();
- void sub40CD30();
- void sub40CD60();
- void sub40CD90();
+ uint32 hmComingDown(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suMoving();
+ void stStanding();
+ void stComingDown();
+ void stMoving();
};
-class Class465 : public AnimatedSprite {
+class AsScene1201TntManFlame : public AnimatedSprite {
public:
- Class465(NeverhoodEngine *vm, Sprite *asTntMan);
- ~Class465();
+ AsScene1201TntManFlame(NeverhoodEngine *vm, Sprite *asTntMan);
+ ~AsScene1201TntManFlame();
protected:
Sprite *_asTntMan;
void update();
- void spriteUpdate40D150();
+ void suUpdate();
};
class AsScene1201Match : public AnimatedSprite {
@@ -116,14 +113,14 @@ protected:
int _countdown;
int _status;
void update();
- uint32 handleMessage40C2D0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40C320(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40C360(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40C3E0();
- void sub40C420();
- void sub40C470();
- void sub40C4C0();
- void sub40C4F0();
+ uint32 hmOnDoorFrameAboutToMove(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmOnDoorFrameMoving(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmIdle(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stOnDoorFrameMoving();
+ void stFallingFromDoorFrame();
+ void stOnDoorFrameAboutToMove();
+ void stIdleOnDoorFrame();
+ void stIdleOnFloor();
};
class AsScene1201Creature : public AnimatedSprite {
@@ -173,11 +170,11 @@ protected:
Sprite *_asMatch;
AsScene1201TntMan *_asTntMan;
Sprite *_asCreature;
- Sprite *_class466;
+ Sprite *_asTntManRope;
Sprite *_asLeftDoor;
Sprite *_asRightDoor;
Sprite *_asTape;
- Sprite *_class464;
+ Sprite *_asKlaymanHead;
bool _flag;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 7b0b3000a771e423deb840bf6789c7a73e90db6f
https://github.com/scummvm/scummvm/commit/7b0b3000a771e423deb840bf6789c7a73e90db6f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Rename stuff in Module1200
- Remove unused countdowns/code in AsScene1201Creature
- Fix AudioResourceMan::isSoundPlaying
Changed paths:
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/sound.cpp
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index efdb6de..191789d 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -574,22 +574,23 @@ void AsScene1201Match::stIdleOnFloor() {
}
AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman)
- : AnimatedSprite(vm, 900), _parentScene(parentScene), _klayman(klayman), _flag(false) {
+ : AnimatedSprite(vm, 900), _parentScene(parentScene), _klayman(klayman), _klaymanTooClose(false) {
+
+ // NOTE: _countdown2 and _countdown3 were unused/without effect and thus removed
createSurface(1100, 203, 199);
SetUpdateHandler(&AsScene1201Creature::update);
- SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
+ SetMessageHandler(&AsScene1201Creature::hmWaiting);
_x = 540;
_y = 320;
- sub40C8E0();
- _countdown3 = 2;
+ stWaiting();
}
void AsScene1201Creature::update() {
- bool oldFlag = _flag;
- _flag = _x >= 385;
- if (_flag != oldFlag)
- sub40C8E0();
+ bool oldFlag = _klaymanTooClose;
+ _klaymanTooClose = _klayman->getX() >= 385;
+ if (_klaymanTooClose != oldFlag)
+ stWaiting();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
gotoNextState();
}
@@ -598,7 +599,7 @@ void AsScene1201Creature::update() {
updatePosition();
}
-uint32 AsScene1201Creature::handleMessage40C710(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201Creature::hmWaiting(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -607,25 +608,18 @@ uint32 AsScene1201Creature::handleMessage40C710(int messageNum, const MessagePar
}
break;
case 0x2004:
- GotoState(&AsScene1201Creature::sub40C960);
+ GotoState(&AsScene1201Creature::stStartReachForTntDummy);
break;
case 0x2006:
- GotoState(&AsScene1201Creature::sub40C9B0);
+ GotoState(&AsScene1201Creature::stPincerSnapKlayman);
break;
}
return messageResult;
}
-uint32 AsScene1201Creature::handleMessage40C7B0(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage40C710(messageNum, param, sender);
+uint32 AsScene1201Creature::hmPincerSnap(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmWaiting(messageNum, param, sender);
switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x02421405) {
- if (_countdown2 != 0 && (--_countdown2 == 0)) {
- sub40C990();
- }
- }
- break;
case 0x3002:
gotoNextState();
break;
@@ -633,7 +627,7 @@ uint32 AsScene1201Creature::handleMessage40C7B0(int messageNum, const MessagePar
return messageResult;
}
-uint32 AsScene1201Creature::handleMessage40C830(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1201Creature::hmPincerSnapKlayman(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -650,45 +644,38 @@ uint32 AsScene1201Creature::handleMessage40C830(int messageNum, const MessagePar
return messageResult;
}
-void AsScene1201Creature::sub40C8E0() {
- _countdown3--;
- if (_countdown3 == 0)
- _countdown3 = 3;
+void AsScene1201Creature::stWaiting() {
startAnimation(0x08081513, 0, -1);
- SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
- NextState(&AsScene1201Creature::sub40C930);
+ SetMessageHandler(&AsScene1201Creature::hmWaiting);
+ NextState(&AsScene1201Creature::stPincerSnap);
_countdown1 = 36;
}
-void AsScene1201Creature::sub40C930() {
- if (!_flag) {
+void AsScene1201Creature::stPincerSnap() {
+ if (!_klaymanTooClose) {
startAnimation(0xCA287133, 0, -1);
- SetMessageHandler(&AsScene1201Creature::handleMessage40C7B0);
- NextState(&AsScene1201Creature::sub40C8E0);
+ SetMessageHandler(&AsScene1201Creature::hmPincerSnap);
+ NextState(&AsScene1201Creature::stWaiting);
}
}
-void AsScene1201Creature::sub40C960() {
+void AsScene1201Creature::stStartReachForTntDummy() {
startAnimation(0x08081513, 0, -1);
- SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
- NextState(&AsScene1201Creature::sub40C9E0);
+ SetMessageHandler(&AsScene1201Creature::hmWaiting);
+ NextState(&AsScene1201Creature::stReachForTntDummy);
_countdown1 = 48;
}
-void AsScene1201Creature::sub40C990() {
- startAnimationByHash(0x0B6E13FB, 0x01084280, 0);
-}
-
-void AsScene1201Creature::sub40C9B0() {
- startAnimation(0xCA287133, 0, -1);
- SetMessageHandler(&AsScene1201Creature::handleMessage40C830);
- NextState(&AsScene1201Creature::sub40C8E0);
+void AsScene1201Creature::stReachForTntDummy() {
+ startAnimation(0x5A201453, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::hmWaiting);
_countdown1 = 0;
}
-void AsScene1201Creature::sub40C9E0() {
- startAnimation(0x5A201453, 0, -1);
- SetMessageHandler(&AsScene1201Creature::handleMessage40C710);
+void AsScene1201Creature::stPincerSnapKlayman() {
+ startAnimation(0xCA287133, 0, -1);
+ SetMessageHandler(&AsScene1201Creature::hmPincerSnapKlayman);
+ NextState(&AsScene1201Creature::stWaiting);
_countdown1 = 0;
}
@@ -714,13 +701,13 @@ uint32 AsScene1201LeftDoor::handleMessage(int messageNum, const MessageParam &pa
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4809:
- sub40D590();
+ stCloseDoor();
break;
}
return messageResult;
}
-void AsScene1201LeftDoor::sub40D590() {
+void AsScene1201LeftDoor::stCloseDoor() {
startAnimation(0x508A111B, -1, -1);
_playBackwards = true;
_newStickFrameIndex = 0;
@@ -1029,36 +1016,36 @@ static const uint32 kScene1202FileHashes[] = {
0x1AC14B8
};
-AsScene1202TntItem::AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int index)
- : AnimatedSprite(vm, 900), _parentScene(parentScene), _index(index) {
+AsScene1202TntItem::AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int itemIndex)
+ : AnimatedSprite(vm, 900), _parentScene(parentScene), _itemIndex(itemIndex) {
int positionIndex;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1202TntItem::handleMessage453FE0);
- positionIndex = getSubVar(0x10055D14, _index);
+ SetMessageHandler(&AsScene1202TntItem::hmShowIdle);
+ positionIndex = getSubVar(0x10055D14, _itemIndex);
createSurface(900, 37, 67);
_x = kScene1202Points[positionIndex].x;
_y = kScene1202Points[positionIndex].y;
- sub4540A0();
+ stShowIdle();
}
-uint32 AsScene1202TntItem::handleMessage453FE0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1202TntItem::hmShowIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- sendMessage(_parentScene, 0x2000, _index);
+ sendMessage(_parentScene, 0x2000, _itemIndex);
messageResult = 1;
break;
case 0x2001:
- _index2 = (int)param.asInteger();
- sub4540D0();
+ _newPosition = (int)param.asInteger();
+ stChangePositionFadeOut();
break;
}
return messageResult;
}
-uint32 AsScene1202TntItem::handleMessage454060(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1202TntItem::hmChangePosition(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -1068,37 +1055,37 @@ uint32 AsScene1202TntItem::handleMessage454060(int messageNum, const MessagePara
return messageResult;
}
-void AsScene1202TntItem::sub4540A0() {
- startAnimation(kScene1202FileHashes[_index], 0, -1);
- SetMessageHandler(&AsScene1202TntItem::handleMessage453FE0);
+void AsScene1202TntItem::stShowIdle() {
+ startAnimation(kScene1202FileHashes[_itemIndex], 0, -1);
+ SetMessageHandler(&AsScene1202TntItem::hmShowIdle);
_newStickFrameIndex = 0;
}
-void AsScene1202TntItem::sub4540D0() {
- startAnimation(kScene1202FileHashes[_index], 0, -1);
- SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
- NextState(&AsScene1202TntItem::sub454100);
+void AsScene1202TntItem::stChangePositionFadeOut() {
+ startAnimation(kScene1202FileHashes[_itemIndex], 0, -1);
+ SetMessageHandler(&AsScene1202TntItem::hmChangePosition);
+ NextState(&AsScene1202TntItem::stChangePositionFadeIn);
}
-void AsScene1202TntItem::sub454100() {
- _x = kScene1202Points[_index2].x;
- _y = kScene1202Points[_index2].y;
- startAnimation(kScene1202FileHashes[_index], 6, -1);
- SetMessageHandler(&AsScene1202TntItem::handleMessage454060);
- NextState(&AsScene1202TntItem::sub454160);
+void AsScene1202TntItem::stChangePositionFadeIn() {
+ _x = kScene1202Points[_newPosition].x;
+ _y = kScene1202Points[_newPosition].y;
+ startAnimation(kScene1202FileHashes[_itemIndex], 6, -1);
+ SetMessageHandler(&AsScene1202TntItem::hmChangePosition);
+ NextState(&AsScene1202TntItem::stChangePositionDone);
_playBackwards = true;
}
-void AsScene1202TntItem::sub454160() {
- sendMessage(_parentScene, 0x2002, _index);
- sub4540A0();
+void AsScene1202TntItem::stChangePositionDone() {
+ sendMessage(_parentScene, 0x2002, _itemIndex);
+ stShowIdle();
}
Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _paletteResource(vm),
- _flag(true), _soundFlag(false), _counter(0), _index(-1) {
+ _flag(true), _soundFlag(false), _counter(0), _clickedIndex(-1) {
- SetMessageHandler(&Scene1202::handleMessage453C10);
+ SetMessageHandler(&Scene1202::handleMessage);
SetUpdateHandler(&Scene1202::update);
_surfaceFlag = true;
@@ -1121,7 +1108,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x8E8419C1, 1100);
if (getGlobalVar(0x000CF819)) {
- SetMessageHandler(&Scene1202::handleMessage453D90);
+ SetMessageHandler(&Scene1202::hmSolved);
}
playSound(0, 0x40106542);
@@ -1140,23 +1127,25 @@ Scene1202::~Scene1202() {
void Scene1202::update() {
Scene::update();
if (_soundFlag) {
+ debug("CHECK SOLVED");
if (!isSoundPlaying(3))
leaveScene(0);
} else if (_counter == 0 && isSolved()) {
- SetMessageHandler(&Scene1202::handleMessage453D90);
+ _clickedIndex = 0;
+ SetMessageHandler(&Scene1202::hmSolved);
setGlobalVar(0x000CF819, 1);
doPaletteEffect();
playSound(3);
_soundFlag = true;
- } else if (_index >= 0 && _counter == 0) {
- int index2 = kScene1202Table[_index];
- sendMessage(_asTntItems[_index], 0x2001, getSubVar(0x10055D14, index2));
- sendMessage(_asTntItems[index2], 0x2001, getSubVar(0x10055D14, _index));
- int temp = getSubVar(0x10055D14, index2);
- setSubVar(0x10055D14, index2, getSubVar(0x10055D14, _index));
- setSubVar(0x10055D14, _index, temp);
+ } else if (_clickedIndex >= 0 && _counter == 0) {
+ int destIndex = kScene1202Table[_clickedIndex];
+ sendMessage(_asTntItems[_clickedIndex], 0x2001, getSubVar(0x10055D14, destIndex));
+ sendMessage(_asTntItems[destIndex], 0x2001, getSubVar(0x10055D14, _clickedIndex));
+ int temp = getSubVar(0x10055D14, destIndex);
+ setSubVar(0x10055D14, destIndex, getSubVar(0x10055D14, _clickedIndex));
+ setSubVar(0x10055D14, _clickedIndex, temp);
_counter = 2;
- _index = -1;
+ _clickedIndex = -1;
if (_flag) {
playSound(1);
} else {
@@ -1166,7 +1155,7 @@ void Scene1202::update() {
}
}
-uint32 Scene1202::handleMessage453C10(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene1202::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -1183,7 +1172,7 @@ uint32 Scene1202::handleMessage453C10(int messageNum, const MessageParam ¶m,
}
break;
case 0x2000:
- _index = (int)param.asInteger();
+ _clickedIndex = (int)param.asInteger();
break;
case 0x2002:
_counter--;
@@ -1192,7 +1181,7 @@ uint32 Scene1202::handleMessage453C10(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 Scene1202::handleMessage453D90(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene1202::hmSolved(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
@@ -1205,6 +1194,12 @@ uint32 Scene1202::handleMessage453D90(int messageNum, const MessageParam ¶m,
}
bool Scene1202::isSolved() {
+
+ debug("isSolved() %d %d %d %d %d %d",
+ getSubVar(0x10055D14, 0), getSubVar(0x10055D14, 3),
+ getSubVar(0x10055D14, 6), getSubVar(0x10055D14, 9),
+ getSubVar(0x10055D14, 12), getSubVar(0x10055D14, 15));
+
return
getSubVar(0x10055D14, 0) == 0 && getSubVar(0x10055D14, 3) == 3 &&
getSubVar(0x10055D14, 6) == 6 && getSubVar(0x10055D14, 9) == 9 &&
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index 671d1d7..bc3281c 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -130,19 +130,16 @@ protected:
Scene *_parentScene;
Sprite *_klayman;
int _countdown1;
- int _countdown2;
- int _countdown3;
- bool _flag;
+ bool _klaymanTooClose;
void update();
- uint32 handleMessage40C710(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40C7B0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage40C830(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40C8E0();
- void sub40C930();
- void sub40C960();
- void sub40C990();
- void sub40C9B0();
- void sub40C9E0();
+ uint32 hmWaiting(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPincerSnap(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPincerSnapKlayman(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stWaiting();
+ void stPincerSnap();
+ void stStartReachForTntDummy();
+ void stReachForTntDummy();
+ void stPincerSnapKlayman();
};
class AsScene1201LeftDoor : public AnimatedSprite {
@@ -151,7 +148,7 @@ public:
protected:
Sprite *_klayman;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub40D590();
+ void stCloseDoor();
};
class SsScene1201Tnt : public StaticSprite {
@@ -187,13 +184,13 @@ public:
AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int index);
protected:
Scene *_parentScene;
- int _index, _index2;
- uint32 handleMessage453FE0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage454060(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub4540A0();
- void sub4540D0();
- void sub454100();
- void sub454160();
+ int _itemIndex, _newPosition;
+ uint32 hmShowIdle(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmChangePosition(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stShowIdle();
+ void stChangePositionFadeOut();
+ void stChangePositionFadeIn();
+ void stChangePositionDone();
};
class Scene1202 : public Scene {
@@ -204,13 +201,13 @@ protected:
PaletteResource _paletteResource;
Sprite *_asTntItems[18];
int _counter;
- int _index;
+ int _clickedIndex;
byte _paletteData[1024];
bool _soundFlag;
bool _flag;
void update();
- uint32 handleMessage453C10(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage453D90(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmSolved(int messageNum, const MessageParam ¶m, Entity *sender);
bool isSolved();
void doPaletteEffect();
};
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index c1db48c..18f40dc 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -616,7 +616,7 @@ void AudioResourceMan::stopSound(int16 soundIndex) {
bool AudioResourceMan::isSoundPlaying(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- return soundItem->_isPlaying;
+ return _vm->_mixer->isSoundHandleActive(soundItem->_soundHandle);
}
int16 AudioResourceMan::loadMusic(uint32 fileHash) {
Commit: 106ec42124de3fd68a2584ba1ae14f15ad4832d9
https://github.com/scummvm/scummvm/commit/106ec42124de3fd68a2584ba1ae14f15ad4832d9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Work on Module1300:
- Remove Class595, only used for setting the surface priority via a message
- Rename stuff and fix some errors
Changed paths:
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index f3677a1..42e8a73 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -404,25 +404,6 @@ void SsScene1302Fence::suMoveUp() {
}
}
-Class595::Class595(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 0xB0420130, 1015), _parentScene(parentScene) {
-
- SetMessageHandler(&Class595::handleMessage);
-}
-
-uint32 Class595::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 995);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1015);
- break;
- }
- return messageResult;
-}
-
Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -434,7 +415,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x420643C4);
insertMouse433(0x643C0428);
- _class595 = insertSprite<Class595>(this);
+ _class595 = insertStaticSprite(0xB0420130, 1015);
_sprite1 = insertStaticSprite(0x942FC224, 300);
_sprite2 = insertStaticSprite(0x70430830, 1200);
_sprite2->setVisible(false);
@@ -588,10 +569,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asVenusFlyTrap, 0x482A, 0);
break;
case 0x8000:
- sendMessage(_class595, 0x482A, 0);
+ setSpriteSurfacePriority(_class595, 995);
break;
case 0x8001:
- sendMessage(_class595, 0x482B, 0);
+ setSpriteSurfacePriority(_class595, 1015);
break;
}
return messageResult;
@@ -688,18 +669,14 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-Class544::Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y)
+AsScene1304Needle::AsScene1304Needle(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y)
: AnimatedSprite(vm, 0x548E9411, surfacePriority, x, y), _parentScene(parentScene) {
-
- if (getGlobalVar(0x31C63C51)) {
- setVisible(false);
- SetMessageHandler(NULL);
- } else {
- SetMessageHandler(&Class544::handleMessage);
- }
+
+ // NOTE: Skipped check if Klayman already has the needle since that's done in the scene itself
+ SetMessageHandler(&AsScene1304Needle::handleMessage);
}
-uint32 Class544::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -735,10 +712,10 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (!getGlobalVar(0x31C63C51)) {
- _class544 = insertSprite<Class544>(this, 1100, 278, 347);
- _vm->_collisionMan->addSprite(_class544);
+ _asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347);
+ _vm->_collisionMan->addSprite(_asNeedle);
} else {
- _class544 = NULL;
+ _asNeedle = NULL;
}
_sprite1 = insertStaticSprite(0x0562E621, 1100);
@@ -770,8 +747,8 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4826:
- if (sender == _class544) {
- sendEntityMessage(_klayman, 0x1014, _class544);
+ if (sender == _asNeedle) {
+ sendEntityMessage(_klayman, 0x1014, _asNeedle);
setMessageList(0x004B9130);
} else if (sender == _class545) {
sendEntityMessage(_klayman, 0x1014, _class545);
@@ -1021,7 +998,7 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
} else if (sender == _asTape) {
if (_klayman->getX() >= 249) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004AFC68);
}
}
@@ -1279,10 +1256,11 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown(0), _asCurrKey(NULL),
_isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
- //DEBUG
+ //DEBUG>>>
setSubVar(0x08D0AB11, 0, 1);
setSubVar(0x08D0AB11, 1, 1);
setSubVar(0x08D0AB11, 2, 1);
+ //DEBUG<<<
Sprite *tempSprite;
@@ -1422,7 +1400,7 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-static const uint32 kScene1308FileHashes[] = {
+static const uint32 kScene1308NumberFileHashes[] = {
0x08006320,
0x10006320,
0x20006320,
@@ -1441,65 +1419,65 @@ static const uint32 kScene1308FileHashes[] = {
0x00306322
};
-Class549::Class549(NeverhoodEngine *vm, Scene *parentScene)
+AsScene1308JaggyDoor::AsScene1308JaggyDoor(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _parentScene(parentScene) {
- SetMessageHandler(&Class549::handleMessage);
+ SetMessageHandler(&AsScene1308JaggyDoor::handleMessage);
setVisible(false);
stopAnimation();
}
-uint32 Class549::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1308JaggyDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextState();
break;
case 0x4808:
- sub455470();
+ stOpenDoor();
break;
case 0x4809:
- sub4554F0();
+ stCloseDoor();
break;
}
return messageResult;
}
-void Class549::sub455470() {
+void AsScene1308JaggyDoor::stOpenDoor() {
startAnimation(0xBA0AE050, 0, -1);
setVisible(true);
- NextState(&Class549::hide);
+ NextState(&AsScene1308JaggyDoor::stOpenDoorDone);
playSound(0, calcHash("fxDoorOpen38"));
}
-void Class549::hide() {
+void AsScene1308JaggyDoor::stOpenDoorDone() {
sendMessage(_parentScene, 0x2000, 0);
stopAnimation();
setVisible(false);
}
-void Class549::sub4554F0() {
+void AsScene1308JaggyDoor::stCloseDoor() {
startAnimation(0xBA0AE050, -1, -1);
_playBackwards = true;
setVisible(true);
- NextState(&Class549::sub455550);
+ NextState(&AsScene1308JaggyDoor::stCloseDoorDone);
playSound(0, calcHash("fxDoorClose38"));
}
-void Class549::sub455550() {
+void AsScene1308JaggyDoor::stCloseDoorDone() {
sendMessage(_parentScene, 0x2001, 0);
stopAnimation();
}
-Class592::Class592(NeverhoodEngine *vm, Scene *parentScene)
+AsScene1308KeyboardDoor::AsScene1308KeyboardDoor(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _parentScene(parentScene) {
- SetMessageHandler(&Class592::handleMessage);
- NextState(&Class592::sub455710);
+ SetMessageHandler(&AsScene1308KeyboardDoor::handleMessage);
+ NextState(&AsScene1308KeyboardDoor::stFallingKeys);
playSound(0, 0x51456049);
}
-uint32 Class592::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1308KeyboardDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -1509,36 +1487,37 @@ uint32 Class592::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class592::sub455710() {
+void AsScene1308KeyboardDoor::stFallingKeys() {
startAnimation(0x6238B191, 0, -1);
- NextState(&Class592::sub455740);
+ NextState(&AsScene1308KeyboardDoor::stFallingKeysDone);
_x = 580;
_y = 383;
}
-void Class592::sub455740() {
+void AsScene1308KeyboardDoor::stFallingKeysDone() {
sendMessage(_parentScene, 0x2004, 0);
stopAnimation();
setVisible(false);
}
-Class593::Class593(NeverhoodEngine *vm, Scene *parentScene)
+AsScene1308LightWallSymbols::AsScene1308LightWallSymbols(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0x80180A10, 100, 320, 240), _parentScene(parentScene) {
- SetMessageHandler(&Class593::handleMessage);
+ SetMessageHandler(&AsScene1308LightWallSymbols::handleMessage);
setVisible(false);
stopAnimation();
Entity::_priority = 1200;
}
-uint32 Class593::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1308LightWallSymbols::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2002:
- sub4558F0();
+ stFadeIn();
break;
case 0x2003:
- sub455920();
+ stFadeOut();
+ break;
case 0x3002:
gotoNextState();
break;
@@ -1546,25 +1525,25 @@ uint32 Class593::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class593::sub4558F0() {
+void AsScene1308LightWallSymbols::stFadeIn() {
startAnimation(0x80180A10, 0, -1);
- setVisible(false);
+ setVisible(true);
_newStickFrameIndex = -2;
}
-void Class593::sub455920() {
+void AsScene1308LightWallSymbols::stFadeOut() {
startAnimation(0x80180A10, -1, -1);
_playBackwards = true;
- NextState(&Class593::sub455950);
+ NextState(&AsScene1308LightWallSymbols::stFadeOutDone);
}
-void Class593::sub455950() {
+void AsScene1308LightWallSymbols::stFadeOutDone() {
sendMessage(_parentScene, 0x2003, 0);
stopAnimation();
setVisible(false);
}
-Class601::Class601(NeverhoodEngine *vm, uint32 fileHash, int index)
+SsScene1308Number::SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int index)
: StaticSprite(vm, fileHash, 100) {
setVisible(false);
@@ -1572,18 +1551,18 @@ Class601::Class601(NeverhoodEngine *vm, uint32 fileHash, int index)
StaticSprite::update();
}
-Class513::Class513(NeverhoodEngine *vm)
+AsScene1308Mouse::AsScene1308Mouse(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100) {
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class513::handleMessage);
+ SetMessageHandler(&AsScene1308Mouse::handleMessage);
_x = 286;
_y = 429;
createSurface1(0xA282C472, 100);
startAnimation(0xA282C472, 0, -1);
}
-uint32 Class513::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1308Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1615,22 +1594,22 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (getGlobalVar(0x01023818)) {
- insertSprite<Class513>();
+ insertSprite<AsScene1308Mouse>();
insertSprite<AnimatedSprite>(0x461A1490, 200, 235, 429);
}
_sprite1 = insertStaticSprite(0x0A042060, 1100);
- _class549 = insertSprite<Class549>(this);
- _class593 = insertSprite<Class593>(this);
+ _asJaggyDoor = insertSprite<AsScene1308JaggyDoor>(this);
+ _asLightWallSymbols = insertSprite<AsScene1308LightWallSymbols>(this);
- _class601_1 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 1)], 0);
- _class601_2 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1);
- _class601_2 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2);
+ _ssNumber1 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(0x0C10A000, 1)], 0);
+ _ssNumber2 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(0x0C10A000, 0)], 1);
+ _ssNumber3 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(0x0C10A000, 2)], 2);
_sprite2 = insertStaticSprite(0x40043120, 995);
_sprite3 = insertStaticSprite(0x43003100, 995);
_sprite4 = NULL;
-
+
if (which < 0) {
insertKlayman<KmScene1308>(380, 440);
setMessageList(0x004B57C0);
@@ -1655,7 +1634,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
- _sprite5 = insertSprite<Class592>(this);
+ _sprite5 = insertSprite<AsScene1308KeyboardDoor>(this);
_sprite4 = insertStaticSprite(0x0101A624, 1100);
_sprite4->setVisible(false);
} else {
@@ -1665,7 +1644,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
insertKlayman<KmScene1308>(41, 440);
setMessageList(0x004B57D0);
- sendMessage(_class549, 0x4808, 0);
+ sendMessage(_asJaggyDoor, 0x4808, 0);
_sprite1->setVisible(false);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1710,7 +1689,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
_flag1 = false;
} else if (param.asInteger() == 0x4AC68808) {
clearRectList();
- sendMessage(_class549, 0x4809, 0);
+ sendMessage(_asJaggyDoor, 0x4809, 0);
_sprite1->setVisible(false);
_klayman->setVisible(false);
}
@@ -1737,22 +1716,22 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
leaveScene(0);
break;
case 0x2003:
- _class601_1->setVisible(false);
- _class601_2->setVisible(false);
- _class601_3->setVisible(false);
+ _ssNumber1->setVisible(false);
+ _ssNumber2->setVisible(false);
+ _ssNumber3->setVisible(false);
break;
case 0x2004:
_sprite4->setVisible(true);
setRectList(0x004B5990);
break;
case 0x4807:
- sendMessage(_class593, 0x2003, 0);
+ sendMessage(_asLightWallSymbols, 0x2003, 0);
break;
case 0x480F:
- sendMessage(_class593, 0x2002, 0);
- _class601_1->setVisible(true);
- _class601_2->setVisible(true);
- _class601_3->setVisible(true);
+ sendMessage(_asLightWallSymbols, 0x2002, 0);
+ _ssNumber1->setVisible(true);
+ _ssNumber2->setVisible(true);
+ _ssNumber3->setVisible(true);
break;
case 0x4826:
if (sender == _class489) {
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index b6761dd..70d6f3a 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -64,14 +64,6 @@ protected:
void suMoveUp();
};
-class Class595 : public StaticSprite {
-public:
- Class595(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
class Scene1302 : public Scene {
public:
Scene1302(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -110,9 +102,9 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class544 : public AnimatedSprite {
+class AsScene1304Needle : public AnimatedSprite {
public:
- Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y);
+ AsScene1304Needle(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -124,7 +116,7 @@ public:
protected:
Sprite *_sprite1;
Sprite *_class545;
- Sprite *_class544;
+ Sprite *_asNeedle;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -209,47 +201,47 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class549 : public AnimatedSprite {
+class AsScene1308JaggyDoor : public AnimatedSprite {
public:
- Class549(NeverhoodEngine *vm, Scene *parentScene);
+ AsScene1308JaggyDoor(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub455470();
- void hide();
- void sub4554F0();
- void sub455550();
+ void stOpenDoor();
+ void stOpenDoorDone();
+ void stCloseDoor();
+ void stCloseDoorDone();
};
-class Class592 : public AnimatedSprite {
+class AsScene1308KeyboardDoor : public AnimatedSprite {
public:
- Class592(NeverhoodEngine *vm, Scene *parentScene);
+ AsScene1308KeyboardDoor(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub455710();
- void sub455740();
+ void stFallingKeys();
+ void stFallingKeysDone();
};
-class Class593 : public AnimatedSprite {
+class AsScene1308LightWallSymbols : public AnimatedSprite {
public:
- Class593(NeverhoodEngine *vm, Scene *parentScene);
+ AsScene1308LightWallSymbols(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub4558F0();
- void sub455920();
- void sub455950();
+ void stFadeIn();
+ void stFadeOut();
+ void stFadeOutDone();
};
-class Class601 : public StaticSprite {
+class SsScene1308Number : public StaticSprite {
public:
- Class601(NeverhoodEngine *vm, uint32 fileHash, int index);
+ SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int index);
};
-class Class513 : public AnimatedSprite {
+class AsScene1308Mouse : public AnimatedSprite {
public:
- Class513(NeverhoodEngine *vm);
+ AsScene1308Mouse(NeverhoodEngine *vm);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -259,11 +251,11 @@ public:
Scene1308(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
Sprite *_asTape;
- Sprite *_class549;
- Sprite *_class593;
- Sprite *_class601_1;
- Sprite *_class601_2;
- Sprite *_class601_3;
+ Sprite *_asJaggyDoor;
+ Sprite *_asLightWallSymbols;
+ Sprite *_ssNumber1;
+ Sprite *_ssNumber2;
+ Sprite *_ssNumber3;
AnimatedSprite *_class489;
Sprite *_sprite1;
Sprite *_sprite2;
Commit: eefa175a2fb4ea0ccb6ed4f5fbc7477bc088278c
https://github.com/scummvm/scummvm/commit/eefa175a2fb4ea0ccb6ed4f5fbc7477bc088278c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Update todo.txt
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/todo.txt
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e378775..e6564f3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -298,9 +298,18 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule(1500, 0); // Logos and intro video //Real
+
+ // DEBUG>>>
+ setGlobalVar(0x0A310817, 1);
+ setGlobalVar(0x0A18CA33, 0);
+ setGlobalVar(0x0112090A, 0);
+ //setGlobalVar(0x000CF819, 1);
+ // <<<DEBUG
+
+
#if 1
- _vm->gameState().sceneNum = 1;
- createModule(1000, -1);
+ _vm->gameState().sceneNum = 7;
+ createModule(1300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/todo.txt b/engines/neverhood/todo.txt
index abf8f27..5561ead 100644
--- a/engines/neverhood/todo.txt
+++ b/engines/neverhood/todo.txt
@@ -18,20 +18,24 @@ TODOs which can be done any time:
TODOs which should be done only after the game logic is finished:
-------------------------------------------------------------------
- Implement clever sprite redrawing code (dirty rectangles, microtiles etc.), only redraw what's neccessary
-- Rework sound system (I don't like that SoundResources need to be explicitly initialized in Scene constructors)
- - Should be just a handle object which initializes itself
- - Play routine should fill the handle so it can be stopped/queried later
- - Basically like ScummVM own sound handles
- Rework the resource system
- The current system can be simplified a lot
- Also resource purging needs to be implemented
-- RE and implement yet unknown music/sound stuff
- Implement game menus
- Maybe rework organization of files (e.g. put ALL Sprites into one separate file, same with Modules and Scenes)
- This would solve the problem of how to organize stuff which is used several times, and less headers would have to be included
- The move special scenes (SmackerScene) into the scenes file
- Maybe merge CollisionMan with Scene (since it's so far never used independently)
+DONE:
+-------
+- Rework sound system (I don't like that SoundResources need to be explicitly initialized in Scene constructors)
+ - Should be just a handle object which initializes itself
+ - Play routine should fill the handle so it can be stopped/queried later
+ - Basically like ScummVM own sound handles
+- RE and implement yet unknown music/sound stuff
+
+
TODOs which are experimental:
-------------------------------
NOTE: Since they affect the whole game, they really should be only implemented once the full game logic is implemented.
Commit: 39d1982e47e2785346832e0e3c6898447b07672b
https://github.com/scummvm/scummvm/commit/39d1982e47e2785346832e0e3c6898447b07672b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Work on Module1400:
- Rename stuff
- Fix some bugs (mistyped message numbers...)
- More to come
Changed paths:
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 42e8a73..35132b6 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1662,12 +1662,12 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 4) {
- _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_class489);
- _class489->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
- _class489->setRepl(64, 0);
+ _asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
+ _vm->_collisionMan->addSprite(_asProjector);
+ _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
+ _asProjector->setRepl(64, 0);
} else {
- _class489 = NULL;
+ _asProjector = NULL;
}
}
@@ -1680,7 +1680,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B59A0);
_flag1 = true;
} else if (param.asInteger() == 0x08821382) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
if (getGlobalVar(0x80455A41)) {
setRectList(0x004B5990);
} else {
@@ -1695,7 +1695,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x1022:
- if (sender == _class489) {
+ if (sender == _asProjector) {
if (param.asInteger() >= 1000)
setSurfacePriority(_sprite3->getSurface(), 1100);
else
@@ -1734,15 +1734,15 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
_ssNumber3->setVisible(true);
break;
case 0x4826:
- if (sender == _class489) {
+ if (sender == _asProjector) {
if (_flag1) {
setMessageList2(0x004B5868);
} else {
if (param.asInteger() == 1) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B5848);
- } else if (sendMessage(_class489, 0x480C, _klayman->getX() <= _class489->getX() ? 0 : 1) != 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ } else if (sendMessage(_asProjector, 0x480C, _klayman->getX() <= _asProjector->getX() ? 0 : 1) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B5830);
} else {
setMessageList2(0x004B5800);
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index 70d6f3a..b458602 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -256,7 +256,7 @@ protected:
Sprite *_ssNumber1;
Sprite *_ssNumber2;
Sprite *_ssNumber3;
- AnimatedSprite *_class489;
+ AnimatedSprite *_asProjector;
Sprite *_sprite1;
Sprite *_sprite2;
Sprite *_sprite3;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index a8c8b3c..33ec0fc 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -134,23 +134,23 @@ void Module1400::updateScene() {
// Scene1401
-Class525::Class525(NeverhoodEngine *vm)
+AsScene1401Pipe::AsScene1401Pipe(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100), _countdown1(0), _countdown2(0) {
// TODO createSurface3(900, dword_4B6768);
createSurface(900, 640, 480); //TODO: Remeove once the line above is done
_x = 454;
_y = 217;
- SetUpdateHandler(&Class525::update4662A0);
- SetMessageHandler(&Class525::handleMessage466320);
+ SetMessageHandler(&AsScene1401Pipe::handleMessage466320);
+ SetUpdateHandler(&AsScene1401Pipe::update4662A0);
startAnimation(0x4C210500, 0, -1);
}
-Class525::~Class525() {
+AsScene1401Pipe::~AsScene1401Pipe() {
_vm->_soundMan->deleteSoundGroup(0x01104C08);
}
-void Class525::update4662A0() {
+void AsScene1401Pipe::update4662A0() {
AnimatedSprite::update();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
sub466460();
@@ -161,14 +161,14 @@ void Class525::update4662A0() {
}
}
-void Class525::update466300() {
+void AsScene1401Pipe::update466300() {
AnimatedSprite::update();
if (_countdown1 != 0) {
_countdown1--;
}
}
-uint32 Class525::handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401Pipe::handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -188,7 +188,7 @@ uint32 Class525::handleMessage466320(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 Class525::handleMessage4663C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401Pipe::handleMessage4663C0(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -197,43 +197,43 @@ uint32 Class525::handleMessage4663C0(int messageNum, const MessageParam ¶m,
} else {
sub466460();
}
- SetMessageHandler(&Class525::handleMessage466320);
- SetUpdateHandler(&Class525::update4662A0);
+ SetMessageHandler(&AsScene1401Pipe::handleMessage466320);
+ SetUpdateHandler(&AsScene1401Pipe::update4662A0);
break;
}
return messageResult;
}
-void Class525::sub466420() {
+void AsScene1401Pipe::sub466420() {
startAnimation(0x4C240100, 0, -1);
playSound(0, 0x4A30063F);
}
-void Class525::sub466460() {
+void AsScene1401Pipe::sub466460() {
_vm->_soundMan->deleteSound(0x4A116437);
playSound(0, 0x4A120435);
startAnimation(0x4C210500, 0, -1);
}
-void Class525::sub4664B0() {
+void AsScene1401Pipe::sub4664B0() {
startAnimation(0x6C210810, 0, -1);
- SetMessageHandler(&Class525::handleMessage4663C0);
- SetUpdateHandler(&Class525::update466300);
+ SetMessageHandler(&AsScene1401Pipe::handleMessage4663C0);
+ SetUpdateHandler(&AsScene1401Pipe::update466300);
}
-Class526::Class526(NeverhoodEngine *vm, Sprite *class525)
- : AnimatedSprite(vm, 1100), _class525(class525) {
+AsScene1401Mouse::AsScene1401Mouse(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100) {
// TODO createSurface3(100, dword_4B6778);
createSurface(100, 640, 480); //TODO: Remeove once the line above is done
_x = 478;
_y = 433;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class526::handleMessage);
+ SetMessageHandler(&AsScene1401Mouse::handleMessage);
startAnimation(0xA282C472, 0, -1);
}
-uint32 Class526::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -246,13 +246,13 @@ uint32 Class526::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
break;
case 0x4839:
- sub466770();
+ stSuckedIn();
break;
}
return messageResult;
}
-void Class526::spriteUpdate466720() {
+void AsScene1401Mouse::suSuckedIn() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
playSound(0, 0x0E32247F);
@@ -263,34 +263,34 @@ void Class526::spriteUpdate466720() {
}
}
-void Class526::sub466770() {
+void AsScene1401Mouse::stSuckedIn() {
startAnimation(0x34880040, 0, -1);
- SetSpriteUpdate(&Class526::spriteUpdate466720);
+ SetSpriteUpdate(&AsScene1401Mouse::suSuckedIn);
}
-Class527::Class527(NeverhoodEngine *vm, Sprite *class526)
- : AnimatedSprite(vm, 1100), _class526(class526) {
+AsScene1401Cheese::AsScene1401Cheese(NeverhoodEngine *vm)
+ : AnimatedSprite(vm, 1100) {
// TODO createSurface3(200, dword_4B6768);
createSurface(200, 640, 480); //TODO: Remeove once the line above is done
_x = 427;
_y = 433;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class527::handleMessage);
+ SetMessageHandler(&AsScene1401Cheese::handleMessage);
startAnimation(0x461A1490, 0, -1);
}
-uint32 Class527::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401Cheese::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4839:
- sub466970();
+ stSuckedIn();
break;
}
return messageResult;
}
-void Class527::spriteUpdate466920() {
+void AsScene1401Cheese::suSuckedIn() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
playSound(0, 0x18020439);
@@ -301,82 +301,82 @@ void Class527::spriteUpdate466920() {
}
}
-void Class527::sub466970() {
+void AsScene1401Cheese::stSuckedIn() {
startAnimation(0x103B8020, 0, -1);
- SetSpriteUpdate(&Class527::spriteUpdate466920);
+ SetSpriteUpdate(&AsScene1401Cheese::suSuckedIn);
}
-Class528::Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag)
+AsScene1401BackDoor::AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen)
: AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) {
_x = 320;
_y = 240;
createSurface1(0x04551900, 100);
- SetUpdateHandler(&Class528::update);
- SetMessageHandler(&Class528::handleMessage);
+ SetUpdateHandler(&AsScene1401BackDoor::update);
+ SetMessageHandler(&AsScene1401BackDoor::handleMessage);
_newStickFrameIndex = -2;
- if (flag) {
- _flag = true;
+ if (isOpen) {
+ _isOpen = true;
startAnimation(0x04551900, -1,- 1);
_countdown = 48;
} else {
- _flag = false;
+ _isOpen = false;
stopAnimation();
setVisible(false);
}
}
-void Class528::update() {
+void AsScene1401BackDoor::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- sub466C50();
+ stCloseDoor();
}
AnimatedSprite::update();
}
-uint32 Class528::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401BackDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2001:
- if (_flag)
+ if (_isOpen)
_countdown = 168;
- messageResult = _flag ? 1 : 0;
+ messageResult = _isOpen ? 1 : 0;
break;
case 0x3002:
gotoNextState();
break;
case 0x4808:
_countdown = 168;
- if (_flag)
- sub466BF0();
+ if (_isOpen)
+ stOpenDoor();
break;
}
return messageResult;
}
-void Class528::sub466BF0() {
- _flag = true;
+void AsScene1401BackDoor::stOpenDoor() {
+ _isOpen = true;
setVisible(true);
startAnimation(0x04551900, 0, -1);
_newStickFrameIndex = -2;
playSound(0, calcHash("fxDoorOpen24"));
}
-void Class528::sub466C50() {
- _flag = false;
+void AsScene1401BackDoor::stCloseDoor() {
+ _isOpen = false;
setVisible(true);
startAnimation(0x04551900, -1, -1);
playSound(0, calcHash("fxDoorClose24"));
_playBackwards = true;
- NextState(&Class528::sub466CB0);
+ NextState(&AsScene1401BackDoor::stCloseDoorDone);
}
-void Class528::sub466CB0() {
+void AsScene1401BackDoor::stCloseDoorDone() {
stopAnimation();
setVisible(false);
}
-static const Class489Item kClass489Items[] = {
+static const AsCommonProjectorItem kAsCommonProjectorItems[] = {
{{154, 453}, 4, 2, 0, -1, 0, 1},
{{104, 391}, 4, -1, -1, -1, 1, 1},
{{ 22, 447}, 6, -1, -1, -1, 1, 1},
@@ -384,30 +384,30 @@ static const Class489Item kClass489Items[] = {
{{262, 433}, 1, 1, 0, -1, 0, 0}
};
-Class489::Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *class525)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _class525(class525) {
+AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *asPipe)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _asPipe(asPipe) {
- _class489Item = &kClass489Items[getGlobalVar(0x04A105B3)];
+ _asProjectorItem = &kAsCommonProjectorItems[getGlobalVar(0x04A105B3)];
// TODO createSurface3(990, dword_4B26D8);
createSurface(990, 640, 480); //TODO: Remeove once the line above is done
startAnimation(0x10E3042B, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class489::handleMessage);
- _x = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
+ SetMessageHandler(&AsCommonProjector::handleMessage);
+ _x = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
_flag = true;
sub434C80();
setDoDeltaX(1);
- if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex2) {
+ if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->varIndex2) {
sub434E90();
}
loadSound(2, 0xC8C2507C);
}
-Class489::~Class489() {
+AsCommonProjector::~AsCommonProjector() {
_vm->_soundMan->deleteSoundGroup(0x05331081);
}
-uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -415,8 +415,8 @@ uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity
messageResult = 1;
break;
case 0x4807:
- setGlobalVar(0x04A10F33, (_x - _class489Item->point.x) / 108);
- if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex2) {
+ setGlobalVar(0x04A10F33, (_x - _asProjectorItem->point.x) / 108);
+ if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->varIndex2) {
sub434E60();
} else {
sub434DD0();
@@ -424,7 +424,7 @@ uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1) {
+ if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1) {
incGlobalVar(0x04A10F33, 1);
}
} else if (getGlobalVar(0x04A10F33) > 0) {
@@ -434,7 +434,7 @@ uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity
break;
case 0x480C:
if (param.asInteger() != 1) {
- messageResult = (int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1 ? 1 : 0;
+ messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1 ? 1 : 0;
} else {
messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
}
@@ -445,14 +445,14 @@ uint32 Class489::handleMessage(int messageNum, const MessageParam ¶m, Entity
case 0x482B:
sendMessage(_parentScene, 0x1022, 1010);
break;
- case 0x4828:
+ case 0x4839:
sub435040();
break;
}
return messageResult;
}
-uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonProjector::handleMessage4348E0(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -470,7 +470,7 @@ uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m,
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1) {
+ if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1) {
incGlobalVar(0x04A10F33, 1);
}
} else if (getGlobalVar(0x04A10F33) > 0) {
@@ -480,7 +480,7 @@ uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m,
break;
case 0x480C:
if (param.asInteger() != 1) {
- messageResult = (int8)getGlobalVar(0x04A10F33) < _class489Item->varIndex1 ? 1 : 0;
+ messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1 ? 1 : 0;
} else {
messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
}
@@ -498,7 +498,7 @@ uint32 Class489::handleMessage4348E0(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 Class489::handleMessage434B20(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonProjector::handleMessage434B20(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -508,18 +508,18 @@ uint32 Class489::handleMessage434B20(int messageNum, const MessageParam ¶m,
return messageResult;
}
-void Class489::spriteUpdate434B60() {
+void AsCommonProjector::spriteUpdate434B60() {
if (_x <= _klayman->getX())
_x = _klayman->getX() - 100;
else
_x = _klayman->getX() + 100;
sub434C80();
if (_remX == _x) {
- if (getGlobalVar(0x04A10F33) == 0 && _class489Item->flag4 != 0) {
+ if (getGlobalVar(0x04A10F33) == 0 && _asProjectorItem->flag4 != 0) {
sendMessage(_parentScene, 0x1019, 0);
incGlobalVar(0x04A105B3, -1);
- setGlobalVar(0x04A10F33, kClass489Items[getGlobalVar(0x04A105B3)].varIndex1);
- } else if ((int8)getGlobalVar(0x04A10F33) == _class489Item->varIndex1 && _class489Item->flag != 0) {
+ setGlobalVar(0x04A10F33, kAsCommonProjectorItems[getGlobalVar(0x04A105B3)].varIndex1);
+ } else if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->varIndex1 && _asProjectorItem->flag != 0) {
sendMessage(_parentScene, 0x1019, 1);
incGlobalVar(0x04A105B3, +1);
setGlobalVar(0x04A10F33, 0);
@@ -528,33 +528,33 @@ void Class489::spriteUpdate434B60() {
Sprite::processDelta();
}
-void Class489::sub434C80() {
+void AsCommonProjector::sub434C80() {
bool soundFlag = false;
- _y = _class489Item->point.y;
+ _y = _asProjectorItem->point.y;
- if (_class489Item->index1 != -1) {
- int16 elX = _class489Item->index1 * 108 + _class489Item->point.x;
+ if (_asProjectorItem->index1 != -1) {
+ int16 elX = _asProjectorItem->index1 * 108 + _asProjectorItem->point.x;
if (elX - 20 < _x && elX + 20 > _x) {
soundFlag = true;
- _y = _class489Item->point.y + 10;
+ _y = _asProjectorItem->point.y + 10;
}
}
- if (_class489Item->flag2 != -1) {
- int16 elX = _class489Item->index1 * 108 + _class489Item->point.x;
+ if (_asProjectorItem->flag2 != -1) {
+ int16 elX = _asProjectorItem->index1 * 108 + _asProjectorItem->point.x;
if (elX - 20 < _x && elX + 20 > _x) {
soundFlag = true;
- _y = _class489Item->point.y + 10;
+ _y = _asProjectorItem->point.y + 10;
}
}
- if (_class489Item->varIndex2 != -1) {
- int16 elX = _class489Item->varIndex2 * 108 + _class489Item->point.x;
+ if (_asProjectorItem->varIndex2 != -1) {
+ int16 elX = _asProjectorItem->varIndex2 * 108 + _asProjectorItem->point.x;
if (elX - 20 < _x && elX + 20 > _x) {
soundFlag = true;
- _y = _class489Item->point.y + 10;
+ _y = _asProjectorItem->point.y + 10;
}
}
@@ -569,10 +569,10 @@ void Class489::sub434C80() {
}
-void Class489::sub434D80() {
+void AsCommonProjector::sub434D80() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
- sendMessage(_class525, 0x483A, 0);
+ sendMessage(_asPipe, 0x483A, 0);
stopAnimation();
SetMessageHandler(&Sprite::handleMessage);
SetSpriteUpdate(NULL);
@@ -580,81 +580,81 @@ void Class489::sub434D80() {
}
}
-void Class489::sub434DD0() {
+void AsCommonProjector::sub434DD0() {
SetSpriteUpdate(NULL);
- SetMessageHandler(&Class489::handleMessage);
+ SetMessageHandler(&AsCommonProjector::handleMessage);
startAnimation(0x10E3042B, 0, -1);
}
-void Class489::sub434DF0() {
- _remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
+void AsCommonProjector::sub434DF0() {
+ _remX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
startAnimation(0x14A10137, 0, -1);
- SetSpriteUpdate(&Class489::spriteUpdate434B60);
- SetMessageHandler(&Class489::handleMessage);
+ SetSpriteUpdate(&AsCommonProjector::spriteUpdate434B60);
+ SetMessageHandler(&AsCommonProjector::handleMessage);
playSound(1, 0xEC008474);
}
-void Class489::sub434E60() {
+void AsCommonProjector::sub434E60() {
SetSpriteUpdate(NULL);
- SetMessageHandler(&Class489::handleMessage434B20);
+ SetMessageHandler(&AsCommonProjector::handleMessage434B20);
startAnimation(0x80C32213, 0, -1);
- NextState(&Class489::sub434E90);
+ NextState(&AsCommonProjector::sub434E90);
}
-void Class489::sub434E90() {
+void AsCommonProjector::sub434E90() {
SetSpriteUpdate(NULL);
- SetMessageHandler(&Class489::handleMessage4348E0);
+ SetMessageHandler(&AsCommonProjector::handleMessage4348E0);
startAnimation(0xD23B207F, 0, -1);
}
-void Class489::sub434EC0() {
+void AsCommonProjector::sub434EC0() {
startAnimation(0x50A80517, 0, -1);
- SetMessageHandler(&Class489::handleMessage434B20);
+ SetMessageHandler(&AsCommonProjector::handleMessage434B20);
SetSpriteUpdate(NULL);
- NextState(&Class489::sub434F40);
+ NextState(&AsCommonProjector::sub434F40);
setGlobalVar(0x12A10DB3, 1);
playSound(0, 0xCC4A8456);
_vm->_soundMan->addSound(0x05331081, 0xCE428854);
_vm->_soundMan->playSoundLooping(0xCE428854);
}
-void Class489::sub434F40() {
+void AsCommonProjector::sub434F40() {
sendMessage(_parentScene, 0x480F, 0);
startAnimation(0xD833207F, 0, -1);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Class489::handleMessage4348E0);
+ SetMessageHandler(&AsCommonProjector::handleMessage4348E0);
}
-void Class489::sub434F80() {
+void AsCommonProjector::sub434F80() {
startAnimation(0x50A94417, 0, -1);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Class489::handleMessage434B20);
- NextState(&Class489::sub434E90);
+ SetMessageHandler(&AsCommonProjector::handleMessage434B20);
+ NextState(&AsCommonProjector::sub434E90);
setGlobalVar(0x12A10DB3, 0);
playSound(0, 0xCC4A8456);
_vm->_soundMan->deleteSound(0xCE428854);
}
-void Class489::sub434FF0() {
- _remX = getGlobalVar(0x04A10F33) * 108 + _class489Item->point.x;
+void AsCommonProjector::sub434FF0() {
+ _remX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
startAnimation(0x22CB4A33, 0, -1);
- SetSpriteUpdate(&Class489::spriteUpdate434B60);
- SetMessageHandler(&Class489::handleMessage434B20);
- NextState(&Class489::sub434DF0);
+ SetSpriteUpdate(&AsCommonProjector::spriteUpdate434B60);
+ SetMessageHandler(&AsCommonProjector::handleMessage434B20);
+ NextState(&AsCommonProjector::sub434DF0);
}
-void Class489::sub435040() {
+void AsCommonProjector::sub435040() {
setGlobalVar(0x04A105B3, 4);
setGlobalVar(0x04A10F33, 0);
- SetSpriteUpdate(&Class489::sub434D80);
+ SetSpriteUpdate(&AsCommonProjector::sub434D80);
SetMessageHandler(&Sprite::handleMessage);
startAnimation(0x708D4712, 0, -1);
playSound(2);
}
Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false), _class427(NULL), _class489(NULL),
- _class525(NULL), _class526(NULL), _class527(NULL), _class528(NULL),
+ : Scene(vm, parentModule, true), _flag(false), _class427(NULL), _asProjector(NULL),
+ _asPipe(NULL), _asMouse(NULL), _asCheese(NULL), _asBackDoor(NULL),
_sprite1(NULL), _sprite2(NULL), _sprite3(NULL), _ssButton(NULL) {
SetMessageHandler(&Scene1401::handleMessage);
@@ -667,11 +667,11 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x21FA108A);
_class427 = insertSprite<Class427>(this, 0x980F3124, 0x12192892, 100, 0);
- _class525 = insertSprite<Class525>();
+ _asPipe = insertSprite<AsScene1401Pipe>();
if (!getGlobalVar(0x01023818)) {
- _class526 = insertSprite<Class526>(_class525);
- _class527 = insertSprite<Class527>(_class525);
+ _asMouse = insertSprite<AsScene1401Mouse>();
+ _asCheese = insertSprite<AsScene1401Cheese>();
}
_sprite3 = insertStaticSprite(0xA82BA811, 1100);
@@ -700,35 +700,35 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 2) {
- _class489 = insertSprite<Class489>(this, _klayman, _class525);
- _vm->_collisionMan->addSprite(_class489);
+ _asProjector = insertSprite<AsCommonProjector>(this, _klayman, _asPipe);
+ _vm->_collisionMan->addSprite(_asProjector);
if (getGlobalVar(0x04A10F33) == 6) {
- sendEntityMessage(_klayman, 0x1014, _class489);
- _klayman->setX(_class489->getX() + 100);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
+ _klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B6670);
} else if (getGlobalVar(0x04A10F33) == 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
- _klayman->setX(_class489->getX() - 100);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
+ _klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
setMessageList(0x004B6670);
}
- _class489->setClipRect(_sprite3->getDrawRect().x, _sprite2->getDrawRect().y, 640, 480);
+ _asProjector->setClipRect(_sprite3->getDrawRect().x, _sprite2->getDrawRect().y, 640, 480);
}
_klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480);
- if (which == 0 && _class489) {
- sendMessage(_class489, 0x482B, 0);
+ if (which == 0 && _asProjector) {
+ sendMessage(_asProjector, 0x482B, 0);
}
- _class528 = insertSprite<Class528>(_klayman, which == 1);
+ _asBackDoor = insertSprite<AsScene1401BackDoor>(_klayman, which == 1);
}
void Scene1401::update() {
Scene::update();
- if (_class489 && !_flag && _class489->getY() < 360) {
+ if (_asProjector && !_flag && _asProjector->getY() < 360) {
_sprite2->setVisible(true);
_flag = true;
} else {
@@ -745,7 +745,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x01C66840) {
- if (sendMessage(_class528, 0x2001, 0) != 0) {
+ if (sendMessage(_asBackDoor, 0x2001, 0) != 0) {
setMessageList(0x004B6690);
} else {
setMessageList(0x004B66B0);
@@ -761,23 +761,23 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (sender == _class427) {
- sendMessage(_class525, 0x2000, 0);
+ sendMessage(_asPipe, 0x2000, 0);
if (!getGlobalVar(0x01023818)) {
- sendMessage(_class526, 0x4839, 0);
- sendMessage(_class527, 0x4839, 0);
+ sendMessage(_asMouse, 0x4839, 0);
+ sendMessage(_asCheese, 0x4839, 0);
setGlobalVar(0x01023818, 1);
}
- if (_class489 && _class489->getX() > 404 && _class489->getX() < 504) {
- sendMessage(_class489 , 0x4839, 0);
+ if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504) {
+ sendMessage(_asProjector , 0x4839, 0);
}
} else if (sender == _ssButton) {
sendMessage(_ssButton, 0x4808, 0);
}
break;
case 0x4826:
- if (sender == _class489) {
- if (sendMessage(_class489, 0x480C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ if (sender == _asProjector) {
+ if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B6658);
} else {
setMessageList2(0x004B65F0);
@@ -786,14 +786,14 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x482A:
_sprite1->setVisible(true);
- if (_class489) {
- sendMessage(_class489, 0x482B, 0);
+ if (_asProjector) {
+ sendMessage(_asProjector, 0x482B, 0);
}
break;
case 0x482B:
_sprite1->setVisible(false);
- if (_class489) {
- sendMessage(_class489, 0x482A, 0);
+ if (_asProjector) {
+ sendMessage(_asProjector, 0x482A, 0);
}
break;
}
@@ -869,7 +869,7 @@ void Class482::sub428560() {
}
Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false), _class482(NULL), _class489(NULL) {
+ : Scene(vm, parentModule, true), _flag(false), _class482(NULL), _asProjector(NULL) {
SetMessageHandler(&Scene1402::handleMessage);
@@ -924,20 +924,20 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x4A105B3) == 1) {
- _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_class489);
+ _asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
+ _vm->_collisionMan->addSprite(_asProjector);
if (getGlobalVar(0x4A10F33) == 4) {
- sendEntityMessage(_klayman, 0x1014, _class489);
- _klayman->setX(_class489->getX() + 100);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
+ _klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B0BD0);
} else if (getGlobalVar(0x4A10F33) == 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
- _klayman->setX(_class489->getX() - 100);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
+ _klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
setMessageList(0x004B0BD0);
}
- _class489->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x, _class454_3->getDrawRect().y2());
+ _asProjector->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x, _class454_3->getDrawRect().y2());
}
_klayman->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x2(), _class454_3->getDrawRect().y2());
@@ -996,9 +996,9 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
sub428230();
break;
case 0x4826:
- if (sender == _class489) {
- if (sendMessage(_class489, 0x408C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ if (sender == _asProjector) {
+ if (sendMessage(_asProjector, 0x408C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B0BB8);
} else {
setMessageList2(0x004B0B68);
@@ -1319,7 +1319,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1403
Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _class489(NULL), _flag(false) {
+ : Scene(vm, parentModule, true), _asProjector(NULL), _flag(false) {
SetMessageHandler(&Scene1403::handleMessage);
@@ -1355,16 +1355,16 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setRepl(64, 0);
if (getGlobalVar(0x04A105B3) == 4) {
- _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_class489);
+ _asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
+ _vm->_collisionMan->addSprite(_asProjector);
if (getGlobalVar(0x04A10F33) == 4) {
- sendEntityMessage(_klayman, 0x1014, _class489);
- _klayman->setX(_class489->getX() + 100);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
+ _klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B1F70);
}
- _class489->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
- _class489->setRepl(64, 0);
+ _asProjector->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
+ _asProjector->setRepl(64, 0);
}
}
@@ -1377,7 +1377,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B2008);
_flag = true;
} else if (param.asInteger() == 0x08821382) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setRectList(0x004B1FF8);
_flag = false;
}
@@ -1386,7 +1386,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
leaveScene(0);
break;
case 0x1022:
- if (sender == _class489) {
+ if (sender == _asProjector) {
if (param.asInteger() >= 1000) {
setSurfacePriority(_class401_3->getSurface(), 1100);
} else {
@@ -1401,14 +1401,14 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
_class401_1->setVisible(true);
break;
case 0x4826:
- if (sender == _class489) {
+ if (sender == _asProjector) {
if (_flag) {
setMessageList2(0x004B1FA8);
} else if (param.asInteger() == 1) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B1F88);
- } else if (sendMessage(_class489, 0x480C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ } else if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B1F58);
} else {
setMessageList2(0x004B1F28);
@@ -1429,7 +1429,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1404
Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _class489(NULL), _class545(NULL) {
+ : Scene(vm, parentModule, true), _asProjector(NULL), _class545(NULL) {
if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860)) {
setGlobalVar(0x13382860, 5);
@@ -1475,15 +1475,15 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 3) {
- _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_class489);
+ _asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
+ _vm->_collisionMan->addSprite(_asProjector);
if (getGlobalVar(0x04A10F33) == 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
- _klayman->setX(_class489->getX() - 100);
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
+ _klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
setMessageList(0x004B8CB8);
}
- _class489->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
+ _asProjector->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
@@ -1499,7 +1499,7 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x410650C2) {
- if (_class489 && _class489->getX() == 220) {
+ if (_asProjector && _asProjector->getX() == 220) {
setMessageList(0x004B8C40);
} else {
setMessageList(0x004B8CE8);
@@ -1510,9 +1510,9 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
leaveScene(0);
break;
case 0x4826:
- if (sender == _class489) {
- if (sendMessage(_class489, 0x480C, _klayman->getX() > _class489->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klayman, 0x1014, _class489);
+ if (sender == _asProjector) {
+ if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
+ sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B8CA0);
} else {
setMessageList2(0x004B8C40);
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index aed7ba9..7cd5262 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -41,10 +41,10 @@ protected:
// Scene1401
-class Class525 : public AnimatedSprite {
+class AsScene1401Pipe : public AnimatedSprite {
public:
- Class525(NeverhoodEngine *vm);
- virtual ~Class525();
+ AsScene1401Pipe(NeverhoodEngine *vm);
+ virtual ~AsScene1401Pipe();
protected:
int _countdown1;
int _countdown2;
@@ -57,41 +57,39 @@ protected:
void sub4664B0();
};
-class Class526 : public AnimatedSprite {
+class AsScene1401Mouse : public AnimatedSprite {
public:
- Class526(NeverhoodEngine *vm, Sprite *class525);
+ AsScene1401Mouse(NeverhoodEngine *vm);
protected:
- Sprite *_class525;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate466720();
- void sub466770();
+ void suSuckedIn();
+ void stSuckedIn();
};
-class Class527 : public AnimatedSprite {
+class AsScene1401Cheese : public AnimatedSprite {
public:
- Class527(NeverhoodEngine *vm, Sprite *class526);
+ AsScene1401Cheese(NeverhoodEngine *vm);
protected:
- Sprite *_class526;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate466920();
- void sub466970();
+ void suSuckedIn();
+ void stSuckedIn();
};
-class Class528 : public AnimatedSprite {
+class AsScene1401BackDoor : public AnimatedSprite {
public:
- Class528(NeverhoodEngine *vm, Sprite *klayman, bool flag);
+ AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen);
protected:
Sprite *_klayman;
int _countdown;
- bool _flag;
+ bool _isOpen;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub466BF0();
- void sub466C50();
- void sub466CB0();
+ void stOpenDoor();
+ void stCloseDoor();
+ void stCloseDoorDone();
};
-struct Class489Item {
+struct AsCommonProjectorItem {
NPoint point;
int8 varIndex1;
int8 varIndex2;
@@ -101,15 +99,15 @@ struct Class489Item {
int8 flag;
};
-class Class489 : public AnimatedSprite {
+class AsCommonProjector : public AnimatedSprite {
public:
- Class489(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *class525);
- virtual ~Class489();
+ AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *asPipe);
+ virtual ~AsCommonProjector();
protected:
Scene *_parentScene;
Sprite *_klayman;
- Sprite *_class525;
- const Class489Item *_class489Item;
+ Sprite *_asPipe;
+ const AsCommonProjectorItem *_asProjectorItem;
int16 _remX;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -135,11 +133,11 @@ public:
protected:
bool _flag;
Sprite *_class427;
- Class489 *_class489;
- Sprite *_class525;
- Sprite *_class526;
- Sprite *_class527;
- Sprite *_class528;
+ AsCommonProjector *_asProjector;
+ Sprite *_asPipe;
+ Sprite *_asMouse;
+ Sprite *_asCheese;
+ Sprite *_asBackDoor;
Sprite *_sprite1;
Sprite *_sprite2;
Sprite *_sprite3;
@@ -174,7 +172,7 @@ protected:
Sprite *_class454_2;
Sprite *_class454_3;
Sprite *_class482;
- Class489 *_class489;
+ AsCommonProjector *_asProjector;
bool _flag;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -226,7 +224,7 @@ protected:
Sprite *_class401_3;
AsScene1201Tape *_asTape1;
AsScene1201Tape *_asTape2;
- Class489 *_class489;
+ AsCommonProjector *_asProjector;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -240,7 +238,7 @@ public:
protected:
Sprite *_sprite1;
Sprite *_asTape;
- Class489 *_class489;
+ AsCommonProjector *_asProjector;
Sprite *_class545;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: cb5ca835787a11d9ff99bcd8a35578586507a61c
https://github.com/scummvm/scummvm/commit/cb5ca835787a11d9ff99bcd8a35578586507a61c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Rename more stuff in Module1400; also fix some bugs
- Update globalvars.txt
Changed paths:
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 33ec0fc..59ed0c4 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -141,8 +141,8 @@ AsScene1401Pipe::AsScene1401Pipe(NeverhoodEngine *vm)
createSurface(900, 640, 480); //TODO: Remeove once the line above is done
_x = 454;
_y = 217;
- SetMessageHandler(&AsScene1401Pipe::handleMessage466320);
- SetUpdateHandler(&AsScene1401Pipe::update4662A0);
+ SetMessageHandler(&AsScene1401Pipe::handleMessage);
+ SetUpdateHandler(&AsScene1401Pipe::update);
startAnimation(0x4C210500, 0, -1);
}
@@ -150,10 +150,10 @@ AsScene1401Pipe::~AsScene1401Pipe() {
_vm->_soundMan->deleteSoundGroup(0x01104C08);
}
-void AsScene1401Pipe::update4662A0() {
+void AsScene1401Pipe::update() {
AnimatedSprite::update();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
- sub466460();
+ stDoneSucking();
}
if (_countdown2 != 0 && (--_countdown2 == 0)) {
_vm->_soundMan->addSound(0x01104C08, 0x4A116437);
@@ -161,14 +161,14 @@ void AsScene1401Pipe::update4662A0() {
}
}
-void AsScene1401Pipe::update466300() {
+void AsScene1401Pipe::upSuckInProjector() {
AnimatedSprite::update();
if (_countdown1 != 0) {
_countdown1--;
}
}
-uint32 AsScene1401Pipe::handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401Pipe::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -179,46 +179,46 @@ uint32 AsScene1401Pipe::handleMessage466320(int messageNum, const MessageParam &
case 0x2000:
_countdown1 = 70;
_countdown2 = 8;
- sub466420();
+ stStartSucking();
break;
case 0x483A:
- sub4664B0();
+ stSuckInProjector();
break;
}
return messageResult;
}
-uint32 AsScene1401Pipe::handleMessage4663C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1401Pipe::hmSuckInProjector(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
if (_countdown1 != 0) {
- sub466420();
+ stStartSucking();
} else {
- sub466460();
+ stDoneSucking();
}
- SetMessageHandler(&AsScene1401Pipe::handleMessage466320);
- SetUpdateHandler(&AsScene1401Pipe::update4662A0);
+ SetMessageHandler(&AsScene1401Pipe::handleMessage);
+ SetUpdateHandler(&AsScene1401Pipe::update);
break;
}
return messageResult;
}
-void AsScene1401Pipe::sub466420() {
+void AsScene1401Pipe::stStartSucking() {
startAnimation(0x4C240100, 0, -1);
playSound(0, 0x4A30063F);
}
-void AsScene1401Pipe::sub466460() {
+void AsScene1401Pipe::stDoneSucking() {
_vm->_soundMan->deleteSound(0x4A116437);
playSound(0, 0x4A120435);
startAnimation(0x4C210500, 0, -1);
}
-void AsScene1401Pipe::sub4664B0() {
+void AsScene1401Pipe::stSuckInProjector() {
startAnimation(0x6C210810, 0, -1);
- SetMessageHandler(&AsScene1401Pipe::handleMessage4663C0);
- SetUpdateHandler(&AsScene1401Pipe::update466300);
+ SetMessageHandler(&AsScene1401Pipe::hmSuckInProjector);
+ SetUpdateHandler(&AsScene1401Pipe::upSuckInProjector);
}
AsScene1401Mouse::AsScene1401Mouse(NeverhoodEngine *vm)
@@ -377,11 +377,11 @@ void AsScene1401BackDoor::stCloseDoorDone() {
}
static const AsCommonProjectorItem kAsCommonProjectorItems[] = {
- {{154, 453}, 4, 2, 0, -1, 0, 1},
- {{104, 391}, 4, -1, -1, -1, 1, 1},
- {{ 22, 447}, 6, -1, -1, -1, 1, 1},
- {{112, 406}, 2, -1, -1, -1, 1, 0},
- {{262, 433}, 1, 1, 0, -1, 0, 0}
+ {{154, 453}, 4, 2, 0, 0, 1},
+ {{104, 391}, 4, -1, -1, 1, 1},
+ {{ 22, 447}, 6, -1, -1, 1, 1},
+ {{112, 406}, 2, -1, -1, 1, 0},
+ {{262, 433}, 1, 1, 0, 0, 0}
};
AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *asPipe)
@@ -394,11 +394,11 @@ AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sp
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsCommonProjector::handleMessage);
_x = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
- _flag = true;
- sub434C80();
+ _lockedInSlot = true;
+ moveProjector();
setDoDeltaX(1);
- if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->varIndex2) {
- sub434E90();
+ if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->lockSlotIndex) {
+ stStayLockedInSlot();
}
loadSound(2, 0xC8C2507C);
}
@@ -416,25 +416,26 @@ uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶
break;
case 0x4807:
setGlobalVar(0x04A10F33, (_x - _asProjectorItem->point.x) / 108);
- if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->varIndex2) {
- sub434E60();
+ if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->lockSlotIndex) {
+ stStartLockedInSlot();
} else {
- sub434DD0();
+ stIdle();
}
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1) {
+ if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount) {
incGlobalVar(0x04A10F33, 1);
}
} else if (getGlobalVar(0x04A10F33) > 0) {
incGlobalVar(0x04A10F33, -1);
}
- sub434DF0();
+ stMoving();
break;
case 0x480C:
+ // Check if the projector can be moved
if (param.asInteger() != 1) {
- messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1 ? 1 : 0;
+ messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount ? 1 : 0;
} else {
messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
}
@@ -446,13 +447,13 @@ uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶
sendMessage(_parentScene, 0x1022, 1010);
break;
case 0x4839:
- sub435040();
+ stStartSuckedIn();
break;
}
return messageResult;
}
-uint32 AsCommonProjector::handleMessage4348E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonProjector::hmLockedInSlot(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -466,27 +467,28 @@ uint32 AsCommonProjector::handleMessage4348E0(int messageNum, const MessageParam
break;
case 0x4807:
sendMessage(_parentScene, 0x4807, 0);
- sub434F80();
+ stStopProjecting();
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1) {
+ if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount) {
incGlobalVar(0x04A10F33, 1);
}
} else if (getGlobalVar(0x04A10F33) > 0) {
incGlobalVar(0x04A10F33, -1);
}
- sub434FF0();
+ stTurnToFront();
break;
case 0x480C:
+ // Check if the projector can be moved
if (param.asInteger() != 1) {
- messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->varIndex1 ? 1 : 0;
+ messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount ? 1 : 0;
} else {
messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
}
break;
case 0x480F:
- sub434EC0();
+ stStartProjecting();
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -498,7 +500,7 @@ uint32 AsCommonProjector::handleMessage4348E0(int messageNum, const MessageParam
return messageResult;
}
-uint32 AsCommonProjector::handleMessage434B20(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonProjector::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -508,18 +510,18 @@ uint32 AsCommonProjector::handleMessage434B20(int messageNum, const MessageParam
return messageResult;
}
-void AsCommonProjector::spriteUpdate434B60() {
+void AsCommonProjector::suMoving() {
if (_x <= _klayman->getX())
_x = _klayman->getX() - 100;
else
_x = _klayman->getX() + 100;
- sub434C80();
- if (_remX == _x) {
- if (getGlobalVar(0x04A10F33) == 0 && _asProjectorItem->flag4 != 0) {
+ moveProjector();
+ if (_beforeMoveX == _x) {
+ if (getGlobalVar(0x04A10F33) == 0 && _asProjectorItem->leftBorderLeaves != 0) {
sendMessage(_parentScene, 0x1019, 0);
incGlobalVar(0x04A105B3, -1);
- setGlobalVar(0x04A10F33, kAsCommonProjectorItems[getGlobalVar(0x04A105B3)].varIndex1);
- } else if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->varIndex1 && _asProjectorItem->flag != 0) {
+ setGlobalVar(0x04A10F33, kAsCommonProjectorItems[getGlobalVar(0x04A105B3)].maxSlotCount);
+ } else if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->maxSlotCount && _asProjectorItem->rightBorderLeaves != 0) {
sendMessage(_parentScene, 0x1019, 1);
incGlobalVar(0x04A105B3, +1);
setGlobalVar(0x04A10F33, 0);
@@ -528,48 +530,38 @@ void AsCommonProjector::spriteUpdate434B60() {
Sprite::processDelta();
}
-void AsCommonProjector::sub434C80() {
+void AsCommonProjector::moveProjector() {
- bool soundFlag = false;
+ bool nowLockedInSlot = false;
_y = _asProjectorItem->point.y;
if (_asProjectorItem->index1 != -1) {
int16 elX = _asProjectorItem->index1 * 108 + _asProjectorItem->point.x;
if (elX - 20 < _x && elX + 20 > _x) {
- soundFlag = true;
+ nowLockedInSlot = true;
_y = _asProjectorItem->point.y + 10;
}
}
- if (_asProjectorItem->flag2 != -1) {
- int16 elX = _asProjectorItem->index1 * 108 + _asProjectorItem->point.x;
- if (elX - 20 < _x && elX + 20 > _x) {
- soundFlag = true;
- _y = _asProjectorItem->point.y + 10;
- }
- }
-
- if (_asProjectorItem->varIndex2 != -1) {
- int16 elX = _asProjectorItem->varIndex2 * 108 + _asProjectorItem->point.x;
+ if (_asProjectorItem->lockSlotIndex != -1) {
+ int16 elX = _asProjectorItem->lockSlotIndex * 108 + _asProjectorItem->point.x;
if (elX - 20 < _x && elX + 20 > _x) {
- soundFlag = true;
+ nowLockedInSlot = true;
_y = _asProjectorItem->point.y + 10;
}
}
- if (_flag) {
- if (!soundFlag) {
- _flag = false;
- }
- } else if (soundFlag) {
+ if (_lockedInSlot && !nowLockedInSlot) {
+ _lockedInSlot = false;
+ } else if (!_lockedInSlot && nowLockedInSlot) {
playSound(1, 0x5440E474);
- _flag = true;
+ _lockedInSlot = true;
}
}
-void AsCommonProjector::sub434D80() {
+void AsCommonProjector::stSuckedIn() {
AnimatedSprite::updateDeltaXY();
if (_rect.y1 <= 150) {
sendMessage(_asPipe, 0x483A, 0);
@@ -580,80 +572,80 @@ void AsCommonProjector::sub434D80() {
}
}
-void AsCommonProjector::sub434DD0() {
+void AsCommonProjector::stIdle() {
SetSpriteUpdate(NULL);
SetMessageHandler(&AsCommonProjector::handleMessage);
startAnimation(0x10E3042B, 0, -1);
}
-void AsCommonProjector::sub434DF0() {
- _remX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
+void AsCommonProjector::stMoving() {
+ _beforeMoveX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
startAnimation(0x14A10137, 0, -1);
- SetSpriteUpdate(&AsCommonProjector::spriteUpdate434B60);
+ SetSpriteUpdate(&AsCommonProjector::suMoving);
SetMessageHandler(&AsCommonProjector::handleMessage);
playSound(1, 0xEC008474);
}
-void AsCommonProjector::sub434E60() {
+void AsCommonProjector::stStartLockedInSlot() {
SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::handleMessage434B20);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
startAnimation(0x80C32213, 0, -1);
- NextState(&AsCommonProjector::sub434E90);
+ NextState(&AsCommonProjector::stStayLockedInSlot);
}
-void AsCommonProjector::sub434E90() {
+void AsCommonProjector::stStayLockedInSlot() {
SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::handleMessage4348E0);
+ SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
startAnimation(0xD23B207F, 0, -1);
}
-void AsCommonProjector::sub434EC0() {
+void AsCommonProjector::stStartProjecting() {
startAnimation(0x50A80517, 0, -1);
- SetMessageHandler(&AsCommonProjector::handleMessage434B20);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
SetSpriteUpdate(NULL);
- NextState(&AsCommonProjector::sub434F40);
+ NextState(&AsCommonProjector::stLockedInSlot);
setGlobalVar(0x12A10DB3, 1);
playSound(0, 0xCC4A8456);
_vm->_soundMan->addSound(0x05331081, 0xCE428854);
_vm->_soundMan->playSoundLooping(0xCE428854);
}
-void AsCommonProjector::sub434F40() {
+void AsCommonProjector::stLockedInSlot() {
sendMessage(_parentScene, 0x480F, 0);
startAnimation(0xD833207F, 0, -1);
SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::handleMessage4348E0);
+ SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
}
-void AsCommonProjector::sub434F80() {
+void AsCommonProjector::stStopProjecting() {
startAnimation(0x50A94417, 0, -1);
SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::handleMessage434B20);
- NextState(&AsCommonProjector::sub434E90);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
+ NextState(&AsCommonProjector::stStayLockedInSlot);
setGlobalVar(0x12A10DB3, 0);
playSound(0, 0xCC4A8456);
_vm->_soundMan->deleteSound(0xCE428854);
}
-void AsCommonProjector::sub434FF0() {
- _remX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
+void AsCommonProjector::stTurnToFront() {
+ _beforeMoveX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
startAnimation(0x22CB4A33, 0, -1);
- SetSpriteUpdate(&AsCommonProjector::spriteUpdate434B60);
- SetMessageHandler(&AsCommonProjector::handleMessage434B20);
- NextState(&AsCommonProjector::sub434DF0);
+ SetSpriteUpdate(&AsCommonProjector::suMoving);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
+ NextState(&AsCommonProjector::stMoving);
}
-void AsCommonProjector::sub435040() {
+void AsCommonProjector::stStartSuckedIn() {
setGlobalVar(0x04A105B3, 4);
setGlobalVar(0x04A10F33, 0);
- SetSpriteUpdate(&AsCommonProjector::sub434D80);
+ SetSpriteUpdate(&AsCommonProjector::stSuckedIn);
SetMessageHandler(&Sprite::handleMessage);
startAnimation(0x708D4712, 0, -1);
playSound(2);
}
Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false), _class427(NULL), _asProjector(NULL),
+ : Scene(vm, parentModule, true), _projectorBorderFlag(false), _class427(NULL), _asProjector(NULL),
_asPipe(NULL), _asMouse(NULL), _asCheese(NULL), _asBackDoor(NULL),
_sprite1(NULL), _sprite2(NULL), _sprite3(NULL), _ssButton(NULL) {
@@ -728,9 +720,9 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1401::update() {
Scene::update();
- if (_asProjector && !_flag && _asProjector->getY() < 360) {
+ if (_asProjector && !_projectorBorderFlag && _asProjector->getY() < 360) {
_sprite2->setVisible(true);
- _flag = true;
+ _projectorBorderFlag = true;
} else {
_sprite2->setVisible(false);
}
@@ -767,9 +759,8 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asCheese, 0x4839, 0);
setGlobalVar(0x01023818, 1);
}
- if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504) {
+ if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504)
sendMessage(_asProjector , 0x4839, 0);
- }
} else if (sender == _ssButton) {
sendMessage(_ssButton, 0x4808, 0);
}
@@ -802,7 +793,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1402
-Class454::Class454(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority)
+SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority)
: StaticSprite(vm, fileHash, surfacePriority) {
SetFilterY(&Sprite::defFilterY);
@@ -810,7 +801,7 @@ Class454::Class454(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority)
}
-Class482::Class482(NeverhoodEngine *vm, Scene *parentScene, int which)
+AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int which)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
// TODO createSurface3(900, dword_4B6768);
@@ -818,31 +809,36 @@ Class482::Class482(NeverhoodEngine *vm, Scene *parentScene, int which)
SetFilterY(&Sprite::defFilterY);
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class482::handleMessage);
+ SetMessageHandler(&AsScene1402PuzzleBox::handleMessage);
_x = 279;
_y = 270;
if (which == 2) {
+ // Puzzle box after the puzzle was solved
startAnimation(0x20060259, 0, -1);
+ NextState(&AsScene1402PuzzleBox::stMoveDownSolvedDone);
playSound(0, 0x419014AC);
loadSound(1, 0x61901C29);
} else if (which == 1) {
+ // Puzzle box appears
startAnimation(0x210A0213, 0, -1);
+ NextState(&AsScene1402PuzzleBox::stMoveUpDone);
playSound(0, 0x41809C6C);
} else {
+ // Puzzle box is here
startAnimation(0x20060259, 0, -1);
loadSound(1, 0x61901C29);
_newStickFrameIndex = -2;
}
}
-uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1402PuzzleBox::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2002:
playSound(1);
startAnimation(0x20060259, -1, -1);
_playBackwards = true;
- NextState(&Class482::sub428530);
+ NextState(&AsScene1402PuzzleBox::stMoveDownDone);
break;
case 0x3002:
gotoNextState();
@@ -851,25 +847,25 @@ uint32 Class482::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class482::sub428500() {
+void AsScene1402PuzzleBox::stMoveUpDone() {
sendMessage(_parentScene, 0x2000, 0);
stopAnimation();
setVisible(false);
}
-void Class482::sub428530() {
+void AsScene1402PuzzleBox::stMoveDownDone() {
sendMessage(_parentScene, 0x2001, 0);
stopAnimation();
setVisible(false);
}
-void Class482::sub428560() {
+void AsScene1402PuzzleBox::stMoveDownSolvedDone() {
sendMessage(_parentScene, 0x2003, 0);
stopAnimation();
}
Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false), _class482(NULL), _asProjector(NULL) {
+ : Scene(vm, parentModule, true), _isShaking(false), _asPuzzleBox(NULL), _asProjector(NULL) {
SetMessageHandler(&Scene1402::handleMessage);
@@ -880,9 +876,9 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(0x91D3A391, 0, 64, 0);
insertMouse433(0x482F4239);
- _class454_1 = insertSprite<Class454>(0x15402D64, 1100);
- _class454_2 = insertSprite<Class454>(0x10A02120, 1100);
- _class454_3 = insertSprite<Class454>(0x60882BE0, 1100);
+ _ssBridgePart1 = insertSprite<SsScene1402BridgePart>(0x15402D64, 1100);
+ _ssBridgePart2 = insertSprite<SsScene1402BridgePart>(0x10A02120, 1100);
+ _ssBridgePart3 = insertSprite<SsScene1402BridgePart>(0x60882BE0, 1100);
if (getGlobalVar(0x70A1189C))
setRectList(0x004B0C48);
@@ -893,7 +889,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
if (!getGlobalVar(0x70A1189C)) {
- _class482 = insertSprite<Class482>(this, 0);
+ _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
}
} else if (which == 1) {
insertKlayman<KmScene1402>(42, 391);
@@ -903,25 +899,24 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
if (getGlobalVar(0x70A1189C)) {
- _class482 = insertSprite<Class482>(this, 1);
+ _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 1);
clearRectList();
showMouse(false);
- sub428220();
+ startShaking();
} else {
- _class482 = insertSprite<Class482>(this, 0);
+ _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
}
} else {
insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(0x70A1189C)) {
- _class482 = insertSprite<Class482>(this, 2);
- sub428220();
+ _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 2);
+ startShaking();
}
}
- if (_class482) {
- _class482->setClipRect(0, 0, 640, _class454_3->getDrawRect().y2());
- }
+ if (_asPuzzleBox)
+ _asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
if (getGlobalVar(0x4A105B3) == 1) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
@@ -937,15 +932,15 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->processDelta();
setMessageList(0x004B0BD0);
}
- _asProjector->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x, _class454_3->getDrawRect().y2());
+ _asProjector->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x, _ssBridgePart3->getDrawRect().y2());
}
- _klayman->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x2(), _class454_3->getDrawRect().y2());
+ _klayman->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2());
}
-void Scene1402::update() {
- if (_flag) {
+void Scene1402::upShaking() {
+ if (_isShaking) {
setBackgroundY(_vm->_rnd->getRandomNumber(10 - 1) - 10);
// TODO g_screen->field_26 = -10 - _background->getDrawRect().y;
} else {
@@ -954,10 +949,9 @@ void Scene1402::update() {
SetUpdateHandler(&Scene::update);
}
Scene::update();
- if (_class482) {
- _class482->setClipRect(0, 0, 640, _class454_3->getDrawRect().y2());
- }
- _klayman->setClipRect(_class454_1->getDrawRect().x, 0, _class454_2->getDrawRect().x2(), _class454_3->getDrawRect().y2());
+ if (_asPuzzleBox)
+ _asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
+ _klayman->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2());
}
uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -971,8 +965,8 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
clearRectList();
_klayman->setVisible(false);
showMouse(false);
- sendMessage(_class482, 0x2002, 0);
- sub428220();
+ sendMessage(_asPuzzleBox, 0x2002, 0);
+ startShaking();
}
}
break;
@@ -984,16 +978,16 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- sub428230();
+ stopShaking();
showMouse(true);
setRectList(0x004B0C48);
break;
case 0x2001:
- sub428230();
+ stopShaking();
leaveScene(0);
break;
case 0x2003:
- sub428230();
+ stopShaking();
break;
case 0x4826:
if (sender == _asProjector) {
@@ -1008,13 +1002,13 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-void Scene1402::sub428220() {
- _flag = true;
- SetUpdateHandler(&Scene1402::update);
+void Scene1402::startShaking() {
+ _isShaking = true;
+ SetUpdateHandler(&Scene1402::upShaking);
}
-void Scene1402::sub428230() {
- _flag = false;
+void Scene1402::stopShaking() {
+ _isShaking = false;
}
// Scene1407
@@ -1532,74 +1526,38 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1405
static const NPoint kAsScene1405TileItemPositions[] = {
- {100, 80},
- {162, 78},
- {222, 76},
- {292, 76},
- {356, 82},
- {422, 84},
- {488, 86},
- {550, 90},
- {102, 134},
- {164, 132},
- {224, 136},
- {294, 136},
- {360, 136},
- {422, 138},
- {484, 144},
- {548, 146},
- { 98, 196},
- {160, 200},
- {228, 200},
- {294, 202},
- {360, 198},
- {424, 200},
- {482, 202},
- {548, 206},
- { 98, 260},
- {160, 264},
- {226, 260},
- {296, 262},
- {358, 260},
- {424, 262},
- {486, 264},
- {550, 266},
- { 94, 322},
- {160, 316},
- {226, 316},
- {296, 320},
- {358, 322},
- {422, 324},
- {488, 322},
- {550, 322},
- { 98, 380},
- {160, 376},
- {226, 376},
- {294, 378},
- {356, 380},
- {420, 380},
- {490, 378},
- {552, 376}
+ {100, 80}, {162, 78}, {222, 76}, {292, 76},
+ {356, 82}, {422, 84}, {488, 86}, {550, 90},
+ {102, 134}, {164, 132}, {224, 136}, {294, 136},
+ {360, 136}, {422, 138}, {484, 144}, {548, 146},
+ { 98, 196}, {160, 200}, {228, 200}, {294, 202},
+ {360, 198}, {424, 200}, {482, 202}, {548, 206},
+ { 98, 260}, {160, 264}, {226, 260}, {296, 262},
+ {358, 260}, {424, 262}, {486, 264}, {550, 266},
+ { 94, 322}, {160, 316}, {226, 316}, {296, 320},
+ {358, 322}, {422, 324}, {488, 322}, {550, 322},
+ { 98, 380}, {160, 376}, {226, 376}, {294, 378},
+ {356, 380}, {420, 380}, {490, 378}, {552, 376}
};
-AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 index)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index), _countdown(0), _flag(false) {
+AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 tileIndex)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _tileIndex(tileIndex), _countdown(0), _isShowing(false) {
loadSound(0, 0x05308101);
// TODO _soundResource.setPan
- _x = kAsScene1405TileItemPositions[_index].x;
- _y = kAsScene1405TileItemPositions[_index].y;
+ _x = kAsScene1405TileItemPositions[_tileIndex].x;
+ _y = kAsScene1405TileItemPositions[_tileIndex].y;
createSurface1(0x844B805C, 1100);
setVisible(false);
- if (getSubVar(0xCCE0280F, _index))
+ if (getSubVar(0xCCE0280F, _tileIndex))
_countdown = _vm->_rnd->getRandomNumber(36 - 1) + 1;
SetUpdateHandler(&AsScene1405Tile::update);
SetMessageHandler(&AsScene1405Tile::handleMessage);
- debug("getSubVar(0x0C65F80B, _index) = %d", getSubVar(0x0C65F80B, _index));
+ debug("getSubVar(0x0C65F80B, _tileIndex) = %d", getSubVar(0x0C65F80B, _tileIndex));
- startAnimation(0x844B805C, getSubVar(0x0C65F80B, _index), -1);
- _newStickFrameIndex = (int16)getSubVar(0x0C65F80B, _index);
+ startAnimation(0x844B805C, getSubVar(0x0C65F80B, _tileIndex), -1);
+ _newStickFrameIndex = (int16)getSubVar(0x0C65F80B, _tileIndex);
}
void AsScene1405Tile::update() {
@@ -1614,9 +1572,9 @@ uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (getSubVar(0xCCE0280F, _index) == 0 && _parentScene->getCountdown() == 0) {
+ if (getSubVar(0xCCE0280F, _tileIndex) == 0 && _parentScene->getCountdown() == 0) {
show();
- sendMessage(_parentScene, 0x2000, _index);
+ sendMessage(_parentScene, 0x2000, _tileIndex);
}
messageResult = 1;
break;
@@ -1625,16 +1583,16 @@ uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m,
}
void AsScene1405Tile::show() {
- if (!_flag) {
- _flag = true;
+ if (!_isShowing) {
+ _isShowing = true;
playSound(0);
setVisible(true);
}
}
void AsScene1405Tile::hide() {
- if (_flag) {
- _flag = false;
+ if (_isShowing) {
+ _isShowing = false;
playSound(0);
setVisible(false);
}
@@ -1662,10 +1620,10 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
}
}
- for (uint32 index = 0; index < 48; index++) {
- _tiles[index] = insertSprite<AsScene1405Tile>(this, index);
- _vm->_collisionMan->addSprite(_tiles[index]);
- if (getSubVar(0xCCE0280F, index))
+ for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
+ _tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
+ _vm->_collisionMan->addSprite(_tiles[tileIndex]);
+ if (getSubVar(0xCCE0280F, tileIndex))
_tilesLeft--;
}
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 7cd5262..8cabc99 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -48,13 +48,13 @@ public:
protected:
int _countdown1;
int _countdown2;
- void update4662A0();
- void update466300();
- uint32 handleMessage466320(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage4663C0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub466420();
- void sub466460();
- void sub4664B0();
+ void update();
+ void upSuckInProjector();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmSuckInProjector(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stStartSucking();
+ void stDoneSucking();
+ void stSuckInProjector();
};
class AsScene1401Mouse : public AnimatedSprite {
@@ -91,12 +91,11 @@ protected:
struct AsCommonProjectorItem {
NPoint point;
- int8 varIndex1;
- int8 varIndex2;
+ int8 maxSlotCount;
+ int8 lockSlotIndex;
int8 index1;
- int8 flag2;
- int8 flag4;
- int8 flag;
+ int8 leftBorderLeaves;
+ int8 rightBorderLeaves;
};
class AsCommonProjector : public AnimatedSprite {
@@ -108,30 +107,30 @@ protected:
Sprite *_klayman;
Sprite *_asPipe;
const AsCommonProjectorItem *_asProjectorItem;
- int16 _remX;
- bool _flag;
+ int16 _beforeMoveX;
+ bool _lockedInSlot;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage4348E0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage434B20(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate434B60();
- void sub434C80();
- void sub434D80();
- void sub434DD0();
- void sub434DF0();
- void sub434E60();
- void sub434E90();
- void sub434EC0();
- void sub434F40();
- void sub434F80();
- void sub434FF0();
- void sub435040();
+ uint32 hmLockedInSlot(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
+ void suMoving();
+ void moveProjector();
+ void stSuckedIn();
+ void stIdle();
+ void stMoving();
+ void stStartLockedInSlot();
+ void stStayLockedInSlot();
+ void stStartProjecting();
+ void stLockedInSlot();
+ void stStopProjecting();
+ void stTurnToFront();
+ void stStartSuckedIn();
};
class Scene1401 : public Scene {
public:
Scene1401(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- bool _flag;
+ bool _projectorBorderFlag;
Sprite *_class427;
AsCommonProjector *_asProjector;
Sprite *_asPipe;
@@ -148,36 +147,36 @@ protected:
// Scene1402
-class Class454 : public StaticSprite {
+class SsScene1402BridgePart : public StaticSprite {
public:
- Class454(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority);
+ SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority);
};
-class Class482 : public AnimatedSprite {
+class AsScene1402PuzzleBox : public AnimatedSprite {
public:
- Class482(NeverhoodEngine *vm, Scene *parentScene, int which);
+ AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int which);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub428500();
- void sub428530();
- void sub428560();
+ void stMoveUpDone();
+ void stMoveDownDone();
+ void stMoveDownSolvedDone();
};
class Scene1402 : public Scene {
public:
Scene1402(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_class454_1;
- Sprite *_class454_2;
- Sprite *_class454_3;
- Sprite *_class482;
+ Sprite *_ssBridgePart1;
+ Sprite *_ssBridgePart2;
+ Sprite *_ssBridgePart3;
+ Sprite *_asPuzzleBox;
AsCommonProjector *_asProjector;
- bool _flag;
- void update();
+ bool _isShaking;
+ void upShaking();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub428220();
- void sub428230();
+ void startShaking();
+ void stopShaking();
};
// Scene1407
@@ -249,13 +248,13 @@ class Scene1405;
class AsScene1405Tile : public AnimatedSprite {
public:
- AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 index);
+ AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 tileIndex);
void show();
void hide();
protected:
Scene1405 *_parentScene;
- bool _flag;
- uint32 _index;
+ bool _isShowing;
+ uint32 _tileIndex;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: b320c9f5a00c6009091cfd8121aa8deaa2624d8d
https://github.com/scummvm/scummvm/commit/b320c9f5a00c6009091cfd8121aa8deaa2624d8d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Work on Module1600:
- Rename stuff (also in related files)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e6564f3..df001c4 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -304,12 +304,13 @@ void GameModule::startup() {
setGlobalVar(0x0A18CA33, 0);
setGlobalVar(0x0112090A, 0);
//setGlobalVar(0x000CF819, 1);
+ setGlobalVar(0x04A105B3, 2);
// <<<DEBUG
#if 1
- _vm->gameState().sceneNum = 7;
- createModule(1300, -1);
+ _vm->gameState().sceneNum = 8;
+ createModule(1600, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 59ed0c4..88b576ac3 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1608,6 +1608,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x0C0C007D);
insertMouse435(0xC00790C8, 20, 620);
+ // DEBUG>>>
// TODO: Some debug code: Leave two matching tiles open
for (int i = 0; i < 48; i++)
setSubVar(0xCCE0280F, i, 1);
@@ -1619,6 +1620,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
break;
}
}
+ // <<<DEBUG
for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
_tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 88b7e73..a46b8fc 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -132,8 +132,10 @@ void Scene1501::update() {
uint32 Scene1501::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- if (messageNum == 0x0009) {
+ switch (messageNum) {
+ case 0x0009:
_flag = true;
+ break;
}
return messageResult;
}
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 5c890e0..92c566e 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -179,11 +179,11 @@ void Module1600::updateScene() {
}
}
-Class521::Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
+AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: AnimatedSprite(vm, 1000), _parentScene(parentScene) {
- SetUpdateHandler(&Class521::update);
- SetMessageHandler(&Class521::handleMessage);
+ SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::handleMessage);
SetSpriteUpdate(NULL);
// TODO createSurface2(200, dword_4AF4C0);
@@ -214,17 +214,17 @@ Class521::Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
}
-Class521::~Class521() {
- if (_finalizeStateCb == AnimationCallback(&Class521::sub45D620)) {
+AsCommonCar::~AsCommonCar() {
+ if (_finalizeStateCb == AnimationCallback(&AsCommonCar::sub45D620)) {
setGlobalVar(0x21E60190, !getGlobalVar(0x21E60190));
}
}
-void Class521::setPathPoints(NPointArray *pathPoints) {
+void AsCommonCar::setPathPoints(NPointArray *pathPoints) {
_pathPoints = pathPoints;
}
-void Class521::update() {
+void AsCommonCar::update() {
if (_newDeltaXType >= 0) {
setDoDeltaX(_newDeltaXType);
_newDeltaXType = -1;
@@ -242,14 +242,14 @@ void Class521::update() {
sub45E0A0();
}
-void Class521::update45C790() {
- Class521::update();
+void AsCommonCar::update45C790() {
+ AsCommonCar::update();
if (++_idleCounter >= _idleCounterMax)
sub45D050();
sub45E0A0();
}
-uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1019:
@@ -345,14 +345,14 @@ uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity
_moreY = param.asInteger();
_steps = 0;
_flag10E = 0;
- SetSpriteUpdate(&Class521::suMoveToPrevPoint);
+ SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
_lastDistance = 640;
break;
case 0x2008:
_moreY = param.asInteger();
_steps = 0;
_flag10E = 0;
- SetSpriteUpdate(&Class521::suMoveToNextPoint);
+ SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
_lastDistance = 640;
break;
case 0x2009:
@@ -376,8 +376,8 @@ uint32 Class521::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-uint32 Class521::handleMessage45CC30(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Class521::handleMessage(messageNum, param, sender);
+uint32 AsCommonCar::handleMessage45CC30(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = AsCommonCar::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (_flag10F && param.asInteger() == 0x025424A2) {
@@ -391,20 +391,20 @@ uint32 Class521::handleMessage45CC30(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 Class521::handleMessage45CCA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonCar::handleMessage45CCA0(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x2009:
sub45CF80();
break;
case 0x3002:
sendMessage(_parentScene, 0x200A, 0);
- SetMessageHandler(&Class521::handleMessage);
+ SetMessageHandler(&AsCommonCar::handleMessage);
break;
}
return 0;
}
-void Class521::sub45CD00() {
+void AsCommonCar::sub45CD00() {
bool doDeltaX = _doDeltaX;
SetSpriteUpdate(NULL);
_againDestPtFlag = 0;
@@ -415,12 +415,12 @@ void Class521::sub45CD00() {
_flag114 = 0;
_flag11A = 0;
_rectList = NULL;
- SetMessageHandler(&Class521::handleMessage45CC30);
- NextState(&Class521::sub45CFE0);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ NextState(&AsCommonCar::sub45CFE0);
startAnimation(0x35698F78, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update45C790);
- FinalizeState(&Class521::sub45D040);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update45C790);
+ FinalizeState(&AsCommonCar::sub45D040);
setDoDeltaX(doDeltaX ? 1 : 0);
_currMoveDirection = 0;
_newMoveDirection = 0;
@@ -429,36 +429,36 @@ void Class521::sub45CD00() {
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void Class521::sub45CDC0() {
+void AsCommonCar::sub45CDC0() {
if (_value112 == 1) {
_lastDistance = 640;
_flag113 = 0;
_flag10E = 0;
- SetSpriteUpdate(&Class521::suMoveToNextPoint);
+ SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
} else if (_value112 == 2) {
_lastDistance = 640;
_flag113 = 0;
_flag10E = 0;
- SetSpriteUpdate(&Class521::suMoveToPrevPoint);
+ SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
}
}
-void Class521::sub45CE10() {
+void AsCommonCar::sub45CE10() {
if (_flag10E && !_flag113 && !_flag10F) {
gotoNextState();
_flag114 = 0;
_flag113 = 1;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45CFE0);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45CFE0);
} else if (!_flag10E && _steps && _flag113) {
gotoNextState();
_flag113 = 0;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45D100);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45D100);
} else {
bool flag = false;
uint index = 0;
@@ -483,25 +483,25 @@ void Class521::sub45CE10() {
}
}
-void Class521::sub45CF80() {
+void AsCommonCar::sub45CF80() {
startAnimation(0xA86A9538, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45CFE0);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45CFE0);
}
-void Class521::sub45CFB0() {
+void AsCommonCar::sub45CFB0() {
startAnimation(0xA86A9538, -1, -1);
_playBackwards = true;
- SetMessageHandler(&Class521::handleMessage45CCA0);
- SetUpdateHandler(&Class521::update);
+ SetMessageHandler(&AsCommonCar::handleMessage45CCA0);
+ SetUpdateHandler(&AsCommonCar::update);
}
-void Class521::sub45CFE0() {
+void AsCommonCar::sub45CFE0() {
startAnimation(0x35698F78, 0, -1);
- SetMessageHandler(&Class521::handleMessage);
- SetUpdateHandler(&Class521::update45C790);
- FinalizeState(&Class521::sub45D040);
+ SetMessageHandler(&AsCommonCar::handleMessage);
+ SetUpdateHandler(&AsCommonCar::update45C790);
+ FinalizeState(&AsCommonCar::sub45D040);
_idleCounter = 0;
_currMoveDirection = 0;
_newMoveDirection = 0;
@@ -509,35 +509,35 @@ void Class521::sub45CFE0() {
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void Class521::sub45D040() {
- SetUpdateHandler(&Class521::update);
+void AsCommonCar::sub45D040() {
+ SetUpdateHandler(&AsCommonCar::update);
}
-void Class521::sub45D050() {
+void AsCommonCar::sub45D050() {
startAnimation(0xB579A77C, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45CFE0);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45CFE0);
_idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void Class521::sub45D0A0() {
+void AsCommonCar::sub45D0A0() {
_flag10F = 1;
gotoNextState();
startAnimation(0x9C220DA4, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- FinalizeState(&Class521::sub45D0E0);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ FinalizeState(&AsCommonCar::sub45D0E0);
}
-void Class521::sub45D0E0() {
+void AsCommonCar::sub45D0E0() {
_flag10F = 0;
_newMoveDirection = 0;
sub45D100();
}
-void Class521::sub45D100() {
+void AsCommonCar::sub45D100() {
_flag114 = 1;
if (_currMoveDirection == 1) {
startAnimation(0xD4AA03A4, 0, -1);
@@ -551,18 +551,18 @@ void Class521::sub45D100() {
setGlobalVar(0x21E60190, _doDeltaX ? 1 : 0);
}
-void Class521::sub45D180() {
+void AsCommonCar::sub45D180() {
_flag10F = 1;
gotoNextState();
startAnimation(0xF46A0324, 0, -1);
_value112 = 0;
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- FinalizeState(&Class521::sub45D620);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ FinalizeState(&AsCommonCar::sub45D620);
sub45CDC0();
}
-void Class521::moveToNextPoint() {
+void AsCommonCar::moveToNextPoint() {
if (_currPointIndex >= (int)_pathPoints->size() - 1) {
_moreY = 0;
sendMessage(this, 0x1019, 0);
@@ -585,39 +585,39 @@ void Class521::moveToNextPoint() {
gotoNextState();
_flag113 = 0;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45D100);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45D100);
}
_flag10E = 0;
- SetSpriteUpdate(&Class521::suMoveToNextPoint);
+ SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
_lastDistance = 640;
}
}
}
-void Class521::sub45D350() {
+void AsCommonCar::sub45D350() {
gotoNextState();
_flag10F = 1;
_flag10E = 1;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45D390);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45D390);
}
-void Class521::sub45D390() {
+void AsCommonCar::sub45D390() {
gotoNextState();
_flag10F = 1;
startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- FinalizeState(&Class521::sub45D620);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ FinalizeState(&AsCommonCar::sub45D620);
_value112 = 1;
sub45CDC0();
}
-void Class521::moveToPrevPoint() {
+void AsCommonCar::moveToPrevPoint() {
if (_currPointIndex == 0 && _stepError == 0) {
_moreY = 0;
sendMessage(this, 0x1019, 0);
@@ -647,46 +647,46 @@ void Class521::moveToPrevPoint() {
gotoNextState();
_flag113 = 0;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45D100);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45D100);
}
_flag10E = 0;
- SetSpriteUpdate(&Class521::suMoveToPrevPoint);
+ SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
_lastDistance = 640;
}
}
}
-void Class521::sub45D580() {
+void AsCommonCar::sub45D580() {
_flag10F = 1;
_flag10E = 1;
FinalizeState(NULL);
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- NextState(&Class521::sub45D5D0);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::sub45D5D0);
}
-void Class521::sub45D5D0() {
+void AsCommonCar::sub45D5D0() {
_flag10F = 1;
FinalizeState(NULL);
startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&Class521::handleMessage45CC30);
- SetUpdateHandler(&Class521::update);
- FinalizeState(&Class521::sub45D620);
+ SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetUpdateHandler(&AsCommonCar::update);
+ FinalizeState(&AsCommonCar::sub45D620);
_value112 = 2;
sub45CDC0();
}
-void Class521::sub45D620() {
+void AsCommonCar::sub45D620() {
_flag10F = 0;
_newMoveDirection = 0;
setDoDeltaX(2);
sub45D100();
}
-void Class521::suMoveToNextPoint() {
+void AsCommonCar::suMoveToNextPoint() {
int16 newX = _x, newY = _y;
if (_currPointIndex >= (int)_pathPoints->size()) {
@@ -831,7 +831,7 @@ void Class521::suMoveToNextPoint() {
}
-void Class521::suMoveToPrevPoint() {
+void AsCommonCar::suMoveToPrevPoint() {
int16 newX = _x, newY = _y;
if (_currPointIndex == 0 && _stepError == 0) {
@@ -978,60 +978,60 @@ void Class521::suMoveToPrevPoint() {
}
-void Class521::sub45E0A0() {
+void AsCommonCar::sub45E0A0() {
// TODO
}
-Class546::Class546(NeverhoodEngine *vm, Scene *parentScene)
+AsScene1608Door::AsScene1608Door(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0x08C80144, 900, 320, 240), _parentScene(parentScene) {
setVisible(false);
- SetMessageHandler(&Class546::handleMessage);
+ SetMessageHandler(&AsScene1608Door::handleMessage);
stopAnimation();
}
-uint32 Class546::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1608Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextState();
break;
case 0x4808:
- sub44D710();
+ stOpenDoor();
break;
case 0x4809:
- sub44D790();
+ stCloseDoor();
break;
}
return messageResult;
}
-void Class546::sub44D710() {
+void AsScene1608Door::stOpenDoor() {
startAnimation(0x08C80144, 0, -1);
setVisible(true);
- NextState(&Class546::sub44D760);
+ NextState(&AsScene1608Door::stOpenDoorDone);
playSound(0, calcHash("fxDoorOpen23"));
}
-void Class546::sub44D760() {
+void AsScene1608Door::stOpenDoorDone() {
sendMessage(_parentScene, 0x2033, 0);
stopAnimation();
setVisible(false);
}
-void Class546::sub44D790() {
+void AsScene1608Door::stCloseDoor() {
startAnimation(0x08C80144, -1, -1);
setVisible(true);
- NextState(&Class546::sub44D7F0);
+ NextState(&AsScene1608Door::stCloseDoorDone);
playSound(0, calcHash("fxDoorClose23"));
}
-void Class546::sub44D7F0() {
+void AsScene1608Door::stCloseDoorDone() {
sendMessage(_parentScene, 0x2034, 0);
stopAnimation();
}
-Class547::Class547(NeverhoodEngine *vm, int16 x, int16 y)
+AsScene1608IdleCarLower::AsScene1608IdleCarLower(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
setDoDeltaX(1);
@@ -1039,35 +1039,39 @@ Class547::Class547(NeverhoodEngine *vm, int16 x, int16 y)
_newStickFrameIndex = 1;
}
-Class548::Class548(NeverhoodEngine *vm, int16 x, int16 y)
+AsScene1608IdleCarFull::AsScene1608IdleCarFull(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
setDoDeltaX(1);
_newStickFrameIndex = 0;
}
-Class518::Class518(NeverhoodEngine *vm, Class521 *class521)
- : AnimatedSprite(vm, 1100), _class521(class521) {
+AsCommonCarConnector::AsCommonCarConnector(NeverhoodEngine *vm, AsCommonCar *asCar)
+ : AnimatedSprite(vm, 1100), _asCar(asCar) {
- SetUpdateHandler(&Class518::update);
+ SetUpdateHandler(&AsCommonCarConnector::update);
createSurface1(0x60281C10, 150);
startAnimation(0x60281C10, -1, -1);
_newStickFrameIndex = -2;
}
-void Class518::update() {
- _x = _class521->getX();
- _y = _class521->getY();
+void AsCommonCarConnector::update() {
+ _x = _asCar->getX();
+ _y = _asCar->getY();
AnimatedSprite::update();
}
Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _class521(NULL), _countdown1(0) {
+ : Scene(vm, parentModule, true), _asCar(NULL), _countdown1(0) {
+
+ /* TODO: Find out which of the message/update handlers are used for
+ the upper/lower floors and rename them accordingly.
+ */
setGlobalVar(0x21E60190, 1);
_surfaceFlag = true;
- SetMessageHandler(&Scene1608::handleMessage44D2A0);
+ SetMessageHandler(&Scene1608::hmLowerFloor);
_class545 = insertSprite<Class545>(this, 1, 1100, 198, 220);
_vm->_collisionMan->addSprite(_class545);
@@ -1078,9 +1082,9 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
else {
setRectList(0x004B47D0);
insertKlayman<KmScene1608>(380, 438);
- _klayman2 = _klayman;
- _flag4 = false;
- _class546 = insertSprite<Class546>(this);
+ _kmScene1608 = _klayman;
+ _klaymanInCar = false;
+ _asDoor = insertSprite<AsScene1608Door>(this);
_sprite1 = insertStaticSprite(0x7D0404E8, 1100);
setMessageList(0x004B46A8);
setBackground(0x10080E01);
@@ -1088,7 +1092,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
- SetUpdateHandler(&Scene1608::update44CE90);
+ SetUpdateHandler(&Scene1608::upLowerFloor);
insertMouse433(0x80E05108);
insertStaticSprite(0x4B18F868, 1200);
}
@@ -1096,8 +1100,8 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameState().which = 0;
setRectList(0x004B47D0);
insertKlayman<KmScene1608>(0, 438);
- _klayman2 = _klayman;
- _flag4 = false;
+ _kmScene1608 = _klayman;
+ _klaymanInCar = false;
setMessageList(0x004B46B0);
setBackground(0x10080E01);
setPalette(0x10080E01);
@@ -1105,10 +1109,10 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
insertMouse433(0x80E05108);
_sprite1 = insertStaticSprite(0x7D0404E8, 1100);
- _class546 = insertSprite<Class546>(this);
+ _asDoor = insertSprite<AsScene1608Door>(this);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
- SetUpdateHandler(&Scene1608::update44CE90);
- sendMessage(_class546, 0x4808, 0);
+ SetUpdateHandler(&Scene1608::upLowerFloor);
+ sendMessage(_asDoor, 0x4808, 0);
insertStaticSprite(0x4B18F868, 1200);
} else if (which == 2) {
_vm->gameState().which = 1;
@@ -1119,38 +1123,38 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette("paPodRed", 65, 31, 65);
insertMouse433(0x01600988);
_sprite2 = insertStaticSprite(0x491F38A8, 1100);
- _class521 = createSprite<Class521>(this, 375, 227); // Create but don't add to the sprite list yet
- _class547 = insertSprite<Class547>(375, 227);
- _class548 = insertSprite<Class548>(375, 227);
- _class521->setVisible(false);
+ _asCar = createSprite<AsCommonCar>(this, 375, 227); // Create but don't add to the sprite list yet
+ _asIdleCarLower = insertSprite<AsScene1608IdleCarLower>(375, 227);
+ _asIdleCarFull = insertSprite<AsScene1608IdleCarFull>(375, 227);
+ _asCar->setVisible(false);
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene1608>(373, 220);
_klayman->setDoDeltaX(1);
} else {
insertKlayman<KmScene1608>(283, 220);
}
- _klayman2 = _klayman;
+ _kmScene1608 = _klayman;
setMessageList(0x004B47A8);
- SetMessageHandler(&Scene1608::handleMessage44D3C0);
- SetUpdateHandler(&Scene1608::update44CED0);
+ SetMessageHandler(&Scene1608::hmUpperFloor);
+ SetUpdateHandler(&Scene1608::upUpperFloor);
// NOTE: Setting the point array was handled by messages 0x2000 (array) and 0x2001 (count) in the original
- _class521->setPathPoints(_roomPathPoints);
- sendMessage(_class521, 0x2002, _roomPathPoints->size() - 1);
+ _asCar->setPathPoints(_roomPathPoints);
+ sendMessage(_asCar, 0x2002, _roomPathPoints->size() - 1);
_sprite3 = insertStaticSprite(0xB47026B0, 1100);
_rect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
_rect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
_rect2 = _rect1;
_rect2.y2 = 215;
_klayman->setClipRect(_rect1);
- _class521->setClipRect(_rect1);
- _class547->setClipRect(_rect1);
- _class548->setClipRect(_rect1);
+ _asCar->setClipRect(_rect1);
+ _asIdleCarLower->setClipRect(_rect1);
+ _asIdleCarFull->setClipRect(_rect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- insertSprite<Class518>(_class521)->setClipRect(_rect1);
- _flag4 = false;
- _flag2 = false;
- _flag1 = 0;
+ insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_rect1);
+ _klaymanInCar = false;
+ _carClipFlag = false;
+ _carStatus = 0;
setRectList(0x004B4810);
}
@@ -1163,36 +1167,36 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x98001604);
_palette->addPalette("paPodRed", 65, 31, 65);
insertMouse433(0x01600988);
- _class521 = insertSprite<Class521>(this, 375, 227);
- _class547 = insertSprite<Class547>(375, 227);
- _class548 = insertSprite<Class548>(375, 227);
+ _asCar = insertSprite<AsCommonCar>(this, 375, 227);
+ _asIdleCarLower = insertSprite<AsScene1608IdleCarLower>(375, 227);
+ _asIdleCarFull = insertSprite<AsScene1608IdleCarFull>(375, 227);
_sprite2 = insertStaticSprite(0x491F38A8, 1100);
- _klayman2 = createSprite<KmScene1608>(this, 439, 220); // Special Klayman handling...
- sendMessage(_klayman2, 0x2032, 1);
- _klayman2->setDoDeltaX(1);
- SetMessageHandler(&Scene1608::handleMessage44D470);
- SetUpdateHandler(&Scene1608::update44D1E0);
- _class547->setVisible(false);
- _class548->setVisible(false);
+ _kmScene1608 = createSprite<KmScene1608>(this, 439, 220); // Special Klayman handling...
+ sendMessage(_kmScene1608, 0x2032, 1);
+ _kmScene1608->setDoDeltaX(1);
+ SetMessageHandler(&Scene1608::hmRidingCar);
+ SetUpdateHandler(&Scene1608::upRidingCar);
+ _asIdleCarLower->setVisible(false);
+ _asIdleCarFull->setVisible(false);
// NOTE: Setting the point array was handled by messages 0x2000 (array) and 0x2001 (count) in the original
- _class521->setPathPoints(_roomPathPoints);
- sendMessage(_class521, 0x2002, 0);
- sendMessage(_class521, 0x2008, 90);
+ _asCar->setPathPoints(_roomPathPoints);
+ sendMessage(_asCar, 0x2002, 0);
+ sendMessage(_asCar, 0x2008, 90);
_sprite3 = insertStaticSprite(0xB47026B0, 1100);
_rect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
_rect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
_rect2 = _rect1;
_rect2.y2 = 215;
- _klayman2->setClipRect(_rect1);
- _class521->setClipRect(_rect1);
- _class547->setClipRect(_rect1);
- _class548->setClipRect(_rect1);
+ _kmScene1608->setClipRect(_rect1);
+ _asCar->setClipRect(_rect1);
+ _asIdleCarLower->setClipRect(_rect1);
+ _asIdleCarFull->setClipRect(_rect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
// ... _vm->_collisionMan->addSprite(_asTape);
- insertSprite<Class518>(_class521)->setClipRect(_rect1);
- _flag4 = true;
- _flag2 = true;
- _flag1 = 0;
+ insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_rect1);
+ _klaymanInCar = true;
+ _carClipFlag = true;
+ _carStatus = 0;
}
_palette->addPalette("paKlayRed", 0, 64, 0);
@@ -1200,113 +1204,100 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1608::~Scene1608() {
- setGlobalVar(0xC0418A02, _klayman2->isDoDeltaX() ? 1 : 0);
- // Weird
- if (_flag4) {
- delete _klayman2;
+ setGlobalVar(0xC0418A02, _kmScene1608->isDoDeltaX() ? 1 : 0);
+ if (_klaymanInCar) {
+ delete _kmScene1608;
} else {
- delete _class521;
+ delete _asCar;
}
}
-void Scene1608::update44CE90() {
+void Scene1608::upLowerFloor() {
Scene::update();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
leaveScene(0);
}
}
-void Scene1608::update44CED0() {
+void Scene1608::upUpperFloor() {
Scene::update();
- if (_flag1 == 1) {
+ if (_carStatus == 1) {
removeSurface(_klayman->getSurface());
removeEntity(_klayman);
- addSprite(_class521);
- _flag4 = true;
+ addSprite(_asCar);
+ _klaymanInCar = true;
clearRectList();
- SetUpdateHandler(&Scene1608::update44CFE0);
- SetMessageHandler(&Scene1608::handleMessage44D510);
- _class547->setVisible(false);
- _class548->setVisible(false);
- _class521->setVisible(true);
- sendMessage(_class521, 0x2009, 0);
- _class521->handleUpdate();
+ SetUpdateHandler(&Scene1608::upCarAtHome);
+ SetMessageHandler(&Scene1608::hmCarAtHome);
+ _asIdleCarLower->setVisible(false);
+ _asIdleCarFull->setVisible(false);
+ _asCar->setVisible(true);
+ sendMessage(_asCar, 0x2009, 0);
+ _asCar->handleUpdate();
_klayman = NULL;
- _flag1 = 0;
- }
- if (_klayman2->getX() <= 375) {
- _klayman2->setClipRect(_rect1);
- } else {
- _klayman2->setClipRect(_rect2);
+ _carStatus = 0;
}
+ updateKlaymanCliprect();
}
-void Scene1608::update44CFE0() {
+void Scene1608::upCarAtHome() {
Scene::update();
if (_mouseClicked) {
- if (_mouseClickPos.x <= 329 && _class521->getX() == 375 && _class521->getY() == 227) {
- sendMessage(_class521, 0x200A, 0);
- SetUpdateHandler(&Scene1608::update44D0C0);
+ if (_mouseClickPos.x <= 329 && _asCar->getX() == 375 && _asCar->getY() == 227) {
+ sendMessage(_asCar, 0x200A, 0);
+ SetUpdateHandler(&Scene1608::upGettingOutOfCar);
} else {
- sendPointMessage(_class521, 0x2004, _mouseClickPos);
- SetMessageHandler(&Scene1608::handleMessage44D470);
- SetUpdateHandler(&Scene1608::update44D1E0);
+ sendPointMessage(_asCar, 0x2004, _mouseClickPos);
+ SetMessageHandler(&Scene1608::hmRidingCar);
+ SetUpdateHandler(&Scene1608::upRidingCar);
}
_mouseClicked = false;
}
- if (_klayman2->getX() <= 375) {
- _klayman2->setClipRect(_rect1);
- } else {
- _klayman2->setClipRect(_rect2);
- }
+ updateKlaymanCliprect();
}
-void Scene1608::update44D0C0() {
+void Scene1608::upGettingOutOfCar() {
Scene::update();
- if (_flag1 == 2) {
- _klayman = _klayman2;
- removeSurface(_class521->getSurface());
- removeEntity(_class521);
+ if (_carStatus == 2) {
+ _klayman = _kmScene1608;
+ removeSurface(_asCar->getSurface());
+ removeEntity(_asCar);
addSprite(_klayman);
- _flag4 = false;
- SetMessageHandler(&Scene1608::handleMessage44D3C0);
- SetUpdateHandler(&Scene1608::update44CED0);
+ _klaymanInCar = false;
+ SetMessageHandler(&Scene1608::hmUpperFloor);
+ SetUpdateHandler(&Scene1608::update);
setRectList(0x004B4810);
- _class547->setVisible(true);
- _class548->setVisible(true);
- _class521->setVisible(false);
+ _asIdleCarLower->setVisible(true);
+ _asIdleCarFull->setVisible(true);
+ _asCar->setVisible(false);
setMessageList(0x004B4748);
runMessageList();
_klayman->handleUpdate();
- _flag1 = 0;
- }
- if (_klayman2->getX() <= 375) {
- _klayman2->setClipRect(_rect1);
- } else {
- _klayman2->setClipRect(_rect2);
+ _carStatus = 0;
}
+ updateKlaymanCliprect();
}
-void Scene1608::update44D1E0() {
+void Scene1608::upRidingCar() {
Scene::update();
if (_mouseClicked) {
- sendPointMessage(_class521, 0x2004, _mouseClickPos);
+ sendPointMessage(_asCar, 0x2004, _mouseClickPos);
_mouseClicked = false;
}
- if (_class521->getX() < 300) {
- if (_flag2) {
- _flag2 = false;
- _class521->setClipRect(_rect1);
- if (!_class521->isDoDeltaX())
- sendMessage(_class521, 0x200E, 0);
+ if (_asCar->getX() < 300) {
+ if (_carClipFlag) {
+ _carClipFlag = false;
+ _asCar->setClipRect(_rect1);
+ if (!_asCar->isDoDeltaX())
+ sendMessage(_asCar, 0x200E, 0);
}
- } else if (!_flag2) {
- _flag2 = true;
- _class521->setClipRect(_rect3);
+ } else if (!_carClipFlag) {
+ _carClipFlag = true;
+ _asCar->setClipRect(_rect3);
}
}
-uint32 Scene1608::handleMessage44D2A0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene1608::hmLowerFloor(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1315,7 +1306,7 @@ uint32 Scene1608::handleMessage44D2A0(int messageNum, const MessageParam ¶m,
_klayman->setVisible(false);
showMouse(false);
_sprite1->setVisible(false);
- sendMessage(_class546, 0x4809, 0);
+ sendMessage(_asDoor, 0x4809, 0);
_countdown1 = 28;
}
break;
@@ -1324,7 +1315,7 @@ uint32 Scene1608::handleMessage44D2A0(int messageNum, const MessageParam ¶m,
break;
case 0x4826:
if (sender == _asTape) {
- sendEntityMessage(_klayman2, 0x1014, _asTape);
+ sendEntityMessage(_kmScene1608, 0x1014, _asTape);
setMessageList(0x004B4770);
} else if (sender == _class545) {
setMessageList(0x004B46C8);
@@ -1334,12 +1325,12 @@ uint32 Scene1608::handleMessage44D2A0(int messageNum, const MessageParam ¶m,
return 0;
}
-uint32 Scene1608::handleMessage44D3C0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene1608::hmUpperFloor(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x60842040) {
- _flag1 = true;
+ _carStatus = 1;
}
break;
case 0x200D:
@@ -1347,7 +1338,7 @@ uint32 Scene1608::handleMessage44D3C0(int messageNum, const MessageParam ¶m,
break;
case 0x4826:
if (sender == _class545) {
- sendEntityMessage(_klayman2, 0x1014, _class545);
+ sendEntityMessage(_kmScene1608, 0x1014, _class545);
setMessageList(0x004B4760);
}
break;
@@ -1355,16 +1346,16 @@ uint32 Scene1608::handleMessage44D3C0(int messageNum, const MessageParam ¶m,
return 0;
}
-uint32 Scene1608::handleMessage44D470(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene1608::hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2005:
leaveScene(1);
break;
case 0x2006:
- SetMessageHandler(&Scene1608::handleMessage44D510);
- SetUpdateHandler(&Scene1608::update44CFE0);
- sendMessage(_class521, 0x200F, 1);
+ SetMessageHandler(&Scene1608::hmCarAtHome);
+ SetUpdateHandler(&Scene1608::upCarAtHome);
+ sendMessage(_asCar, 0x200F, 1);
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -1373,11 +1364,11 @@ uint32 Scene1608::handleMessage44D470(int messageNum, const MessageParam ¶m,
return 0;
}
-uint32 Scene1608::handleMessage44D510(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene1608::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x200A:
- _flag1 = 2;
+ _carStatus = 2;
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -1386,11 +1377,18 @@ uint32 Scene1608::handleMessage44D510(int messageNum, const MessageParam ¶m,
return 0;
}
+void Scene1608::updateKlaymanCliprect() {
+ if (_kmScene1608->getX() <= 375)
+ _kmScene1608->setClipRect(_rect1);
+ else
+ _kmScene1608->setClipRect(_rect2);
+}
+
Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown1(1), _index1(0), _index3(0), _flag5(true), _flag6(false) {
+ : Scene(vm, parentModule, true), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
// TODO _vm->gameModule()->initScene3011Vars();
- _index2 = getGlobalVar(0x2414C2F2);
+ _noisySymbolIndex = getGlobalVar(0x2414C2F2);
_surfaceFlag = true;
SetMessageHandler(&Scene1609::handleMessage);
@@ -1399,8 +1397,8 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x92124A14);
setPalette(0x92124A14);
- for (int i = 0; i < 12; i++)
- _asSymbols[i] = insertSprite<AsScene3011Symbol>(i, false);
+ for (int symbolPosition = 0; symbolPosition < 12; symbolPosition++)
+ _asSymbols[symbolPosition] = insertSprite<AsScene3011Symbol>(symbolPosition, false);
_ssButton = insertSprite<SsScene3011Button>(this, true);
_vm->_collisionMan->addSprite(_ssButton);
@@ -1412,21 +1410,21 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
}
void Scene1609::update() {
- if (!_flag6 && _countdown1 != 0 && (--_countdown1 == 0)) {
- if (_flag5) {
- _index1++;
- if (_index1 >= 12)
- _index1 = 0;
- _asSymbols[_index3]->change(_index1 + 12, _index1 == (int)getSubVar(0x04909A50, _index2));
- _flag5 = false;
+ if (!_isSolved && _countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_changeCurrentSymbol) {
+ _currentSymbolIndex++;
+ if (_currentSymbolIndex >= 12)
+ _currentSymbolIndex = 0;
+ _asSymbols[_symbolPosition]->change(_currentSymbolIndex + 12, _currentSymbolIndex == (int)getSubVar(0x04909A50, _noisySymbolIndex));
+ _changeCurrentSymbol = false;
_countdown1 = 36;
} else {
- _asSymbols[_index3]->hide();
- _flag5 = true;
+ _asSymbols[_symbolPosition]->hide();
+ _changeCurrentSymbol = true;
_countdown1 = 12;
}
}
- if (_flag6 && !isSoundPlaying(0)) {
+ if (_isSolved && !isSoundPlaying(0)) {
leaveScene(1);
}
Scene::update();
@@ -1442,23 +1440,23 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
// TODO: Debug stuff
case 0x2000:
- if (!_flag6) {
- if (_flag5)
- _asSymbols[_index3]->change(_index1 + 12, false);
- _asSymbols[_index3]->stopSymbolSound();
- _index3++;
- if (_index3 >= 12) {
+ if (!_isSolved) {
+ if (_changeCurrentSymbol)
+ _asSymbols[_symbolPosition]->change(_currentSymbolIndex + 12, false);
+ _asSymbols[_symbolPosition]->stopSymbolSound();
+ _symbolPosition++;
+ if (_symbolPosition >= 12) {
if (testVars()) {
playSound(0);
setGlobalVar(0x2C531AF8, 1);
- _flag6 = true;
+ _isSolved = true;
} else {
- _index3 = 0;
+ _symbolPosition = 0;
for (int i = 0; i < 12; i++)
_asSymbols[i]->hide();
}
}
- _flag5 = true;
+ _changeCurrentSymbol = true;
_countdown1 = 1;
}
break;
@@ -1468,6 +1466,8 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
bool Scene1609::testVars() {
int index1 = 0;
+
+ // Find the position of the first symbol
do {
int cmpIndex = _asSymbols[0]->getIndex();
if (!_asSymbols[0]->getFlag1())
@@ -1476,17 +1476,20 @@ bool Scene1609::testVars() {
break;
index1++;
} while(1);
+
+ // Check if the entered symbols match
for (int index2 = 0; index2 < 12; index2++) {
int cmpIndex = _asSymbols[index2]->getIndex();
if (!_asSymbols[index2]->getFlag1())
cmpIndex -= 12;
if ((int)getSubVar(0x04909A50, index1) != cmpIndex)
return false;
- _index1++;
- if (_index1 >= 12)
- _index1 = 0;
- _index2++;
+ index1++;
+ if (index1 >= 12)
+ index1 = 0;
+ index2++;
}
+
return true;
}
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index b5b8e6b..ec31b68 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -41,10 +41,10 @@ protected:
void updateScene();
};
-class Class521 : public AnimatedSprite {
+class AsCommonCar : public AnimatedSprite {
public:
- Class521(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
- ~Class521();
+ AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
+ ~AsCommonCar();
void setPathPoints(NPointArray *pathPoints);
protected:
Scene *_parentScene;
@@ -105,33 +105,33 @@ protected:
void sub45E0A0();
};
-class Class546 : public AnimatedSprite {
+class AsScene1608Door : public AnimatedSprite {
public:
- Class546(NeverhoodEngine *vm, Scene *parentScene);
+ AsScene1608Door(NeverhoodEngine *vm, Scene *parentScene);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub44D710();
- void sub44D760();
- void sub44D790();
- void sub44D7F0();
+ void stOpenDoor();
+ void stOpenDoorDone();
+ void stCloseDoor();
+ void stCloseDoorDone();
};
-class Class547 : public AnimatedSprite {
+class AsScene1608IdleCarLower : public AnimatedSprite {
public:
- Class547(NeverhoodEngine *vm, int16 x, int16 y);
+ AsScene1608IdleCarLower(NeverhoodEngine *vm, int16 x, int16 y);
};
-class Class548 : public AnimatedSprite {
+class AsScene1608IdleCarFull : public AnimatedSprite {
public:
- Class548(NeverhoodEngine *vm, int16 x, int16 y);
+ AsScene1608IdleCarFull(NeverhoodEngine *vm, int16 x, int16 y);
};
-class Class518 : public AnimatedSprite {
+class AsCommonCarConnector : public AnimatedSprite {
public:
- Class518(NeverhoodEngine *vm, Class521 *class521);
+ AsCommonCarConnector(NeverhoodEngine *vm, AsCommonCar *asCar);
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
void update();
};
@@ -140,34 +140,34 @@ public:
Scene1608(NeverhoodEngine *vm, Module *parentModule, int which);
~Scene1608();
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
Sprite *_class545;
- Sprite *_class546;
- Sprite *_class547;
- Sprite *_class548;
+ Sprite *_asDoor;
+ Sprite *_asIdleCarLower;
+ Sprite *_asIdleCarFull;
Sprite *_sprite1;
Sprite *_sprite2;
Sprite *_sprite3;
Sprite *_asTape;
- Klayman *_klayman2;
+ Klayman *_kmScene1608;
NRect _rect1;
NRect _rect2;
NRect _rect3;
- int _flag1;
- bool _flag2;
- bool _flag3;
- bool _flag4;
+ int _carStatus;
+ bool _carClipFlag;
+ bool _klaymanInCar;
int _countdown1;
NPointArray *_roomPathPoints;
- void update44CE90();
- void update44CED0();
- void update44CFE0();
- void update44D0C0();
- void update44D1E0();
- uint32 handleMessage44D2A0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage44D3C0(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage44D470(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage44D510(int messageNum, const MessageParam ¶m, Entity *sender);
+ void upLowerFloor();
+ void upUpperFloor();
+ void upCarAtHome();
+ void upGettingOutOfCar();
+ void upRidingCar();
+ uint32 hmLowerFloor(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmUpperFloor(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender);
+ void updateKlaymanCliprect();
};
class Scene1609 : public Scene {
@@ -176,12 +176,12 @@ public:
protected:
Sprite *_ssButton;
AsScene3011Symbol *_asSymbols[12];
- int _index1;
- int _index2;
- int _index3;
+ int _currentSymbolIndex;
+ int _noisySymbolIndex;
+ int _symbolPosition;
int _countdown1;
- bool _flag5;
- bool _flag6;
+ bool _changeCurrentSymbol;
+ bool _isSolved;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
bool testVars();
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index cc0dda9..26d0d88 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -249,7 +249,7 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_class437 = createSprite<Class437>(0x99BE9015); // Don't add this to the sprite list
addEntity(_class437);
- _class521 = createSprite<Class521>(this, 211, 400); // Create but don't add to the sprite list yet
+ _asCar = createSprite<AsCommonCar>(this, 211, 400); // Create but don't add to the sprite list yet
_class541 = insertSprite<Class541>(211, 400);
_class542 = insertSprite<Class542>(211, 400);
insertStaticSprite(0xC42AC521, 1500);
@@ -262,11 +262,11 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B2608);
SetMessageHandler(&Scene2501::handleMessage);
SetUpdateHandler(&Scene2501::update);
- sendMessage(_class521, 0x2009, 0);
- _class521->setVisible(false);
+ sendMessage(_asCar, 0x2009, 0);
+ _asCar->setVisible(false);
_currTrackIndex = 0;
} else if (which == 1 || which == 2) {
- addSprite(_class521);
+ addSprite(_asCar);
_kmScene2501 = (Klayman*)new KmScene2501(_vm, this, 275, 393);
_klaymanInCar = true;
sendMessage(_kmScene2501, 0x2000, 1);
@@ -284,33 +284,33 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B2608);
SetMessageHandler(&Scene2501::handleMessage);
SetUpdateHandler(&Scene2501::update);
- sendMessage(_class521, 0x2009, 0);
- _class521->setVisible(false);
+ sendMessage(_asCar, 0x2009, 0);
+ _asCar->setVisible(false);
_currTrackIndex = 0;
}
- _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
- insertSprite<Class518>(_class521);
+ _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
+ insertSprite<AsCommonCarConnector>(_asCar);
_pointListsCount = 3;
_newTrackIndex = -1;
_dataResource.load(calcHash("Ashooded"));
_trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (which >= 0 && _sceneInfos[_currTrackIndex]->which2 == which) {
NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
- sendMessage(_class521, 0x2007, 150);
+ sendMessage(_asCar, 0x2007, 150);
} else {
NPoint testPoint = (*_trackPoints)[0];
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
- sendMessage(_class521, 0x2008, 150);
+ sendMessage(_asCar, 0x2008, 150);
}
_carStatus = 0;
@@ -322,23 +322,23 @@ Scene2501::~Scene2501() {
if (_klaymanInCar)
delete _kmScene2501;
else
- delete _class521;
+ delete _asCar;
}
void Scene2501::update() {
Scene::update();
if (_carStatus == 1) {
removeSprite(_klayman);
- addSprite(_class521);
+ addSprite(_asCar);
clearRectList();
_klaymanInCar = true;
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
_class541->setVisible(false);
_class542->setVisible(false);
- _class521->setVisible(true);
- sendMessage(_class521, 0x2009, 0);
- _class521->handleUpdate();
+ _asCar->setVisible(true);
+ sendMessage(_asCar, 0x2009, 0);
+ _asCar->handleUpdate();
_klayman = NULL;
_carStatus = 0;
}
@@ -348,8 +348,8 @@ void Scene2501::update() {
void Scene2501::upCarAtHome() {
Scene::update();
if (_mouseClicked) {
- if (_mouseClickPos.x <= 210 && _class521->getX() == 211 && _class521->getY() == 400) {
- sendMessage(_class521, 0x200A, 0);
+ if (_mouseClickPos.x <= 210 && _asCar->getX() == 211 && _asCar->getY() == 400) {
+ sendMessage(_asCar, 0x200A, 0);
SetUpdateHandler(&Scene2501::upGettingOutOfCar);
} else {
findClosestTrack(_mouseClickPos);
@@ -365,7 +365,7 @@ void Scene2501::upGettingOutOfCar() {
Scene::update();
if (_carStatus == 2) {
_klayman = _kmScene2501;
- removeSprite(_class521);
+ removeSprite(_asCar);
addSprite(_klayman);
_klaymanInCar = false;
SetMessageHandler(&Scene2501::handleMessage);
@@ -373,7 +373,7 @@ void Scene2501::upGettingOutOfCar() {
setRectList(0x004B2608);
_class541->setVisible(true);
_class542->setVisible(true);
- _class521->setVisible(false);
+ _asCar->setVisible(false);
setMessageList(0x004B2570);
runMessageList();
_klayman->handleUpdate();
@@ -413,7 +413,7 @@ uint32 Scene2501::hmRidingCar(int messageNum, const MessageParam ¶m, Entity
} else if (_sceneInfos[_currTrackIndex]->which1 == 0) {
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
- sendMessage(_class521, 0x200F, 1);
+ sendMessage(_asCar, 0x200F, 1);
} else if (_sceneInfos[_currTrackIndex]->which1 > 0) {
leaveScene(_sceneInfos[_currTrackIndex]->which1);
}
@@ -424,7 +424,7 @@ uint32 Scene2501::hmRidingCar(int messageNum, const MessageParam ¶m, Entity
} else if (_sceneInfos[_currTrackIndex]->which2 == 0) {
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
- sendMessage(_class521, 0x200F, 1);
+ sendMessage(_asCar, 0x200F, 1);
} else if (_sceneInfos[_currTrackIndex]->which2 > 0) {
leaveScene(_sceneInfos[_currTrackIndex]->which2);
}
@@ -452,13 +452,13 @@ uint32 Scene2501::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity
void Scene2501::changeTrack() {
_currTrackIndex = _newTrackIndex;
_trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (_currTrackIndex == 0) {
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
} else {
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
}
- sendPointMessage(_class521, 0x2004, _clickPoint);
+ sendPointMessage(_asCar, 0x2004, _clickPoint);
_newTrackIndex = -1;
}
@@ -482,12 +482,12 @@ void Scene2501::findClosestTrack(NPoint &pt) {
_newTrackIndex = minMatchTrackIndex;
_clickPoint = pt;
if (_currTrackIndex == 0)
- sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
else
- sendMessage(_class521, 0x2003, 0);
+ sendMessage(_asCar, 0x2003, 0);
} else {
_newTrackIndex = -1;
- sendMessage(_class521, 0x2004, pt);
+ sendMessage(_asCar, 0x2004, pt);
}
}
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index fb61ba5..e5b9157 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -61,7 +61,7 @@ public:
Scene2501(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Scene2501();
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
Sprite *_class437;
Sprite *_class517;
Sprite *_class519;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index f9a5c2a..7c93aa7 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -523,8 +523,8 @@ Class437::Class437(NeverhoodEngine *vm, uint32 fileHash)
StaticSprite::update();
}
-Class517::Class517(NeverhoodEngine *vm, AnimatedSprite *class521, BaseSurface *shadowSurface, uint index)
- : AnimatedSprite(vm, 1100), _class521(class521), _index(index), _animFileHash(0) {
+Class517::Class517(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index)
+ : AnimatedSprite(vm, 1100), _asCar(asCar), _index(index), _animFileHash(0) {
SetUpdateHandler(&Class517::update);
createShadowSurface(shadowSurface, 320, 240, 100); // TODO Use actual dimensions from resource
@@ -537,28 +537,28 @@ void Class517::update() {
}
void Class517::updateShadow() {
- if (_class521->getFrameIndex() != _currFrameIndex || _class521->getCurrAnimFileHash() != _animFileHash) {
- uint32 fileHash = _class521->getCurrAnimFileHash();
+ if (_asCar->getFrameIndex() != _currFrameIndex || _asCar->getCurrAnimFileHash() != _animFileHash) {
+ uint32 fileHash = _asCar->getCurrAnimFileHash();
if (fileHash == 0x35698F78 || fileHash == 0x192ADD30 || fileHash == 0x9C220DA4 ||
fileHash == 0x9966B138 || fileHash == 0xB579A77C || fileHash == 0xA86A9538 ||
fileHash == 0xD4220027 || fileHash == 0xD00A1364 || fileHash == 0xD4AA03A4 ||
fileHash == 0xF46A0324) {
- startAnimation(fileHash, _class521->getFrameIndex(), -1);
- _newStickFrameIndex = _class521->getFrameIndex();
+ startAnimation(fileHash, _asCar->getFrameIndex(), -1);
+ _newStickFrameIndex = _asCar->getFrameIndex();
}
_animFileHash = fileHash;
}
- _x = _class521->getX() + kClass517Points[_index].x;
- _y = _class521->getY() + kClass517Points[_index].y;
- if (!_class521->getVisible()) {
+ _x = _asCar->getX() + kClass517Points[_index].x;
+ _y = _asCar->getY() + kClass517Points[_index].y;
+ if (!_asCar->getVisible()) {
startAnimation(0x1209E09F, 0, -1);
_newStickFrameIndex = 0;
}
- setDoDeltaX(_class521->isDoDeltaX() ? 1 : 0);
+ setDoDeltaX(_asCar->isDoDeltaX() ? 1 : 0);
}
-Class519::Class519(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, uint index)
- : AnimatedSprite(vm, 1100), _class521(class521), _index(index) {
+Class519::Class519(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index)
+ : AnimatedSprite(vm, 1100), _asCar(asCar), _index(index) {
SetUpdateHandler(&Class519::update);
createShadowSurface1(shadowSurface, 0x60281C10, 150);
@@ -567,13 +567,13 @@ Class519::Class519(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSur
}
void Class519::update() {
- _x = _class521->getX() + kClass517Points[_index].x;
- _y = _class521->getY() + kClass517Points[_index].y;
+ _x = _asCar->getX() + kClass517Points[_index].x;
+ _y = _asCar->getY() + kClass517Points[_index].y;
AnimatedSprite::update();
}
-Class520::Class520(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, int16 frameIndex)
- : AnimatedSprite(vm, 1100), _class521(class521) {
+Class520::Class520(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex)
+ : AnimatedSprite(vm, 1100), _asCar(asCar) {
SetUpdateHandler(&Class520::update);
createShadowSurface1(shadowSurface, 0x0759129C, 100);
@@ -582,8 +582,8 @@ Class520::Class520(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSur
}
void Class520::update() {
- _x = _class521->getX();
- _y = _class521->getY();
+ _x = _asCar->getX();
+ _y = _asCar->getY();
AnimatedSprite::update();
}
@@ -613,43 +613,43 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
_class437 = createSprite<Class437>(sceneInfo->class437Filename);
addEntity(_class437);
- _class521 = insertSprite<Class521>(this, 320, 240);
- _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
+ _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
} else {
_class437 = NULL;
- _class521 = insertSprite<Class521>(this, 320, 240);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
}
- _class518 = insertSprite<Class518>(_class521);
+ _asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
_dataResource.load(sceneInfo->dataResourceFilename);
_trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (which == _which2) {
NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
- sendMessage(_class521, 0x2007, 150);
+ sendMessage(_asCar, 0x2007, 150);
} else {
NPoint testPoint = (*_trackPoints)[0];
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
- sendMessage(_class521, 0x2008, 150);
+ sendMessage(_asCar, 0x2008, 150);
}
- _class521->setClipRect(clipRect);
- _class518->setClipRect(clipRect);
+ _asCar->setClipRect(clipRect);
+ _asCarConnector->setClipRect(clipRect);
if (which == 1) {
SetMessageHandler(&Scene2701::handleMessage42F500);
} else {
- sendMessage(_class521, 0x2009, 0);
+ sendMessage(_asCar, 0x2009, 0);
SetMessageHandler(&Scene2701::handleMessage42F600);
}
@@ -659,7 +659,7 @@ uint32 Scene2701::handleMessage42F500(int messageNum, const MessageParam ¶m,
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- sendPointMessage(_class521, 0x2004, param.asPoint());
+ sendPointMessage(_asCar, 0x2004, param.asPoint());
break;
case 0x2005:
if (_which1 >= 0)
@@ -683,7 +683,7 @@ uint32 Scene2701::handleMessage42F600(int messageNum, const MessageParam ¶m,
if (param.asPoint().x >= 385) {
leaveScene(0);
} else {
- sendPointMessage(_class521, 0x2004, param.asPoint());
+ sendPointMessage(_asCar, 0x2004, param.asPoint());
SetMessageHandler(&Scene2701::handleMessage42F500);
}
break;
@@ -723,11 +723,11 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
_class437 = createSprite<Class437>(0x12002035);
addEntity(_class437);
- _class521 = insertSprite<Class521>(this, 320, 240);
- _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- insertSprite<Class518>(_class521);
- _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
+ _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ insertSprite<AsCommonCarConnector>(_asCar);
+ _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
_dataResource.load(0x04310014);
@@ -761,14 +761,14 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
}
_trackPoints = _dataResource.getPointArray(_currSceneInfos[_currTrackIndex]->pointListName);
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (which == _currSceneInfos[_currTrackIndex]->which2) {
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
- sendMessage(_class521, 0x2007, 150);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2007, 150);
} else {
- sendMessage(_class521, 0x2002, 0);
- sendMessage(_class521, 0x2008, 150);
+ sendMessage(_asCar, 0x2002, 0);
+ sendMessage(_asCar, 0x2008, 150);
}
_palette->copyBasePalette(0, 256, 0);
@@ -777,13 +777,13 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene2702::update() {
Scene::update();
- if (_flag1 && _class521->getX() > 422) {
+ if (_flag1 && _asCar->getX() > 422) {
debug("fade #1");
_palette->addBasePalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addBasePalette(calcHash("paKlayShade"), 0, 65, 0);
_palette->startFadeToPalette(12);
_flag1 = false;
- } else if (!_flag1 && _class521->getX() <= 422) {
+ } else if (!_flag1 && _asCar->getX() <= 422) {
debug("fade #2");
_palette->addBasePalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addBasePalette(calcHash("paKlayFloor"), 0, 65, 0);
@@ -839,35 +839,35 @@ void Scene2702::findClosestTrack(NPoint pt) {
_newTrackDestX = pt.x;
if (_currSceneInfos == _sceneInfos[0]) {
if (_currTrackIndex == 0)
- sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
else
- sendMessage(_class521, 0x2003, 0);
+ sendMessage(_asCar, 0x2003, 0);
} else if (_currTrackIndex == 2) {
- sendMessage(_class521, 0x2003, 0);
+ sendMessage(_asCar, 0x2003, 0);
} else {
- sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
}
} else {
_newTrackIndex = -1;
- sendMessage(_class521, 0x2004, pt.x);
+ sendMessage(_asCar, 0x2004, pt.x);
}
}
void Scene2702::changeTrack() {
_currTrackIndex = _newTrackIndex;
_trackPoints = _dataResource.getPointArray(_currSceneInfos[_currTrackIndex]->pointListName);
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (_currSceneInfos == _sceneInfos[0]) {
if (_currTrackIndex == 0)
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
else
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
} else if (_currTrackIndex == 2) {
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
} else {
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
}
- sendMessage(_class521, 0x2004, _newTrackDestX);
+ sendMessage(_asCar, 0x2004, _newTrackDestX);
_newTrackIndex = -1;
}
@@ -900,56 +900,56 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_class437 = createSprite<Class437>(sceneInfo->class437Filename);
addEntity(_class437);
- _class521 = insertSprite<Class521>(this, 320, 240);
- _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
+ _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
} else {
_class437 = NULL;
_class517 = NULL;
- _class521 = insertSprite<Class521>(this, 320, 240);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
}
- _class518 = insertSprite<Class518>(_class521);
+ _asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
_dataResource.load(sceneInfo->dataResourceFilename);
_trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (sceneInfo->rectListName) {
_rectList = _dataResource.getRectArray(sceneInfo->rectListName);
- // TODO _class521->setPathRects(_rectList);
+ // TODO _asCar->setPathRects(_rectList);
}
if (which == _which2) {
NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
- sendMessage(_class521, 0x2009, 0);
+ sendMessage(_asCar, 0x2009, 0);
else
- sendMessage(_class521, 0x2007, 0);
+ sendMessage(_asCar, 0x2007, 0);
} else {
NPoint testPoint = (*_trackPoints)[0];
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
- sendMessage(_class521, 0x2009, 0);
+ sendMessage(_asCar, 0x2009, 0);
else
- sendMessage(_class521, 0x2008, 0);
+ sendMessage(_asCar, 0x2008, 0);
}
if (clipRect) {
- _class521->getClipRect() = *clipRect;
+ _asCar->getClipRect() = *clipRect;
if (_class517)
_class517->getClipRect() = *clipRect;
if (_class520)
_class520->getClipRect() = *clipRect;
if (_class519)
_class519->getClipRect() = *clipRect;
- if (_class518)
- _class518->getClipRect() = *clipRect;
+ if (_asCarConnector)
+ _asCarConnector->getClipRect() = *clipRect;
}
}
@@ -957,7 +957,7 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
void Scene2704::update() {
Scene::update();
if (_mouseClicked) {
- sendPointMessage(_class521, 0x2004, _mouseClickPos);
+ sendPointMessage(_asCar, 0x2004, _mouseClickPos);
_mouseClicked = false;
}
}
@@ -1004,11 +1004,11 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
_class437 = createSprite<Class437>(0x18808B88);
addEntity(_class437);
- _class521 = insertSprite<Class521>(this, 320, 240);
- _class517 = insertSprite<Class517>(_class521, _class437->getSurface(), 4);
- _class518 = insertSprite<Class518>(_class521);
- _class520 = insertSprite<Class520>(_class521, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_class521, _class437->getSurface(), 4);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
+ _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ _asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
+ _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
+ _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
_dataResource.load(0x06000162);
@@ -1020,20 +1020,20 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
_currTrackIndex = 0;
_trackPoints = _dataResource.getPointArray(calcHash(kSceneInfo2706[_currTrackIndex].pointListName));
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (which == kSceneInfo2706[_currTrackIndex].which2) {
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
if (which == 5)
- sendMessage(_class521, 0x2007, 50);
+ sendMessage(_asCar, 0x2007, 50);
else
- sendMessage(_class521, 0x2007, 150);
+ sendMessage(_asCar, 0x2007, 150);
} else {
- sendMessage(_class521, 0x2002, 0);
+ sendMessage(_asCar, 0x2002, 0);
if (which == 5)
- sendMessage(_class521, 0x2008, 50);
+ sendMessage(_asCar, 0x2008, 50);
else
- sendMessage(_class521, 0x2008, 150);
+ sendMessage(_asCar, 0x2008, 150);
}
}
@@ -1084,24 +1084,24 @@ void Scene2706::findClosestTrack(NPoint pt) {
_newTrackIndex = minMatchTrackIndex;
_newTrackDestX = pt.x;
if (_currTrackIndex == 0)
- sendMessage(_class521, 0x2003, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
else
- sendMessage(_class521, 0x2003, 0);
+ sendMessage(_asCar, 0x2003, 0);
} else {
_newTrackIndex = -1;
- sendMessage(_class521, 0x2004, pt.x);
+ sendMessage(_asCar, 0x2004, pt.x);
}
}
void Scene2706::changeTrack() {
_currTrackIndex = _newTrackIndex;
_trackPoints = _dataResource.getPointArray(calcHash(kSceneInfo2706[_currTrackIndex].pointListName));
- _class521->setPathPoints(_trackPoints);
+ _asCar->setPathPoints(_trackPoints);
if (_currTrackIndex == 0)
- sendMessage(_class521, 0x2002, _trackPoints->size() - 1);
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
else
- sendMessage(_class521, 0x2002, 0);
- sendMessage(_class521, 0x2004, _newTrackDestX);
+ sendMessage(_asCar, 0x2002, 0);
+ sendMessage(_asCar, 0x2004, _newTrackDestX);
_newTrackIndex = -1;
}
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index 70c1a80..b2210c5 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -56,10 +56,10 @@ public:
class Class517 : public AnimatedSprite {
public:
- Class517(NeverhoodEngine *vm, AnimatedSprite *class521, BaseSurface *shadowSurface, uint index);
+ Class517(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index);
protected:
uint _index;
- AnimatedSprite *_class521;
+ AnimatedSprite *_asCar;
uint32 _animFileHash;
void update();
void updateShadow();
@@ -67,18 +67,18 @@ protected:
class Class519 : public AnimatedSprite {
public:
- Class519(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, uint index);
+ Class519(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index);
protected:
uint _index;
- Sprite *_class521;
+ Sprite *_asCar;
void update();
};
class Class520 : public AnimatedSprite {
public:
- Class520(NeverhoodEngine *vm, Sprite *class521, BaseSurface *shadowSurface, int16 frameIndex);
+ Class520(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex);
protected:
- Sprite *_class521;
+ Sprite *_asCar;
void update();
};
@@ -86,12 +86,12 @@ class Scene2701 : public Scene {
public:
Scene2701(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
Sprite *_class437;
Sprite *_class517;
Sprite *_class520;
Sprite *_class519;
- Sprite *_class518;
+ Sprite *_asCarConnector;
Sprite *_sprite1;
int _which1, _which2;
NPointArray *_trackPoints;
@@ -103,7 +103,7 @@ class Scene2702 : public Scene {
public:
Scene2702(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
Sprite *_class437;
Sprite *_class517;
Sprite *_class520;
@@ -126,10 +126,10 @@ public:
Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
Sprite *_class437;
Sprite *_class517;
- Sprite *_class518;
+ Sprite *_asCarConnector;
Sprite *_class520;
Sprite *_class519;
int _which1, _which2;
@@ -143,10 +143,10 @@ class Scene2706 : public Scene {
public:
Scene2706(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Class521 *_class521;
+ AsCommonCar *_asCar;
Sprite *_class437;
Sprite *_class517;
- Sprite *_class518;
+ Sprite *_asCarConnector;
Sprite *_class520;
Sprite *_class519;
int16 _newTrackDestX;
Commit: 2fa76ccca14a50588f6c69e39c67f1cae187c9b3
https://github.com/scummvm/scummvm/commit/2fa76ccca14a50588f6c69e39c67f1cae187c9b3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:47-07:00
Commit Message:
NEVERHOOD: Work on Module1700:
- Rename stuff
- Add puzzle var initialization in Scene1705
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1700.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index df001c4..edc9b55 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,8 +309,8 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 8;
- createModule(1600, -1);
+ _vm->gameState().sceneNum = 4;
+ createModule(1700, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index f914fa9..b75167f 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/module1700.h"
+#include "neverhood/gamemodule.h"
namespace Neverhood {
@@ -139,19 +140,19 @@ static const uint32 kScene1705FileHashes[] = {
0x910EA800
};
-Class602::Class602(NeverhoodEngine *vm, uint32 fileHash, int index)
+SsScene1705WallSymbol::SsScene1705WallSymbol(NeverhoodEngine *vm, uint32 fileHash, int symbolIndex)
: StaticSprite(vm, fileHash, 100) {
- _x = _spriteResource.getPosition().x + index * 30;
+ _x = _spriteResource.getPosition().x + symbolIndex * 30;
_y = _spriteResource.getPosition().y + 160;
StaticSprite::update();
}
-Class606::Class606(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y, uint32 fileHash)
- : StaticSprite(vm, fileHash, surfacePriority, x - 24, y - 4), _parentScene(parentScene), _index(index) {
+SsScene1705Tape::SsScene1705Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 tapeIndex, int surfacePriority, int16 x, int16 y, uint32 fileHash)
+ : StaticSprite(vm, fileHash, surfacePriority, x - 24, y - 4), _parentScene(parentScene), _tapeIndex(tapeIndex) {
- if (!getSubVar(0x02038314, _index) && !getSubVar(0x02720344, _index)) {
- SetMessageHandler(&Class606::handleMessage);
+ if (!getSubVar(0x02038314, _tapeIndex) && !getSubVar(0x02720344, _tapeIndex)) {
+ SetMessageHandler(&SsScene1705Tape::handleMessage);
} else {
setVisible(false);
SetMessageHandler(NULL);
@@ -164,7 +165,7 @@ Class606::Class606(NeverhoodEngine *vm, Scene *parentScene, int index, int surfa
Sprite::processDelta();
}
-uint32 Class606::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene1705Tape::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -172,7 +173,7 @@ uint32 Class606::handleMessage(int messageNum, const MessageParam ¶m, Entity
messageResult = 1;
break;
case 0x4806:
- setSubVar(0x02038314, _index, 1);
+ setSubVar(0x02038314, _tapeIndex, 1);
setVisible(false);
SetMessageHandler(NULL);
break;
@@ -186,7 +187,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
setGlobalVar(0xE7498218, 1);
- // TODO _vm->initVarsScene1705();
+ _vm->gameModule()->initScene3009Vars();
SetMessageHandler(&Scene1705::handleMessage);
SetUpdateHandler(&Scene1705::update);
@@ -204,16 +205,14 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x18222039);
- insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0);
- insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1);
- insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2);
+ insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0);
+ insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1);
+ insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2);
_sprite = insertStaticSprite(0x31313A22, 1100);
- _class606 = insertSprite<Class606>(this, 15, 1100, 238, 439, 0x02363852);
- _vm->_collisionMan->addSprite(_class606);
-
- which = 4;
+ _ssTape = insertSprite<SsScene1705Tape>(this, 15, 1100, 238, 439, 0x02363852);
+ _vm->_collisionMan->addSprite(_ssTape);
if (which < 0) {
insertKlayman<KmScene1705>(231, 434);
@@ -275,7 +274,7 @@ uint32 Scene1705::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4826:
- if (sender == _class606 && _klayman->getX() <= 318) {
+ if (sender == _ssTape && _klayman->getX() <= 318) {
sendEntityMessage(_klayman, 0x1014, sender);
setMessageList(0x004B6AC0);
}
diff --git a/engines/neverhood/module1700.h b/engines/neverhood/module1700.h
index 2488c46..c0ec9e5 100644
--- a/engines/neverhood/module1700.h
+++ b/engines/neverhood/module1700.h
@@ -41,17 +41,17 @@ protected:
// Scene1705
-class Class602 : public StaticSprite {
+class SsScene1705WallSymbol : public StaticSprite {
public:
- Class602(NeverhoodEngine *vm, uint32 fileHash, int index);
+ SsScene1705WallSymbol(NeverhoodEngine *vm, uint32 fileHash, int symbolIndex);
};
-class Class606 : public StaticSprite {
+class SsScene1705Tape : public StaticSprite {
public:
- Class606(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y, uint32 fileHash);
+ SsScene1705Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 tapeIndex, int surfacePriority, int16 x, int16 y, uint32 fileHash);
protected:
Scene *_parentScene;
- int _index;
+ uint32 _tapeIndex;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -60,7 +60,7 @@ public:
Scene1705(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
Sprite *_sprite;
- Sprite *_class606;
+ Sprite *_ssTape;
int _paletteArea;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 7a35ddd..2038548 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -422,7 +422,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2 = insertStaticSprite(0x061601C8, 1100);
_klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
insertMouse433(0x00680116);
- _asTape = insertSprite<Class606>(this, 8, 1100, 302, 437, 0x01142428);
+ _asTape = insertSprite<SsScene1705Tape>(this, 8, 1100, 302, 437, 0x01142428);
_vm->_collisionMan->addSprite(_asTape);
} else {
setRectList(0x004B6CF0);
@@ -2991,8 +2991,8 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_class545);
}
- _class606 = insertSprite<Class606>(this, 6, 1100, 513, 437, 0xA1361863);
- _vm->_collisionMan->addSprite(_class606);
+ _ssTape = insertSprite<SsScene1705Tape>(this, 6, 1100, 513, 437, 0xA1361863);
+ _vm->_collisionMan->addSprite(_ssTape);
_asWinch = insertSprite<AsScene2812Winch>();
_asTrapDoor = insertSprite<AsScene2812TrapDoor>();
@@ -3068,8 +3068,8 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asTrapDoor, 0x2000, 0);
break;
case 0x4826:
- if (sender == _class606 && !_flag1) {
- sendEntityMessage(_klayman, 0x1014, _class606);
+ if (sender == _ssTape && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _ssTape);
setMessageList(0x004AF658);
} else if (sender == _class545 && !_flag1) {
sendEntityMessage(_klayman, 0x1014, _class545);
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index b5827bf..1027a6f 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -461,7 +461,7 @@ protected:
Sprite *_sprite3;
Sprite *_sprite2;
Sprite *_sprite4;
- Sprite *_class606;
+ Sprite *_ssTape;
Sprite *_class545;
Sprite *_sprite1;
bool _flag1;
Commit: 8a9ca493b63cbb81b968fc3db57a957e677846ba
https://github.com/scummvm/scummvm/commit/8a9ca493b63cbb81b968fc3db57a957e677846ba
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:48-07:00
Commit Message:
NEVERHOOD: Rename stuff in several modules
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
engines/neverhood/module1800.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module1900.h
engines/neverhood/module2000.cpp
engines/neverhood/module2000.h
engines/neverhood/module2100.cpp
engines/neverhood/module2100.h
engines/neverhood/module2400.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index edc9b55..d132105 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,8 +309,8 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 4;
- createModule(1700, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(2100, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 88b576ac3..e5c25ca 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -645,7 +645,7 @@ void AsCommonProjector::stStartSuckedIn() {
}
Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _projectorBorderFlag(false), _class427(NULL), _asProjector(NULL),
+ : Scene(vm, parentModule, true), _projectorBorderFlag(false), _ssFloorButton(NULL), _asProjector(NULL),
_asPipe(NULL), _asMouse(NULL), _asCheese(NULL), _asBackDoor(NULL),
_sprite1(NULL), _sprite2(NULL), _sprite3(NULL), _ssButton(NULL) {
@@ -658,7 +658,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x08221FA5);
insertMouse433(0x21FA108A);
- _class427 = insertSprite<Class427>(this, 0x980F3124, 0x12192892, 100, 0);
+ _ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x980F3124, 0x12192892, 100, 0);
_asPipe = insertSprite<AsScene1401Pipe>();
if (!getGlobalVar(0x01023818)) {
@@ -733,7 +733,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02144CB1) {
- sendEntityMessage(_klayman, 0x1014, _class427);
+ sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
} else if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x01C66840) {
@@ -752,7 +752,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480B:
- if (sender == _class427) {
+ if (sender == _ssFloorButton) {
sendMessage(_asPipe, 0x2000, 0);
if (!getGlobalVar(0x01023818)) {
sendMessage(_asMouse, 0x4839, 0);
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 8cabc99..437632d 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -131,7 +131,7 @@ public:
Scene1401(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
bool _projectorBorderFlag;
- Sprite *_class427;
+ Sprite *_ssFloorButton;
AsCommonProjector *_asProjector;
Sprite *_asPipe;
Sprite *_asMouse;
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 14c4868..4335595 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -156,6 +156,7 @@ void Module1800::updateScene() {
leaveModule(3);
break;
case 8:
+ // NOTE: After Klayman jumped into the hole and died...
leaveModule(1);
// TODO GameState stuff
break;
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 77f031b..5bb03d4 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -533,7 +533,7 @@ void AsScene1907WaterHint::update() {
AnimatedSprite::updatePosition();
}
-uint32 AsScene1907WaterHint::handleMessage46BA20(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene1907WaterHint::hmShowing(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -546,7 +546,7 @@ uint32 AsScene1907WaterHint::handleMessage46BA20(int messageNum, const MessagePa
void AsScene1907WaterHint::show() {
setVisible(true);
startAnimation(0x110A1061, 0, -1);
- SetMessageHandler(&AsScene1907WaterHint::handleMessage46BA20);
+ SetMessageHandler(&AsScene1907WaterHint::hmShowing);
NextState(&AsScene1907WaterHint::hide);
}
@@ -561,9 +561,6 @@ Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
_moveDownCountdown(0), _moveUpCountdown(0), _countdown3(0), _hasPlugInFailed(false) {
_surfaceFlag = true;
-
- //setGlobalVar(0x10938830, 1);
-
setBackground(0x20628E05);
setPalette(0x20628E05);
diff --git a/engines/neverhood/module1900.h b/engines/neverhood/module1900.h
index 386d1c9..5f26c9e 100644
--- a/engines/neverhood/module1900.h
+++ b/engines/neverhood/module1900.h
@@ -98,7 +98,7 @@ public:
void show();
protected:
void update();
- uint32 handleMessage46BA20(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmShowing(int messageNum, const MessageParam ¶m, Entity *sender);
void hide();
};
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index d1d6b82..6ff8a40 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -98,6 +98,8 @@ void Module2000::updateScene() {
Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
+ Sprite *tempSprite;
+
_surfaceFlag = true;
SetMessageHandler(&Scene2001::handleMessage);
@@ -105,7 +107,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0xA6417244);
insertMouse433(0x17240A6C);
- _class401 = insertStaticSprite(0x0D641724, 1100);
+ tempSprite = insertStaticSprite(0x0D641724, 1100);
if (which < 0) {
insertKlayman<KmScene2001>(300, 345);
@@ -133,7 +135,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setDoDeltaX(1);
}
- _klayman->setClipRect(_class401->getDrawRect().x, 0, 640, 480);
+ _klayman->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480);
}
diff --git a/engines/neverhood/module2000.h b/engines/neverhood/module2000.h
index 8e741b3..8533092 100644
--- a/engines/neverhood/module2000.h
+++ b/engines/neverhood/module2000.h
@@ -46,7 +46,6 @@ class Scene2001 : public Scene {
public:
Scene2001(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_class401;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 98b6e03..06806c7 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -77,7 +77,7 @@ void Module2100::updateScene() {
// Scene2101
-Class538::Class538(NeverhoodEngine *vm, bool flag)
+AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool flag)
: AnimatedSprite(vm, 1100) {
// TODO createSurface3(100, dword_4B9018);
@@ -85,7 +85,7 @@ Class538::Class538(NeverhoodEngine *vm, bool flag)
_x = 320;
_y = 240;
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class538::handleMessage);
+ SetMessageHandler(&AsScene2101Door::handleMessage);
if (flag) {
startAnimation(0x0C202B9C, -1, -1);
_newStickFrameIndex = -2;
@@ -94,52 +94,52 @@ Class538::Class538(NeverhoodEngine *vm, bool flag)
}
}
-uint32 Class538::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2101Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextState();
break;
case 0x4808:
- openDoor();
+ stOpenDoor();
break;
case 0x4809:
- closeDoor();
+ stCloseDoor();
break;
}
return messageResult;
}
-void Class538::openDoor() {
+void AsScene2101Door::stOpenDoor() {
startAnimation(0x0C202B9C, 0, -1);
_newStickFrameIndex = -2;
setVisible(true);
playSound(0, calcHash("fxDoorOpen32"));
}
-void Class538::closeDoor() {
+void AsScene2101Door::stCloseDoor() {
startAnimation(0xC222A8D4, 0, -1);
_newStickFrameIndex = -2;
setVisible(true);
- NextState(&Class538::hide);
+ NextState(&AsScene2101Door::stCloseDoorDone);
playSound(0, calcHash("fxDoorClose32"));
}
-void Class538::hide() {
+void AsScene2101Door::stCloseDoorDone() {
stopAnimation();
setVisible(false);
}
-Class539::Class539(NeverhoodEngine *vm, Sprite *klayman)
+AsScene2101HitByDoorEffect::AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klayman)
: AnimatedSprite(vm, 1400), _klayman(klayman) {
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class539::handleMessage);
+ SetMessageHandler(&AsScene2101HitByDoorEffect::handleMessage);
createSurface(1200, 88, 165);
setVisible(false);
}
-uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2101HitByDoorEffect::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2001:
@@ -156,12 +156,12 @@ uint32 Class539::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-Class427::Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
+SsCommonFloorButton::SsCommonFloorButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
: StaticSprite(vm, 1100), _parentScene(parentScene), _countdown(0),
_fileHash1(fileHash1), _fileHash2(fileHash2), _soundFileHash(soundFileHash) {
- SetUpdateHandler(&Class427::update);
- SetMessageHandler(&Class427::handleMessage);
+ SetUpdateHandler(&SsCommonFloorButton::update);
+ SetMessageHandler(&SsCommonFloorButton::handleMessage);
if (_soundFileHash == 0)
_soundFileHash = 0x44141000;
createSurface(1010, 61, 30);
@@ -172,7 +172,7 @@ Class427::Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, ui
setVisible(false);
}
-void Class427::update() {
+void SsCommonFloorButton::update() {
if (_countdown != 0 && (--_countdown == 0)) {
sendMessage(_parentScene, 0x1022, 1010);
if (_fileHash1) {
@@ -183,7 +183,7 @@ void Class427::update() {
}
}
-uint32 Class427::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsCommonFloorButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x480B:
@@ -202,6 +202,8 @@ uint32 Class427::handleMessage(int messageNum, const MessageParam ¶m, Entity
Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
+ Sprite *tempSprite;
+
_surfaceFlag = true;
SetMessageHandler(&Scene2101::handleMessage);
SetUpdateHandler(&Scene2101::update);
@@ -211,8 +213,8 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x4230144A);
insertStaticSprite(0x00502330, 1100);
- _sprite1 = insertStaticSprite(0x78492010, 1100);
- _class427 = insertSprite<Class427>(this, 0x72427010, 0x32423010, 200, 0);
+ tempSprite = insertStaticSprite(0x78492010, 1100);
+ _ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x72427010, 0x32423010, 200, 0);
_asTape1 = insertSprite<AsScene1201Tape>(this, 18, 1100, 412, 443, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape1);
_asTape2 = insertSprite<AsScene1201Tape>(this, 11, 1100, 441, 443, 0x9148A011);
@@ -222,71 +224,71 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2101>(380, 438);
setMessageList(0x004B8E48);
sendMessage(this, 0x2000, 0);
- _class538 = insertSprite<Class538>(false);
- _value1 = 1;
+ _asDoor = insertSprite<AsScene2101Door>(false);
+ _doorStatus = 1;
_countdown1 = 0;
} else if (which == 1) {
insertKlayman<KmScene2101>(640, 438);
setMessageList(0x004B8E50);
sendMessage(this, 0x2000, 0);
- _class538 = insertSprite<Class538>(true);
- _value1 = 2;
+ _asDoor = insertSprite<AsScene2101Door>(true);
+ _doorStatus = 2;
_countdown1 = 48;
} else if (which == 2) {
insertKlayman<KmScene2101>(115, 438);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B8F58);
sendMessage(this, 0x2000, 1);
- _class538 = insertSprite<Class538>(false);
- _value1 = 1;
+ _asDoor = insertSprite<AsScene2101Door>(false);
+ _doorStatus = 1;
_countdown1 = 0;
} else if (which == 3) {
insertKlayman<KmScene2101>(115, 438);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B8EB0);
sendMessage(this, 0x2000, 1);
- _class538 = insertSprite<Class538>(false);
- _value1 = 1;
+ _asDoor = insertSprite<AsScene2101Door>(false);
+ _doorStatus = 1;
_countdown1 = 0;
} else {
insertKlayman<KmScene2101>(115, 438);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B8EA0);
sendMessage(this, 0x2000, 1);
- _class538 = insertSprite<Class538>(false);
- _value1 = 1;
+ _asDoor = insertSprite<AsScene2101Door>(false);
+ _doorStatus = 1;
_countdown1 = 0;
}
- _class539 = insertSprite<Class539>(_klayman);
- _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480);
+ _asHitByDoorEffect = insertSprite<AsScene2101HitByDoorEffect>(_klayman);
+ _klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
}
void Scene2101::update() {
if (_countdown1 != 0) {
- if (_value1 == 2) {
+ if (_doorStatus == 2) {
if (--_countdown1 == 0) {
- sendMessage(_class538, 0x4809, 0);
- _value1 = 1;
+ sendMessage(_asDoor, 0x4809, 0);
+ _doorStatus = 1;
}
} else {
if (_klayman->getX() > 575)
_messageListFlag = false;
if (--_countdown1 == 0) {
if (_klayman->getX() < 480) {
- sendMessage(_class538, 0x4809, 0);
- _value1 = 1;
+ sendMessage(_asDoor, 0x4809, 0);
+ _doorStatus = 1;
} else if (_klayman->getX() >= 480 && _klayman->getX() <= 575) {
_klayman->setDoDeltaX(0);
setMessageList2(0x004B8F48);
- sendMessage(_class538, 0x4809, 0);
- sendMessage(_class539, 0x2001, 0);
- _value1 = 1;
+ sendMessage(_asDoor, 0x4809, 0);
+ sendMessage(_asHitByDoorEffect, 0x2001, 0);
+ _doorStatus = 1;
}
}
}
- } else if (_value1 == 1 && _messageValue >= 0 && _klayman->getX() > 470 /* TODO ! && _messageList2 != 0x004B8F48*/) {
+ } else if (_doorStatus == 1 && _messageValue >= 0 && _klayman->getX() > 470 /* TODO ! && _messageList2 != 0x004B8F48*/) {
setMessageList2(0x004B8F50);
}
Scene::update();
@@ -297,9 +299,9 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02144CB1) {
- sendEntityMessage(_klayman, 0x1014, _class427);
+ sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
} else if (param.asInteger() == 0x21E64A00) {
- if (_value1 == 0) {
+ if (_doorStatus == 0) {
setMessageList(0x004B8E80);
} else {
setMessageList(0x004B8EC8);
@@ -318,9 +320,9 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480B:
- if (sender == _class427 && _value1 == 1) {
- sendMessage(_class538, 0x4808, 0);
- _value1 = 0;
+ if (sender == _ssFloorButton && _doorStatus == 1) {
+ sendMessage(_asDoor, 0x4808, 0);
+ _doorStatus = 0;
_countdown1 = 90;
}
break;
diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h
index ff6898c..4690913 100644
--- a/engines/neverhood/module2100.h
+++ b/engines/neverhood/module2100.h
@@ -41,27 +41,27 @@ protected:
// Scene1901
-class Class538 : public AnimatedSprite {
+class AsScene2101Door : public AnimatedSprite {
public:
- Class538(NeverhoodEngine *vm, bool flag);
+ AsScene2101Door(NeverhoodEngine *vm, bool flag);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void openDoor();
- void closeDoor();
- void hide();
+ void stOpenDoor();
+ void stCloseDoor();
+ void stCloseDoorDone();
};
-class Class539 : public AnimatedSprite {
+class AsScene2101HitByDoorEffect : public AnimatedSprite {
public:
- Class539(NeverhoodEngine *vm, Sprite *klayman);
+ AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klayman);
protected:
Sprite *_klayman;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class427 : public StaticSprite {
+class SsCommonFloorButton : public StaticSprite {
public:
- Class427(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
+ SsCommonFloorButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
protected:
Scene *_parentScene;
uint32 _soundFileHash;
@@ -76,14 +76,13 @@ class Scene2101 : public Scene {
public:
Scene2101(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_sprite1;
- Sprite *_class427;
+ Sprite *_ssFloorButton;
Sprite *_asTape1;
Sprite *_asTape2;
- Sprite *_class538;
- Sprite *_class539;
+ Sprite *_asDoor;
+ Sprite *_asHitByDoorEffect;
int _countdown1;
- int _value1;
+ int _doorStatus;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 5dcfa8d..e2973ec 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -409,7 +409,7 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
_asFlowingWater = insertSprite<AsScene2401FlowingWater>();
insertStaticSprite(0x90C0A4B4, 200);
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x0092916A, 100, 0);
- _ssFloorButton = insertSprite<Class427>(this, 0x28001120, 0x00911068, 100, 0);
+ _ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x28001120, 0x00911068, 100, 0);
for (uint i = 0; i < 5; i++)
_asWaterFlushing[i] = insertSprite<AsScene2401WaterFlushing>(kScene2401Points[i].x, kScene2401Points[i].y);
Commit: 15cfb9f787d577c130beb4d0fc486acd5f6af355
https://github.com/scummvm/scummvm/commit/15cfb9f787d577c130beb4d0fc486acd5f6af355
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:48-07:00
Commit Message:
NEVERHOOD: Implement clipping against multiple clipRects, used only in several scenes for the Klayman sprite.
Currently only implemented in KmScene2201 for testing.
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/klayman.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d132105..174edd3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -310,7 +310,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().sceneNum = 0;
- createModule(2100, -1);
+ createModule(2200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index b1597f2..84aa3d6 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -27,7 +27,8 @@
namespace Neverhood {
BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height)
- : _vm(vm), _priority(priority), _visible(true), _transparent(true) {
+ : _vm(vm), _priority(priority), _visible(true), _transparent(true),
+ _clipRects(NULL), _clipRectsCount(0) {
_drawRect.x = 0;
_drawRect.y = 0;
@@ -52,7 +53,9 @@ BaseSurface::~BaseSurface() {
void BaseSurface::draw() {
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
- if (_sysRect.x == 0 && _sysRect.y == 0) {
+ if (_clipRects && _clipRectsCount) {
+ _vm->_screen->drawSurfaceClipRects(_surface, _drawRect, _clipRects, _clipRectsCount, _transparent);
+ } else if (_sysRect.x == 0 && _sysRect.y == 0) {
_vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent);
} else {
_vm->_screen->drawUnk(_surface, _drawRect, _sysRect, _clipRect, _transparent);
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 3b30b25..57c2250 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -101,6 +101,8 @@ public:
NDrawRect& getSysRect() { return _sysRect; }
NRect& getClipRect() { return _clipRect; }
void setClipRect(NRect clipRect) { _clipRect = clipRect; }
+ void setClipRects(NRect *clipRects, uint clipRectsCount) { _clipRects = clipRects; _clipRectsCount = clipRectsCount; }
+ void clearClipRects() { _clipRects = NULL; _clipRectsCount = 0; }
bool getVisible() const { return _visible; }
void setVisible(bool value) { _visible = value; }
void setTransparent(bool value) { _transparent = value; }
@@ -113,6 +115,8 @@ protected:
NDrawRect _drawRect;
NDrawRect _sysRect;
NRect _clipRect;
+ NRect *_clipRects;
+ uint _clipRectsCount;
bool _transparent;
};
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 93cc49e..82c6114 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -4636,9 +4636,10 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- // TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
+ _surface->setClipRects(clipRects, clipRectsCount);
+
_dataResource.load(0x04104242);
_flagF6 = false;
}
@@ -4831,7 +4832,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- _walkResumeFrameIncr = 1;
+ _walkResumeFrameIncr = 1;
_vm->_soundMan->addSound(0x80101800, 0xD3B02847);
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 4460314..d7991c2 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -526,49 +526,49 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
}
}
- _rect1.y1 = 0;
- _rect1.x2 = 640;
- _rect2.x2 = 640;
- _rect2.y2 = 480;
+ _clipRects[0].y1 = 0;
+ _clipRects[0].x2 = 640;
+ _clipRects[1].x2 = 640;
+ _clipRects[1].y2 = 480;
if (!getGlobalVar(0x404290D5)) {
insertStaticSprite(0x00026027, 900);
}
tempSprite = insertStaticSprite(0x030326A0, 1100);
- _rect1.x1 = tempSprite->getDrawRect().x;
+ _clipRects[0].x1 = tempSprite->getDrawRect().x;
insertStaticSprite(0x811DA061, 1100);
tempSprite = insertStaticSprite(0x11180022, 1100);
- _rect2.x1 = tempSprite->getDrawRect().x;
+ _clipRects[1].x1 = tempSprite->getDrawRect().x;
tempSprite = insertStaticSprite(0x0D411130, 1100);
- _rect1.y2 = tempSprite->getDrawRect().y2();
- _rect2.y1 = tempSprite->getDrawRect().y2();
+ _clipRects[0].y2 = tempSprite->getDrawRect().y2();
+ _clipRects[1].y1 = tempSprite->getDrawRect().y2();
_doorLightSprite = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
- insertKlayman<KmScene2201>(300, 427, &_rect1, 2);
+ insertKlayman<KmScene2201>(300, 427, _clipRects, 2);
setMessageList(0x004B8118);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else if (which == 1) {
- insertKlayman<KmScene2201>(412, 393, &_rect1, 2);
+ insertKlayman<KmScene2201>(412, 393, _clipRects, 2);
setMessageList(0x004B8130);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- insertKlayman<KmScene2201>(379, 427, &_rect1, 2);
+ insertKlayman<KmScene2201>(379, 427, _clipRects, 2);
_klayman->setDoDeltaX(1);
} else {
- insertKlayman<KmScene2201>(261, 427, &_rect1, 2);
+ insertKlayman<KmScene2201>(261, 427, _clipRects, 2);
}
setMessageList(0x004B8178);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
- insertKlayman<KmScene2201>(pt.x, pt.y, &_rect1, 2);
+ insertKlayman<KmScene2201>(pt.x, pt.y, _clipRects, 2);
setMessageList(0x004B8120);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, true);
}
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 53b9469..e869e4c 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -96,8 +96,7 @@ public:
Scene2201(NeverhoodEngine *vm, Module *parentModule, int which);
~Scene2201();
protected:
- NRect _rect1;
- NRect _rect2;
+ NRect _clipRects[2];
Sprite *_doorLightSprite;
Sprite *_asDoor;
Sprite *_ssDoorButton;
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index dfc5358..372c705 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -299,4 +299,10 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
}
+void Screen::drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent) {
+ NDrawRect clipDrawRect(0, 0, drawRect.width, drawRect.height);
+ for (uint i = 0; i < clipRectsCount; i++)
+ drawSurface3(surface, drawRect.x, drawRect.y, clipDrawRect, clipRects[i], transparent);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 07be04c..fe5a254 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -50,6 +50,7 @@ public:
const Graphics::Surface *shadowSurface = NULL);
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent);
+ void drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent);
protected:
NeverhoodEngine *_vm;
Graphics::Surface *_backScreen;
Commit: 9b7bb71dd952c85fea54d6526d9b2aaa1bd0498f
https://github.com/scummvm/scummvm/commit/9b7bb71dd952c85fea54d6526d9b2aaa1bd0498f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:43:48-07:00
Commit Message:
NEVERHOOD: Simplify code and rename things
- Add Module::createStaticScene to simplify creation of static scenes
(and use it in the relevant places)
- Rename Class545 to AsCommonKey and rename related variables
- Rename stuff in Module2200
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1000.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
engines/neverhood/module2500.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 174edd3..ef1b093 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,7 +309,7 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 0;
+ _vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
#if 0
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 5be9a63..1cd6c0d 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -23,6 +23,7 @@
#include "neverhood/module.h"
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
+#include "neverhood/module1000.h"
namespace Neverhood {
@@ -93,6 +94,10 @@ void Module::createSmackerScene(const uint32 *fileHashList, bool doubleSurface,
_childObject = smackerScene;
}
+void Module::createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash) {
+ _childObject = new StaticScene(_vm, this, backgroundFileHash, cursorFileHash);
+}
+
bool Module::updateChild() {
if (_childObject) {
_childObject->handleUpdate();
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 57a42c6..bb01218 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -61,6 +61,7 @@ protected:
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort);
+ void createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash);
bool updateChild();
void leaveModule(uint32 result);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index dce4b8c..878a0e7 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -62,7 +62,7 @@ void Module1000::createScene(int sceneNum, int which) {
break;
case 2:
_vm->_soundMan->startMusic(0x061880C6, 0, 0);
- _childObject = new StaticScene(_vm, this, 0xC084110C, 0x41108C00);
+ createStaticScene(0xC084110C, 0x41108C00);
break;
case 3:
_vm->_soundMan->stopMusic(0x061880C6, 0, 2);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 35132b6..80a210b 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -704,11 +704,11 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xC021006A);
if (getGlobalVar(0xAC00C0D0)) {
- _class545 = insertSprite<Class545>(this, 0, 1100, 278, 347);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 0, 1100, 278, 347);
+ _vm->_collisionMan->addSprite(_asKey);
} else {
- _class545 = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
- // TODO _class545->setUpdateDeltaXY();
+ _asKey = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
+ // TODO _asKey->setUpdateDeltaXY();
}
if (!getGlobalVar(0x31C63C51)) {
@@ -750,8 +750,8 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _asNeedle) {
sendEntityMessage(_klayman, 0x1014, _asNeedle);
setMessageList(0x004B9130);
- } else if (sender == _class545) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ } else if (sender == _asKey) {
+ sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004B9140);
}
break;
@@ -885,8 +885,8 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0311005B);
if (!getGlobalVar(0x13382860)) {
- _class545 = insertSprite<Class545>(this, 2, 1100, 435, 445);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 435, 445);
+ _vm->_collisionMan->addSprite(_asKey);
}
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
@@ -991,9 +991,9 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4826:
- if (sender == _class545) {
+ if (sender == _asKey) {
if (_klayman->getX() >= 249) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004AFC58);
}
} else if (sender == _asTape) {
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index b458602..e01daf1 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -115,7 +115,7 @@ public:
Scene1304(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
Sprite *_sprite1;
- Sprite *_class545;
+ Sprite *_asKey;
Sprite *_asNeedle;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -155,7 +155,7 @@ protected:
AnimatedSprite *_asElevatorDoor;
Sprite *_asElevator;
Sprite *_sprite1;
- Sprite *_class545;
+ Sprite *_asKey;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 handleMessage416EB0(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index e5c25ca..d31f3de 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1423,7 +1423,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1404
Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asProjector(NULL), _class545(NULL) {
+ : Scene(vm, parentModule, true), _asProjector(NULL), _asKey(NULL) {
if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860)) {
setGlobalVar(0x13382860, 5);
@@ -1440,8 +1440,8 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xB006BAC8);
if (getGlobalVar(0x13382860) == 5) {
- _class545 = insertSprite<Class545>(this, 2, 1100, 267, 411);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 267, 411);
+ _vm->_collisionMan->addSprite(_asKey);
}
_sprite1 = insertStaticSprite(0x1900A1F8, 1100);
@@ -1514,8 +1514,8 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (sender == _asTape && _messageListStatus != 2) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B8CD0);
- } else if (sender == _class545 && _messageListStatus != 2) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ } else if (sender == _asKey && _messageListStatus != 2) {
+ sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004B8D18);
}
break;
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 437632d..8f5a4c9 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -238,7 +238,7 @@ protected:
Sprite *_sprite1;
Sprite *_asTape;
AsCommonProjector *_asProjector;
- Sprite *_class545;
+ Sprite *_asKey;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 92c566e..d324130 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1073,8 +1073,8 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
SetMessageHandler(&Scene1608::hmLowerFloor);
- _class545 = insertSprite<Class545>(this, 1, 1100, 198, 220);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 1, 1100, 198, 220);
+ _vm->_collisionMan->addSprite(_asKey);
if (which < 0) {
if (_vm->gameState().which == 1)
@@ -1317,7 +1317,7 @@ uint32 Scene1608::hmLowerFloor(int messageNum, const MessageParam ¶m, Entity
if (sender == _asTape) {
sendEntityMessage(_kmScene1608, 0x1014, _asTape);
setMessageList(0x004B4770);
- } else if (sender == _class545) {
+ } else if (sender == _asKey) {
setMessageList(0x004B46C8);
}
break;
@@ -1337,8 +1337,8 @@ uint32 Scene1608::hmUpperFloor(int messageNum, const MessageParam ¶m, Entity
sendMessage(_parentModule, 0x200D, 0);
break;
case 0x4826:
- if (sender == _class545) {
- sendEntityMessage(_kmScene1608, 0x1014, _class545);
+ if (sender == _asKey) {
+ sendEntityMessage(_kmScene1608, 0x1014, _asKey);
setMessageList(0x004B4760);
}
break;
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index ec31b68..3d6e831 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -141,7 +141,7 @@ public:
~Scene1608();
protected:
AsCommonCar *_asCar;
- Sprite *_class545;
+ Sprite *_asKey;
Sprite *_asDoor;
Sprite *_asIdleCarLower;
Sprite *_asIdleCarFull;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index d7991c2..2220fb7 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -86,115 +86,115 @@ void Module2200::createScene(int sceneNum, int which) {
_childObject = new Scene2208(_vm, this, which);
break;
case 9:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7180);
+ createHallOfRecordsScene(which, 0x004B7180);
break;
case 10:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7198);
+ createHallOfRecordsScene(which, 0x004B7198);
break;
case 11:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71B0);
+ createHallOfRecordsScene(which, 0x004B71B0);
break;
case 12:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71C8);
+ createHallOfRecordsScene(which, 0x004B71C8);
break;
case 13:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71E0);
+ createHallOfRecordsScene(which, 0x004B71E0);
break;
case 14:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B71F8);
+ createHallOfRecordsScene(which, 0x004B71F8);
break;
case 15:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7210);
+ createHallOfRecordsScene(which, 0x004B7210);
break;
case 16:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7228);
+ createHallOfRecordsScene(which, 0x004B7228);
break;
case 17:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7240);
+ createHallOfRecordsScene(which, 0x004B7240);
break;
case 18:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7258);
+ createHallOfRecordsScene(which, 0x004B7258);
break;
case 19:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7270);
+ createHallOfRecordsScene(which, 0x004B7270);
break;
case 20:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7288);
+ createHallOfRecordsScene(which, 0x004B7288);
break;
case 21:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72A0);
+ createHallOfRecordsScene(which, 0x004B72A0);
break;
case 22:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72B8);
+ createHallOfRecordsScene(which, 0x004B72B8);
break;
case 23:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72D0);
+ createHallOfRecordsScene(which, 0x004B72D0);
break;
case 24:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B72E8);
+ createHallOfRecordsScene(which, 0x004B72E8);
break;
case 25:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7300);
+ createHallOfRecordsScene(which, 0x004B7300);
break;
case 26:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7318);
+ createHallOfRecordsScene(which, 0x004B7318);
break;
case 27:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7330);
+ createHallOfRecordsScene(which, 0x004B7330);
break;
case 28:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7348);
+ createHallOfRecordsScene(which, 0x004B7348);
break;
case 29:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7360);
+ createHallOfRecordsScene(which, 0x004B7360);
break;
case 30:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7378);
+ createHallOfRecordsScene(which, 0x004B7378);
break;
case 31:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7390);
+ createHallOfRecordsScene(which, 0x004B7390);
break;
case 32:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73A8);
+ createHallOfRecordsScene(which, 0x004B73A8);
break;
case 33:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73C0);
+ createHallOfRecordsScene(which, 0x004B73C0);
break;
case 34:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73D8);
+ createHallOfRecordsScene(which, 0x004B73D8);
break;
case 35:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B73F0);
+ createHallOfRecordsScene(which, 0x004B73F0);
break;
case 36:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7408);
+ createHallOfRecordsScene(which, 0x004B7408);
break;
case 37:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7420);
+ createHallOfRecordsScene(which, 0x004B7420);
break;
case 38:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7438);
+ createHallOfRecordsScene(which, 0x004B7438);
break;
case 39:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7450);
+ createHallOfRecordsScene(which, 0x004B7450);
break;
case 40:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7468);
+ createHallOfRecordsScene(which, 0x004B7468);
break;
case 41:
_childObject = new Scene2242(_vm, this, which);
break;
case 42:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7480);
+ createHallOfRecordsScene(which, 0x004B7480);
break;
case 43:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B7498);
+ createHallOfRecordsScene(which, 0x004B7498);
break;
case 44:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74B0);
+ createHallOfRecordsScene(which, 0x004B74B0);
break;
case 45:
- _childObject = new HallOfRecordsScene(_vm, this, which, 0x004B74C8);
+ createHallOfRecordsScene(which, 0x004B74C8);
break;
case 46:
_childObject = new Scene2247(_vm, this, which);
@@ -202,14 +202,14 @@ void Module2200::createScene(int sceneNum, int which) {
case 47:
if (!getGlobalVar(0x98109F12)) {
if (getGlobalVar(0x4D080E54))
- _childObject = new StaticScene(_vm, this, 0x83110287, 0x10283839);
+ createStaticScene(0x83110287, 0x10283839);
else
- _childObject = new StaticScene(_vm, this, 0x83412B9D, 0x12B9983C);
+ createStaticScene(0x83412B9D, 0x12B9983C);
} else {
if (getGlobalVar(0x4D080E54))
- _childObject = new StaticScene(_vm, this, 0x48632087, 0x3208348E);
+ createStaticScene(0x48632087, 0x3208348E);
else
- _childObject = new StaticScene(_vm, this, 0x08C74886, 0x74882084);
+ createStaticScene(0x08C74886, 0x74882084);
}
break;
}
@@ -399,6 +399,10 @@ void Module2200::updateScene() {
#undef HallOfRecordsSceneLink
+void Module2200::createHallOfRecordsScene(int which, uint32 sceneInfo140Id) {
+ _childObject = new HallOfRecordsScene(_vm, this, which, sceneInfo140Id);
+}
+
// Scene2201
AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
@@ -411,8 +415,8 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
SetUpdateHandler(&AnimatedSprite::update);
}
-AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *doorLightSprite, bool flag1)
- : AnimatedSprite(vm, 1100), _klayman(klayman), _doorLightSprite(doorLightSprite), _countdown(0), _doorOpen(flag1) {
+AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1)
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _doorOpen(flag1) {
_x = 408;
_y = 290;
@@ -426,7 +430,7 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *
} else {
startAnimation(0xE2CB0412, 0, -1);
_newStickFrameIndex = 0;
- _doorLightSprite->setVisible(false);
+ _ssDoorLight->setVisible(false);
}
}
@@ -443,10 +447,10 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
case 0x100D:
if (param.asInteger() == 0x11001090) {
if (_doorOpen)
- _doorLightSprite->setVisible(true);
+ _ssDoorLight->setVisible(true);
} else if (param.asInteger() == 0x11283090) {
if (!_doorOpen)
- _doorLightSprite->setVisible(false);
+ _ssDoorLight->setVisible(false);
}
break;
case 0x2000:
@@ -481,22 +485,22 @@ void AsScene2201Door::stCloseDoor() {
playSound(0, calcHash("fxDoorClose33"));
}
-Class444::Class444(NeverhoodEngine *vm, int pointIndex, int spriteIndex)
+SsScene2201PuzzleCube::SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positionIndex, uint32 cubeIndex)
: StaticSprite(vm, 900) {
- _spriteResource.load2(kClass444FileHashes[spriteIndex]);
+ _spriteResource.load2(kSsScene2201PuzzleCubeFileHashes[cubeIndex]);
createSurface(100, 16, 16);
_drawRect.x = -(_spriteResource.getDimensions().width / 2);
_drawRect.y = -(_spriteResource.getDimensions().height / 2);
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
- _x = kClass444Points[pointIndex].x;
- _y = kClass444Points[pointIndex].y;
+ _x = kSsScene2201PuzzleCubePoints[positionIndex].x;
+ _y = kSsScene2201PuzzleCubePoints[positionIndex].y;
_needRefresh = true;
}
Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _soundFlag(false) {
+ : Scene(vm, parentModule, true), _isSoundPlaying(false) {
Sprite *tempSprite;
@@ -520,11 +524,9 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
- for (uint32 i = 0; i < 9; i++) {
- if ((int16)getSubVar(0x484498D0, i) >= 0) {
- insertSprite<Class444>(i, (int16)getSubVar(0x484498D0, i));
- }
- }
+ for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++)
+ if ((int16)getSubVar(0x484498D0, cubeIndex) >= 0)
+ insertSprite<SsScene2201PuzzleCube>(cubeIndex, (int16)getSubVar(0x484498D0, cubeIndex));
_clipRects[0].y1 = 0;
_clipRects[0].x2 = 640;
@@ -547,16 +549,16 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[0].y2 = tempSprite->getDrawRect().y2();
_clipRects[1].y1 = tempSprite->getDrawRect().y2();
- _doorLightSprite = insertStaticSprite(0xA4062212, 900);
+ _ssDoorLight = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
insertKlayman<KmScene2201>(300, 427, _clipRects, 2);
setMessageList(0x004B8118);
- _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 1) {
insertKlayman<KmScene2201>(412, 393, _clipRects, 2);
setMessageList(0x004B8130);
- _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene2201>(379, 427, _clipRects, 2);
@@ -565,12 +567,12 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2201>(261, 427, _clipRects, 2);
}
setMessageList(0x004B8178);
- _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
insertKlayman<KmScene2201>(pt.x, pt.y, _clipRects, 2);
setMessageList(0x004B8120);
- _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, true);
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, true);
}
insertSprite<AsScene2201CeilingFan>();
@@ -586,9 +588,9 @@ Scene2201::~Scene2201() {
void Scene2201::update() {
Scene::update();
- if (!_soundFlag) {
+ if (!_isSoundPlaying) {
_vm->_soundMan->playSoundLooping(0x81212040);
- _soundFlag = true;
+ _isSoundPlaying = true;
}
}
@@ -884,7 +886,7 @@ void SsScene2202PuzzleTile::stopMoving() {
Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isTileMoving(false),
- _movingTileSprite(NULL), _doneMovingTileSprite(NULL) {
+ _ssMovingTile(NULL), _ssDoneMovingTile(NULL) {
// TODO initScene2201Vars();
SetMessageHandler(&Scene2202::handleMessage);
@@ -897,9 +899,10 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
insertMouse435(0x00A08089, 20, 620);
- //DEBUG!
+ //DEBUG>>>
for (uint32 index = 0; index < 9; index++)
setSubVar(0x484498D0, index, 7 - index);
+ //DEBUG<<<
for (uint32 index = 0; index < 9; index++) {
int16 value = (int16)getSubVar(0x484498D0, index);
@@ -938,19 +941,19 @@ void Scene2202::update() {
_leaveScene = true;
}
- if (_movingTileSprite && !_isTileMoving) {
- int16 value = getFreeTileIndex(_movingTileIndex);
- if (value != -1) {
- setSurfacePriority(_movingTileSprite->getSurface(), 700);
- sendMessage(_movingTileSprite, 0x2001, value);
- _movingTileSprite = NULL;
+ if (_ssMovingTile && !_isTileMoving) {
+ int16 freeTileIndex = getFreeTileIndex(_movingTileIndex);
+ if (freeTileIndex != -1) {
+ setSurfacePriority(_ssMovingTile->getSurface(), 700);
+ sendMessage(_ssMovingTile, 0x2001, freeTileIndex);
+ _ssMovingTile = NULL;
_isTileMoving = true;
}
}
- if (_doneMovingTileSprite) {
- setSurfacePriority(_doneMovingTileSprite->getSurface(), _surfacePriority);
- _doneMovingTileSprite = NULL;
+ if (_ssDoneMovingTile) {
+ setSurfacePriority(_ssDoneMovingTile->getSurface(), _surfacePriority);
+ _ssDoneMovingTile = NULL;
if (testIsSolved()) {
playSound(0);
setGlobalVar(0x404290D5, 1);
@@ -974,11 +977,11 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2000:
_movingTileIndex = (int16)param.asInteger();
- _movingTileSprite = (Sprite*)sender;
+ _ssMovingTile = (Sprite*)sender;
break;
case 0x2002:
_isTileMoving = false;
- _doneMovingTileSprite = (Sprite*)sender;
+ _ssDoneMovingTile = (Sprite*)sender;
if (param.asInteger() <= 2) {
_surfacePriority = 100;
} else if (param.asInteger() >= 3 && param.asInteger() <= 5) {
@@ -1015,24 +1018,22 @@ bool Scene2202::testIsSolved() {
getSubVar(0x484498D0, 8) == 7;
}
-static const uint32 kClass545FileHashes[] = {
- 0x2450D850,
- 0x0C9CE8D0,
- 0x2C58A152
+static const uint32 kAsCommonKeyFileHashes[] = {
+ 0x2450D850, 0x0C9CE8D0, 0x2C58A152
};
-Class545::Class545(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y)
- : AnimatedSprite(vm, kClass545FileHashes[index], surfacePriority, x, y), _parentScene(parentScene), _index(index) {
+AsCommonKey::AsCommonKey(NeverhoodEngine *vm, Scene *parentScene, int keyIndex, int surfacePriority, int16 x, int16 y)
+ : AnimatedSprite(vm, kAsCommonKeyFileHashes[keyIndex], surfacePriority, x, y), _parentScene(parentScene), _keyIndex(keyIndex) {
- if (!getSubVar(0x0090EA95, _index) && !getSubVar(0x08D0AB11, _index)) {
- SetMessageHandler(&Class545::handleMessage);
+ if (!getSubVar(0x0090EA95, _keyIndex) && !getSubVar(0x08D0AB11, _keyIndex)) {
+ SetMessageHandler(&AsCommonKey::handleMessage);
} else {
setVisible(false);
SetMessageHandler(NULL);
}
}
-uint32 Class545::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonKey::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -1040,7 +1041,7 @@ uint32 Class545::handleMessage(int messageNum, const MessageParam ¶m, Entity
messageResult = 1;
break;
case 0x4806:
- setSubVar(0x0090EA95, _index, 1);
+ setSubVar(0x0090EA95, _keyIndex, 1);
setVisible(false);
SetMessageHandler(NULL);
}
@@ -1048,23 +1049,22 @@ uint32 Class545::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
static const uint32 kAsScene2203DoorFileHashes[] = {
- 0x7868AE10,
- 0x1A488110
+ 0x7868AE10, 0x1A488110
};
-AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint index)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index) {
+AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint doorIndex)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _doorIndex(doorIndex) {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2203Door::handleMessage);
_x = 320;
_y = 240;
- createSurface1(kAsScene2203DoorFileHashes[_index], 900);
- if (getGlobalVar(0x9A500914) == _index) {
- startAnimation(kAsScene2203DoorFileHashes[_index], -1, -1);
+ createSurface1(kAsScene2203DoorFileHashes[_doorIndex], 900);
+ if (getGlobalVar(0x9A500914) == _doorIndex) {
+ startAnimation(kAsScene2203DoorFileHashes[_doorIndex], -1, -1);
_newStickFrameIndex = -2;
} else {
- startAnimation(kAsScene2203DoorFileHashes[_index], 0, -1);
+ startAnimation(kAsScene2203DoorFileHashes[_doorIndex], 0, -1);
_newStickFrameIndex = 0;
}
}
@@ -1073,7 +1073,7 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (_index == getGlobalVar(0x9A500914))
+ if (_doorIndex == getGlobalVar(0x9A500914))
sendMessage(_parentScene, 0x2002, 0);
else
sendMessage(_parentScene, 0x2001, 0);
@@ -1083,12 +1083,12 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
_otherDoor = (Sprite*)param.asEntity();
break;
case 0x3002:
- if (_index == getGlobalVar(0x9A500914))
+ if (_doorIndex == getGlobalVar(0x9A500914))
sendMessage(_parentScene, 0x4808, 0);
stopAnimation();
break;
case 0x4808:
- setGlobalVar(0x9A500914, _index);
+ setGlobalVar(0x9A500914, _doorIndex);
sendMessage(_otherDoor, 0x4809, 0);
openDoor();
break;
@@ -1102,11 +1102,11 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
void AsScene2203Door::openDoor() {
playSound(0, 0x341014C4);
- startAnimation(kAsScene2203DoorFileHashes[_index], 1, -1);
+ startAnimation(kAsScene2203DoorFileHashes[_doorIndex], 1, -1);
}
void AsScene2203Door::closeDoor() {
- startAnimation(kAsScene2203DoorFileHashes[_index], -1, -1);
+ startAnimation(kAsScene2203DoorFileHashes[_doorIndex], -1, -1);
_playBackwards = true;
_newStickFrameIndex = 0;
}
@@ -1126,9 +1126,11 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B8320);
+ //DEBUG setGlobalVar(0x13382860, 1);//###//TODO CHECK IF Below...
+
if (getGlobalVar(0x13382860) == 1) {
- _class545 = insertSprite<Class545>(this, 2, 1100, 282, 432);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
+ _vm->_collisionMan->addSprite(_asKey);
}
_asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
@@ -1222,8 +1224,8 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _asTape) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B83E0);
- } else if (sender == _class545) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ } else if (sender == _asKey) {
+ sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004B83F0);
}
break;
@@ -1395,112 +1397,112 @@ static const uint32 kScene2206MessageIds2[] = {
0x004B8A48
};
-static const int16 kClass603XDeltas1[] = {
+static const int16 kAsScene2206DoorSpikesXDeltasOpen[] = {
-24, -28, -18, 6, 9, -8
};
-static const int16 kClass603XDeltas2[] = {
+static const int16 kAsScene2206DoorSpikesXDeltasClose[] = {
-8, 7, 11, 26, 13, 14
};
-Class603::Class603(NeverhoodEngine *vm, uint32 fileHash)
+AsScene2206DoorSpikes::AsScene2206DoorSpikes(NeverhoodEngine *vm, uint32 fileHash)
: StaticSprite(vm, fileHash, 200) {
if (getGlobalVar(0x18890C91))
_x -= 63;
- SetUpdateHandler(&Class603::update);
- SetMessageHandler(&Class603::handleMessage);
+ SetUpdateHandler(&AsScene2206DoorSpikes::update);
+ SetMessageHandler(&AsScene2206DoorSpikes::handleMessage);
SetSpriteUpdate(NULL);
}
-void Class603::update() {
+void AsScene2206DoorSpikes::update() {
handleSpriteUpdate();
StaticSprite::update();
}
-uint32 Class603::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2206DoorSpikes::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4808:
- _index = 0;
+ _deltaIndex = 0;
SetMessageHandler(NULL);
- SetSpriteUpdate(&Class603::spriteUpdate481E60);
+ SetSpriteUpdate(&AsScene2206DoorSpikes::suOpen);
playSound(0, 0x032746E0);
break;
case 0x4809:
- _index = 0;
+ _deltaIndex = 0;
SetMessageHandler(NULL);
- SetSpriteUpdate(&Class603::spriteUpdate481E90);
+ SetSpriteUpdate(&AsScene2206DoorSpikes::suClose);
playSound(0, 0x002642C0);
break;
}
return messageResult;
}
-void Class603::spriteUpdate481E60() {
- if (_index < 6) {
- _x += kClass603XDeltas1[_index];
- _index++;
+void AsScene2206DoorSpikes::suOpen() {
+ if (_deltaIndex < 6) {
+ _x += kAsScene2206DoorSpikesXDeltasOpen[_deltaIndex];
+ _deltaIndex++;
} else {
- SetMessageHandler(&Class603::handleMessage);
+ SetMessageHandler(&AsScene2206DoorSpikes::handleMessage);
SetSpriteUpdate(NULL);
}
}
-void Class603::spriteUpdate481E90() {
- if (_index < 6) {
- _x += kClass603XDeltas2[_index];
- _index++;
+void AsScene2206DoorSpikes::suClose() {
+ if (_deltaIndex < 6) {
+ _x += kAsScene2206DoorSpikesXDeltasClose[_deltaIndex];
+ _deltaIndex++;
} else {
- SetMessageHandler(&Class603::handleMessage);
+ SetMessageHandler(&AsScene2206DoorSpikes::handleMessage);
SetSpriteUpdate(NULL);
}
}
-Class604::Class604(NeverhoodEngine *vm, uint32 fileHash)
+AsScene2206Platform::AsScene2206Platform(NeverhoodEngine *vm, uint32 fileHash)
: StaticSprite(vm, fileHash, 50) {
- SetUpdateHandler(&Class604::update);
- SetMessageHandler(&Class604::handleMessage);
+ SetUpdateHandler(&AsScene2206Platform::update);
+ SetMessageHandler(&AsScene2206Platform::handleMessage);
SetSpriteUpdate(NULL);
}
-void Class604::update() {
+void AsScene2206Platform::update() {
handleSpriteUpdate();
StaticSprite::update();
}
-uint32 Class604::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2206Platform::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4803:
SetMessageHandler(NULL);
- SetSpriteUpdate(&Class604::spriteUpdate482020);
+ SetSpriteUpdate(&AsScene2206Platform::suMoveDown);
_yDelta = 0;
break;
}
return messageResult;
}
-void Class604::spriteUpdate482020() {
+void AsScene2206Platform::suMoveDown() {
_yDelta++;
_y += _yDelta;
}
-Class607::Class607(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash)
+SsScene2206TestTube::SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash)
: StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene) {
if (getGlobalVar(0x45080C38)) {
setVisible(false);
SetMessageHandler(NULL);
} else {
- SetMessageHandler(&Class607::handleMessage);
+ SetMessageHandler(&SsScene2206TestTube::handleMessage);
}
_deltaRect = _drawRect;
processDelta();
}
-uint32 Class607::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene2206TestTube::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -1530,28 +1532,28 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x2201266A, 100);
_sprite2 = insertStaticSprite(0x3406A333, 300);
_sprite3 = insertStaticSprite(0x24A223A2, 100);
- _sprite4 = insertSprite<Class603>(0x26133023);
- _sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
+ _asDoorSpikes = insertSprite<AsScene2206DoorSpikes>(0x26133023);
+ _asDoorSpikes->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8AF8);
- _sprite5 = insertSprite<SsCommonButtonSprite>(this, 0x0E038022, 100, 0);
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x0E038022, 100, 0);
insertMouse433(0x83212411);
- _class607 = insertSprite<Class607>(this, 1100, /*464, 433, */0x5E00E262);
- _class604 = insertSprite<Class604>(0x085E25E0);
+ _ssTestTube = insertSprite<SsScene2206TestTube>(this, 1100, /*464, 433, */0x5E00E262);
+ _asPlatform = insertSprite<AsScene2206Platform>(0x085E25E0);
} else {
fileHash = 0xE0102A45;
_sprite1 = insertStaticSprite(0x1C1106B8, 100);
_sprite2 = insertStaticSprite(0x020462E0, 300);
_sprite3 = insertStaticSprite(0x900626A2, 100);
- _sprite4 = insertSprite<Class603>(0x544822A8);
- _sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
+ _asDoorSpikes = insertSprite<AsScene2206DoorSpikes>(0x544822A8);
+ _asDoorSpikes->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8B58);
- _sprite5 = insertSprite<SsCommonButtonSprite>(this, 0x16882608, 100, 0);
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x16882608, 100, 0);
insertMouse433(0x02A41E09);
- _class607 = insertSprite<Class607>(this, 1100, /*464, 433, */0x52032563);
- _class604 = insertSprite<Class604>(0x317831A0);
+ _ssTestTube = insertSprite<SsScene2206TestTube>(this, 1100, /*464, 433, */0x52032563);
+ _asPlatform = insertSprite<AsScene2206Platform>(0x317831A0);
}
- _class604->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
+ _asPlatform->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
setBackground(fileHash);
@@ -1564,7 +1566,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(0x0263D144, 0, 65, 0);
}
- _vm->_collisionMan->addSprite(_class607);
+ _vm->_collisionMan->addSprite(_ssTestTube);
if (which < 0) {
insertKlayman<KmScene2206>(200, 430);
@@ -1576,7 +1578,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2206>(205, 396);
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
- sub4819D0();
+ klaymanBehindSpikes();
playSound(0, 0x53B8284A);
} else if (which == 3) {
insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
@@ -1602,9 +1604,9 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x800C6694) {
- sub481B00();
+ readClickedColumn();
} else if (param.asInteger() == 0x402064D8) {
- sendEntityMessage(_klayman, 0x1014, _sprite5);
+ sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x11C40840) {
if (getGlobalVar(0x18890C91))
setMessageList(0x004B8948);
@@ -1613,32 +1615,32 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4803:
- sendMessage(_class604, 0x4803, 0);
+ sendMessage(_asPlatform, 0x4803, 0);
break;
case 0x480B:
- if (sender == _sprite5) {
+ if (sender == _ssButton) {
setGlobalVar(0x18890C91, getGlobalVar(0x18890C91) ? 0 : 1);
if (getGlobalVar(0x18890C91))
- sendMessage(_sprite4, 0x4808, 0);
+ sendMessage(_asDoorSpikes, 0x4808, 0);
else
- sendMessage(_sprite4, 0x4809, 0);
+ sendMessage(_asDoorSpikes, 0x4809, 0);
}
break;
case 0x4826:
- sendEntityMessage(_klayman, 0x1014, _class607);
+ sendEntityMessage(_klayman, 0x1014, _ssTestTube);
setMessageList(0x004B8988);
break;
case 0x482A:
- sub4819D0();
+ klaymanBehindSpikes();
break;
case 0x482B:
- sub481950();
+ klaymanInFrontSpikes();
break;
}
return messageResult;
}
-void Scene2206::sub481950() {
+void Scene2206::klaymanInFrontSpikes() {
if (getGlobalVar(0x4D080E54)) {
_palette->addBasePalette(0x41983216, 0, 65, 0);
_palette->startFadeToPalette(12);
@@ -1646,11 +1648,11 @@ void Scene2206::sub481950() {
setSurfacePriority(_sprite1->getSurface(), 100);
setSurfacePriority(_sprite2->getSurface(), 300);
setSurfacePriority(_sprite3->getSurface(), 100);
- setSurfacePriority(_sprite4->getSurface(), 200);
+ setSurfacePriority(_asDoorSpikes->getSurface(), 200);
_klayman->setClipRect(0, 0, 640, 480);
}
-void Scene2206::sub4819D0() {
+void Scene2206::klaymanBehindSpikes() {
if (!getGlobalVar(0x4D080E54)) {
_palette->addBasePalette(0xB103B604, 0, 65, 0);
_palette->startFadeToPalette(12);
@@ -1658,11 +1660,11 @@ void Scene2206::sub4819D0() {
setSurfacePriority(_sprite1->getSurface(), 1100);
setSurfacePriority(_sprite2->getSurface(), 1300);
setSurfacePriority(_sprite3->getSurface(), 1100);
- setSurfacePriority(_sprite4->getSurface(), 1200);
+ setSurfacePriority(_asDoorSpikes->getSurface(), 1200);
_klayman->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
}
-void Scene2206::sub481B00() {
+void Scene2206::readClickedColumn() {
setGlobalVar(0x48A68852, (_mouseClickPos.x - 354) / 96);
if (getGlobalVar(0x48A68852) > 2)
setGlobalVar(0x48A68852, 2);
@@ -2008,8 +2010,9 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
- //DEBUG
+ //DEBUG>>>
setGlobalVar(0x4D080E54, 1);
+ //DEBUG<<<
_vm->gameModule()->initScene3009Vars();
@@ -2208,21 +2211,13 @@ uint32 Scene2207::handleMessage2(int messageNum, const MessageParam ¶m, Enti
}
static const uint32 kScene2208FileHashes1[] = {
- 0x041023CB,
- 0x041020CB,
- 0x041026CB,
- 0x04102ACB,
- 0x041032CB,
- 0x041002CB
+ 0x041023CB, 0x041020CB, 0x041026CB, 0x04102ACB,
+ 0x041032CB, 0x041002CB
};
static const uint32 kScene2208FileHashes2[] = {
- 0x091206C9,
- 0x091406C9,
- 0x091806C9,
- 0x090006C9,
- 0x093006C9,
- 0x095006C9
+ 0x091206C9, 0x091406C9, 0x091806C9, 0x090006C9,
+ 0x093006C9, 0x095006C9
};
Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -2402,18 +2397,15 @@ void Scene2208::drawRow(int16 rowIndex) {
}
static const int16 kScene2242XPositions[] = {
- 68,
- 158
+ 68, 158
};
static const uint32 kScene2242MessageListIds2[] = {
- 0x004B3CB8,
- 0x004B3CD8
+ 0x004B3CB8, 0x004B3CD8
};
static const uint32 kScene2242MessageListIds1[] = {
- 0x004B3CF8,
- 0x004B3D20
+ 0x004B3CF8, 0x004B3D20
};
Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -2520,33 +2512,18 @@ void Scene2242::readClickedColumn() {
}
static const int16 kHallOfRecordsKlaymanXPos[] = {
- 68,
- 157,
- 246,
- 335,
- 424,
- 513,
- 602
+ 68, 157, 246, 335,
+ 424, 513, 602
};
static const uint32 kHallOfRecordsSceneMessageListIds2[] = {
- 0x004B2978,
- 0x004B2998,
- 0x004B29B8,
- 0x004B29D8,
- 0x004B29F8,
- 0x004B2A18,
- 0x004B2A38
+ 0x004B2978, 0x004B2998, 0x004B29B8, 0x004B29D8,
+ 0x004B29F8, 0x004B2A18, 0x004B2A38
};
static const uint32 kHallOfRecordsSceneMessageListIds1[] = {
- 0x004B2A58,
- 0x004B2A80,
- 0x004B2AA8,
- 0x004B2AD0,
- 0x004B2AF8,
- 0x004B2B20,
- 0x004B2B48
+ 0x004B2A58, 0x004B2A80, 0x004B2AA8, 0x004B2AD0,
+ 0x004B2AF8, 0x004B2B20, 0x004B2B48
};
HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id)
@@ -2629,18 +2606,15 @@ void HallOfRecordsScene::readClickedColumn() {
}
static const int16 kScene2247XPositions[] = {
- 513,
- 602
+ 513, 602
};
static const uint32 kScene2247MessageListIds2[] = {
- 0x004B54A0,
- 0x004B54C0
+ 0x004B54A0, 0x004B54C0
};
static const uint32 kScene2247MessageListIds1[] = {
- 0x004B54E0,
- 0x004B5508
+ 0x004B54E0, 0x004B5508
};
Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index e869e4c..625990b 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -40,31 +40,20 @@ public:
protected:
void createScene(int sceneNum, int which);
void updateScene();
+ void createHallOfRecordsScene(int which, uint32 sceneInfo140Id);
};
// Scene2201
-static const NPoint kClass444Points[] = {
- {305, 305},
- {321, 305},
- {336, 305},
- {305, 319},
- {321, 319},
- {336, 319},
- {305, 332},
- {321, 332},
+static const NPoint kSsScene2201PuzzleCubePoints[] = {
+ {305, 305}, {321, 305}, {336, 305}, {305, 319},
+ {321, 319}, {336, 319}, {305, 332}, {321, 332},
{336, 333}
};
-static const uint32 kClass444FileHashes[] = {
- 0x88134A44,
- 0xAA124340,
- 0xB8124602,
- 0xA902464C,
- 0x890A4244,
- 0xA8124642,
- 0xB812C204,
- 0x381A4A4C
+static const uint32 kSsScene2201PuzzleCubeFileHashes[] = {
+ 0x88134A44, 0xAA124340, 0xB8124602, 0xA902464C,
+ 0x890A4244, 0xA8124642, 0xB812C204, 0x381A4A4C
};
class AsScene2201CeilingFan : public AnimatedSprite {
@@ -74,10 +63,10 @@ public:
class AsScene2201Door : public AnimatedSprite {
public:
- AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *doorLightSprite, bool flag1);
+ AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1);
protected:
Klayman *_klayman;
- Sprite *_doorLightSprite;
+ Sprite *_ssDoorLight;
bool _doorOpen;
int _countdown;
void update();
@@ -86,9 +75,9 @@ protected:
void stCloseDoor();
};
-class Class444 : public StaticSprite {
+class SsScene2201PuzzleCube : public StaticSprite {
public:
- Class444(NeverhoodEngine *vm, int pointIndex, int spriteIndex);
+ SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positionIndex, uint32 cubeIndex);
};
class Scene2201 : public Scene {
@@ -97,11 +86,11 @@ public:
~Scene2201();
protected:
NRect _clipRects[2];
- Sprite *_doorLightSprite;
+ Sprite *_ssDoorLight;
Sprite *_asDoor;
Sprite *_ssDoorButton;
Sprite *_asTape;
- bool _soundFlag;
+ bool _isSoundPlaying;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -135,8 +124,8 @@ public:
Scene2202(NeverhoodEngine *vm, Module *parentModule, int which);
~Scene2202();
protected:
- Sprite *_movingTileSprite;
- Sprite *_doneMovingTileSprite;
+ Sprite *_ssMovingTile;
+ Sprite *_ssDoneMovingTile;
bool _isTileMoving;
int16 _movingTileIndex;
int _surfacePriority;
@@ -148,22 +137,22 @@ protected:
bool testIsSolved();
};
-class Class545 : public AnimatedSprite {
+class AsCommonKey : public AnimatedSprite {
public:
- Class545(NeverhoodEngine *vm, Scene *parentScene, int index, int surfacePriority, int16 x, int16 y);
+ AsCommonKey(NeverhoodEngine *vm, Scene *parentScene, int keyIndex, int surfacePriority, int16 x, int16 y);
protected:
Scene *_parentScene;
- int _index;
+ int _keyIndex;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene2203Door : public AnimatedSprite {
public:
- AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint index);
+ AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint doorIndex);
protected:
Scene *_parentScene;
Sprite *_otherDoor;
- uint _index;
+ uint _doorIndex;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void openDoor();
void closeDoor();
@@ -179,7 +168,7 @@ protected:
Sprite *_ssSmallLeftDoor;
Sprite *_ssSmallRightDoor;
Sprite *_asTape;
- Sprite *_class545;
+ Sprite *_asKey;
NRect _leftDoorClipRect;
NRect _rightDoorClipRect;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -204,30 +193,30 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class Class603 : public StaticSprite {
+class AsScene2206DoorSpikes : public StaticSprite {
public:
- Class603(NeverhoodEngine *vm, uint32 fileHash);
+ AsScene2206DoorSpikes(NeverhoodEngine *vm, uint32 fileHash);
protected:
- int _index;
+ int _deltaIndex;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate481E60();
- void spriteUpdate481E90();
+ void suOpen();
+ void suClose();
};
-class Class604 : public StaticSprite {
+class AsScene2206Platform : public StaticSprite {
public:
- Class604(NeverhoodEngine *vm, uint32 fileHash);
+ AsScene2206Platform(NeverhoodEngine *vm, uint32 fileHash);
protected:
int16 _yDelta;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void spriteUpdate482020();
+ void suMoveDown();
};
-class Class607 : public StaticSprite {
+class SsScene2206TestTube : public StaticSprite {
public:
- Class607(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash);
+ SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -241,14 +230,14 @@ protected:
Sprite *_sprite1;
Sprite *_sprite2;
Sprite *_sprite3;
- Sprite *_sprite4;
- Sprite *_sprite5;
- Sprite *_class604;
- Sprite *_class607;
+ Sprite *_asDoorSpikes;
+ Sprite *_ssButton;
+ Sprite *_asPlatform;
+ Sprite *_ssTestTube;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub481950();
- void sub4819D0();
- void sub481B00();
+ void klaymanInFrontSpikes();
+ void klaymanBehindSpikes();
+ void readClickedColumn();
};
class AsScene2207Elevator : public AnimatedSprite {
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index e2973ec..5f1d5bb 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -70,13 +70,13 @@ void Module2400::createScene(int sceneNum, int which) {
createSmackerScene(0x20D80001, true, true, false);
break;
case 7:
- _childObject = new StaticScene(_vm, this, 0x81523218, 0x2321C81D);
+ createStaticScene(0x81523218, 0x2321C81D);
break;
case 8:
- _childObject = new StaticScene(_vm, this, 0x08100210, 0x00214089);
+ createStaticScene(0x08100210, 0x00214089);
break;
case 9:
- _childObject = new StaticScene(_vm, this, 0x8C020505, 0x205018C8);
+ createStaticScene(0x8C020505, 0x205018C8);
break;
}
SetUpdateHandler(&Module2400::updateScene);
@@ -930,8 +930,8 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xB03001A8);
if (getGlobalVar(0x13382860) == 2) {
- _class545 = insertSprite<Class545>(this, 2, 1100, 560, 409);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 560, 409);
+ _vm->_collisionMan->addSprite(_asKey);
}
_asTape = insertSprite<AsScene1201Tape>(this, 5, 1100, 456, 409, 0x9148A011);
@@ -1016,8 +1016,8 @@ uint32 Scene2406::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _asTape && !_flag1) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B77C8);
- } else if (sender == _class545 && !_flag1) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ } else if (sender == _asKey && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004B77D8);
}
break;
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index bbfa47d..2fa7a9a 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -162,7 +162,7 @@ protected:
Sprite *_sprite2;
Sprite *_ssButton;
Sprite *_asTape;
- Sprite *_class545;
+ Sprite *_asKey;
Sprite *_asLightCord;
bool _flag1;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -174,7 +174,7 @@ public:
protected:
Sprite *_sprite1;
Sprite *_asTape;
- Sprite *_class545;
+ Sprite *_asKey;
NRect _clipRects[2];
bool _flag1;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 26d0d88..978695d 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -126,9 +126,9 @@ void Module2500::createScene(int sceneNum, int which) {
break;
case 9:
if (getGlobalVar(0xD0A14D10))
- _childObject = new StaticScene(_vm, this, 0xC62A0645, 0xA0641C6A);
+ createStaticScene(0xC62A0645, 0xA0641C6A);
else
- _childObject = new StaticScene(_vm, this, 0x7A343546, 0x435427AB);
+ createStaticScene(0x7A343546, 0x435427AB);
break;
}
SetUpdateHandler(&Module2500::updateScene);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 7c93aa7..ec0ddf0 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -267,7 +267,7 @@ void Module2700::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B1E60, 150);
break;
case 30:
- _childObject = new StaticScene(_vm, this, 0x09507248, 0x0724C09D);
+ createStaticScene(0x09507248, 0x0724C09D);
break;
case 31:
//TODO _childObject = new Scene2732(_vm, this, which);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 2038548..95e2c3e 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -70,7 +70,7 @@ void Module2800::createScene(int sceneNum, int which) {
if (_flag) {
_childObject = new Scene2802(_vm, this, which);
} else {
- _childObject = new StaticScene(_vm, this, 0x000C6444, 0xC6440008);
+ createStaticScene(0x000C6444, 0xC6440008);
}
#endif
break;
@@ -119,39 +119,39 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 12:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x0000A245, 0x0A241008);
+ createStaticScene(0x0000A245, 0x0A241008);
break;
case 13:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x81C60635, 0x60631814);
+ createStaticScene(0x81C60635, 0x60631814);
break;
case 14:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0xCA811204, 0x11200CA0);
+ createStaticScene(0xCA811204, 0x11200CA0);
break;
case 15:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x2D438A00, 0x38A042DC);
+ createStaticScene(0x2D438A00, 0x38A042DC);
break;
case 16:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x0A806204, 0x062000A0);
+ createStaticScene(0x0A806204, 0x062000A0);
break;
case 17:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x010F9284, 0xF9280018);
+ createStaticScene(0x010F9284, 0xF9280018);
break;
case 18:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x0100022B, 0x0022F018);
+ createStaticScene(0x0100022B, 0x0022F018);
break;
case 19:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x10866205, 0x66201100);
+ createStaticScene(0x10866205, 0x66201100);
break;
case 20:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x01C58000, 0x58004014);
+ createStaticScene(0x01C58000, 0x58004014);
break;
case 21:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
@@ -159,22 +159,22 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 22:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x9408121E, 0x8121A948);
+ createStaticScene(0x9408121E, 0x8121A948);
break;
case 23:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x048C0600, 0xC0604040);
+ createStaticScene(0x048C0600, 0xC0604040);
break;
case 24:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- _childObject = new StaticScene(_vm, this, 0x04270A94, 0x70A9004A);
+ createStaticScene(0x04270A94, 0x70A9004A);
break;
case 25:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
if (getGlobalVar(0x190A1D18))
- _childObject = new StaticScene(_vm, this, 0x01600204, 0x0020001E);
+ createStaticScene(0x01600204, 0x0020001E);
else
- _childObject = new StaticScene(_vm, this, 0x08611204, 0x1120008E);
+ createStaticScene(0x08611204, 0x1120008E);
break;
case 26:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
@@ -2987,8 +2987,8 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0060203E);
if (getGlobalVar(0x13382860) == 3) {
- _class545 = insertSprite<Class545>(this, 2, 1100, 474, 437);
- _vm->_collisionMan->addSprite(_class545);
+ _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 474, 437);
+ _vm->_collisionMan->addSprite(_asKey);
}
_ssTape = insertSprite<SsScene1705Tape>(this, 6, 1100, 513, 437, 0xA1361863);
@@ -3071,8 +3071,8 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _ssTape && !_flag1) {
sendEntityMessage(_klayman, 0x1014, _ssTape);
setMessageList(0x004AF658);
- } else if (sender == _class545 && !_flag1) {
- sendEntityMessage(_klayman, 0x1014, _class545);
+ } else if (sender == _asKey && !_flag1) {
+ sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004AF668);
}
break;
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 1027a6f..6317783 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -462,7 +462,7 @@ protected:
Sprite *_sprite2;
Sprite *_sprite4;
Sprite *_ssTape;
- Sprite *_class545;
+ Sprite *_asKey;
Sprite *_sprite1;
bool _flag1;
int _palStatus;
Commit: 483d76d635dac1ea4418a4ab6cbb639e9314a0c7
https://github.com/scummvm/scummvm/commit/483d76d635dac1ea4418a4ab6cbb639e9314a0c7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:39-07:00
Commit Message:
NEVERHOOD: Enable/fixup navigation scene sound update code in several modules
- Rename some NavigationScene stuff
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2300.h
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/navigationscene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index ef1b093..190934f 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,8 +309,8 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 5;
- createModule(2200, -1);
+ _vm->gameState().sceneNum = 1;
+ createModule(2300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 257ee27..53ede43 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -206,23 +206,19 @@ void Module1100::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 0:
-#if 0 // TODO
- if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
- SoundMan_playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64);
- SoundMan_setSoundVolume(0x48498E46, 65);
- SoundMan_setSoundVolume(0x50399F64, 65);
+ if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0)) {
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 65);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 65);
}
-#endif
break;
case 1:
-#if 0 // TODO
- if (navigationScene()->soundFlag1 && _countdown != 0 && (--_countdown == 0)) {
- SoundMan_playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F);
+ if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0)) {
+ _vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
}
-#endif
break;
case 2:
- _vm->_soundMan->setSoundParams(0x74E01054, !navigationScene()->getSoundFlag1(), 0, 0, 0, 0);
+ _vm->_soundMan->setSoundParams(0x74E01054, !navigationScene()->isWalkingForward(), 0, 0, 0, 0);
break;
case 5:
case 6:
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 4335595..ea6182d 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -158,7 +158,7 @@ void Module1800::updateScene() {
case 8:
// NOTE: After Klayman jumped into the hole and died...
leaveModule(1);
- // TODO GameState stuff
+ // TODO GameState stuff // Restarts the game?
break;
case 9:
leaveModule(0);
@@ -167,7 +167,7 @@ void Module1800::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 0:
- if (navigationScene()->getSoundFlag1() && navigationScene()->getNavigationIndex() == 2) {
+ if (navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 2) {
_vm->_soundMan->setTwoSoundsPlayFlag(false);
}
break;
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 4f35122..9e2acff 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -21,25 +21,25 @@
*/
#include "neverhood/module2300.h"
+#include "neverhood/navigationscene.h"
namespace Neverhood {
static const uint32 kModule2300SoundList[] = {
- 0x90805C50,
- 0x90804450,
- 0xB4005E60,
- 0x91835066,
- 0x90E14440,
- 0x90F0D1C3,
- 0
+ 0x90805C50, 0x90804450, 0xB4005E60, 0x91835066,
+ 0x90E14440, 0x90F0D1C3, 0
};
Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _volume(0) {
+ : Module(vm, parentModule), _soundVolume(0) {
_vm->_soundMan->addSoundList(0x1A214010, kModule2300SoundList);
_vm->_soundMan->setSoundListParams(kModule2300SoundList, true, 50, 600, 10, 150);
+ //DEBUG>>>
+ setGlobalVar(0x10938830, 0);
+ //DEBUG<<<
+
_flag = getGlobalVar(0x10938830) == 0;
if (_flag) {
@@ -82,7 +82,7 @@ void Module2300::createScene(int sceneNum, int which) {
case 1:
createNavigationScene(0x004B67E8, which);
if (_flag) {
- _volume = 15;
+ _soundVolume = 15;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 15);
}
break;
@@ -93,10 +93,10 @@ void Module2300::createScene(int sceneNum, int which) {
if (getGlobalVar(0x10938830)) {
createNavigationScene(0x004B68F0, which);
} else {
- _vm->_soundMan->setSoundVolume(0x90F0D1C3, _volume);
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
createNavigationScene(0x004B68A8, which);
if (_flag) {
- _volume = 87;
+ _soundVolume = 87;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 87);
}
}
@@ -157,32 +157,23 @@ void Module2300::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 1:
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume++;
- SoundMan_setSoundVolume(0x90F0D1C3, _volume);
+ if (_flag && navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 4 &&
+ navigationScene()->getFrameNumber() % 2) {
+ _soundVolume++;
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
-#endif
-#if 0 // TODO
- if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
- SoundMan_playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64);
- SoundMan_setSoundVolume(0x48498E46, 70);
- SoundMan_setSoundVolume(0x50399F64, 70);
+ if (navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 0 &&
+ navigationScene()->getFrameNumber() == 50) {
+ _vm->_soundMan->playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64, 0);
+ _vm->_soundMan->setSoundVolume(0x48498E46, 70);
+ _vm->_soundMan->setSoundVolume(0x50399F64, 70);
}
-#endif
break;
case 3:
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
- navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume--;
- SoundMan_setSoundVolume(0x90F0D1C3, _volume);
+ if (_flag && navigationScene()->isWalkingForward() && navigationScene()->getFrameNumber() % 2) {
+ _soundVolume--;
+ _vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
-#endif
break;
}
}
diff --git a/engines/neverhood/module2300.h b/engines/neverhood/module2300.h
index 7222559..ed39a45 100644
--- a/engines/neverhood/module2300.h
+++ b/engines/neverhood/module2300.h
@@ -37,7 +37,7 @@ public:
virtual ~Module2300();
protected:
bool _flag;
- int _volume;
+ int _soundVolume;
void createScene(int sceneNum, int which);
void updateScene();
};
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 78ab74d..55ad05b 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -240,12 +240,12 @@ void Module3000::updateScene() {
case 8:
_flag = getGlobalVar(0x10938830); // CHECKME
if (_moduleResult != 1) {
- // TODO: SoundMan_setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0):
+ _vm->_soundMan->setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
createScene(4, 1);
} else if (getGlobalVar(0xF0402B0A)) {
createScene(1008, -1);
} else {
- // TODO: SoundMan_setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
+ _vm->_soundMan->setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
createScene(4, 1);
}
break;
@@ -280,10 +280,9 @@ void Module3000::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 1:
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
+ if (navigationScene()->isWalkingForward()) {
uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
+ int navigationIndex = navigationScene()->getNavigationIndex();
if (navigationIndex == 1) {
if (frameNumber == 0) {
_vm->_soundMan->playTwoSounds(0x81293110, 0x48498E46, 0x50399F64, 0);
@@ -309,13 +308,11 @@ void Module3000::updateScene() {
}
}
}
-#endif
break;
case 2:
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
+ if (navigationScene()->isWalkingForward()) {
uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
+ int navigationIndex = navigationScene()->getNavigationIndex();
if (_flag && _soundVolume > 1 && frameNumber % 2) {
_soundVolume--;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
@@ -332,13 +329,11 @@ void Module3000::updateScene() {
}
}
}
-#endif
break;
case 3:
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
+ if (navigationScene()->isWalkingForward()) {
uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
+ int navigationIndex = navigationScene()->getNavigationIndex();
if (navigationIndex == 2) {
if (frameNumber == 40) {
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
@@ -352,10 +347,9 @@ void Module3000::updateScene() {
}
}
}
-#endif
break;
case 5:
- if (navigationScene()->getSoundFlag1() && navigationScene()->getNavigationIndex() == 0) {
+ if (navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 0) {
_vm->_soundMan->setTwoSoundsPlayFlag(false);
}
break;
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index a3e1536..66b30cf 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -27,13 +27,16 @@ namespace Neverhood {
NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, const byte *itemsTypes)
: Scene(vm, parentModule, true), _itemsTypes(itemsTypes), _navigationIndex(navigationIndex), _smackerDone(false),
- _soundFlag1(false), _soundFlag2(false), _smackerFileHash(0), _interactive(true), _done(false) {
+ _isWalkingForward(false), _isTurning(false), _smackerFileHash(0), _interactive(true), _leaveSceneAfter(false) {
_navigationList = _vm->_staticData->getNavigationList(navigationListId);
+
+ //DEBUG>>>
for (NavigationList::iterator it = _navigationList->begin(); it != _navigationList->end(); it++) {
debug("%08X %08X %08X %08X %d %d %08X", (*it).fileHash, (*it).leftSmackerFileHash, (*it).rightSmackerFileHash,
(*it).middleSmackerFileHash, (*it).interactive, (*it).middleFlag, (*it).mouseCursorFileHash);
}
+ //DEBUG<<<
if (_navigationIndex < 0) {
_navigationIndex = (int)getGlobalVar(0x4200189E);
@@ -46,9 +49,7 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
SetMessageHandler(&NavigationScene::handleMessage);
_smackerPlayer = new SmackerPlayer(_vm, this, (*_navigationList)[_navigationIndex].fileHash, true, true);
-
addEntity(_smackerPlayer);
-
addSurface(_smackerPlayer->getSurface());
createMouseCursor();
@@ -79,14 +80,14 @@ void NavigationScene::update() {
_smackerDone = false;
_smackerFileHash = 0;
} else if (_smackerDone) {
- if (_done) {
+ if (_leaveSceneAfter) {
sendMessage(_parentModule, 0x1009, _navigationIndex);
} else {
const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
createMouseCursor();
showMouse(true);
- _soundFlag2 = false;
- _soundFlag1 = false;
+ _isTurning = false;
+ _isWalkingForward = false;
_interactive = true;
_vm->_soundMan->setTwoSoundsPlayFlag(false);
_vm->_soundMan->setSoundThreePlayFlag(false);
@@ -151,8 +152,8 @@ void NavigationScene::createMouseCursor() {
void NavigationScene::handleNavigation(const NPoint &mousePos) {
const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
- bool oldSoundFlag1 = _soundFlag1;
- bool oldSoundFlag2 = _soundFlag2;
+ bool oldIsWalkingForward = _isWalkingForward;
+ bool oldIsTurning = _isTurning;
uint32 direction = sendPointMessage(_mouseCursor, 0x2064, mousePos);
switch (direction) {
@@ -161,8 +162,8 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
if (navigationItem.leftSmackerFileHash != 0) {
_smackerFileHash = navigationItem.leftSmackerFileHash;
_interactive = false;
- _soundFlag1 = false;
- _soundFlag2 = true;
+ _isWalkingForward = false;
+ _isTurning = true;
do {
_navigationIndex--;
if (_navigationIndex < 0)
@@ -177,8 +178,8 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
if (navigationItem.rightSmackerFileHash != 0) {
_smackerFileHash = navigationItem.rightSmackerFileHash;
_interactive = false;
- _soundFlag1 = false;
- _soundFlag2 = true;
+ _isWalkingForward = false;
+ _isTurning = true;
do {
_navigationIndex++;
if (_navigationIndex >= (int)_navigationList->size())
@@ -197,20 +198,18 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
} else if (navigationItem.middleSmackerFileHash != 0) {
_smackerFileHash = navigationItem.middleSmackerFileHash;
_interactive = false;
- _soundFlag1 = true;
- _soundFlag2 = false;
- _done = true;
+ _isWalkingForward = true;
+ _isTurning = false;
+ _leaveSceneAfter = true;
}
break;
}
- if (oldSoundFlag2 != _soundFlag2) {
- _vm->_soundMan->setSoundThreePlayFlag(_soundFlag2);
- }
+ if (oldIsTurning != _isTurning)
+ _vm->_soundMan->setSoundThreePlayFlag(_isTurning);
- if (oldSoundFlag1 != _soundFlag1) {
- _vm->_soundMan->setTwoSoundsPlayFlag(_soundFlag1);
- }
+ if (oldIsWalkingForward != _isWalkingForward)
+ _vm->_soundMan->setTwoSoundsPlayFlag(_isWalkingForward);
}
diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h
index cf351d1..ebe9a35 100644
--- a/engines/neverhood/navigationscene.h
+++ b/engines/neverhood/navigationscene.h
@@ -35,8 +35,9 @@ public:
virtual ~NavigationScene();
int getNavigationAreaType();
int getNavigationIndex() const { return _navigationIndex; }
- bool getSoundFlag1() const { return _soundFlag1; }
- bool getSoundFlag2() const { return _soundFlag2; }
+ bool isWalkingForward() const { return _isWalkingForward; }
+ bool isTurning() const { return _isTurning; }
+ int getFrameNumber() const { return _smackerPlayer->getFrameNumber(); }
protected:
SmackerPlayer *_smackerPlayer;
bool _smackerDone;
@@ -44,9 +45,9 @@ protected:
int _navigationIndex;
uint32 _smackerFileHash;
bool _interactive;
- bool _soundFlag1;
- bool _soundFlag2;
- bool _done;
+ bool _isWalkingForward;
+ bool _isTurning;
+ bool _leaveSceneAfter;
const byte *_itemsTypes;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: 4c421a09c8f8cdc4455f3644e7ea7fbf0bbb95fc
https://github.com/scummvm/scummvm/commit/4c421a09c8f8cdc4455f3644e7ea7fbf0bbb95fc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:39-07:00
Commit Message:
NEVERHOOD: Add clipRects to all Klayman subclasses
- Rename stuff in Module2400
- Move some temp sprites from class scope to local scope in the respective constructors
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 190934f..7fa6906 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,8 +309,8 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 1;
- createModule(2300, -1);
+ _vm->gameState().sceneNum = 2;
+ createModule(2400, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 82c6114..90ba8aa 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5420,7 +5420,9 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2406::KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // TODO Cliprects
+
+ _surface->setClipRects(clipRects, clipRectsCount);
+
}
uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5635,7 +5637,8 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2803::KmScene2803(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // TODO ClipRects stuff
+ _surface->setClipRects(clipRects, clipRectsCount);
+
_dataResource.load(0x00900849);
}
@@ -5808,6 +5811,8 @@ KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
+ _surface->setClipRects(clipRects, clipRectsCount);
+
if (flag) {
// TODO Maybe? Don't know. Set Klayman clip rects
loadSound(3, 0x58E0C341);
@@ -5866,6 +5871,8 @@ KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
bool flag, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
+ _surface->setClipRects(clipRects, clipRectsCount);
+
if (flag) {
// TODO Maybe? Don't know. Set Klayman clip rects
loadSound(3, 0x58E0C341);
@@ -5973,7 +5980,7 @@ uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶
KmScene2810::KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // TODO ClipRects stuff
+ _surface->setClipRects(clipRects, clipRectsCount);
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index b83eb14..90e71de 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -413,7 +413,7 @@ protected:
Sprite *_otherSprite;
int _idleTableNum;
- int16 _walkResumeFrameIncr;
+ int16 _walkResumeFrameIncr;
int _moveObjectCountdown;
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 5f1d5bb..3b6c6bb 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -720,7 +720,9 @@ uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *
Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown(0), _soundToggle(false) {
-
+
+ Sprite *tempSprite;
+
_surfaceFlag = true;
SetMessageHandler(&Scene2402::handleMessage);
SetUpdateHandler(&Scene2402::update);
@@ -748,9 +750,9 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AF7D0);
}
- _sprite1 = insertStaticSprite(0x081A60A8, 1100);
+ tempSprite = insertStaticSprite(0x081A60A8, 1100);
_ssDoorFrame = (StaticSprite*)insertStaticSprite(0x406C0AE0, 1100);
- _klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 639, _sprite1->getDrawRect().y2());
+ _klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 639, tempSprite->getDrawRect().y2());
_asDoor = insertSprite<AsScene2402Door>(this, which == 1/*CHECKME or != ?*/);
insertSprite<AsScene2402TV>(_klayman);
insertStaticSprite(0x3A01A020, 200);
@@ -823,7 +825,7 @@ void Scene2402::playPipeSound(uint32 fileHash) {
Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- Sprite *tempSprite;
+ Sprite *tempSprite1, *tempSprite2, *tempSprite3;
_surfaceFlag = true;
SetMessageHandler(&Scene2403::handleMessage);
@@ -837,34 +839,34 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
_asLightCord->setClipRect(0, 25, 640, 480);
if (which < 0) {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2403>(220, 449);
setMessageList(0x004B5C98);
setRectList(0x004B5E18);
} else if (which == 1) {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2403>(433, 449);
setMessageList(0x004B5D70);
setRectList(0x004B5E18);
} else if (which == 2) {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2403>(440, 449);
_klayman->setDoDeltaX(1);
setMessageList(0x004B5C98);
setRectList(0x004B5E18);
} else {
- _flag1 = true;
+ _isClimbingLadder = true;
insertKlayman<KmScene2403>(122, 599);
setMessageList(0x004B5CA0);
setRectList(0x004B5E28);
}
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x3130B0EB, 100, 0);
- _sprite1 = insertStaticSprite(0x20C24220, 1100);
- _sprite2 = insertStaticSprite(0x03080900, 1300);
- tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
- tempSprite->setClipRect(_sprite1->getDrawRect().x, 0, 640, _sprite2->getDrawRect().y2());
- _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, _sprite2->getDrawRect().y2());
+ tempSprite1 = insertStaticSprite(0x20C24220, 1100);
+ tempSprite2 = insertStaticSprite(0x03080900, 1300);
+ tempSprite3 = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite3->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2());
+ _klayman->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2());
loadSound(1, calcHash("fxFogHornSoft"));
@@ -881,11 +883,11 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- _flag1 = true;
+ _isClimbingLadder = true;
setRectList(0x004B5E28);
break;
case 0x2001:
- _flag1 = false;
+ _isClimbingLadder = false;
setRectList(0x004B5E18);
break;
case 0x480B:
@@ -905,7 +907,7 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4826:
- if (sender == _asTape && !_flag1) {
+ if (sender == _asTape && !_isClimbingLadder) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B5D98);
}
@@ -917,7 +919,7 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- Sprite *tempSprite;
+ Sprite *tempSprite1, *tempSprite2;
if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0) {
setGlobalVar(0x13382860, 2);
@@ -937,58 +939,58 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 5, 1100, 456, 409, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- tempSprite = insertStaticSprite(0x19625293, 1100);
+ tempSprite2 = insertStaticSprite(0x19625293, 1100);
_clipRects[0].x1 = 0;
_clipRects[0].y1 = 0;
- _clipRects[0].x2 = tempSprite->getDrawRect().x2();
+ _clipRects[0].x2 = tempSprite2->getDrawRect().x2();
_clipRects[0].y2 = 480;
if (getGlobalVar(0x18890C91)) {
setBackground(0x1A0B0304);
setPalette(0x1A0B0304);
- _sprite1 = insertStaticSprite(0x32923922, 1100);
+ tempSprite1 = insertStaticSprite(0x32923922, 1100);
} else {
setBackground(0x0A038595);
setPalette(0x0A038595);
- _sprite1 = insertStaticSprite(0x1712112A, 1100);
+ tempSprite1 = insertStaticSprite(0x1712112A, 1100);
}
- tempSprite = insertStaticSprite(0x22300924, 1300);
+ tempSprite2 = insertStaticSprite(0x22300924, 1300);
- _clipRects[1].x1 = _sprite1->getDrawRect().x;
- _clipRects[1].y1 = tempSprite->getDrawRect().y;
+ _clipRects[1].x1 = tempSprite1->getDrawRect().x;
+ _clipRects[1].y1 = tempSprite2->getDrawRect().y;
_clipRects[1].x2 = 640;
_clipRects[1].y2 = 480;
if (which < 0) {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2406>(307, 404, _clipRects, 2);
setMessageList(0x004B76C8);
setRectList(0x004B78C8);
} else if (which == 1) {
- _flag1 = true;
+ _isClimbingLadder = true;
insertKlayman<KmScene2406>(253, -16, _clipRects, 2);
setMessageList(0x004B76D8);
setRectList(0x004B78D8);
} else if (which == 2) {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2406>(480, 404, _clipRects, 2);
setMessageList(0x004B77C0);
setRectList(0x004B78C8);
} else if (which == 3) {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2406>(387, 404, _clipRects, 2);
setMessageList(0x004B7810);
setRectList(0x004B78C8);
} else {
- _flag1 = false;
+ _isClimbingLadder = false;
insertKlayman<KmScene2406>(0, 404, _clipRects, 2);
setMessageList(0x004B76D0);
setRectList(0x004B78C8);
}
- tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
- tempSprite->setClipRect(_clipRects[1]);
+ tempSprite2 = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
+ tempSprite2->setClipRect(_clipRects[1]);
}
@@ -1005,18 +1007,18 @@ uint32 Scene2406::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- _flag1 = true;
+ _isClimbingLadder = true;
setRectList(0x004B78D8);
break;
case 0x2001:
- _flag1 = false;
+ _isClimbingLadder = false;
setRectList(0x004B78C8);
break;
case 0x4826:
- if (sender == _asTape && !_flag1) {
+ if (sender == _asTape && !_isClimbingLadder) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B77C8);
- } else if (sender == _asKey && !_flag1) {
+ } else if (sender == _asKey && !_isClimbingLadder) {
sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004B77D8);
}
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index 2fa7a9a..8074c58 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -141,7 +141,6 @@ public:
Scene2402(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Scene2402();
protected:
- Sprite *_sprite1;
Sprite *_asDoor;
Sprite *_ssButton;
Sprite *_asTape;
@@ -158,13 +157,11 @@ class Scene2403 : public Scene {
public:
Scene2403(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_sprite1;
- Sprite *_sprite2;
Sprite *_ssButton;
Sprite *_asTape;
Sprite *_asKey;
Sprite *_asLightCord;
- bool _flag1;
+ bool _isClimbingLadder;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -172,11 +169,10 @@ class Scene2406 : public Scene {
public:
Scene2406(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_sprite1;
Sprite *_asTape;
Sprite *_asKey;
NRect _clipRects[2];
- bool _flag1;
+ bool _isClimbingLadder;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 1da6b95af9d94ba5e8ceb6ce03467c3627022a48
https://github.com/scummvm/scummvm/commit/1da6b95af9d94ba5e8ceb6ce03467c3627022a48
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:39-07:00
Commit Message:
NEVERHOOD: Work on Module2500:
- Remove Class541 and Class542 and instead use AsCommonIdleCarLower and AsCommonIdleCarFull
- Some renaming
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7fa6906..066c4b4 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,8 +309,8 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 2;
- createModule(2400, -1);
+ _vm->gameState().sceneNum = 3;
+ createModule(2500, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index d324130..9d96510 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1031,7 +1031,7 @@ void AsScene1608Door::stCloseDoorDone() {
stopAnimation();
}
-AsScene1608IdleCarLower::AsScene1608IdleCarLower(NeverhoodEngine *vm, int16 x, int16 y)
+AsCommonIdleCarLower::AsCommonIdleCarLower(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
setDoDeltaX(1);
@@ -1039,7 +1039,7 @@ AsScene1608IdleCarLower::AsScene1608IdleCarLower(NeverhoodEngine *vm, int16 x, i
_newStickFrameIndex = 1;
}
-AsScene1608IdleCarFull::AsScene1608IdleCarFull(NeverhoodEngine *vm, int16 x, int16 y)
+AsCommonIdleCarFull::AsCommonIdleCarFull(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
setDoDeltaX(1);
@@ -1124,8 +1124,8 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x01600988);
_sprite2 = insertStaticSprite(0x491F38A8, 1100);
_asCar = createSprite<AsCommonCar>(this, 375, 227); // Create but don't add to the sprite list yet
- _asIdleCarLower = insertSprite<AsScene1608IdleCarLower>(375, 227);
- _asIdleCarFull = insertSprite<AsScene1608IdleCarFull>(375, 227);
+ _asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
+ _asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
_asCar->setVisible(false);
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene1608>(373, 220);
@@ -1168,8 +1168,8 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette("paPodRed", 65, 31, 65);
insertMouse433(0x01600988);
_asCar = insertSprite<AsCommonCar>(this, 375, 227);
- _asIdleCarLower = insertSprite<AsScene1608IdleCarLower>(375, 227);
- _asIdleCarFull = insertSprite<AsScene1608IdleCarFull>(375, 227);
+ _asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
+ _asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
_sprite2 = insertStaticSprite(0x491F38A8, 1100);
_kmScene1608 = createSprite<KmScene1608>(this, 439, 220); // Special Klayman handling...
sendMessage(_kmScene1608, 0x2032, 1);
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 3d6e831..8c794e0 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -117,14 +117,14 @@ protected:
void stCloseDoorDone();
};
-class AsScene1608IdleCarLower : public AnimatedSprite {
+class AsCommonIdleCarLower : public AnimatedSprite {
public:
- AsScene1608IdleCarLower(NeverhoodEngine *vm, int16 x, int16 y);
+ AsCommonIdleCarLower(NeverhoodEngine *vm, int16 x, int16 y);
};
-class AsScene1608IdleCarFull : public AnimatedSprite {
+class AsCommonIdleCarFull : public AnimatedSprite {
public:
- AsScene1608IdleCarFull(NeverhoodEngine *vm, int16 x, int16 y);
+ AsCommonIdleCarFull(NeverhoodEngine *vm, int16 x, int16 y);
};
class AsCommonCarConnector : public AnimatedSprite {
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 978695d..5d60a17 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/module2500.h"
+#include "neverhood/module1600.h"
namespace Neverhood {
@@ -212,24 +213,10 @@ uint32 Module2500::handleMessage(int messageNum, const MessageParam ¶m, Enti
}
void Module2500::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
+ // TODO Move to module class?
_childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
}
-Class541::Class541(NeverhoodEngine *vm, int16 x, int16 y)
- : AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
-
- startAnimation(0x1209E09F, 1, -1);
- _newStickFrameIndex = 1;
- setDoDeltaX(1);
-}
-
-Class542::Class542(NeverhoodEngine *vm, int16 x, int16 y)
- : AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
-
- _newStickFrameIndex = 0;
- setDoDeltaX(1);
-}
-
Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -250,8 +237,8 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_class437);
_asCar = createSprite<AsCommonCar>(this, 211, 400); // Create but don't add to the sprite list yet
- _class541 = insertSprite<Class541>(211, 400);
- _class542 = insertSprite<Class542>(211, 400);
+ _asIdleCarLower = insertSprite<AsCommonIdleCarLower>(211, 400);
+ _asIdleCarFull = insertSprite<AsCommonIdleCarFull>(211, 400);
insertStaticSprite(0xC42AC521, 1500);
if (which < 0) {
@@ -273,8 +260,8 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_kmScene2501->setDoDeltaX(1);
SetMessageHandler(&Scene2501::hmRidingCar);
SetUpdateHandler(&Scene2501::upRidingCar);
- _class541->setVisible(false);
- _class542->setVisible(false);
+ _asIdleCarLower->setVisible(false);
+ _asIdleCarFull->setVisible(false);
_currTrackIndex = which;
} else {
insertKlayman<KmScene2501>(162, 393);
@@ -334,8 +321,8 @@ void Scene2501::update() {
_klaymanInCar = true;
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
- _class541->setVisible(false);
- _class542->setVisible(false);
+ _asIdleCarLower->setVisible(false);
+ _asIdleCarFull->setVisible(false);
_asCar->setVisible(true);
sendMessage(_asCar, 0x2009, 0);
_asCar->handleUpdate();
@@ -371,8 +358,8 @@ void Scene2501::upGettingOutOfCar() {
SetMessageHandler(&Scene2501::handleMessage);
SetUpdateHandler(&Scene2501::update);
setRectList(0x004B2608);
- _class541->setVisible(true);
- _class542->setVisible(true);
+ _asIdleCarLower->setVisible(true);
+ _asIdleCarFull->setVisible(true);
_asCar->setVisible(false);
setMessageList(0x004B2570);
runMessageList();
@@ -498,8 +485,8 @@ void Scene2501::updateKlaymanCliprect() {
_kmScene2501->setClipRect(0, 0, 640, 388);
}
-Class450::Class450(NeverhoodEngine *vm)
- : StaticSprite(vm, 1400), _countdown(0), _flag1(false) {
+SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm)
+ : StaticSprite(vm, 1400), _countdown(0), _isSoundPlaying(false) {
_spriteResource.load2(0x070220D9);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -517,16 +504,16 @@ Class450::Class450(NeverhoodEngine *vm)
loadSound(1, 0x408C0034);
loadSound(2, 0x44043000);
loadSound(3, 0x44045000);
- SetMessageHandler(&Class450::handleMessage);
- SetUpdateHandler(&Class450::update);
+ SetMessageHandler(&SsScene2504Button::handleMessage);
+ SetUpdateHandler(&SsScene2504Button::update);
}
-void Class450::update() {
+void SsScene2504Button::update() {
StaticSprite::update();
- if (_flag1 && !isSoundPlaying(0) && !isSoundPlaying(1)) {
+ if (_isSoundPlaying && !isSoundPlaying(0) && !isSoundPlaying(1)) {
playSound(3);
setVisible(false);
- _flag1 = false;
+ _isSoundPlaying = false;
}
if (_countdown != 0 && (--_countdown) == 0) {
if (getSubVar(0x14800353, 0x01180951)) {
@@ -534,15 +521,15 @@ void Class450::update() {
} else {
playSound(1);
}
- _flag1 = true;
+ _isSoundPlaying = true;
}
}
-uint32 Class450::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene2504Button::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (_countdown == 0 && !_flag1) {
+ if (_countdown == 0 && !_isSoundPlaying) {
setVisible(true);
_countdown = 2;
if (getSubVar(0x14800353, 0x01180951)) {
@@ -561,13 +548,13 @@ uint32 Class450::handleMessage(int messageNum, const MessageParam ¶m, Entity
Scene2504::Scene2504(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- Sprite *class450;
+ Sprite *ssButton;
_surfaceFlag = true;
setBackground(0x90791B80);
setPalette(0x90791B80);
- class450 = insertSprite<Class450>();
- _vm->_collisionMan->addSprite(class450);
+ ssButton = insertSprite<SsScene2504Button>();
+ _vm->_collisionMan->addSprite(ssButton);
insertMouse435(0x91B8490F, 20, 620);
SetMessageHandler(&Scene2504::handleMessage);
SetUpdateHandler(&Scene::update);
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index e5b9157..60f762f 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -46,16 +46,6 @@ protected:
void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
-class Class541 : public AnimatedSprite {
-public:
- Class541(NeverhoodEngine *vm, int16 x, int16 y);
-};
-
-class Class542 : public AnimatedSprite {
-public:
- Class542(NeverhoodEngine *vm, int16 x, int16 y);
-};
-
class Scene2501 : public Scene {
public:
Scene2501(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -66,8 +56,8 @@ protected:
Sprite *_class517;
Sprite *_class519;
Sprite *_class520;
- Sprite *_class541;
- Sprite *_class542;
+ Sprite *_asIdleCarLower;
+ Sprite *_asIdleCarFull;
Klayman *_kmScene2501;
NPointArray *_trackPoints;
SceneInfo2700 *_sceneInfos[3];
@@ -89,12 +79,12 @@ protected:
void updateKlaymanCliprect();
};
-class Class450 : public StaticSprite {
+class SsScene2504Button : public StaticSprite {
public:
- Class450(NeverhoodEngine *vm);
+ SsScene2504Button(NeverhoodEngine *vm);
protected:
int _countdown;
- bool _flag1;
+ bool _isSoundPlaying;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: fcbab805079bff0b55cfdda51eb0ba15d6a2f228
https://github.com/scummvm/scummvm/commit/fcbab805079bff0b55cfdda51eb0ba15d6a2f228
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Rename stuff in Module2700 (also in Module2500 which uses some of it)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 066c4b4..68a59de 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -309,8 +309,9 @@ void GameModule::startup() {
#if 1
- _vm->gameState().sceneNum = 3;
- createModule(2500, -1);
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 1;
+ createModule(2700, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 5d60a17..f8053d2 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -233,8 +233,8 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette("paKlayRed", 0, 64, 0);
insertMouse433(0xE81111B0);
- _class437 = createSprite<Class437>(0x99BE9015); // Don't add this to the sprite list
- addEntity(_class437);
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x99BE9015); // Don't add this to the sprite list
+ addEntity(_ssTrackShadowBackground);
_asCar = createSprite<AsCommonCar>(this, 211, 400); // Create but don't add to the sprite list yet
_asIdleCarLower = insertSprite<AsCommonIdleCarLower>(211, 400);
@@ -276,9 +276,9 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_currTrackIndex = 0;
}
- _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
- _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
+ _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
insertSprite<AsCommonCarConnector>(_asCar);
_pointListsCount = 3;
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index 60f762f..3e018f9 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -52,10 +52,10 @@ public:
virtual ~Scene2501();
protected:
AsCommonCar *_asCar;
- Sprite *_class437;
- Sprite *_class517;
- Sprite *_class519;
- Sprite *_class520;
+ Sprite *_ssTrackShadowBackground;
+ Sprite *_asCarShadow;
+ Sprite *_asCarConnectorShadow;
+ Sprite *_asCarTrackShadow;
Sprite *_asIdleCarLower;
Sprite *_asIdleCarFull;
Klayman *_kmScene2501;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index ec0ddf0..73ea264 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -498,7 +498,7 @@ void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, con
_childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
}
-static const NPoint kClass517Points[] = {
+static const NPoint kCarShadowOffsets[] = {
{-63, 3},
{-48, 40},
{-33, 58},
@@ -511,7 +511,7 @@ static const NPoint kClass517Points[] = {
{ 26, 25}
};
-Class437::Class437(NeverhoodEngine *vm, uint32 fileHash)
+SsCommonTrackShadowBackground::SsCommonTrackShadowBackground(NeverhoodEngine *vm, uint32 fileHash)
: StaticSprite(vm, 0) {
_spriteResource.load2(fileHash);
@@ -523,20 +523,20 @@ Class437::Class437(NeverhoodEngine *vm, uint32 fileHash)
StaticSprite::update();
}
-Class517::Class517(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index)
+AsCommonCarShadow::AsCommonCarShadow(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index)
: AnimatedSprite(vm, 1100), _asCar(asCar), _index(index), _animFileHash(0) {
- SetUpdateHandler(&Class517::update);
+ SetUpdateHandler(&AsCommonCarShadow::update);
createShadowSurface(shadowSurface, 320, 240, 100); // TODO Use actual dimensions from resource
updateShadow();
}
-void Class517::update() {
+void AsCommonCarShadow::update() {
updateShadow();
AnimatedSprite::update();
}
-void Class517::updateShadow() {
+void AsCommonCarShadow::updateShadow() {
if (_asCar->getFrameIndex() != _currFrameIndex || _asCar->getCurrAnimFileHash() != _animFileHash) {
uint32 fileHash = _asCar->getCurrAnimFileHash();
if (fileHash == 0x35698F78 || fileHash == 0x192ADD30 || fileHash == 0x9C220DA4 ||
@@ -548,8 +548,8 @@ void Class517::updateShadow() {
}
_animFileHash = fileHash;
}
- _x = _asCar->getX() + kClass517Points[_index].x;
- _y = _asCar->getY() + kClass517Points[_index].y;
+ _x = _asCar->getX() + kCarShadowOffsets[_index].x;
+ _y = _asCar->getY() + kCarShadowOffsets[_index].y;
if (!_asCar->getVisible()) {
startAnimation(0x1209E09F, 0, -1);
_newStickFrameIndex = 0;
@@ -557,31 +557,31 @@ void Class517::updateShadow() {
setDoDeltaX(_asCar->isDoDeltaX() ? 1 : 0);
}
-Class519::Class519(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index)
+AsCommonCarConnectorShadow::AsCommonCarConnectorShadow(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index)
: AnimatedSprite(vm, 1100), _asCar(asCar), _index(index) {
- SetUpdateHandler(&Class519::update);
+ SetUpdateHandler(&AsCommonCarConnectorShadow::update);
createShadowSurface1(shadowSurface, 0x60281C10, 150);
startAnimation(0x60281C10, -1, -1);
_newStickFrameIndex = -2;
}
-void Class519::update() {
- _x = _asCar->getX() + kClass517Points[_index].x;
- _y = _asCar->getY() + kClass517Points[_index].y;
+void AsCommonCarConnectorShadow::update() {
+ _x = _asCar->getX() + kCarShadowOffsets[_index].x;
+ _y = _asCar->getY() + kCarShadowOffsets[_index].y;
AnimatedSprite::update();
}
-Class520::Class520(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex)
+AsCommonCarTrackShadow::AsCommonCarTrackShadow(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex)
: AnimatedSprite(vm, 1100), _asCar(asCar) {
- SetUpdateHandler(&Class520::update);
+ SetUpdateHandler(&AsCommonCarTrackShadow::update);
createShadowSurface1(shadowSurface, 0x0759129C, 100);
startAnimation(0x0759129C, frameIndex, -1);
_newStickFrameIndex = frameIndex;
}
-void Class520::update() {
+void AsCommonCarTrackShadow::update() {
_x = _asCar->getX();
_y = _asCar->getY();
AnimatedSprite::update();
@@ -590,6 +590,8 @@ void Class520::update() {
Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
+ Sprite *tempSprite;
+
NRect clipRect;
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(0x004B2240);
setGlobalVar(0x21E60190, 1);
@@ -604,21 +606,21 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B08180);
- _sprite1 = insertStaticSprite(0x1E086325, 1200);
+ tempSprite = insertStaticSprite(0x1E086325, 1200);
- clipRect.set(0, 0, 640, _sprite1->getDrawRect().x2());
+ clipRect.set(0, 0, 640, tempSprite->getDrawRect().x2());
if (sceneInfo->class437Filename) {
- _class437 = createSprite<Class437>(sceneInfo->class437Filename);
- addEntity(_class437);
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
+ addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
- _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
- _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
+ _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
} else {
- _class437 = NULL;
+ _ssTrackShadowBackground = NULL;
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
}
@@ -720,14 +722,14 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B04180);
- _class437 = createSprite<Class437>(0x12002035);
- addEntity(_class437);
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x12002035);
+ addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
- _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
insertSprite<AsCommonCarConnector>(_asCar);
- _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
+ _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
_dataResource.load(0x04310014);
@@ -897,16 +899,16 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
if (sceneInfo->class437Filename) {
- _class437 = createSprite<Class437>(sceneInfo->class437Filename);
- addEntity(_class437);
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
+ addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
- _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
- _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
+ _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
} else {
- _class437 = NULL;
- _class517 = NULL;
+ _ssTrackShadowBackground = NULL;
+ _asCarShadow = NULL;
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
}
@@ -942,12 +944,12 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
if (clipRect) {
_asCar->getClipRect() = *clipRect;
- if (_class517)
- _class517->getClipRect() = *clipRect;
- if (_class520)
- _class520->getClipRect() = *clipRect;
- if (_class519)
- _class519->getClipRect() = *clipRect;
+ if (_asCarShadow)
+ _asCarShadow->getClipRect() = *clipRect;
+ if (_asCarTrackShadow)
+ _asCarTrackShadow->getClipRect() = *clipRect;
+ if (_asCarConnectorShadow)
+ _asCarConnectorShadow->getClipRect() = *clipRect;
if (_asCarConnector)
_asCarConnector->getClipRect() = *clipRect;
}
@@ -1001,14 +1003,14 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x08B8C180);
- _class437 = createSprite<Class437>(0x18808B88);
- addEntity(_class437);
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x18808B88);
+ addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
- _class517 = insertSprite<Class517>(_asCar, _class437->getSurface(), 4);
+ _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
- _class520 = insertSprite<Class520>(_asCar, _class437->getSurface(), 4);
- _class519 = insertSprite<Class519>(_asCar, _class437->getSurface(), 4);
+ _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
_dataResource.load(0x06000162);
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index b2210c5..4274bcc 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -49,14 +49,14 @@ protected:
void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
-class Class437 : public StaticSprite {
+class SsCommonTrackShadowBackground : public StaticSprite {
public:
- Class437(NeverhoodEngine *vm, uint32 fileHash);
+ SsCommonTrackShadowBackground(NeverhoodEngine *vm, uint32 fileHash);
};
-class Class517 : public AnimatedSprite {
+class AsCommonCarShadow : public AnimatedSprite {
public:
- Class517(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index);
+ AsCommonCarShadow(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index);
protected:
uint _index;
AnimatedSprite *_asCar;
@@ -65,18 +65,18 @@ protected:
void updateShadow();
};
-class Class519 : public AnimatedSprite {
+class AsCommonCarConnectorShadow : public AnimatedSprite {
public:
- Class519(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index);
+ AsCommonCarConnectorShadow(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index);
protected:
uint _index;
Sprite *_asCar;
void update();
};
-class Class520 : public AnimatedSprite {
+class AsCommonCarTrackShadow : public AnimatedSprite {
public:
- Class520(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex);
+ AsCommonCarTrackShadow(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex);
protected:
Sprite *_asCar;
void update();
@@ -87,12 +87,11 @@ public:
Scene2701(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
AsCommonCar *_asCar;
- Sprite *_class437;
- Sprite *_class517;
- Sprite *_class520;
- Sprite *_class519;
+ Sprite *_ssTrackShadowBackground;
+ Sprite *_asCarShadow;
+ Sprite *_asCarTrackShadow;
+ Sprite *_asCarConnectorShadow;
Sprite *_asCarConnector;
- Sprite *_sprite1;
int _which1, _which2;
NPointArray *_trackPoints;
uint32 handleMessage42F500(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -104,10 +103,10 @@ public:
Scene2702(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
AsCommonCar *_asCar;
- Sprite *_class437;
- Sprite *_class517;
- Sprite *_class520;
- Sprite *_class519;
+ Sprite *_ssTrackShadowBackground;
+ Sprite *_asCarShadow;
+ Sprite *_asCarTrackShadow;
+ Sprite *_asCarConnectorShadow;
int16 _newTrackDestX;
int _currTrackIndex, _newTrackIndex;
int _count;
@@ -127,11 +126,11 @@ public:
const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
protected:
AsCommonCar *_asCar;
- Sprite *_class437;
- Sprite *_class517;
+ Sprite *_ssTrackShadowBackground;
+ Sprite *_asCarShadow;
Sprite *_asCarConnector;
- Sprite *_class520;
- Sprite *_class519;
+ Sprite *_asCarTrackShadow;
+ Sprite *_asCarConnectorShadow;
int _which1, _which2;
NPointArray *_trackPoints;
NRectArray *_rectList;
@@ -144,11 +143,11 @@ public:
Scene2706(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
AsCommonCar *_asCar;
- Sprite *_class437;
- Sprite *_class517;
+ Sprite *_ssTrackShadowBackground;
+ Sprite *_asCarShadow;
Sprite *_asCarConnector;
- Sprite *_class520;
- Sprite *_class519;
+ Sprite *_asCarTrackShadow;
+ Sprite *_asCarConnectorShadow;
int16 _newTrackDestX;
int _currTrackIndex, _newTrackIndex;
NPointArray *_trackPoints;
Commit: 5aee04b127f96305542d7b37d33f57c5dfc0f9ec
https://github.com/scummvm/scummvm/commit/5aee04b127f96305542d7b37d33f57c5dfc0f9ec
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Work on Module2800:
- Rename KmScene2803b to KmScene2803Small; Scene2803b to Scene2803Small
- Rename lots of stuff
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 68a59de..5bcd29a 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -310,8 +310,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 1;
- createModule(2700, -1);
+ _vm->gameState().sceneNum = 11;
+ createModule(2800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 90ba8aa..ee4bfe1 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -5698,13 +5698,13 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2803b::KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_dataResource.load(0x81120132);
}
-uint32 KmScene2803b::xHandleMessage(int messageNum, const MessageParam ¶m) {
+uint32 KmScene2803Small::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x4001:
case 0x4800:
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 90e71de..1ac4519 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -692,9 +692,9 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
-class KmScene2803b : public Klayman {
+class KmScene2803Small : public Klayman {
public:
- KmScene2803b(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2803Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 95e2c3e..1ec23e0 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -78,7 +78,7 @@ void Module2800::createScene(int sceneNum, int which) {
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
//setGlobalVar(0x1860C990,1);//DEBUG
if (getGlobalVar(0x1860C990))
- _childObject = new Scene2803b(_vm, this, which);
+ _childObject = new Scene2803Small(_vm, this, which);
else
_childObject = new Scene2803(_vm, this, which);
break;
@@ -477,27 +477,27 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
AsScene2803LightCord::AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
- _flag1(false), _flag2(false) {
+ _isPulled(false), _isBusy(false) {
createSurface(1010, 640, 480); // TODO Use correct size from the two hashes
SetUpdateHandler(&AnimatedSprite::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
_x = x;
_y = y;
- sub4343C0();
+ stIdle();
}
uint32 AsScene2803LightCord::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (!_flag2 && param.asInteger() == calcHash("ClickSwitch")) {
+ if (!_isBusy && param.asInteger() == calcHash("ClickSwitch")) {
sendMessage(_parentScene, 0x480F, 0);
playSound(0, 0x4E1CA4A0);
}
break;
case 0x480F:
- sub434380();
+ stPulled();
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -509,7 +509,7 @@ uint32 AsScene2803LightCord::handleMessage(int messageNum, const MessageParam &p
return messageResult;
}
-uint32 AsScene2803LightCord::handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2803LightCord::hmPulled(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -519,16 +519,16 @@ uint32 AsScene2803LightCord::handleMessage434340(int messageNum, const MessagePa
return messageResult;
}
-void AsScene2803LightCord::sub434380() {
- _flag2 = false;
- _flag1 = true;
+void AsScene2803LightCord::stPulled() {
+ _isBusy = false;
+ _isPulled = true;
startAnimation(_fileHash2, 0, -1);
- SetMessageHandler(&AsScene2803LightCord::handleMessage434340);
- NextState(&AsScene2803LightCord::sub4343C0);
+ SetMessageHandler(&AsScene2803LightCord::hmPulled);
+ NextState(&AsScene2803LightCord::stIdle);
}
-void AsScene2803LightCord::sub4343C0() {
- _flag1 = false;
+void AsScene2803LightCord::stIdle() {
+ _isPulled = false;
startAnimation(_fileHash1, 0, -1);
SetMessageHandler(&AsScene2803LightCord::handleMessage);
}
@@ -536,9 +536,9 @@ void AsScene2803LightCord::sub4343C0() {
void AsScene2803LightCord::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHash1 = fileHash1;
_fileHash2 = fileHash2;
- if (_flag1) {
+ if (_isPulled) {
startAnimation(_fileHash2, _currFrameIndex, -1);
- _flag2 = true;
+ _isBusy = true;
} else {
startAnimation(_fileHash1, 0, -1);
}
@@ -575,7 +575,7 @@ AsScene2803Rope::AsScene2803Rope(NeverhoodEngine *vm, Scene *parentScene, int16
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&AsScene2803Rope::handleMessage);
startAnimation(0x9D098C23, 35, 53);
- NextState(&AsScene2803Rope::sub476A70);
+ NextState(&AsScene2803Rope::stReleased);
_x = x;
_y = -276;
}
@@ -585,7 +585,7 @@ uint32 AsScene2803Rope::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x3002:
startAnimation(0x9D098C23, 50, -1);
- SetMessageHandler(&AsScene2803Rope::handleMessage4769E0);
+ SetMessageHandler(&AsScene2803Rope::hmReleased);
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -597,7 +597,7 @@ uint32 AsScene2803Rope::handleMessage(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 AsScene2803Rope::handleMessage4769E0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2803Rope::hmReleased(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -613,7 +613,7 @@ uint32 AsScene2803Rope::handleMessage4769E0(int messageNum, const MessageParam &
return messageResult;
}
-void AsScene2803Rope::sub476A70() {
+void AsScene2803Rope::stReleased() {
startAnimation(0x8258A030, 0, 1);
NextState(&AsScene2803Rope::stHide);
}
@@ -624,7 +624,7 @@ void AsScene2803Rope::stHide() {
}
Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _field134(0) {
+ : Scene(vm, parentModule, true), _paletteArea(0) {
static const uint32 kScene2803FileHashes1[] = {
0,
@@ -648,7 +648,7 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x00900849);
_surfaceFlag = true;
-
+
_background = new DirtyBackground(_vm, 0);
_background->createSurface(0, 640, 480);
addBackground(_background);
@@ -682,75 +682,75 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite9 = (StaticSprite*)insertStaticSprite(0x341A0237, 1100);
_sprite10 = insertStaticSprite(0x855820A3, 1200);
- _clipRects1[0].x1 = 0;
- _clipRects1[0].y1 = 0;
- _clipRects1[0].x2 = 640;
- _clipRects1[0].y2 = _sprite8->getDrawRect().y2();
+ _clipRectsFloor[0].x1 = 0;
+ _clipRectsFloor[0].y1 = 0;
+ _clipRectsFloor[0].x2 = 640;
+ _clipRectsFloor[0].y2 = _sprite8->getDrawRect().y2();
- _clipRects1[1].x1 = _sprite8->getDrawRect().x2();
- _clipRects1[1].y1 = _sprite8->getDrawRect().y2();
- _clipRects1[1].x2 = 640;
- _clipRects1[1].y2 = 480;
+ _clipRectsFloor[1].x1 = _sprite8->getDrawRect().x2();
+ _clipRectsFloor[1].y1 = _sprite8->getDrawRect().y2();
+ _clipRectsFloor[1].x2 = 640;
+ _clipRectsFloor[1].y2 = 480;
- _clipRects2[0].x1 = _sprite5->getDrawRect().x;
- _clipRects2[0].y1 = 0;
- _clipRects2[0].x2 = _sprite5->getDrawRect().x2();
- _clipRects2[0].y2 = _sprite5->getDrawRect().y2();
+ _clipRectsStairs[0].x1 = _sprite5->getDrawRect().x;
+ _clipRectsStairs[0].y1 = 0;
+ _clipRectsStairs[0].x2 = _sprite5->getDrawRect().x2();
+ _clipRectsStairs[0].y2 = _sprite5->getDrawRect().y2();
- _clipRects2[1].x1 = _sprite6->getDrawRect().x;
- _clipRects2[1].y1 = 0;
- _clipRects2[1].x2 = _sprite3->getDrawRect().x;
- _clipRects2[1].y2 = _sprite6->getDrawRect().y2();
+ _clipRectsStairs[1].x1 = _sprite6->getDrawRect().x;
+ _clipRectsStairs[1].y1 = 0;
+ _clipRectsStairs[1].x2 = _sprite3->getDrawRect().x;
+ _clipRectsStairs[1].y2 = _sprite6->getDrawRect().y2();
- _clipRects2[2].x1 = _sprite3->getDrawRect().x;
- _clipRects2[2].y1 = 0;
- _clipRects2[2].x2 = _sprite4->getDrawRect().x2();
- _clipRects2[2].y2 = 480;
+ _clipRectsStairs[2].x1 = _sprite3->getDrawRect().x;
+ _clipRectsStairs[2].y1 = 0;
+ _clipRectsStairs[2].x2 = _sprite4->getDrawRect().x2();
+ _clipRectsStairs[2].y2 = 480;
if (which < 0) {
- insertKlayman<KmScene2803>(302, 445, _clipRects1, 2);
+ insertKlayman<KmScene2803>(302, 445, _clipRectsFloor, 2);
setMessageList(0x004B79F0);
- sub476090();
+ klaymanFloor();
} else if (which == 1) {
- insertKlayman<KmScene2803>(200, 445, _clipRects1, 2);
+ insertKlayman<KmScene2803>(200, 445, _clipRectsFloor, 2);
setMessageList(0x004B79C8);
- sub476090();
+ klaymanFloor();
} else if (which == 3) {
NPoint pt = _dataResource.getPoint(0xC2A08694);
- insertKlayman<KmScene2803>(pt.x, pt.y, _clipRects2, 3);
+ insertKlayman<KmScene2803>(pt.x, pt.y, _clipRectsStairs, 3);
setMessageList(0x004B7A00);
- sub475FF0();
+ klaymanStairs();
} else if (which == 5) {
- insertKlayman<KmScene2803>(253, 298, _clipRects2, 3);
+ insertKlayman<KmScene2803>(253, 298, _clipRectsStairs, 3);
setMessageList(0x004B7A00);
- sub475FF0();
+ klaymanStairs();
} else if (which == 6) {
_asRope = insertSprite<AsScene2803Rope>(this, 384);
_asRope->setClipRect(0, 25, 640, 480);
- insertKlayman<KmScene2803>(384, 0, _clipRects1, 2);
+ insertKlayman<KmScene2803>(384, 0, _clipRectsFloor, 2);
sendEntityMessage(_klayman, 0x1014, _asRope);
_klayman->setClipRect(0, 25, 640, 480);
setMessageList(0x004B7A78);
- sub476090();
+ klaymanFloor();
} else if (which == 2) {
- insertKlayman<KmScene2803>(400, 445, _clipRects1, 2);
+ insertKlayman<KmScene2803>(400, 445, _clipRectsFloor, 2);
setMessageList(0x004B79F8);
- sub476090();
+ klaymanFloor();
} else {
- insertKlayman<KmScene2803>(50, 231, _clipRects2, 3);
+ insertKlayman<KmScene2803>(50, 231, _clipRectsStairs, 3);
setMessageList(0x004B79C0);
- sub475FF0();
+ klaymanStairs();
}
- sub476180();
+ changeBackground();
}
-void Scene2803::update475E40() {
+void Scene2803::upKlaymanStairs() {
if (_klayman->getX() < 350) {
- sub4765D0();
+ setPaletteArea0();
} else {
- sub4765F0();
+ setPaletteArea1();
}
Scene::update();
}
@@ -759,7 +759,7 @@ uint32 Scene2803::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x480F:
- sub476130();
+ toggleBackground();
// NOTE Intentional fall-through
case 0x100D:
if (param.asInteger() == 0x84251F82)
@@ -777,20 +777,20 @@ uint32 Scene2803::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList(0x004B7A88);
break;
case 0x482A:
- sub475FF0();
- sub4765F0();
+ klaymanStairs();
+ setPaletteArea1();
break;
case 0x482B:
- sub476090();
- sub4765D0();
+ klaymanFloor();
+ setPaletteArea0();
break;
}
return messageResult;
}
-void Scene2803::sub475FF0() {
- SetUpdateHandler(&Scene2803::update475E40);
- // TODO _klayman->setClipRects(_clipRects2, 3);
+void Scene2803::klaymanStairs() {
+ SetUpdateHandler(&Scene2803::upKlaymanStairs);
+ _klayman->getSurface()->setClipRects(_clipRectsStairs, 3);
sendMessage(_klayman, 0x482C, 0xE5A48297);
_sprite3->setVisible(true);
_sprite4->setVisible(true);
@@ -801,9 +801,9 @@ void Scene2803::sub475FF0() {
_sprite9->setVisible(false);
}
-void Scene2803::sub476090() {
+void Scene2803::klaymanFloor() {
SetUpdateHandler(&Scene::update);
- // TODO _klayman->setClipRects(_clipRects1, 2);
+ _klayman->getSurface()->setClipRects(_clipRectsFloor, 2);
sendMessage(_klayman, 0x482C, 0);
_sprite3->setVisible(false);
_sprite4->setVisible(false);
@@ -814,12 +814,12 @@ void Scene2803::sub476090() {
_sprite9->setVisible(true);
}
-void Scene2803::sub476130() {
+void Scene2803::toggleBackground() {
setGlobalVar(0x190A1D18, getGlobalVar(0x190A1D18) ? 0 : 1);
- sub476180();
+ changeBackground();
}
-void Scene2803::sub476180() {
+void Scene2803::changeBackground() {
// TODO? g_screen->resetDirtyRects();
if (getGlobalVar(0x190A1D18)) {
_asLightCord->setFileHashes(0x8FAD5932, 0x276E1A3D);
@@ -892,46 +892,46 @@ void Scene2803::sub476180() {
}
_sprite10->setVisible(false);
}
- sub476610();
+ updatePaletteArea();
}
-void Scene2803::sub4765D0() {
- if (_field134) {
- _field134 = 0;
- sub476610();
+void Scene2803::setPaletteArea0() {
+ if (_paletteArea != 0) {
+ _paletteArea = 0;
+ updatePaletteArea();
}
}
-void Scene2803::sub4765F0() {
- if (!_field134) {
- _field134 = 1;
- sub476610();
+void Scene2803::setPaletteArea1() {
+ if (_paletteArea != 1) {
+ _paletteArea = 1;
+ updatePaletteArea();
}
}
-void Scene2803::sub476610() {
+void Scene2803::updatePaletteArea() {
uint32 fadePaletteHash;
if (getGlobalVar(0x190A1D18))
- fadePaletteHash = _field134 ? 0xB103B604 : 0x412A423E;
+ fadePaletteHash = (_paletteArea == 1) ? 0xB103B604 : 0x412A423E;
else
- fadePaletteHash = _field134 ? 0x0263D144 : 0x29800A01;
+ fadePaletteHash = (_paletteArea == 1) ? 0x0263D144 : 0x29800A01;
_palette->addBasePalette(fadePaletteHash, 0, 64, 0);
_palette->startFadeToPalette(12);
}
-Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _palStatus(0) {
+Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _paletteArea(0) {
- static const uint32 kScene2803bFileHashes1[] = {
+ static const uint32 kScene2803SmallFileHashes1[] = {
0, 0x081000F1, 0x08100171, 0x08100271
};
- static const uint32 kScene2803bFileHashes2[] = {
+ static const uint32 kScene2803SmallFileHashes2[] = {
0, 0x286800D4, 0x286806D4, 0x28680AD4
};
_surfaceFlag = true;
- SetMessageHandler(&Scene2803b::handleMessage);
+ SetMessageHandler(&Scene2803Small::handleMessage);
loadDataResource(0x81120132);
insertMouse433(0x00A05290);
@@ -954,7 +954,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
if (getSubVar(0x0C601058, 0) == 0)
insertStaticSprite(0x66121222, 100);
else
- insertSprite<AnimatedSprite>(kScene2803bFileHashes1[getSubVar(0x0C601058, 0)], 100, 529, 326);
+ insertSprite<AnimatedSprite>(kScene2803SmallFileHashes1[getSubVar(0x0C601058, 0)], 100, 529, 326);
if (getSubVar(0x0C601058, 1) == 3)
insertStaticSprite(0x64330236, 100);
@@ -980,7 +980,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
if (getSubVar(0x0C601058, 0) == 0)
insertStaticSprite(0x50C027A8, 100);
else
- insertSprite<AnimatedSprite>(kScene2803bFileHashes2[getSubVar(0x0C601058, 0)], 100, 529, 326);
+ insertSprite<AnimatedSprite>(kScene2803SmallFileHashes2[getSubVar(0x0C601058, 0)], 100, 529, 326);
if (getSubVar(0x0C601058, 1) == 3)
insertStaticSprite(0xD48077A0, 100);
@@ -994,35 +994,35 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite7->setVisible(false);
if (which < 0) {
- insertKlayman<KmScene2803b>(479, 435);
- sub460110();
+ insertKlayman<KmScene2803Small>(479, 435);
+ klaymanFloor();
setMessageList(0x004B60D8);
} else if (which == 3) {
NPoint pt = _dataResource.getPoint(0x096520ED);
- insertKlayman<KmScene2803b>(pt.x, pt.y);
- sub460090();
+ insertKlayman<KmScene2803Small>(pt.x, pt.y);
+ klaymanSlope();
setMessageList(0x004B6100);
_klayman->setRepl(64, 0);
} else if (which == 4) {
NPoint pt = _dataResource.getPoint(0x20C6238D);
- insertKlayman<KmScene2803b>(pt.x, pt.y);
- sub460090();
+ insertKlayman<KmScene2803Small>(pt.x, pt.y);
+ klaymanSlope();
setMessageList(0x004B60F8);
_klayman->setRepl(64, 0);
} else if (which == 5) {
NPoint pt = _dataResource.getPoint(0x2146690D);
- insertKlayman<KmScene2803b>(pt.x, pt.y);
- sub460090();
+ insertKlayman<KmScene2803Small>(pt.x, pt.y);
+ klaymanSlope();
setMessageList(0x004B6100);
_klayman->setRepl(64, 0);
} else if (which == 2) {
NPoint pt = _dataResource.getPoint(0x104C03ED);
- insertKlayman<KmScene2803b>(pt.x, pt.y);
- sub460110();
+ insertKlayman<KmScene2803Small>(pt.x, pt.y);
+ klaymanFloor();
setMessageList(0x004B6138);
} else {
- insertKlayman<KmScene2803b>(135, 444);
- sub460110();
+ insertKlayman<KmScene2803Small>(135, 444);
+ klaymanFloor();
setMessageList(0x004B60E0, false);
_sprite6->setVisible(true);
_sprite7->setVisible(true);
@@ -1030,7 +1030,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
}
-uint32 Scene2803b::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene2803Small::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -1041,7 +1041,7 @@ uint32 Scene2803b::handleMessage(int messageNum, const MessageParam ¶m, Enti
_klayman->setX(pt.x);
_klayman->setY(pt.y);
_klayman->processDelta();
- sub460110();
+ klaymanFloor();
_klayman->setClipRect(517, 401, 536, 480);
setMessageList(0x004B6198);
} else if (param.asInteger() == 0xB00C7C48) {
@@ -1055,7 +1055,7 @@ uint32 Scene2803b::handleMessage(int messageNum, const MessageParam ¶m, Enti
_klayman->setX(560);
_klayman->setY(315);
_klayman->processDelta();
- sub460090();
+ klaymanSlope();
setMessageList(0x004B61A0);
} else if (param.asInteger() == 0x002CAA68) {
setMessageList(0x004B61A8);
@@ -1063,14 +1063,14 @@ uint32 Scene2803b::handleMessage(int messageNum, const MessageParam ¶m, Enti
break;
case 0x482A:
if (_klayman->getX() < 200) {
- sub4601D0();
+ setPaletteArea3();
} else if (_klayman->getX() < 500) {
setSurfacePriority(_sprite5->getSurface(), 1100);
sendMessage(_klayman, 0x482C, 0);
- sub4601B0();
+ setPaletteArea2();
} else {
_klayman->setClipRect(517, 401, 536, 480);
- sub4601B0();
+ setPaletteArea2();
}
break;
case 0x482B:
@@ -1084,72 +1084,72 @@ uint32 Scene2803b::handleMessage(int messageNum, const MessageParam ¶m, Enti
return 0;
}
-void Scene2803b::update45FCB0() {
+void Scene2803Small::upKlaymanSlope() {
if (_klayman->getX() < 388) {
_klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
- sub460170();
+ setPaletteArea0();
} else if (_klayman->getX() < 500) {
_klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2());
- sub460190();
+ setPaletteArea1();
}
Scene::update();
}
-void Scene2803b::update45FD50() {
+void Scene2803Small::upKlaymanFloor() {
if (_klayman->getX() > 194 && _klayman->getX() < 273)
- sub4601B0();
+ setPaletteArea2();
else if (_klayman->getX() > 155 && _klayman->getX() < 300)
- sub460170();
+ setPaletteArea0();
Scene::update();
}
-void Scene2803b::sub460090() {
- SetUpdateHandler(&Scene2803b::update45FCB0);
+void Scene2803Small::klaymanSlope() {
+ SetUpdateHandler(&Scene2803Small::upKlaymanSlope);
sendMessage(_klayman, 0x482C, 0x23C630D9);
_klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2());
_klayman->setRepl(64, 0);
_sprite1->setVisible(true);
}
-void Scene2803b::sub460110() {
- SetUpdateHandler(&Scene2803b::update45FD50);
+void Scene2803Small::klaymanFloor() {
+ SetUpdateHandler(&Scene2803Small::upKlaymanFloor);
sendMessage(_klayman, 0x482C, 0x2086222D);
_klayman->setClipRect(0, 0, 640, 480);
_klayman->clearRepl();
_sprite1->setVisible(false);
}
-void Scene2803b::sub460170() {
- if (_palStatus != 0) {
- _palStatus = 0;
- sub4601F0(false);
+void Scene2803Small::setPaletteArea0() {
+ if (_paletteArea != 0) {
+ _paletteArea = 0;
+ updatePaletteArea(false);
}
}
-void Scene2803b::sub460190() {
- if (_palStatus != 1) {
- _palStatus = 1;
- sub4601F0(false);
+void Scene2803Small::setPaletteArea1() {
+ if (_paletteArea != 1) {
+ _paletteArea = 1;
+ updatePaletteArea(false);
}
}
-void Scene2803b::sub4601B0() {
- if (_palStatus != 2) {
- _palStatus = 2;
- sub4601F0(false);
+void Scene2803Small::setPaletteArea2() {
+ if (_paletteArea != 2) {
+ _paletteArea = 2;
+ updatePaletteArea(false);
}
}
-void Scene2803b::sub4601D0() {
- if (_palStatus != 3) {
- _palStatus = 3;
- sub4601F0(true);
+void Scene2803Small::setPaletteArea3() {
+ if (_paletteArea != 3) {
+ _paletteArea = 3;
+ updatePaletteArea(true);
}
}
-void Scene2803b::sub4601F0(bool flag) {
+void Scene2803Small::updatePaletteArea(bool instantly) {
if (getGlobalVar(0x190A1D18)) {
- switch (_palStatus) {
+ switch (_paletteArea) {
case 1:
_palette->addBasePalette(0x0A938204, 0, 64, 0);
break;
@@ -1164,7 +1164,7 @@ void Scene2803b::sub4601F0(bool flag) {
break;
}
} else {
- switch (_palStatus) {
+ switch (_paletteArea) {
case 2:
_palette->addBasePalette(0x0263D144, 0, 64, 0);
break;
@@ -1176,11 +1176,7 @@ void Scene2803b::sub4601F0(bool flag) {
break;
}
}
- if (flag) {
- _palette->startFadeToPalette(0);
- } else {
- _palette->startFadeToPalette(12);
- }
+ _palette->startFadeToPalette(instantly ? 0 : 12);
}
SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene)
@@ -2441,10 +2437,11 @@ uint32 Scene2808::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2808::update() {
- // DEBUG: Show correct values
+ // DEBUG>>>: Show correct values
debug("---------------");
debug("%03d %03d %03d", getSubVar(0x0C601058, 0), getSubVar(0x0C601058, 1), getSubVar(0x0C601058, 2));
debug("%03d %03d %03d", _asTestTubes[0]->getFillLevel(), _asTestTubes[1]->getFillLevel(), _asTestTubes[2]->getFillLevel());
+ // DEBUG<<<
Scene::update();
if (_countdown != 0 && (--_countdown) == 0) {
@@ -2699,7 +2696,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE438);
setRectList(0x004AE810);
- _flag1 = false;
+ _isRopingDown = false;
_vm->_collisionMan->removeSprite(_asTape);
} else {
insertKlayman<KmScene2810>(300, 424, _clipRects, 2);
@@ -2711,7 +2708,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
_clipRects[0].y1 = _sprite1->getDrawRect().y;
- _flag1 = false;
+ _isRopingDown = false;
}
} else if (which == 1) {
insertKlayman<KmScene2810>(186, 64, _clipRects, 2);
@@ -2719,7 +2716,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x84130112);
tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
- _flag1 = true;
+ _isRopingDown = true;
_clipRects[0].y1 = _sprite1->getDrawRect().y;
} else if (which == 5) {
insertStaticSprite(0xC3007EA0, 100);
@@ -2734,7 +2731,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addSound(0x84400112, 0xC874EE6C);
_vm->_soundMan->playSoundLooping(0xC874EE6C);
_vm->_soundMan->setSoundVolume(0xC874EE6C, 50);
- _flag1 = false;
+ _isRopingDown = false;
} else if ((which >= 11 && which <= 14) || (which >= 19 && which <= 22) || which == 3) {
if (getGlobalVar(0x1860C990)) {
insertKlayman<KmScene2810Small>((int16)getGlobalVar(0x00D30138), 448);
@@ -2743,30 +2740,30 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE6D8);
setRectList(0x004AE810);
- _flag1 = false;
+ _isRopingDown = false;
_vm->_collisionMan->removeSprite(_asTape);
} else {
- sub406650();
+ insertKlaymanLadder();
if (getGlobalVar(0x00188211)) {
setMessageList(0x004AE6E8);
setGlobalVar(0x00188211, 0);
- _flag1 = false;
+ _isRopingDown = false;
} else {
setMessageList(0x004AE6D8);
- _flag1 = false;
+ _isRopingDown = false;
}
}
} else if (which >= 15 && which <= 18) {
- sub406650();
+ insertKlaymanLadder();
setMessageList(0x004AE6E0);
- _flag1 = false;
+ _isRopingDown = false;
} else if (which == 4) {
if (getGlobalVar(0x1860C990)) {
insertKlayman<KmScene2810Small>(473, 448);
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE428);
setRectList(0x004AE810);
- _flag1 = false;
+ _isRopingDown = false;
_vm->_collisionMan->removeSprite(_asTape);
} else {
insertKlayman<KmScene2810>(450, 424, _clipRects, 2);
@@ -2778,14 +2775,14 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480);
_clipRects[0].y1 = _sprite1->getDrawRect().y;
- _flag1 = false;
+ _isRopingDown = false;
}
} else {
insertKlayman<KmScene2810Small>(120, 448);
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE410);
setRectList(0x004AE810);
- _flag1 = false;
+ _isRopingDown = false;
_vm->_collisionMan->removeSprite(_asTape);
}
@@ -2797,7 +2794,7 @@ Scene2810::~Scene2810() {
_vm->_soundMan->deleteSoundGroup(0x84400112);
}
-void Scene2810::sub406650() {
+void Scene2810::insertKlaymanLadder() {
Sprite *tempSprite;
if (getGlobalVar(0x00188211)) {
@@ -2851,18 +2848,20 @@ uint32 Scene2810::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList(0x004AE688);
break;
case 0x2000:
+ debug("0x2000");
setRectList(0x004AE800);
- _flag1 = true;
+ _isRopingDown = true;
break;
case 0x2001:
+ debug("0x2001");
if (getGlobalVar(0x0018CA22))
loadDataResource(0x84130112);
else
loadDataResource(0x84500132);
- _flag1 = false;
+ _isRopingDown = false;
break;
case 0x4826:
- if (sender == _asTape && getGlobalVar(0x1860C990) == 0 && !_flag1) {
+ if (sender == _asTape && getGlobalVar(0x1860C990) == 0 && !_isRopingDown) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004AE750);
}
@@ -2919,7 +2918,7 @@ uint32 AsScene2812Rope::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x4806:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
- sub413E00();
+ stRopingDown();
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -2931,7 +2930,7 @@ uint32 AsScene2812Rope::handleMessage(int messageNum, const MessageParam ¶m,
return messageResult;
}
-uint32 AsScene2812Rope::handleMessage413DC0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsScene2812Rope::hmRopingDown(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -2941,10 +2940,10 @@ uint32 AsScene2812Rope::handleMessage413DC0(int messageNum, const MessageParam &
return messageResult;
}
-void AsScene2812Rope::sub413E00() {
+void AsScene2812Rope::stRopingDown() {
sendMessage(_parentScene, 0x4806, 0);
startAnimation(0x9D098C23, 0, -1);
- SetMessageHandler(&AsScene2812Rope::handleMessage413DC0);
+ SetMessageHandler(&AsScene2812Rope::hmRopingDown);
}
AsScene2812TrapDoor::AsScene2812TrapDoor(NeverhoodEngine *vm)
@@ -2967,7 +2966,7 @@ uint32 AsScene2812TrapDoor::handleMessage(int messageNum, const MessageParam &pa
}
Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _palStatus(0) {
+ : Scene(vm, parentModule, true), _paletteArea(0) {
if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
setGlobalVar(0x13382860, 3);
@@ -3003,19 +3002,19 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite4 = insertStaticSprite(0x08592134, 1100);
if (which < 0) {
- _flag1 = false;
+ _isRopingDown = false;
insertKlayman<KmScene2812>(272, 432);
setMessageList(0x004AF560);
_sprite1->setVisible(false);
_klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
} else if (which == 1) {
- _flag1 = false;
+ _isRopingDown = false;
insertKlayman<KmScene2812>(338, 398);
setMessageList(0x004AF588);
- setPalStatus1(1);
+ setPaletteArea1(true);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2());
} else if (which == 2) {
- _flag1 = false;
+ _isRopingDown = false;
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene2812>(554, 432);
_klayman->setDoDeltaX(1);
@@ -3026,10 +3025,10 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1->setVisible(false);
_klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
} else {
- _flag1 = true;
+ _isRopingDown = true;
insertKlayman<KmScene2812>(150, 582);
setMessageList(0x004AF568);
- setPalStatus2(1);
+ setPaletteArea2(true);
_sprite1->setVisible(false);
_klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
}
@@ -3040,9 +3039,9 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene2812::update() {
if (_klayman->getX() < 220)
- setPalStatus2(0);
+ setPaletteArea2(false);
else if (_klayman->getX() < 240)
- setPalStatus0(0);
+ setPaletteArea0(false);
Scene::update();
}
@@ -3054,12 +3053,12 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendEntityMessage(_klayman, 0x1014, _asRope);
break;
case 0x2001:
- _flag1 = true;
+ _isRopingDown = true;
setRectList(0x004AF710);
_klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite4->getDrawRect().y2());
break;
case 0x2002:
- _flag1 = false;
+ _isRopingDown = false;
setRectList(0x004AF700);
_klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
break;
@@ -3068,21 +3067,21 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asTrapDoor, 0x2000, 0);
break;
case 0x4826:
- if (sender == _ssTape && !_flag1) {
+ if (sender == _ssTape && !_isRopingDown) {
sendEntityMessage(_klayman, 0x1014, _ssTape);
setMessageList(0x004AF658);
- } else if (sender == _asKey && !_flag1) {
+ } else if (sender == _asKey && !_isRopingDown) {
sendEntityMessage(_klayman, 0x1014, _asKey);
setMessageList(0x004AF668);
}
break;
case 0x482A:
- setPalStatus1(0);
+ setPaletteArea1(false);
_sprite1->setVisible(true);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2());
break;
case 0x482B:
- setPalStatus0(false);
+ setPaletteArea0(false);
_sprite1->setVisible(false);
_klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2());
break;
@@ -3090,39 +3089,35 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-void Scene2812::setPalStatus0(int fadeTime) {
- if (_palStatus != 0) {
- _palStatus = 0;
- setPalStatus(fadeTime);
+void Scene2812::setPaletteArea0(bool instantly) {
+ if (_paletteArea != 0) {
+ _paletteArea = 0;
+ updatePaletteArea(instantly);
}
}
-void Scene2812::setPalStatus1(int fadeTime) {
- if (_palStatus != 1) {
- _palStatus = 1;
- setPalStatus(fadeTime);
+void Scene2812::setPaletteArea1(bool instantly) {
+ if (_paletteArea != 1) {
+ _paletteArea = 1;
+ updatePaletteArea(instantly);
}
}
-void Scene2812::setPalStatus2(int fadeTime) {
- if (_palStatus != 2) {
- _palStatus = 2;
- setPalStatus(fadeTime);
+void Scene2812::setPaletteArea2(bool instantly) {
+ if (_paletteArea != 2) {
+ _paletteArea = 2;
+ updatePaletteArea(instantly);
}
}
-void Scene2812::setPalStatus(int fadeTime) {
- if (_palStatus == 0)
+void Scene2812::updatePaletteArea(bool instantly) {
+ if (_paletteArea == 0)
_palette->addBasePalette(0x05D30F11, 0, 64, 0);
- else if (_palStatus == 1)
+ else if (_paletteArea == 1)
_palette->addBasePalette(0x92CA2C9B, 0, 64, 0);
- else if (_palStatus == 2)
+ else if (_paletteArea == 2)
_palette->addBasePalette(0x381F92C5, 0, 64, 0);
- if (fadeTime > 0) {
- _palette->startFadeToPalette(0);
- } else {
- _palette->startFadeToPalette(12);
- }
+ _palette->startFadeToPalette(instantly ? 0 : 12);
}
Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 6317783..f0403f4 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -57,15 +57,15 @@ protected:
class AsScene2803LightCord : public AnimatedSprite {
public:
AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y);
- void sub434380();
- void sub4343C0();
+ void stPulled();
+ void stIdle();
void setFileHashes(uint32 fileHash1, uint32 fileHash2);
protected:
Scene *_parentScene;
uint32 _fileHash1, _fileHash2;
- bool _flag1, _flag2;
+ bool _isPulled, _isBusy;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage434340(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmPulled(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene2803TestTubeOne : public AnimatedSprite {
@@ -82,8 +82,8 @@ public:
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage4769E0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub476A70();
+ uint32 hmReleased(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stReleased();
void stHide();
};
@@ -104,25 +104,25 @@ protected:
StaticSprite *_sprite8;
StaticSprite *_sprite9;
Sprite *_sprite10;
- NRect _clipRects1[2];
- NRect _clipRects2[3];
- bool _field134;
+ NRect _clipRectsFloor[2];
+ NRect _clipRectsStairs[3];
+ int _paletteArea;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void update475E40();
- void sub475FF0();
- void sub476090();
- void sub476130();
- void sub476180();
- void sub4765D0();
- void sub4765F0();
- void sub476610();
+ void upKlaymanStairs();
+ void klaymanStairs();
+ void klaymanFloor();
+ void toggleBackground();
+ void changeBackground();
+ void setPaletteArea0();
+ void setPaletteArea1();
+ void updatePaletteArea();
};
-class Scene2803b : public Scene {
+class Scene2803Small : public Scene {
public:
- Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- int _palStatus;
+ int _paletteArea;
Sprite *_sprite1;
Sprite *_sprite2;
Sprite *_sprite3;
@@ -131,15 +131,15 @@ protected:
Sprite *_sprite6;
Sprite *_sprite7;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void update45FCB0();
- void update45FD50();
- void sub460090();
- void sub460110();
- void sub460170();
- void sub460190();
- void sub4601B0();
- void sub4601D0();
- void sub4601F0(bool flag);
+ void upKlaymanSlope();
+ void upKlaymanFloor();
+ void klaymanSlope();
+ void klaymanFloor();
+ void setPaletteArea0();
+ void setPaletteArea1();
+ void setPaletteArea2();
+ void setPaletteArea3();
+ void updatePaletteArea(bool instantly);
};
class Scene2804;
@@ -420,10 +420,10 @@ protected:
Sprite *_asTape;
Sprite *_sprite5;
Sprite *_sprite6;
- bool _flag1;
+ bool _isRopingDown;
NRect _clipRects[2];
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub406650();
+ void insertKlaymanLadder();
};
class AsScene2812Winch : public AnimatedSprite {
@@ -440,8 +440,8 @@ public:
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage413DC0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub413E00();
+ uint32 hmRopingDown(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stRopingDown();
};
class AsScene2812TrapDoor : public AnimatedSprite {
@@ -464,14 +464,14 @@ protected:
Sprite *_ssTape;
Sprite *_asKey;
Sprite *_sprite1;
- bool _flag1;
- int _palStatus;
+ bool _isRopingDown;
+ int _paletteArea;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void setPalStatus0(int fadeTime);
- void setPalStatus1(int fadeTime);
- void setPalStatus2(int fadeTime);
- void setPalStatus(int fadeTime);
+ void setPaletteArea0(bool instantly);
+ void setPaletteArea1(bool instantly);
+ void setPaletteArea2(bool instantly);
+ void updatePaletteArea(bool instantly);
};
class Scene2822 : public Scene {
Commit: 016638bd9ef38e1d46ae855ee1944ff149c11310
https://github.com/scummvm/scummvm/commit/016638bd9ef38e1d46ae855ee1944ff149c11310
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Rename stuff in Module2700
- Also fix the clipRect in Scene2701
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 5bcd29a..807d6e1 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -310,8 +310,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 11;
- createModule(2800, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(2700, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 73ea264..983e265 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -591,7 +591,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
Sprite *tempSprite;
-
+
NRect clipRect;
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(0x004B2240);
setGlobalVar(0x21E60190, 1);
@@ -608,7 +608,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x1E086325, 1200);
- clipRect.set(0, 0, 640, tempSprite->getDrawRect().x2());
+ clipRect.set(0, 0, 640, tempSprite->getDrawRect().y2());
if (sceneInfo->class437Filename) {
@@ -625,7 +625,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
}
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
-
+
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
@@ -649,15 +649,15 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
_asCarConnector->setClipRect(clipRect);
if (which == 1) {
- SetMessageHandler(&Scene2701::handleMessage42F500);
+ SetMessageHandler(&Scene2701::hmRidingCar);
} else {
sendMessage(_asCar, 0x2009, 0);
- SetMessageHandler(&Scene2701::handleMessage42F600);
+ SetMessageHandler(&Scene2701::hmCarAtHome);
}
}
-uint32 Scene2701::handleMessage42F500(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene2701::hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
@@ -665,7 +665,7 @@ uint32 Scene2701::handleMessage42F500(int messageNum, const MessageParam ¶m,
break;
case 0x2005:
if (_which1 >= 0)
- SetMessageHandler(&Scene2701::handleMessage42F600);
+ SetMessageHandler(&Scene2701::hmCarAtHome);
break;
case 0x2006:
if (_which2 >= 0)
@@ -678,7 +678,7 @@ uint32 Scene2701::handleMessage42F500(int messageNum, const MessageParam ¶m,
return 0;
}
-uint32 Scene2701::handleMessage42F600(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Scene2701::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
@@ -686,7 +686,7 @@ uint32 Scene2701::handleMessage42F600(int messageNum, const MessageParam ¶m,
leaveScene(0);
} else {
sendPointMessage(_asCar, 0x2004, param.asPoint());
- SetMessageHandler(&Scene2701::handleMessage42F500);
+ SetMessageHandler(&Scene2701::hmRidingCar);
}
break;
case 0x200D:
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index 4274bcc..d11586e 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -94,8 +94,8 @@ protected:
Sprite *_asCarConnector;
int _which1, _which2;
NPointArray *_trackPoints;
- uint32 handleMessage42F500(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage42F600(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender);
};
class Scene2702 : public Scene {
Commit: 59901c5d13f59c64e4ed3174544f39b7b507b0ca
https://github.com/scummvm/scummvm/commit/59901c5d13f59c64e4ed3174544f39b7b507b0ca
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Rename stuff in Module3000
- Also change Scene1609::testVars
- Update globalvars.txt
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 807d6e1..8c5e369 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -310,8 +310,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 0;
- createModule(2700, -1);
+ _vm->gameState().sceneNum = 8;
+ createModule(3000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 9d96510..114bc3e 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1465,29 +1465,19 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
bool Scene1609::testVars() {
- int index1 = 0;
+ int cmpSymbolIndex = 0;
// Find the position of the first symbol
- do {
- int cmpIndex = _asSymbols[0]->getIndex();
- if (!_asSymbols[0]->getFlag1())
- cmpIndex -= 12;
- if ((int)getSubVar(0x04909A50, index1) == cmpIndex)
- break;
- index1++;
- } while(1);
+ while ((int)getSubVar(0x04909A50, cmpSymbolIndex) != _asSymbols[0]->getSymbolIndex())
+ cmpSymbolIndex++;
// Check if the entered symbols match
- for (int index2 = 0; index2 < 12; index2++) {
- int cmpIndex = _asSymbols[index2]->getIndex();
- if (!_asSymbols[index2]->getFlag1())
- cmpIndex -= 12;
- if ((int)getSubVar(0x04909A50, index1) != cmpIndex)
+ for (int enteredSymbolIndex = 0; enteredSymbolIndex < 12; enteredSymbolIndex++) {
+ if ((int)getSubVar(0x04909A50, cmpSymbolIndex) != _asSymbols[enteredSymbolIndex]->getSymbolIndex())
return false;
- index1++;
- if (index1 >= 12)
- index1 = 0;
- index2++;
+ cmpSymbolIndex++;
+ if (cmpSymbolIndex >= 12)
+ cmpSymbolIndex = 0;
}
return true;
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 55ad05b..f4dd674 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -359,7 +359,26 @@ void Module3000::updateScene() {
// Scene3009
-static const uint32 kScene3009SmackerFileHashes[] = {
+enum {
+ kCTSNull = 0,
+ kCTSBreakWall = 1,
+ kCTSWall = 2,
+ kCTSEmptyness = 3,
+ kCTSFireRobotNoTarget = 4,
+ kCTSFireRobotIsTarget = 5,
+ kCTSFireNoRobot = 6,
+ kCTSRaiseCannon = 7,
+ kCTSRightRobotNoTarget = 8,
+ kCTSRightRobotIsTarget = 9,
+ kCTSRightNoRobot = 10,
+ kCTSLeftRobotNoTarget = 11,
+ kCTSLeftRobotIsTarget = 12,
+ kCTSLeftNoRobot = 13,
+ kCTSLowerCannon = 14,
+ kCTSCount = 14
+};
+
+static const uint32 kScene3009CannonScopeVideos[] = {
0x1010000D,
0x340A0049,
0x340A0049,
@@ -377,22 +396,22 @@ static const uint32 kScene3009SmackerFileHashes[] = {
0x340A0049
};
-static const uint32 kScene3009CannonLocationFileHashes[] = {
+static const uint32 kScene3009CannonActionVideos[] = {
0x00000000,
- 0x8004001B,
- 0x0004001A,
- 0x1048404B,
- 0x50200109,
- 0x12032109,
- 0x10201109,
- 0x000A2030,
- 0x000A0028,
- 0x000A0028,
- 0x000A0028,
- 0x040A1069,
- 0x040A1069,
- 0x040A1069,
- 0x240A1101
+ 0x8004001B, // 1 Fire cannon at wall, it breaks (lowered)
+ 0x0004001A, // 2 Fire cannon at wall, nothing happens (lowered)
+ 0x1048404B, // 3 Fire cannon at emptyness (raised)
+ 0x50200109, // 4 Fire cannon, robot missed (raised)
+ 0x12032109, // 5 Fire cannon, robot hit (raised)
+ 0x10201109, // 6 Fire cannon, no robot (raised)
+ 0x000A2030, // 7 Raise the cannon
+ 0x000A0028, // 8
+ 0x000A0028, // 9
+ 0x000A0028, // 10
+ 0x040A1069, // 11
+ 0x040A1069, // 12
+ 0x040A1069, // 13
+ 0x240A1101 // 14 Lower the cannon
};
static const uint32 kSsScene3009SymbolEdgesFileHashes[] = {
@@ -450,7 +469,7 @@ static const uint32 kSsScene3009SymbolArrowFileHashes2[] = {
};
SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene)
- : StaticSprite(vm, 1400), _parentScene(parentScene), _flag1(false) {
+ : StaticSprite(vm, 1400), _parentScene(parentScene), _isClicked(false) {
_spriteResource.load2(0x120B24B0);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -474,7 +493,7 @@ SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Sc
void SsScene3009FireCannonButton::update() {
StaticSprite::update();
- if (_flag1 && !isSoundPlaying(0)) {
+ if (_isClicked && !isSoundPlaying(0)) {
sendMessage(_parentScene, 0x2000, 0);
setVisible(false);
}
@@ -484,8 +503,8 @@ uint32 SsScene3009FireCannonButton::handleMessage(int messageNum, const MessageP
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (!_flag1 && !_parentScene->sub462E90()) {
- _flag1 = true;
+ if (!_isClicked && !_parentScene->isTurning()) {
+ _isClicked = true;
setVisible(true);
playSound(0);
}
@@ -659,7 +678,7 @@ uint32 AsScene3009VerticalIndicator::handleMessage(int messageNum, const Message
return messageResult;
}
-AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 varValue)
+AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 cannonTargetStatus)
: AnimatedSprite(vm, 1000), _parentScene(parentScene), _enabled(false) {
_x = getGlobalVar(0x9040018A) ? 533 : 92;
@@ -670,7 +689,7 @@ AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *
setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009HorizontalIndicator::handleMessage);
- if (varValue == 8 || varValue == 9 || varValue == 10) {
+ if (cannonTargetStatus == kCTSRightRobotNoTarget || cannonTargetStatus == kCTSRightRobotIsTarget || cannonTargetStatus == kCTSRightNoRobot) {
SetSpriteUpdate(&AsScene3009HorizontalIndicator::suMoveRight);
_x = 280;
}
@@ -722,23 +741,23 @@ void AsScene3009HorizontalIndicator::stMoveRight() {
SetSpriteUpdate(&AsScene3009HorizontalIndicator::suMoveRight);
}
-AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int index)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index) {
+AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int symbolPosition)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _symbolPosition(symbolPosition) {
- _symbolIndex = getSubVar(0x00000914, _index);
+ _symbolIndex = getSubVar(0x00000914, _symbolPosition);
- _x = kAsScene3009SymbolPoints[_index].x;
- _y = kAsScene3009SymbolPoints[_index].y;
- createSurface1(kAsScene3009SymbolFileHashes[_index / 3], 1200);
- startAnimation(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
+ _x = kAsScene3009SymbolPoints[_symbolPosition].x;
+ _y = kAsScene3009SymbolPoints[_symbolPosition].y;
+ createSurface1(kAsScene3009SymbolFileHashes[_symbolPosition / 3], 1200);
+ startAnimation(kAsScene3009SymbolFileHashes[_symbolPosition / 3], _symbolIndex, -1);
_newStickFrameIndex = _symbolIndex;
_needRefresh = true;
updatePosition();
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009Symbol::handleMessage);
- _ssArrowPrev = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _index * 2 + 0);
+ _ssArrowPrev = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _symbolPosition * 2 + 0);
_vm->_collisionMan->addSprite(_ssArrowPrev);
- _ssArrowNext = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _index * 2 + 1);
+ _ssArrowNext = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _symbolPosition * 2 + 1);
_vm->_collisionMan->addSprite(_ssArrowNext);
}
@@ -757,10 +776,10 @@ uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶
else
_symbolIndex--;
}
- startAnimation(kAsScene3009SymbolFileHashes[_index / 3], _symbolIndex, -1);
+ startAnimation(kAsScene3009SymbolFileHashes[_symbolPosition / 3], _symbolIndex, -1);
_newStickFrameIndex = _symbolIndex;
- setSubVar(0x00000914, _index, _symbolIndex);
- if (_index / 3 == 0) {
+ setSubVar(0x00000914, _symbolPosition, _symbolIndex);
+ if (_symbolPosition / 3 == 0) {
sendMessage(_parentScene, 0x2001, 0);
} else {
sendMessage(_parentScene, 0x2003, 0);
@@ -777,11 +796,11 @@ void AsScene3009Symbol::hide() {
}
Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _keepVideo(false), _flag2(false),
- /*_flag3(false), */_flag4(false), _lockSymbolsPart1Countdown(1), _lockSymbolsPart2Countdown(1) {
+ : Scene(vm, parentModule, true), _keepVideo(false), _moveCannonLeftFirst(false),
+ _isTurning(false), _lockSymbolsPart1Countdown(1), _lockSymbolsPart2Countdown(1) {
- _cannonLocation = getGlobalVar(0x20580A86);
- debug("_cannonLocation = %d", _cannonLocation);
+ _cannonTargetStatus = getGlobalVar(0x20580A86);
+ debug("_cannonTargetStatus = %d", _cannonTargetStatus);
_vm->gameModule()->initScene3009Vars();
@@ -797,23 +816,23 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFireCannonButton = insertSprite<SsScene3009FireCannonButton>(this);
_vm->_collisionMan->addSprite(_ssFireCannonButton);
- _asVerticalIndicator = insertSprite<AsScene3009VerticalIndicator>(this, _cannonLocation);
+ _asVerticalIndicator = insertSprite<AsScene3009VerticalIndicator>(this, _cannonTargetStatus);
_vm->_collisionMan->addSprite(_asVerticalIndicator);
- _asHorizontalIndicator = insertSprite<AsScene3009HorizontalIndicator>(this, _cannonLocation);
+ _asHorizontalIndicator = insertSprite<AsScene3009HorizontalIndicator>(this, _cannonTargetStatus);
_vm->_collisionMan->addSprite(_asHorizontalIndicator);
- if (_cannonLocation != 0 && _cannonLocation != 8 && _cannonLocation != 9 && _cannonLocation != 10) {
+ if (_cannonTargetStatus != kCTSNull && _cannonTargetStatus != kCTSRightRobotNoTarget && _cannonTargetStatus != kCTSRightRobotIsTarget && _cannonTargetStatus != kCTSRightNoRobot) {
_keepVideo = true;
} else {
_keepVideo = false;
- if (_cannonLocation != 0) {
+ if (_cannonTargetStatus != kCTSNull) {
_asHorizontalIndicator->stMoveRight();
- _flag4 = true;
+ _isTurning = true;
}
}
- _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, kScene3009SmackerFileHashes[_cannonLocation], false, _keepVideo));
+ _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, kScene3009CannonScopeVideos[_cannonTargetStatus], false, _keepVideo));
_smackerPlayer->setDrawPos(89, 37);
_palette->usePalette(); // Use it again since the SmackerPlayer overrides the usage
@@ -824,12 +843,12 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_ssTargetLines[i] = insertSprite<SsScene3009TargetLine>(i);
}
- for (int i = 0; i < 6; i++) {
- _asSymbols[i] = insertSprite<AsScene3009Symbol>(this, i);
- if (i < 3)
- _correctSymbols[i] = getSubVar(0x00504B86, i);
+ for (int symbolPosition = 0; symbolPosition < 6; symbolPosition++) {
+ _asSymbols[symbolPosition] = insertSprite<AsScene3009Symbol>(this, symbolPosition);
+ if (symbolPosition < 3)
+ _correctSymbols[symbolPosition] = getSubVar(0x00504B86, symbolPosition);
else
- _correctSymbols[i] = getSubVar(0x0A4C0A9A, i - 3);
+ _correctSymbols[symbolPosition] = getSubVar(0x0A4C0A9A, symbolPosition - 3);
}
SetMessageHandler(&Scene3009::handleMessage);
@@ -846,47 +865,47 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene3009::update() {
Scene::update();
- if (!_keepVideo && _smackerPlayer->getFrameNumber() + 1 == _smackerPlayer->getFrameCount() && _cannonLocation <= 14) {
- switch (_cannonLocation) {
- case 0:
- case 14:
+ if (!_keepVideo && _smackerPlayer->getFrameNumber() + 1 == _smackerPlayer->getFrameCount() && _cannonTargetStatus <= kCTSCount) {
+ switch (_cannonTargetStatus) {
+ case kCTSNull:
+ case kCTSLowerCannon:
_smackerPlayer->open(0x340A0049, true);
_palette->usePalette();
_keepVideo = true;
break;
- case 8:
+ case kCTSRightRobotNoTarget:
_smackerPlayer->open(0x0082080D, true);
_palette->usePalette();
_keepVideo = true;
- _flag4 = false;
+ _isTurning = false;
break;
- case 9:
+ case kCTSRightRobotIsTarget:
_smackerPlayer->open(0x0282080D, true);
_palette->usePalette();
_keepVideo = true;
- _flag4 = false;
+ _isTurning = false;
break;
- case 10:
+ case kCTSRightNoRobot:
_smackerPlayer->open(0x0882080D, true);
_palette->usePalette();
_keepVideo = true;
- _flag4 = false;
+ _isTurning = false;
break;
- case 11:
- case 12:
- case 13:
- if (_flag2) {
- if (_cannonLocation == 11)
+ case kCTSLeftRobotNoTarget:
+ case kCTSLeftRobotIsTarget:
+ case kCTSLeftNoRobot:
+ if (_moveCannonLeftFirst) {
+ if (_cannonTargetStatus == kCTSLeftRobotNoTarget)
_smackerPlayer->open(0x110A000F, false);
- else if (_cannonLocation == 12)
+ else if (_cannonTargetStatus == kCTSLeftRobotIsTarget)
_smackerPlayer->open(0x500B004F, false);
- else if (_cannonLocation == 13)
+ else if (_cannonTargetStatus == kCTSLeftNoRobot)
_smackerPlayer->open(0x100B010E, false);
_palette->usePalette();
- _flag2 = false;
+ _moveCannonLeftFirst = false;
_asHorizontalIndicator->stMoveLeft();
} else {
- playExtVideo();
+ playActionVideo();
}
break;
}
@@ -930,68 +949,72 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
if (!getGlobalVar(0x000809C2)) {
if (!getGlobalVar(0x10938830)) {
- _cannonLocation = 1;
+ _cannonTargetStatus = kCTSBreakWall;
setGlobalVar(0x10938830, 1);
} else {
- _cannonLocation = 2;
+ _cannonTargetStatus = kCTSWall;
}
} else if (!getGlobalVar(0x9040018A)) {
- _cannonLocation = 3;
+ _cannonTargetStatus = kCTSEmptyness;
} else if (!getGlobalVar(0x610210B7)) {
- _cannonLocation = 4;
+ _cannonTargetStatus = kCTSFireRobotNoTarget;
} else if (!getGlobalVar(0x0C0288F4)) {
setGlobalVar(0x0C0288F4, 1);
- _cannonLocation = 5;
+ _cannonTargetStatus = kCTSFireRobotIsTarget;
} else {
- _cannonLocation = 6;
+ _cannonTargetStatus = kCTSFireNoRobot;
}
- playExtVideo();
+ playActionVideo();
break;
case 0x2001:
_lockSymbolsPart1Countdown = 24;
break;
case 0x2002:
- if (!getGlobalVar(0x9040018A) && !_flag4) {
+ // Raise/lower the cannon
+ if (!getGlobalVar(0x9040018A) && !_isTurning) {
if (getGlobalVar(0x000809C2)) {
- _cannonLocation = 14;
+ _cannonTargetStatus = kCTSLowerCannon;
setGlobalVar(0x000809C2, 0);
} else {
- _cannonLocation = 7;
+ _cannonTargetStatus = kCTSRaiseCannon;
setGlobalVar(0x000809C2, 1);
}
- playExtVideo();
+ playActionVideo();
}
break;
case 0x2003:
_lockSymbolsPart2Countdown = 24;
break;
case 0x2004:
+ // Turn the cannon if it's raised
if (getGlobalVar(0x000809C2)) {
if (!getGlobalVar(0x9040018A)) {
+ // Cannon is at the left position
if (!getGlobalVar(0x610210B7)) {
- _cannonLocation = 8;
+ _cannonTargetStatus = kCTSRightRobotNoTarget;
} else if (!getGlobalVar(0x0C0288F4)) {
- _cannonLocation = 9;
+ _cannonTargetStatus = kCTSRightRobotIsTarget;
} else {
- _cannonLocation = 10;
+ _cannonTargetStatus = kCTSRightNoRobot;
}
setGlobalVar(0x9040018A, 1);
- _flag4 = true;
- playExtVideo();
+ _isTurning = true;
+ playActionVideo();
} else {
+ // Cannon is at the right position
if (!getGlobalVar(0x610210B7)) {
- _cannonLocation = 11;
+ _cannonTargetStatus = kCTSLeftRobotNoTarget;
_smackerPlayer->open(0x108A000F, false);
} else if (!getGlobalVar(0x0C0288F4)) {
- _cannonLocation = 12;
+ _cannonTargetStatus = kCTSLeftRobotIsTarget;
_smackerPlayer->open(0x500B002F, false);
} else {
- _cannonLocation = 13;
+ _cannonTargetStatus = kCTSLeftNoRobot;
_smackerPlayer->open(0x100B008E, false);
}
_palette->usePalette();
- _flag2 = true;
- _flag4 = true;
+ _moveCannonLeftFirst = true;
+ _isTurning = true;
_keepVideo = false;
setGlobalVar(0x9040018A, 0);
}
@@ -1001,9 +1024,9 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-void Scene3009::playExtVideo() {
- setGlobalVar(0x20580A86, _cannonLocation);
- setGlobalVar(0xF0402B0A, kScene3009CannonLocationFileHashes[_cannonLocation]);
+void Scene3009::playActionVideo() {
+ setGlobalVar(0x20580A86, _cannonTargetStatus);
+ setGlobalVar(0xF0402B0A, kScene3009CannonActionVideos[_cannonTargetStatus]);
leaveScene(1);
}
@@ -1021,8 +1044,8 @@ bool Scene3009::isSymbolsPart2Solved() {
return true;
}
-bool Scene3009::sub462E90() {
- return _flag4;
+bool Scene3009::isTurning() {
+ return _isTurning;
}
// Scene3010
@@ -1454,18 +1477,18 @@ uint32 SsScene3011Button::handleMessage(int messageNum, const MessageParam ¶
return messageResult;
}
-AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
- : AnimatedSprite(vm, 1000), _index(index), _flag1(flag), _flag2(false) {
+AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int symbolIndex, bool largeSymbol)
+ : AnimatedSprite(vm, 1000), _symbolIndex(symbolIndex), _largeSymbol(largeSymbol), _isNoisy(false) {
- if (flag) {
+ if (_largeSymbol) {
_x = 310;
_y = 200;
- createSurface1(kAsScene3011SymbolFileHashes[_index], 1200);
+ createSurface1(kAsScene3011SymbolFileHashes[_symbolIndex], 1200);
loadSound(0, 0x6052C60F);
loadSound(1, 0x6890433B);
} else {
- _index = 12;
- _x = index * 39 + 96;
+ _symbolIndex = 12;
+ _x = symbolIndex * 39 + 96;
_y = 225;
createSurface(1200, 41, 48);
loadSound(0, 0x64428609);
@@ -1476,11 +1499,11 @@ AsScene3011Symbol::AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag)
SetUpdateHandler(&AnimatedSprite::update);
}
-void AsScene3011Symbol::show(bool flag) {
- _flag2 = flag;
- startAnimation(kAsScene3011SymbolFileHashes[_index], 0, -1);
+void AsScene3011Symbol::show(bool isNoisy) {
+ _isNoisy = isNoisy;
+ startAnimation(kAsScene3011SymbolFileHashes[_symbolIndex], 0, -1);
setVisible(true);
- if (flag) {
+ if (_isNoisy) {
playSound(1);
} else {
playSound(0);
@@ -1493,19 +1516,19 @@ void AsScene3011Symbol::hide() {
}
void AsScene3011Symbol::stopSymbolSound() {
- if (_flag2) {
+ if (_isNoisy) {
stopSound(1);
} else {
stopSound(0);
}
}
-void AsScene3011Symbol::change(int index, bool flag) {
- _index = index;
- _flag2 = flag;
- startAnimation(kAsScene3011SymbolFileHashes[_index], 0, -1);
+void AsScene3011Symbol::change(int symbolIndex, bool isNoisy) {
+ _symbolIndex = symbolIndex;
+ _isNoisy = isNoisy;
+ startAnimation(kAsScene3011SymbolFileHashes[_symbolIndex], 0, -1);
setVisible(true);
- if (flag) {
+ if (_isNoisy) {
playSound(1);
} else {
playSound(0);
@@ -1513,10 +1536,10 @@ void AsScene3011Symbol::change(int index, bool flag) {
}
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _index2(0) {
+ : Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0) {
// TODO _vm->gameModule()->initScene3011Vars();
- _index1 = getGlobalVar(0x2414C2F2);
+ _noisySymbolIndex = getGlobalVar(0x2414C2F2);
_surfaceFlag = true;
SetMessageHandler(&Scene3011::handleMessage);
@@ -1528,8 +1551,8 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x24A00929, 20, 620);
- for (int i = 0; i < 12; i++)
- _asSymbols[i] = insertSprite<AsScene3011Symbol>(i, true);
+ for (int symbolIndex = 0; symbolIndex < 12; symbolIndex++)
+ _asSymbols[symbolIndex] = insertSprite<AsScene3011Symbol>(symbolIndex, true);
_ssButton = insertSprite<SsScene3011Button>(this, true);
_vm->_collisionMan->addSprite(_ssButton);
@@ -1543,13 +1566,13 @@ void Scene3011::update() {
switch (_updateStatus) {
case 0:
if (_buttonClicked) {
- if (_index1 == _index2) {
+ if (_noisySymbolIndex == _currentSymbolIndex) {
do {
- _index3 = _vm->_rnd->getRandomNumber(12 - 1);
- } while (_index1 == _index3);
- _asSymbols[getSubVar(0x04909A50, _index3)]->show(true);
+ _noisyRandomSymbolIndex = _vm->_rnd->getRandomNumber(12 - 1);
+ } while (_noisySymbolIndex == _noisyRandomSymbolIndex);
+ _asSymbols[getSubVar(0x04909A50, _noisyRandomSymbolIndex)]->show(true);
} else {
- _asSymbols[getSubVar(0x04909A50, _index2)]->show(false);
+ _asSymbols[getSubVar(0x04909A50, _currentSymbolIndex)]->show(false);
}
_updateStatus = 1;
_countdown = 24;
@@ -1569,14 +1592,14 @@ void Scene3011::update() {
case 3:
_updateStatus = 0;
_countdown = 1;
- if (_index1 == _index2) {
- _asSymbols[getSubVar(0x04909A50, _index3)]->hide();
+ if (_noisySymbolIndex == _currentSymbolIndex) {
+ _asSymbols[getSubVar(0x04909A50, _noisyRandomSymbolIndex)]->hide();
} else {
- _asSymbols[getSubVar(0x04909A50, _index2)]->hide();
+ _asSymbols[getSubVar(0x04909A50, _currentSymbolIndex)]->hide();
}
- _index2++;
- if (_index2 >= 12)
- _index2 = 0;
+ _currentSymbolIndex++;
+ if (_currentSymbolIndex >= 12)
+ _currentSymbolIndex = 0;
break;
}
}
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 2f7c21f..945ca7e 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -50,7 +50,7 @@ public:
SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene);
protected:
Scene3009 *_parentScene;
- bool _flag1;
+ bool _isClicked;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -100,7 +100,7 @@ protected:
class AsScene3009HorizontalIndicator : public AnimatedSprite {
public:
- AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 varValue);
+ AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 cannonTargetStatus);
void show();
void stMoveLeft();
void stMoveRight();
@@ -114,11 +114,11 @@ protected:
class AsScene3009Symbol : public AnimatedSprite {
public:
- AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int index);
+ AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int symbolPosition);
void hide();
protected:
Scene3009 *_parentScene;
- int _index;
+ int _symbolPosition;
uint32 _symbolIndex;
SsScene3009SymbolArrow *_ssArrowPrev;
SsScene3009SymbolArrow *_ssArrowNext;
@@ -128,7 +128,7 @@ protected:
class Scene3009 : public Scene {
public:
Scene3009(NeverhoodEngine *vm, Module *parentModule, int which);
- bool sub462E90();
+ bool isTurning();
protected:
int _lockSymbolsPart1Countdown;
int _lockSymbolsPart2Countdown;
@@ -139,15 +139,14 @@ protected:
AsScene3009VerticalIndicator *_asVerticalIndicator;
AsScene3009HorizontalIndicator *_asHorizontalIndicator;
AsScene3009Symbol *_asSymbols[6];
- uint32 _cannonLocation;
+ uint32 _cannonTargetStatus;
uint32 _correctSymbols[6];
bool _keepVideo;
- bool _flag2;
- // UNUSED? bool _flag3;
- bool _flag4;
+ bool _moveCannonLeftFirst;
+ bool _isTurning;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void playExtVideo();
+ void playActionVideo();
bool isSymbolsPart1Solved();
bool isSymbolsPart2Solved();
};
@@ -221,17 +220,16 @@ protected:
class AsScene3011Symbol : public AnimatedSprite {
public:
- AsScene3011Symbol(NeverhoodEngine *vm, int index, bool flag);
- void show(bool flag);
+ AsScene3011Symbol(NeverhoodEngine *vm, int symbolIndex, bool largeSymbol);
+ void show(bool isNoisy);
void hide();
void stopSymbolSound();
- void change(int index, bool flag);
- bool getFlag1() { return _flag1; }
- int getIndex() { return _index; }
+ void change(int symbolIndex, bool isNoisy);
+ int getSymbolIndex() { return _largeSymbol ? _symbolIndex : _symbolIndex - 12; }
protected:
- bool _flag1;
- bool _flag2;
- int _index;
+ bool _largeSymbol;
+ bool _isNoisy;
+ int _symbolIndex;
};
class Scene3011 : public Scene {
@@ -243,9 +241,9 @@ protected:
int _updateStatus;
bool _buttonClicked;
int _countdown;
- int _index1;
- int _index2;
- int _index3;
+ int _noisySymbolIndex;
+ int _currentSymbolIndex;
+ int _noisyRandomSymbolIndex;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void fadeIn();
Commit: fd13b546a7d2a2f63cca8ace7aa900a590f665bb
https://github.com/scummvm/scummvm/commit/fd13b546a7d2a2f63cca8ace7aa900a590f665bb
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Rename stuff in the Scene class and clean up a little
- Try to stay close to the actual frame rate
- Also use the Smacker frame rate when a video is playing to
keep videos in sync with the audio
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
engines/neverhood/smackerplayer.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index cb37a24..8788dcf 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -347,10 +347,11 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_class494 = new Class494(_vm);
addSprite(_class494);
- // DEBUG: Give all disks
+ // DEBUG>>>: Give all disks
for (int i = 0; i < 19; i++) {
setSubVar(0x02720344, i, 1);
}
+ // DEBUG<<<
for (int i = 0; i < 20; i++) {
_diskAvailable[i] = 0;
@@ -385,6 +386,7 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
addSurface(_smackerPlayer->getSurface());
_smackerPlayer->setDrawPos(154, 86);
// TODO _smackerPlayer->gotoFrame(0);
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_palette->usePalette();
@@ -517,6 +519,7 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
void DiskplayerScene::stop() {
_smackerPlayer->open(0x08288103, true);
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_palette->usePalette();
_playButton->release();
_updateStatus = 0;
@@ -525,6 +528,7 @@ void DiskplayerScene::stop() {
void DiskplayerScene::tuneIn() {
_smackerPlayer->open(0x900001C1, false);
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_palette->usePalette();
_playButton->release();
_updateStatus = 1;
@@ -533,6 +537,7 @@ void DiskplayerScene::tuneIn() {
void DiskplayerScene::playDisk() {
_smackerPlayer->open(kDiskplayerSmackerFileHashes[_diskIndex], false);
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_palette->usePalette();
_updateStatus = 2;
_diskSlots[_diskIndex]->play();
@@ -540,6 +545,7 @@ void DiskplayerScene::playDisk() {
void DiskplayerScene::playStatic() {
_smackerPlayer->open(0x90000101, false);
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_palette->usePalette();
_playButton->release();
_updateStatus = 2;
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 8c5e369..e35e16e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -300,18 +300,20 @@ void GameModule::startup() {
// createModule(1500, 0); // Logos and intro video //Real
// DEBUG>>>
+ /*
setGlobalVar(0x0A310817, 1);
setGlobalVar(0x0A18CA33, 0);
setGlobalVar(0x0112090A, 0);
//setGlobalVar(0x000CF819, 1);
setGlobalVar(0x04A105B3, 2);
+ */
// <<<DEBUG
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 8;
- createModule(3000, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(1200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index ee4bfe1..7343b0a 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -480,6 +480,7 @@ void Klayman::gotoNextStateExt() {
removeCallbackList();
#endif
} else {
+ // Inform the scene that the current Klayman animation sequence has finished
sendMessage(_parentScene, 0x1006, 0);
}
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 191789d..a20ed94 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -916,7 +916,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x140E5744) {
sendMessage(_asCreature, 0x2005, 0);
} else if (param.asInteger() == 0x40253C40) {
- _messageListFlag = false;
+ _canAcceptInput = false;
sendMessage(_asCreature, 0x2006, 0);
} else if (param.asInteger() == 0x090EB048) {
if (_klayman->getX() < 572) {
@@ -950,7 +950,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x4814:
- messageList402220();
+ cancelMessageList();
break;
case 0x4826:
if (sender == _asTape) {
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 80a210b..f385835 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -487,13 +487,13 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (getGlobalVar(0x13206309)) {
setMessageList2(0x004B0910);
} else {
- messageList402220();
+ cancelMessageList();
}
} else if (param.asInteger() == 0x012E2070) {
if (getGlobalVar(0x13206309)) {
setMessageList2(0x004B0968);
} else {
- messageList402220();
+ cancelMessageList();
}
} else if (param.asInteger() == 0x11C40840) {
if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342) {
@@ -740,7 +740,7 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x415634A4) {
if (getGlobalVar(0xAC00C0D0)) {
- messageList402220();
+ cancelMessageList();
} else {
setMessageList(0x004B9158);
}
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 114bc3e..5d0207b 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1271,7 +1271,7 @@ void Scene1608::upGettingOutOfCar() {
_asIdleCarFull->setVisible(true);
_asCar->setVisible(false);
setMessageList(0x004B4748);
- runMessageList();
+ processMessageList();
_klayman->handleUpdate();
_carStatus = 0;
}
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 06806c7..44ef868 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -274,7 +274,7 @@ void Scene2101::update() {
}
} else {
if (_klayman->getX() > 575)
- _messageListFlag = false;
+ _canAcceptInput = false;
if (--_countdown1 == 0) {
if (_klayman->getX() < 480) {
sendMessage(_asDoor, 0x4809, 0);
@@ -307,7 +307,7 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList(0x004B8EC8);
}
} else if (param.asInteger() == 0x41442820) {
- messageList402220();
+ cancelMessageList();
}
break;
case 0x2000:
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 2220fb7..777b848 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2116,16 +2116,16 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
} else {
- messageList402220();
+ cancelMessageList();
}
} else if (param.asInteger() == 0x34569073) {
if (_klaymanAtElevator) {
- _messageListFlag1 = true;
+ _isKlaymanBusy = true;
sendMessage(_asElevator, 0x2000, 0);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
} else {
- messageList402220();
+ cancelMessageList();
}
} else if (param.asInteger() == 0x4054C877) {
if (_klaymanAtElevator) {
@@ -2133,7 +2133,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
} else {
- messageList402220();
+ cancelMessageList();
}
} else if (param.asInteger() == 0x0CBC6211) {
sendEntityMessage(_klayman, 0x1014, _asElevator);
@@ -2153,7 +2153,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
_elevatorSurfacePriority = param.asInteger();
break;
case 0x2003:
- _messageListFlag1 = false;
+ _isKlaymanBusy = false;
break;
case 0x4807:
sendMessage(_asWallRobotAnimation, 0x2007, 0);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 3b6c6bb..238768c 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -517,7 +517,7 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
setSurfacePriority(_sprite1->getSurface(), 1100);
} else if (param.asInteger() == 0x80C40322) {
setSurfacePriority(_sprite1->getSurface(), 200);
- messageList402220();
+ cancelMessageList();
_flag = true;
} else if (param.asInteger() == 0x09C4B40A && _countdown2 > 12) {
_countdown2 = 12;
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index f8053d2..b4d39d9 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -362,7 +362,7 @@ void Scene2501::upGettingOutOfCar() {
_asIdleCarFull->setVisible(true);
_asCar->setVisible(false);
setMessageList(0x004B2570);
- runMessageList();
+ processMessageList();
_klayman->handleUpdate();
_carStatus = 0;
}
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 66b30cf..5594cce 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -51,10 +51,11 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
_smackerPlayer = new SmackerPlayer(_vm, this, (*_navigationList)[_navigationIndex].fileHash, true, true);
addEntity(_smackerPlayer);
addSurface(_smackerPlayer->getSurface());
-
+
createMouseCursor();
_vm->_screen->clear();
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
sendMessage(_parentModule, 0x100A, _navigationIndex);
@@ -77,10 +78,12 @@ void NavigationScene::update() {
showMouse(false);
_smackerPlayer->open(_smackerFileHash, false);
_vm->_screen->clear();
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_smackerDone = false;
_smackerFileHash = 0;
} else if (_smackerDone) {
if (_leaveSceneAfter) {
+ _vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, _navigationIndex);
} else {
const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
@@ -94,6 +97,7 @@ void NavigationScene::update() {
_smackerDone = false;
_smackerPlayer->open(navigationItem.fileHash, true);
_vm->_screen->clear();
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
sendMessage(_parentModule, 0x100A, _navigationIndex);
}
}
@@ -171,6 +175,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
} while (!(*_navigationList)[_navigationIndex].interactive);
setGlobalVar(0x4200189E, _navigationIndex);
} else {
+ _vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, _navigationIndex);
}
break;
@@ -187,6 +192,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
} while (!(*_navigationList)[_navigationIndex].interactive);
setGlobalVar(0x4200189E, _navigationIndex);
} else {
+ _vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, _navigationIndex);
}
break;
@@ -194,6 +200,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
case 3:
case 4:
if (navigationItem.middleFlag) {
+ _vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, _navigationIndex);
} else if (navigationItem.middleSmackerFileHash != 0) {
_smackerFileHash = navigationItem.middleSmackerFileHash;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index dde437d..318a0df 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -28,7 +28,7 @@ namespace Neverhood {
Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
: Entity(vm, 0), _parentModule(parentModule), _dataResource(vm) {
- _messageListFlag1 = false;
+ _isKlaymanBusy = false;
_systemCallbackFlag = false;
_messageList = NULL;
_rectType = 0;
@@ -40,22 +40,18 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_mouseCursor = NULL;
_palette = NULL;
_background = NULL;
- // TODO _field_8E = -1;
if (clearHitRects) {
_vm->_collisionMan->clearHitRects();
_vm->_collisionMan->clearSprites();
}
_vm->_screen->setFps(24);
- // TODO g_screen->hSmack = NULL;
- // TODO g_screen->field_24 = 0;
- // TODO g_screen->field_26 = 0;
+ _vm->_screen->setSmackerDecoder(NULL);
// TODO g_screen->resetDirtyRects();
- _messageListFlag = true;
+ _canAcceptInput = true;
_surfaceFlag = false;
_messageList2 = NULL;
_smackerPlayer = NULL;
- _smkFileHash = 0;
- _messageListFlag2 = false;
+ _isMessageListBusy = false;
_messageValue = -1;
SetUpdateHandler(&Scene::update);
@@ -96,7 +92,6 @@ void Scene::draw() {
}
#endif
for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
- //debug(4, "priority = %d", (*iter)->getPriority());
(*iter)->draw();
}
}
@@ -244,43 +239,29 @@ SmackerPlayer *Scene::addSmackerPlayer(SmackerPlayer *smackerPlayer) {
void Scene::update() {
- if (_smkFileHash != 0) {
- // TODO
- _smackerPlayer = new SmackerPlayer(_vm, this, _smkFileHash, true, 0);
- _savedUpdateHandlerCb = _updateHandlerCb;
- _savedMessageHandlerCb = _messageHandlerCb;
- SetUpdateHandler(&Scene::smackerUpdate);
- SetMessageHandler(&Scene::smackerHandleMessage);
- _smackerDone = false;
- smackerUpdate();
- // g_screen->smackerPlayer = _smackerPlayer;
- _smkFileHash = 0;
- } else {
- if (_mouseClicked) {
- if (_klayman) {
- // TODO: Merge later
- if (_messageListFlag &&
- _klayman->hasMessageHandler() &&
- sendMessage(_klayman, 0x1008, 0) != 0 &&
- queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
- _mouseClicked = false;
- } else if (_messageListFlag &&
- _klayman->hasMessageHandler() &&
- sendMessage(_klayman, 0x1008, 0) != 0) {
- _mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
- }
- } else if (queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
+ if (_mouseClicked) {
+ if (_klayman) {
+ // TODO: Merge later
+ if (_canAcceptInput &&
+ _klayman->hasMessageHandler() &&
+ sendMessage(_klayman, 0x1008, 0) != 0 &&
+ queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
+ } else if (_canAcceptInput &&
+ _klayman->hasMessageHandler() &&
+ sendMessage(_klayman, 0x1008, 0) != 0) {
+ _mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
}
+ } else if (queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
+ _mouseClicked = false;
}
+ }
- runMessageList();
+ processMessageList();
- // Update all entities
- for (Common::Array<Entity*>::iterator iter = _entities.begin(); iter != _entities.end(); iter++)
- (*iter)->handleUpdate();
-
- }
+ // Update all entities
+ for (Common::Array<Entity*>::iterator iter = _entities.begin(); iter != _entities.end(); iter++)
+ (*iter)->handleUpdate();
}
@@ -293,7 +274,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
case 0: // mouse moved
if (_mouseCursor && _mouseCursor->hasMessageHandler())
sendMessage(_mouseCursor, 0x4002, param);
- // TODO queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
+ // TODO Seems unused: queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
break;
case 1: // mouse clicked
_mouseClicked = true;
@@ -309,44 +290,53 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
drawRectListRects();
break;
*/
+ /* ORIGINAL DEBUG
case 5:
-#if 0
broadcastObjectMessage5();
-#endif
break;
+ */
case 6:
sendMessage(_parentModule, 0x1009, param);
break;
case 0x1006:
- if (_messageListFlag1) {
- _messageListFlag1 = false;
- if (_messageListIndex == _messageListCount)
+ // Sent by Klayman when its animation sequence has finished
+ if (_isKlaymanBusy) {
+ _isKlaymanBusy = false;
+ if (_messageListIndex == _messageListCount) {
+ // If the current message list was processed completely,
+ // sent Klayman into the idle state.
sendMessage(_klayman, 0x4004, 0);
- else {
- runMessageList();
+ } else {
+ // Else continue with the next message in the current message list
+ processMessageList();
}
}
break;
case 0x1007:
- if (_messageListFlag1) {
- _messageListFlag1 = false;
+ // This isn't sent by any code, check if it's in a message list
+ // This cancels the current message list and sets Klayman into the idle state.
+ if (_isKlaymanBusy) {
+ _isKlaymanBusy = false;
_messageList = NULL;
sendMessage(_klayman, 0x4004, 0);
}
break;
case 0x101D:
+ // Hide the mouse cursor
if (_mouseCursor) {
- _prevVisible = _mouseCursor->getSurface()->getVisible();
+ _mouseCursorWasVisible = _mouseCursor->getSurface()->getVisible();
_mouseCursor->getSurface()->setVisible(false);
}
break;
case 0x101E:
- if (_prevVisible && _mouseCursor) {
- _mouseCursor->getSurface()->setVisible(false);
+ // Show the mouse cursor
+ if (_mouseCursorWasVisible && _mouseCursor) {
+ _mouseCursor->getSurface()->setVisible(true);//CHECKME?!?
// TODO sendMessage(_mouseCursor, 0x4002, g_Screen->_mousePos);
}
break;
case 0x1022:
+ // Set the sender's surface priority
setSurfacePriority(((Sprite*)sender)->getSurface(), param.asInteger());
break;
}
@@ -416,17 +406,17 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
return true;
}
-void Scene::setMessageList(uint32 id, bool messageListFlag, bool systemCallbackFlag) {
- setMessageList(_vm->_staticData->getMessageList(id), messageListFlag, systemCallbackFlag);
+void Scene::setMessageList(uint32 id, bool canAcceptInput, bool systemCallbackFlag) {
+ setMessageList(_vm->_staticData->getMessageList(id), canAcceptInput, systemCallbackFlag);
}
-void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
+void Scene::setMessageList(MessageList *messageList, bool canAcceptInput, bool systemCallbackFlag) {
//debug("Scene::setMessageList(%p)", (void*)messageList);
_messageList = messageList;
_messageListCount = _messageList ? _messageList->size() : 0;
_messageListIndex = 0;
- _messageListFlag1 = false;
- _messageListFlag = messageListFlag;
+ _isKlaymanBusy = false;
+ _canAcceptInput = canAcceptInput;
_systemCallbackFlag = systemCallbackFlag;
_messageListStatus = 1;
sendMessage(_klayman, 0x101C, 0);
@@ -441,13 +431,11 @@ void Scene::setMessageList(MessageList *messageList, bool messageListFlag, bool
}
-bool Scene::setMessageList2(uint32 id, bool messageListFlag, bool systemCallbackFlag) {
- return setMessageList2(_vm->_staticData->getMessageList(id), messageListFlag, systemCallbackFlag);
+bool Scene::setMessageList2(uint32 id, bool canAcceptInput, bool systemCallbackFlag) {
+ return setMessageList2(_vm->_staticData->getMessageList(id), canAcceptInput, systemCallbackFlag);
}
-bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool systemCallbackFlag) {
- bool result = false;
-
+bool Scene::setMessageList2(MessageList *messageList, bool canAcceptInput, bool systemCallbackFlag) {
//debug("Scene::setMessageList2(%p)", (void*)messageList);
#if 0
@@ -457,46 +445,26 @@ bool Scene::setMessageList2(MessageList *messageList, bool messageListFlag, bool
}
debug("B: ================================================================");
#endif
-
- if (_messageListStatus == 1) {
- if (messageList != _messageList2) {
- if (_messageValue >= 0) {
- sendMessage(_parentModule, 0x1023, _messageValue);
- _messageValue = -1;
- }
- _messageList2 = messageList;
- setMessageList(messageList, messageListFlag, systemCallbackFlag);
- result = true;
- }
- } else if (_messageListStatus == 2) {
- if (messageList == _messageList2) {
- if (_messageValue >= 0) {
- sendMessage(_parentModule, 0x1023, _messageValue);
- _messageValue = -1;
- }
- _messageList2 = messageList;
- setMessageList(messageList, messageListFlag, systemCallbackFlag);
- result = true;
- }
- } else {
- if (_messageValue >= 0) {
- sendMessage(_parentModule, 0x1023, _messageValue);
- _messageValue = -1;
- }
+
+ if (_messageListStatus == 0 ||
+ (_messageListStatus == 1 && messageList != _messageList2) ||
+ (_messageListStatus == 2 && messageList == _messageList2)) {
+ // NOTE Skipped unneeded resource preloading code
+ _messageValue = -1;
_messageList2 = messageList;
- setMessageList(messageList, messageListFlag, systemCallbackFlag);
- result = true;
+ setMessageList(messageList, canAcceptInput, systemCallbackFlag);
+ return true;
}
- return result;
+ return false;
}
-void Scene::runMessageList() {
- debug(7, "Scene::runMessageList() _messageListFlag2 = %d; _messageListFlag1 = %d", _messageListFlag2, _messageListFlag1);
+void Scene::processMessageList() {
+ debug(7, "Scene::processMessageList() _isMessageListBusy = %d; _isKlaymanBusy = %d", _isMessageListBusy, _isKlaymanBusy);
- if (_messageListFlag2 || _messageListFlag1)
+ if (_isMessageListBusy || _isKlaymanBusy)
return;
- _messageListFlag2 = true;
+ _isMessageListBusy = true;
if (!_messageList) {
_messageList2 = NULL;
@@ -505,11 +473,11 @@ void Scene::runMessageList() {
if (_messageList && _klayman) {
- while (_messageList && _messageListIndex < _messageListCount && !_messageListFlag1) {
+ while (_messageList && _messageListIndex < _messageListCount && !_isKlaymanBusy) {
uint32 messageNum = (*_messageList)[_messageListIndex].messageNum;
uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
- //debug("Scene::runMessageList() %04X, %08X", messageNum, messageParam);
+ //debug("Scene::processMessageList() %04X, %08X", messageNum, messageParam);
_messageListIndex++;
if (_messageListIndex == _messageListCount) {
@@ -525,7 +493,7 @@ void Scene::runMessageList() {
_messageValue = messageParam;
sendMessage(_parentModule, messageNum, messageParam);
} else if (messageNum == 0x4001) {
- _messageListFlag1 = true;
+ _isKlaymanBusy = true;
sendPointMessage(_klayman, 0x4001, _mouseClickPos);
} else if (messageNum == 0x100D) {
if (this->hasMessageHandler() && sendMessage(this, 0x100D, messageParam) != 0)
@@ -535,34 +503,34 @@ void Scene::runMessageList() {
} else if (messageNum == 0x101B) {
_messageListStatus = 2;
} else if (messageNum == 0x1020) {
- _messageListFlag = false;
+ _canAcceptInput = false;
} else if (messageNum >= 0x2000 && messageNum <= 0x2FFF) {
if (this->hasMessageHandler() && sendMessage(this, messageNum, messageParam) != 0) {
- _messageListFlag2 = false;
+ _isMessageListBusy = false;
return;
}
} else {
- _messageListFlag1 = true;
+ _isKlaymanBusy = true;
if (_klayman->hasMessageHandler() && sendMessage(_klayman, messageNum, messageParam) != 0) {
- _messageListFlag1 = false;
+ _isKlaymanBusy = false;
}
}
}
if (_messageListIndex == _messageListCount) {
- _messageListFlag = true;
+ _canAcceptInput = true;
_messageList = NULL;
}
}
}
- _messageListFlag2 = false;
+ _isMessageListBusy = false;
}
-void Scene::messageList402220() {
- _messageListFlag1 = false;
+void Scene::cancelMessageList() {
+ _isKlaymanBusy = false;
_messageList = NULL;
- _messageListFlag = true;
+ _canAcceptInput = true;
sendMessage(_klayman, 0x4004, 0);
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 35adb44..a0f7dafd 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -159,54 +159,55 @@ protected:
Module *_parentModule;
Common::Array<Entity*> _entities;
Common::Array<BaseSurface*> _surfaces;
- bool _systemCallbackFlag;
+
+ bool _surfaceFlag;
+
+ Klayman *_klayman;
+ Background *_background;
+ Palette *_palette;
+ SmackerPlayer *_smackerPlayer;
+
MessageList *_messageList;
+ MessageList *_messageList2;
+ int _messageListStatus;
uint _messageListCount;
uint _messageListIndex;
- bool _messageListFlag1;
+ bool _systemCallbackFlag;
+
+ bool _canAcceptInput;
+ bool _isKlaymanBusy;
+ bool _isMessageListBusy;
+
+ Mouse *_mouseCursor;
NPoint _mouseClickPos;
bool _mouseClicked;
- DataResource _dataResource;
+ bool _mouseCursorWasVisible;
+
+ int _rectType;
RectList *_rectList;
+ DataResource _dataResource;
+
HitRectList _hitRectList;
- int _rectType;
- // TODO 0000008E field_8E dw ?
- Mouse *_mouseCursor;
- Klayman *_klayman;
- Palette *_palette;
- Background *_background;
- bool _surfaceFlag;
- bool _messageListFlag;
- MessageList *_messageList2;
- int _messageListStatus;
- SmackerPlayer *_smackerPlayer;
+
void (Entity::*_savedUpdateHandlerCb)();
uint32 (Entity::*_savedMessageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
bool _smackerDone;
- // TODO 000000BD field_BD db ?
- // TODO 000000BE field_BE db ?
- // TODO 000000BF field_BF db ?
- uint32 _smkFileHash;
- // TODO 000000C4 hitArray dd ?
- bool _messageListFlag2;
- bool _prevVisible;
int _messageValue;
- // TODO 000000CF field_CF db ?
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void smackerUpdate();
uint32 smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
bool queryPositionSprite(int16 mouseX, int16 mouseY);
bool queryPositionRectList(int16 mouseX, int16 mouseY);
- void setMessageList(uint32 id, bool messageListFlag = true, bool systemCallbackFlag = false);
- void setMessageList(MessageList *messageList, bool messageListFlag = true, bool systemCallbackFlag = false);
- bool setMessageList2(uint32 id, bool messageListFlag = true, bool systemCallbackFlag = false);
- bool setMessageList2(MessageList *messageList, bool messageListFlag = true, bool systemCallbackFlag = false);
- void runMessageList();
+ void setMessageList(uint32 id, bool canAcceptInput = true, bool systemCallbackFlag = false);
+ void setMessageList(MessageList *messageList, bool canAcceptInput = true, bool systemCallbackFlag = false);
+ bool setMessageList2(uint32 id, bool canAcceptInput = true, bool systemCallbackFlag = false);
+ bool setMessageList2(MessageList *messageList, bool canAcceptInput = true, bool systemCallbackFlag = false);
+ void processMessageList();
void setRectList(uint32 id);
void setRectList(RectList *rectList);
void clearRectList();
void loadHitRectList();
- void messageList402220();
+ void cancelMessageList();
void loadDataResource(uint32 fileHash);
uint16 convertMessageNum(uint32 messageNum);
};
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 372c705..4689d3b 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -26,7 +26,7 @@
namespace Neverhood {
Screen::Screen(NeverhoodEngine *vm)
- : _vm(vm), _paletteData(NULL), _paletteChanged(false) {
+ : _vm(vm), _paletteData(NULL), _paletteChanged(false), _smackerDecoder(NULL) {
_ticks = _vm->_system->getMillis();
@@ -48,8 +48,13 @@ void Screen::update() {
}
void Screen::wait() {
- // TODO
- _vm->_system->delayMillis(40);
+ int32 frameDelay = _frameDelay;
+ if (_smackerDecoder && _smackerDecoder->isVideoLoaded() && !_smackerDecoder->endOfVideo())
+ frameDelay = _smackerDecoder->getTimeToNextFrame();
+ int32 waitTicks = frameDelay - (_vm->_system->getMillis() - _ticks);
+ if (waitTicks > 0)
+ _vm->_system->delayMillis(waitTicks);
+ _ticks = _vm->_system->getMillis();
}
void Screen::setFps(int fps) {
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index fe5a254..56a2567 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -24,6 +24,7 @@
#define NEVERHOOD_SCREEN_H
#include "graphics/surface.h"
+#include "video/smk_decoder.h"
#include "neverhood/neverhood.h"
#include "neverhood/graphics.h"
@@ -51,11 +52,13 @@ public:
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent);
void drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent);
+ void setSmackerDecoder(Video::SmackerDecoder *smackerDecoder) { _smackerDecoder = smackerDecoder; }
protected:
NeverhoodEngine *_vm;
Graphics::Surface *_backScreen;
- uint32 _ticks;
- uint32 _frameDelay;
+ Video::SmackerDecoder *_smackerDecoder;
+ int32 _ticks;
+ int32 _frameDelay;
byte *_paletteData;
bool _paletteChanged;
};
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index 65c0c84..697893d 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -60,6 +60,7 @@ public:
uint getStatus();
void setDrawPos(int16 x, int16 y);
void rewind();
+ Video::SmackerDecoder *getSmackerDecoder() const { return _smackerDecoder; }
protected:
Scene *_scene;
Palette *_palette;
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 9982043..375f7f3 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -73,6 +73,7 @@ void SmackerScene::nextVideo() {
uint32 smackerFileHash = _fileHashList[_fileHashListIndex];
if (_vm->_res->getResourceTypeByHash(smackerFileHash) != 10) {
// Not a Smacker file
+ _vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, 0);
return;
}
@@ -80,12 +81,13 @@ void SmackerScene::nextVideo() {
if (!_fieldDF) {
setSubVar(0x00800410, smackerFileHash, 1);
}
- if (_fileHashListIndex == 0) {
+ if (_fileHashListIndex == 0)
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false));
- } else {
+ else
_smackerPlayer->open(smackerFileHash, false);
- }
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
} else {
+ _vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, 0);
}
Commit: 97ee348c2aaabcab5ebb6e7009b7cc96dbd907eb
https://github.com/scummvm/scummvm/commit/97ee348c2aaabcab5ebb6e7009b7cc96dbd907eb
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Rename stuff in DiskplayerScene
- Add SmackerPlayer::isDone()
- Fix puzzle key variable handling
- Update globalvars.txt
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/diskplayerscene.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module3000.cpp
engines/neverhood/smackerplayer.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 8788dcf..e20dec0 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -155,7 +155,7 @@ static const uint32 kDiskplayerSlotFileHashes4[] = {
0xDC802161
};
-Class494::Class494(NeverhoodEngine *vm)
+AsDiskplayerSceneKey::AsDiskplayerSceneKey(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100) {
createSurface1(0x100B90B4, 1200);
@@ -168,7 +168,7 @@ Class494::Class494(NeverhoodEngine *vm)
_surface->setVisible(false);
}
-uint32 Class494::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsDiskplayerSceneKey::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
@@ -178,19 +178,19 @@ uint32 Class494::handleMessage(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Class494::sub43BE00() {
- stopAnimation();
+void AsDiskplayerSceneKey::stDropKey() {
+ startAnimation(0x100B90B4, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Sprite::handleMessage);
- _surface->setVisible(false);
+ SetMessageHandler(&AsDiskplayerSceneKey::handleMessage);
+ NextState(&AsDiskplayerSceneKey::stDropKeyDone);
+ _surface->setVisible(true);
}
-void Class494::sub43BE20() {
- startAnimation(0x100B90B4, 0, -1);
+void AsDiskplayerSceneKey::stDropKeyDone() {
+ stopAnimation();
SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&Class494::handleMessage);
- NextState(&Class494::sub43BE00);
- _surface->setVisible(true);
+ SetMessageHandler(&Sprite::handleMessage);
+ _surface->setVisible(false);
}
DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene)
@@ -202,16 +202,13 @@ DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene
_drawRect.y = 0;
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = _spriteResource.getDimensions().width;
- _deltaRect.height = _spriteResource.getDimensions().height;
+ _deltaRect = _drawRect;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _surface->setVisible(false);
processDelta();
_needRefresh = true;
StaticSprite::update();
+ _surface->setVisible(false);
loadSound(0, 0x44043000);
loadSound(1, 0x44045000);
SetMessageHandler(&DiskplayerPlayButton::handleMessage);
@@ -222,7 +219,7 @@ uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam &p
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (!_diskplayerScene->getFlag3()) {
+ if (!_diskplayerScene->getDropKey()) {
if (_isPlaying) {
sendMessage(_diskplayerScene, 0x2001, 0);
release();
@@ -258,7 +255,7 @@ void DiskplayerPlayButton::release() {
DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int elementIndex, int value)
: Entity(vm, 0), _diskplayerScene(diskplayerScene), _elementIndex(elementIndex), _value(value),
- _flag2(false), _flag(false), _countdown(0), _initialCountdown(2), _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
+ _isLocked(false), _isBlinking(false), _countdown(0), _initialCountdown(2), _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
if (value != 0 && elementIndex < 20) {
_inactiveSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes1[_elementIndex], 1100));
@@ -271,84 +268,84 @@ DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerS
// TODO sound panning stuff
} else if (elementIndex != 20) {
_activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes4[_elementIndex], 1100));
- _activeSlot->getSurface()->setVisible(false);
+ _activeSlot->setVisible(false);
}
SetUpdateHandler(&DiskplayerSlot::update);
}
void DiskplayerSlot::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- if (_flag) {
+ if (_isBlinking) {
if (_inactiveSlot)
- _inactiveSlot->getSurface()->setVisible(true);
+ _inactiveSlot->setVisible(true);
if (_activeSlot)
- _activeSlot->getSurface()->setVisible(false);
+ _activeSlot->setVisible(false);
_countdown = _initialCountdown / 2;
} else {
if (_inactiveSlot)
- _inactiveSlot->getSurface()->setVisible(false);
+ _inactiveSlot->setVisible(false);
if (_activeSlot)
- _activeSlot->getSurface()->setVisible(true);
+ _activeSlot->setVisible(true);
_countdown = _initialCountdown;
}
- _flag = !_flag;
+ _isBlinking = !_isBlinking;
}
}
void DiskplayerSlot::appear() {
if (_inactiveSlot)
- _inactiveSlot->getSurface()->setVisible(true);
+ _inactiveSlot->setVisible(true);
if (_appearSlot)
- _appearSlot->getSurface()->setVisible(true);
+ _appearSlot->setVisible(true);
if (_inactiveSlot)
playSound(0);
}
void DiskplayerSlot::play() {
- if (!_flag2) {
+ if (!_isLocked) {
if (_inactiveSlot)
- _inactiveSlot->getSurface()->setVisible(false);
+ _inactiveSlot->setVisible(false);
if (_activeSlot)
- _activeSlot->getSurface()->setVisible(true);
- _flag = true;
+ _activeSlot->setVisible(true);
+ _isBlinking = true;
_countdown = 0;
}
}
void DiskplayerSlot::activate() {
- if (!_flag2)
+ if (!_isLocked)
_countdown = _initialCountdown;
}
void DiskplayerSlot::stop() {
- if (!_flag2) {
+ if (!_isLocked) {
if (_inactiveSlot)
- _inactiveSlot->getSurface()->setVisible(true);
+ _inactiveSlot->setVisible(true);
if (_activeSlot)
- _activeSlot->getSurface()->setVisible(false);
- _flag = false;
+ _activeSlot->setVisible(false);
+ _isBlinking = false;
_countdown = 0;
}
}
-DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _which(which), _diskIndex(0), _appearCountdown(0), _tuneInCountdown(0),
- _fullFlag(false), _flag3(false), _inputDisabled(true), _updateStatus(0) {
+DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int paletteIndex)
+ : Scene(vm, parentModule, true), _diskIndex(0), _appearCountdown(0), _tuneInCountdown(0),
+ _hasAllDisks(false), _dropKey(false), _inputDisabled(true), _updateStatus(kUSStopped) {
- int count = 0;
+ int availableDisksCount = 0;
_surfaceFlag = true;
setBackground(0x8A000044);
- setPalette(kDiskplayerPaletteFileHashes[_which]);
- _playButton = new DiskplayerPlayButton(_vm, this);
- addSprite(_playButton);
- _vm->_collisionMan->addSprite(_playButton);
- _class494 = new Class494(_vm);
- addSprite(_class494);
+ setPalette(kDiskplayerPaletteFileHashes[paletteIndex]);
+
+ _ssPlayButton = insertSprite<DiskplayerPlayButton>(this);
+ _vm->_collisionMan->addSprite(_ssPlayButton);
+
+ _asKey = insertSprite<AsDiskplayerSceneKey>();
// DEBUG>>>: Give all disks
- for (int i = 0; i < 19; i++) {
+ for (int i = 0; i < 20; i++) {
setSubVar(0x02720344, i, 1);
}
// DEBUG<<<
@@ -356,37 +353,34 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
for (int i = 0; i < 20; i++) {
_diskAvailable[i] = 0;
if (getSubVar(0x02720344, i))
- count++;
+ availableDisksCount++;
}
- for (int i = 0; i < count; i++) {
+ for (int i = 0; i < availableDisksCount; i++)
_diskAvailable[kDiskplayerInitArray[i] - 1] = 1;
- }
for (int i = 0; i < 20; i++) {
_diskSlots[i] = new DiskplayerSlot(_vm, this, i, _diskAvailable[i]);
addEntity(_diskSlots[i]);
}
- _fullFlag = count == 20;
+ _hasAllDisks = availableDisksCount == 20;
- if (_fullFlag && !getGlobalVar(0xC0780812))
- _flag3 = true;
-
- _flag4 = _flag3;
+ if (_hasAllDisks && !getGlobalVar(0xC0780812))
+ _dropKey = true;
- _class650 = new DiskplayerSlot(_vm, this, 20, 0);
- addEntity(_class650);
+ _finalDiskSlot = new DiskplayerSlot(_vm, this, 20, 0);
+ addEntity(_finalDiskSlot);
insertMouse435(0x000408A8, 20, 620);
showMouse(false);
- _smackerPlayer = new SmackerPlayer(_vm, this, 0x08288103, false, true);
- addEntity(_smackerPlayer);
- addSurface(_smackerPlayer->getSurface());
- _smackerPlayer->setDrawPos(154, 86);
- // TODO _smackerPlayer->gotoFrame(0);
- _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
+ _diskSmackerPlayer = new SmackerPlayer(_vm, this, 0x08288103, false, true);
+ addEntity(_diskSmackerPlayer);
+ addSurface(_diskSmackerPlayer->getSurface());
+ _diskSmackerPlayer->setDrawPos(154, 86);
+ // TODO _diskSmackerPlayer->gotoFrame(0);
+ _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder());
_palette->usePalette();
@@ -399,73 +393,63 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
void DiskplayerScene::update() {
Scene::update();
- debug("_updateStatus = %d", _updateStatus);
-
- if (_updateStatus == 1) {
- if (_smackerPlayer->getFrameNumber() == _smackerPlayer->getFrameCount() - 1) {
- if (_diskAvailable[_diskIndex]) {
- playDisk();
- } else {
- playStatic();
- }
+ if (_updateStatus == kUSTuningIn && _diskSmackerPlayer->isDone()) {
+ if (_diskAvailable[_diskIndex]) {
+ playDisk();
+ } else {
+ playStatic();
}
- } else if (_updateStatus == 2) {
- if (_smackerPlayer->getFrameNumber() == _smackerPlayer->getFrameCount() - 1) {
- _diskSlots[_diskIndex]->stop();
- _diskIndex++;
- if (_fullFlag) {
- if (_diskIndex == 20) {
- if (_flag3) {
- playDisk();
- _updateStatus = 3;
- } else {
- _diskIndex = 0;
- stop();
- }
- } else {
- playDisk();
- }
+ } else if (_updateStatus == kUSPlaying && _diskSmackerPlayer->isDone()) {
+ _diskSlots[_diskIndex]->stop();
+ _diskIndex++;
+ if (_hasAllDisks) {
+ if (_diskIndex != 20) {
+ playDisk();
+ } else if (_dropKey) {
+ playDisk();
+ _updateStatus = kUSPlayingFinal;
} else {
- if (_diskIndex == 20) {
- _diskIndex = 0;
- stop();
- } else {
- tuneIn();
- }
+ _diskIndex = 0;
+ stop();
}
+ } else if (_diskIndex != 20) {
+ tuneIn();
+ } else {
+ _diskIndex = 0;
+ stop();
}
- } else if (_updateStatus == 3) {
- if (_smackerPlayer->getFrameNumber() == 133) {
- _class494->sub43BE20();
+ } else if (_updateStatus == kUSPlayingFinal) {
+ if (_diskSmackerPlayer->getFrameNumber() == 133) {
+ _asKey->stDropKey();
setGlobalVar(0xC0780812, 1);
- } else if (_smackerPlayer->getFrameNumber() == _smackerPlayer->getFrameCount() - 1) {
+ } else if (_diskSmackerPlayer->isDone()) {
for (int i = 0; i < 20; i++) {
- _diskSlots[i]->setFlag2(false);
+ _diskSlots[i]->setLocked(false);
_diskSlots[i]->stop();
}
_diskIndex = 0;
stop();
showMouse(true);
- _flag3 = false;
+ _dropKey = false;
}
}
if (_appearCountdown != 0 && (--_appearCountdown == 0)) {
_diskSlots[_diskIndex]->appear();
- if (_flag3) {
+ if (_dropKey) {
_diskSlots[_diskIndex]->activate();
- _diskSlots[_diskIndex]->setFlag2(true);
+ _diskSlots[_diskIndex]->setLocked(true);
}
_diskIndex++;
- while (_diskAvailable[_diskIndex] == 0 && _diskIndex < 19)
+ while (!_diskAvailable[_diskIndex] && _diskIndex < 19)
_diskIndex++;
if (_diskIndex < 20) {
_appearCountdown = 1;
} else {
_diskIndex = 0;
_inputDisabled = false;
- if (_flag3) {
- _playButton->press();
+ if (_dropKey) {
+ _ssPlayButton->press();
_tuneInCountdown = 2;
} else {
showMouse(true);
@@ -474,9 +458,8 @@ void DiskplayerScene::update() {
}
}
- if (_tuneInCountdown != 0 && (--_tuneInCountdown == 0)) {
+ if (_tuneInCountdown != 0 && (--_tuneInCountdown == 0))
playDisk();
- }
}
@@ -489,14 +472,14 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
// TODO: Debug/Cheat
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
sendMessage(_parentModule, 0x1009, 0);
- } else if (!_flag3 &&
+ } else if (!_dropKey &&
param.asPoint().x > 38 && param.asPoint().x < 598 &&
param.asPoint().y > 400 && param.asPoint().y < 460) {
_diskSlots[_diskIndex]->stop();
_diskIndex = (param.asPoint().x - 38) / 28;
_diskSlots[_diskIndex]->activate();
- if (_updateStatus == 2) {
+ if (_updateStatus == kUSPlaying) {
if (_diskAvailable[_diskIndex]) {
playDisk();
} else {
@@ -518,37 +501,37 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
}
void DiskplayerScene::stop() {
- _smackerPlayer->open(0x08288103, true);
- _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
+ _diskSmackerPlayer->open(0x08288103, true);
+ _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder());
_palette->usePalette();
- _playButton->release();
- _updateStatus = 0;
+ _ssPlayButton->release();
+ _updateStatus = kUSStopped;
_diskSlots[_diskIndex]->activate();
}
void DiskplayerScene::tuneIn() {
- _smackerPlayer->open(0x900001C1, false);
- _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
+ _diskSmackerPlayer->open(0x900001C1, false);
+ _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder());
_palette->usePalette();
- _playButton->release();
- _updateStatus = 1;
+ _ssPlayButton->release();
+ _updateStatus = kUSTuningIn;
_diskSlots[_diskIndex]->activate();
}
void DiskplayerScene::playDisk() {
- _smackerPlayer->open(kDiskplayerSmackerFileHashes[_diskIndex], false);
- _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
+ _diskSmackerPlayer->open(kDiskplayerSmackerFileHashes[_diskIndex], false);
+ _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder());
_palette->usePalette();
- _updateStatus = 2;
+ _updateStatus = kUSPlaying;
_diskSlots[_diskIndex]->play();
}
void DiskplayerScene::playStatic() {
- _smackerPlayer->open(0x90000101, false);
- _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
+ _diskSmackerPlayer->open(0x90000101, false);
+ _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder());
_palette->usePalette();
- _playButton->release();
- _updateStatus = 2;
+ _ssPlayButton->release();
+ _updateStatus = kUSPlaying;
_diskSlots[_diskIndex]->activate();
}
diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h
index d005f79..7225ff6 100644
--- a/engines/neverhood/diskplayerscene.h
+++ b/engines/neverhood/diskplayerscene.h
@@ -32,13 +32,13 @@ namespace Neverhood {
class DiskplayerScene;
-class Class494 : public AnimatedSprite {
+class AsDiskplayerSceneKey : public AnimatedSprite {
public:
- Class494(NeverhoodEngine *vm);
- void sub43BE20();
+ AsDiskplayerSceneKey(NeverhoodEngine *vm);
+ void stDropKey();
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub43BE00();
+ void stDropKeyDone();
};
class DiskplayerPlayButton : public StaticSprite {
@@ -59,7 +59,7 @@ public:
void stop();
void appear();
void play();
- void setFlag2(bool value) { _flag2 = value; }
+ void setLocked(bool isLocked) { _isLocked = isLocked; }
protected:
DiskplayerScene *_diskplayerScene;
Sprite *_inactiveSlot;
@@ -68,32 +68,37 @@ protected:
int _elementIndex;
int _initialCountdown;
int _countdown;
- bool _flag2;
+ bool _isLocked;
int _value;
- bool _flag;
+ bool _isBlinking;
void update();
};
+enum {
+ kUSStopped = 0,
+ kUSTuningIn = 1,
+ kUSPlaying = 2,
+ kUSPlayingFinal = 3
+};
+
class DiskplayerScene : public Scene {
public:
- DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int which);
- bool getFlag3() const { return _flag3; }
+ DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int paletteIndex);
+ bool getDropKey() const { return _dropKey; }
protected:
- SmackerPlayer *_smackerPlayer;
- DiskplayerPlayButton *_playButton;
- Class494 *_class494;
+ SmackerPlayer *_diskSmackerPlayer;
+ DiskplayerPlayButton *_ssPlayButton;
+ AsDiskplayerSceneKey *_asKey;
DiskplayerSlot *_diskSlots[20];
- DiskplayerSlot *_class650;
+ DiskplayerSlot *_finalDiskSlot;
int _updateStatus;
byte _diskAvailable[20];
- bool _flag4;
- int _which;
int _diskIndex;
int _appearCountdown;
int _tuneInCountdown;
- bool _fullFlag;
+ bool _hasAllDisks;
bool _inputDisabled;
- bool _flag3;
+ bool _dropKey;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stop();
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e35e16e..4be8785 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -312,8 +312,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 0;
- createModule(1200, -1);
+ _vm->gameState().sceneNum = 3;
+ createModule(1300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index f385835..6533e07 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -874,7 +874,7 @@ void AsScene1306Elevator::cbGoingDownEvent() {
Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860))
+ if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
setGlobalVar(0x13382860, 4);
_surfaceFlag = true;
@@ -884,7 +884,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x05303114);
insertMouse433(0x0311005B);
- if (!getGlobalVar(0x13382860)) {
+ if (getGlobalVar(0x13382860) == 4) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 435, 445);
_vm->_collisionMan->addSprite(_asKey);
}
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index d31f3de..9cfb826 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1425,9 +1425,8 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _asProjector(NULL), _asKey(NULL) {
- if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860)) {
+ if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
setGlobalVar(0x13382860, 5);
- }
SetMessageHandler(&Scene1404::handleMessage);
_surfaceFlag = true;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 777b848..29b4103 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -1028,6 +1028,7 @@ AsCommonKey::AsCommonKey(NeverhoodEngine *vm, Scene *parentScene, int keyIndex,
if (!getSubVar(0x0090EA95, _keyIndex) && !getSubVar(0x08D0AB11, _keyIndex)) {
SetMessageHandler(&AsCommonKey::handleMessage);
} else {
+ // If Klayman already has the key or it's already inserted then don't show it
setVisible(false);
SetMessageHandler(NULL);
}
@@ -1114,7 +1115,7 @@ void AsScene2203Door::closeDoor() {
Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- if (getGlobalVar(0xC0780812) && !getGlobalVar(0x13382860))
+ if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
setGlobalVar(0x13382860, 1);
SetMessageHandler(&Scene2203::handleMessage);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 238768c..a29795b 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -921,9 +921,8 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite1, *tempSprite2;
- if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0) {
+ if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
setGlobalVar(0x13382860, 2);
- }
_surfaceFlag = true;
SetMessageHandler(&Scene2406::handleMessage);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index f4dd674..88caff9 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -865,7 +865,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene3009::update() {
Scene::update();
- if (!_keepVideo && _smackerPlayer->getFrameNumber() + 1 == _smackerPlayer->getFrameCount() && _cannonTargetStatus <= kCTSCount) {
+ if (!_keepVideo && _smackerPlayer->isDone() && _cannonTargetStatus <= kCTSCount) {
switch (_cannonTargetStatus) {
case kCTSNull:
case kCTSLowerCannon:
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index 697893d..c480c2d 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -60,6 +60,7 @@ public:
uint getStatus();
void setDrawPos(int16 x, int16 y);
void rewind();
+ bool isDone() { return getFrameNumber() + 1 == getFrameCount(); }
Video::SmackerDecoder *getSmackerDecoder() const { return _smackerDecoder; }
protected:
Scene *_scene;
Commit: 1539023834a2ad7cf8942711d60983891a10a82a
https://github.com/scummvm/scummvm/commit/1539023834a2ad7cf8942711d60983891a10a82a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:44:40-07:00
Commit Message:
NEVERHOOD: Use constants for the numbers in get/setGlobalVar
Now the code is much more readable
- Still TODO is to do the same with get/setSubVar
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/gamevars.h
engines/neverhood/klayman.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/resource.cpp
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index e20dec0..54c33dd 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -366,7 +366,7 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_hasAllDisks = availableDisksCount == 20;
- if (_hasAllDisks && !getGlobalVar(0xC0780812))
+ if (_hasAllDisks && !getGlobalVar(V_HAS_FINAL_KEY))
_dropKey = true;
_finalDiskSlot = new DiskplayerSlot(_vm, this, 20, 0);
@@ -421,7 +421,7 @@ void DiskplayerScene::update() {
} else if (_updateStatus == kUSPlayingFinal) {
if (_diskSmackerPlayer->getFrameNumber() == 133) {
_asKey->stDropKey();
- setGlobalVar(0xC0780812, 1);
+ setGlobalVar(V_HAS_FINAL_KEY, 1);
} else if (_diskSmackerPlayer->isDone()) {
for (int i = 0; i < 20; i++) {
_diskSlots[i]->setLocked(false);
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 4be8785..ac20138 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -301,19 +301,20 @@ void GameModule::startup() {
// DEBUG>>>
/*
- setGlobalVar(0x0A310817, 1);
+ setGlobalVar(V_SEEN_MUSIC_BOX, 1);
setGlobalVar(0x0A18CA33, 0);
setGlobalVar(0x0112090A, 0);
//setGlobalVar(0x000CF819, 1);
- setGlobalVar(0x04A105B3, 2);
+ setGlobalVar(V_PROJECTOR_LOCATION, 2);
*/
+ //setGlobalVar(V_ENTRANCE_OPEN, 0);
+ //setGlobalVar(V_DOOR_SPIKES_OPEN, 1);
// <<<DEBUG
-
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 3;
- createModule(1300, -1);
+ _vm->gameState().sceneNum = 5;
+ createModule(2200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -358,7 +359,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 0
- setGlobalVar(0x1860C990, 1); // DEBUG Make Klayman small
+ setGlobalVar(V_KLAYMAN_SMALL, 1); // DEBUG Make Klayman small
_vm->gameState().sceneNum = 2;
createModule(2800, -1);
#endif
@@ -378,84 +379,84 @@ void GameModule::createModule(int moduleNum, int which) {
_moduleNum = moduleNum;
switch (_moduleNum) {
case 1000:
- setGlobalVar(0x91080831, 0x03294419);
+ setGlobalVar(V_MODULE_NAME, 0x03294419);
_childObject = new Module1000(_vm, this, which);
break;
case 1100:
- setGlobalVar(0x91080831, 0x0002C818);
+ setGlobalVar(V_MODULE_NAME, 0x0002C818);
_childObject = new Module1100(_vm, this, which);
break;
case 1200:
- setGlobalVar(0x91080831, 0x00478311);
+ setGlobalVar(V_MODULE_NAME, 0x00478311);
_childObject = new Module1200(_vm, this, which);
break;
case 1300:
- setGlobalVar(0x91080831, 0x0061C090);
+ setGlobalVar(V_MODULE_NAME, 0x0061C090);
_childObject = new Module1300(_vm, this, which);
break;
case 1400:
- setGlobalVar(0x91080831, 0x00AD0012);
+ setGlobalVar(V_MODULE_NAME, 0x00AD0012);
_childObject = new Module1400(_vm, this, which);
break;
case 1500:
_someFlag1 = false;
- setGlobalVar(0x91080831, 0x00F10114);
+ setGlobalVar(V_MODULE_NAME, 0x00F10114);
_childObject = new Module1500(_vm, this, which, true);
break;
case 1600:
- setGlobalVar(0x91080831, 0x01A008D8);
+ setGlobalVar(V_MODULE_NAME, 0x01A008D8);
_childObject = new Module1600(_vm, this, which);
break;
case 1700:
- setGlobalVar(0x91080831, 0x04212331);
+ setGlobalVar(V_MODULE_NAME, 0x04212331);
_childObject = new Module1700(_vm, this, which);
break;
case 1800:
- setGlobalVar(0x91080831, 0x04A14718);
+ setGlobalVar(V_MODULE_NAME, 0x04A14718);
_childObject = new Module1800(_vm, this, which);
break;
case 1900:
- setGlobalVar(0x91080831, 0x04E1C09C);
+ setGlobalVar(V_MODULE_NAME, 0x04E1C09C);
_childObject = new Module1900(_vm, this, which);
break;
case 2000:
- setGlobalVar(0x91080831, 0x08250000);
+ setGlobalVar(V_MODULE_NAME, 0x08250000);
_childObject = new Module2000(_vm, this, which);
break;
case 2100:
- setGlobalVar(0x91080831, 0x10A10C14);
+ setGlobalVar(V_MODULE_NAME, 0x10A10C14);
_childObject = new Module2100(_vm, this, which);
break;
case 2200:
- setGlobalVar(0x91080831, 0x11391412);
+ setGlobalVar(V_MODULE_NAME, 0x11391412);
_childObject = new Module2200(_vm, this, which);
break;
case 2300:
- setGlobalVar(0x91080831, 0x1A214010);
+ setGlobalVar(V_MODULE_NAME, 0x1A214010);
_childObject = new Module2300(_vm, this, which);
break;
case 2400:
- setGlobalVar(0x91080831, 0x202D1010);
+ setGlobalVar(V_MODULE_NAME, 0x202D1010);
_childObject = new Module2400(_vm, this, which);
break;
case 2500:
- setGlobalVar(0x91080831, 0x29220120);
+ setGlobalVar(V_MODULE_NAME, 0x29220120);
_childObject = new Module2500(_vm, this, which);
break;
case 2600:
- setGlobalVar(0x91080831, 0x40271018);
+ setGlobalVar(V_MODULE_NAME, 0x40271018);
_childObject = new Module2600(_vm, this, which);
break;
case 2700:
- setGlobalVar(0x91080831, 0x42212411);
+ setGlobalVar(V_MODULE_NAME, 0x42212411);
_childObject = new Module2700(_vm, this, which);
break;
case 2800:
- setGlobalVar(0x91080831, 0x64210814);
+ setGlobalVar(V_MODULE_NAME, 0x64210814);
_childObject = new Module2800(_vm, this, which);
break;
case 3000:
- setGlobalVar(0x91080831, 0x81293110);
+ setGlobalVar(V_MODULE_NAME, 0x81293110);
_childObject = new Module3000(_vm, this, which);
break;
default:
@@ -482,7 +483,7 @@ void GameModule::updateModule() {
if (_moduleResult == 0) {
createModule(2900, 2);
} else {
- setGlobalVar(0xD0A14D10, 1);
+ setGlobalVar(V_ENTRANCE_OPEN, 1);
createModule(1300, 0);
}
break;
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 863aa1b..a99459f 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -28,6 +28,102 @@
namespace Neverhood {
+enum {
+ // Misc
+ V_MODULE_NAME = 0x91080831, // Currently active module name hash
+ V_DEBUG = 0xA4014072, // Original debug-flag, can probably be removed
+ V_SMACKER_CAN_ABORT = 0x06C02850, // Not set anywhere (yet), seems like a debug flag
+ V_KEY3_LOCATION = 0x13382860, // Location of the third key
+ V_TEXT_FLAG1 = 0x8440001F,
+ V_TEXT_INDEX = 0x01830201,
+ V_TEXT_COUNTING_INDEX1 = 0x29408F00,
+ V_TEXT_COUNTING_INDEX2 = 0x8A140C21,
+ V_TALK_COUNTING_INDEX = 0xA0808898,
+ V_FRUIT_COUNTING_INDEX = 0x40040831,
+ V_NOISY_SYMBOL_INDEX = 0x2414C2F2,
+ V_COLUMN_BACK_NAME = 0x4CE79018,
+ V_COLUMN_TEXT_NAME = 0xC8C28808,
+ V_CLICKED_COLUMN_INDEX = 0x48A68852,
+ V_CLICKED_COLUMN_ROW = 0x49C40058,
+ V_MUSIC_NAME = 0x89A82A15,
+ // Klayman
+ V_KLAYMAN_SMALL = 0x1860C990, // Is Klayman small?
+ V_KLAYMAN_FRAMEINDEX = 0x18288913,
+ V_KLAYMAN_IS_DELTA_X = 0xC0418A02,
+ V_KLAYMAN_SAVED_X = 0x00D30138,
+ V_CAR_DELTA_X = 0x21E60190,
+ // Flags
+ V_CRYSTAL_COLORS_INIT = 0xDE2EC914,
+ V_TV_JOKE_TOLD = 0x92603A79,
+ V_NOTES_DOOR_UNLOCKED = 0x0045D021,
+ V_WATER_RUNNING = 0x4E0BE910,
+ V_CREATURE_ANGRY = 0x0A310817, // After having played with the music box
+ V_BEEN_SHRINKING_ROOM = 0x1C1B8A9A,
+ V_BEEN_STATUE_ROOM = 0xCB45DE03,
+ V_MOUSE_PUZZLE_SOLVED = 0x70A1189C,
+ V_NOTES_PUZZLE_SOLVED = 0x86615030,
+ V_TILE_PUZZLE_SOLVED = 0x404290D5,
+ V_STAIRS_PUZZLE_SOLVED = 0xA9035F60,
+ V_SPIKES_RETRACTED = 0x18890C91,
+ V_LARGE_DOOR_NUMBER = 0x9A500914, // Number of the currently "large" door
+ V_LIGHTS_ON = 0x4D080E54,
+ V_SHRINK_LIGHTS_ON = 0x190A1D18, // Lights on in the room with the shrinking device
+ V_STAIRS_DOWN = 0x09221A62,
+ V_LADDER_DOWN = 0x0018CA22, // Is the ladder in the statue room down?
+ V_LADDER_DOWN_ACTION = 0x00188211,
+ V_WALL_BROKEN = 0x10938830,
+ V_BOLT_DOOR_OPEN = 0x01BA1A52,
+ V_BOLT_DOOR_UNLOCKED = 0x00040153,
+ V_SEEN_SYMBOLS_NO_LIGHT = 0x81890D14,
+ V_FELL_DOWN_HOLE = 0xE7498218,
+ V_DOOR_PASSED = 0x2090590C, // Auto-closing door was passed
+ V_ENTRANCE_OPEN = 0xD0A14D10, // Is the entrance to Module1300 open (after the robot got his teddy)
+ V_WINDOW_OPEN = 0x03C698DA,
+ V_DOOR_STATUS = 0x52371C95,
+ V_DOOR_BUSTED = 0xD217189D,
+ V_WORLDS_JOINED = 0x98109F12, // Are the worlds joined?
+ V_KEYDOOR_UNLOCKED = 0x80455A41, // Is the keyboard-door unlocked?
+ V_MOUSE_SUCKED_IN = 0x01023818, // Are mouse/cheese in Scene1308?
+ V_BALLOON_POPPED = 0xAC00C0D0, // Has the balloon with the key been popped?
+ V_TNT_DUMMY_BUILT = 0x000CF819, // Are all TNT parts on the dummy?
+ V_TNT_DUMMY_FUSE_LIT = 0x20A0C516,
+ V_RING5_PULLED = 0x4DE80AC0,
+ V_CREATURE_EXPLODED = 0x2A02C07B,
+ // Match
+ V_MATCH_STATUS = 0x0112090A,
+ // Venus fly trap
+ V_FLYTRAP_RING_EATEN = 0x2B514304,
+ V_FLYTRAP_RING_DOOR = 0x8306F218,
+ V_FLYTRAP_RING_FENCE = 0x80101B1E,
+ V_FLYTRAP_RING_BRIDGE = 0x13206309,
+ V_FLYTRAP_POSITION_1 = 0x1B144052,
+ V_FLYTRAP_POSITION_2 = 0x86341E88,
+ // Navigation
+ V_NAVIGATION_INDEX = 0x4200189E, // Navigation scene: Current navigation index
+ // Cannon
+ V_CANNON_RAISED = 0x000809C2, // Is the cannon raised?
+ V_CANNON_TURNED = 0x9040018A, // Is the cannon turned?
+ V_ROBOT_HIT = 0x0C0288F4, // Was the robot hit by the cannon?
+ V_ROBOT_TARGET = 0x610210B7, // Is the robot at the cannon target position? (teddy)
+ V_CANNON_SMACKER_NAME = 0xF0402B0A,
+ V_CANNON_TARGET_STATUS = 0x20580A86,
+ // Projector
+ V_PROJECTOR_SLOT = 0x04A10F33, // Projector x slot index
+ V_PROJECTOR_LOCATION = 0x04A105B3, // Projector scene location
+ V_PROJECTOR_ACTIVE = 0x12A10DB3, // Is the projecor projecting?
+ // Inventory
+ V_HAS_NEEDLE = 0x31C63C51, // Has Klayman the needle?
+ V_HAS_FINAL_KEY = 0xC0780812, // Has Klayman the key from the diskplayer?
+ V_HAS_TEST_TUBE = 0x45080C38,
+#if 0
+Arrays:
+0x0800547C Water pipes water level (index equals pipe number; 0 to 4)
+0x0090EA95 Has Klayman the key (index equals the key number; 0 to 2)
+0x08D0AB11 Has Klayman inserted the key (index equals the key number; 0 to 2)
+#endif
+ V_END_
+};
+
struct GameVar {
uint32 nameHash;
uint32 value;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 7343b0a..0342b02 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3048,7 +3048,7 @@ uint32 Klayman::hmMatch(int messageNum, const MessageParam ¶m, Entity *sende
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x51281850) {
- setGlobalVar(0x20A0C516, 1);
+ setGlobalVar(V_TNT_DUMMY_FUSE_LIT, 1);
} else if (param.asInteger() == 0x43000538) {
playSound(0, 0x21043059);
} else if (param.asInteger() == 0x02B20220) {
@@ -3283,7 +3283,7 @@ void Klayman::stWaitLeverDown() {
}
void Klayman::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(0x18288913) + _walkResumeFrameIncr;
+ int16 frameIndex = getGlobalVar(V_KLAYMAN_FRAMEINDEX) + _walkResumeFrameIncr;
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
_status2 = 0;
@@ -4788,7 +4788,7 @@ KmScene2205::KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
void KmScene2205::xUpdate() {
- setGlobalVar(0x18288913, _currFrameIndex);
+ setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
}
uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4842,7 +4842,7 @@ KmScene2206::~KmScene2206() {
}
void KmScene2206::xUpdate() {
- setGlobalVar(0x18288913, _currFrameIndex);
+ setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
}
uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5006,7 +5006,7 @@ KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
void KmScene2242::xUpdate() {
- setGlobalVar(0x18288913, _currFrameIndex);
+ setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
}
uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5076,7 +5076,7 @@ KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16
}
void KmHallOfRecords::xUpdate() {
- setGlobalVar(0x18288913, _currFrameIndex);
+ setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
}
uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5130,7 +5130,7 @@ KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
void KmScene2247::xUpdate() {
- setGlobalVar(0x18288913, _currFrameIndex);
+ setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
}
uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5274,7 +5274,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
- if (!getGlobalVar(0x92603A79))
+ if (!getGlobalVar(V_TV_JOKE_TOLD))
GotoState(&Klayman::stStandWonderAbout);
else
GotoState(&Klayman::stTryStandIdle);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 878a0e7..2c52842 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -29,7 +29,7 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Create Module1000(%d)", which);
- _musicFileHash = getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144;
+ _musicFileHash = getGlobalVar(V_ENTRANCE_OPEN) ? 0x81106480 : 0x00103144;
_vm->_soundMan->addMusic(0x03294419, 0x061880C6);
_vm->_soundMan->addMusic(0x03294419, _musicFileHash);
@@ -140,7 +140,7 @@ uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m,
}
void AsScene1001Door::hammerHitsDoor() {
- switch (getGlobalVar(0x52371C95)) {
+ switch (getGlobalVar(V_DOOR_STATUS)) {
case 0:
case 1:
playSound(0, 0x65482F03);
@@ -156,11 +156,11 @@ void AsScene1001Door::hammerHitsDoor() {
// Nothing
break;
}
- incGlobalVar(0x52371C95, 1);
+ incGlobalVar(V_DOOR_STATUS, 1);
}
void AsScene1001Door::stShowIdleDoor() {
- switch (getGlobalVar(0x52371C95)) {
+ switch (getGlobalVar(V_DOOR_STATUS)) {
case 1:
startAnimation(0x624C0498, 4, -1);
_newStickFrameIndex = 4;
@@ -181,7 +181,7 @@ void AsScene1001Door::stShowIdleDoor() {
}
void AsScene1001Door::stBustedDoorMove() {
- setGlobalVar(0xD217189D, 1);
+ setGlobalVar(V_DOOR_BUSTED, 1);
startAnimation(0x624C0498, 6, 6);
NextState(&AsScene1001Door::stBustedDoorGone);
_x = 30;
@@ -249,7 +249,7 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
break;
case 0x3002:
SetMessageHandler(NULL);
- setGlobalVar(0x03C698DA, 1);
+ setGlobalVar(V_WINDOW_OPEN, 1);
setVisible(false);
break;
}
@@ -354,7 +354,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1001>(390, 433);
_klayman->setDoDeltaX(1);
} else {
@@ -371,7 +371,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
- if (getGlobalVar(0xD217189D) == 0) {
+ if (getGlobalVar(V_DOOR_BUSTED) == 0) {
_asDoor = insertSprite<AsScene1001Door>();
_asDoor->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
} else {
@@ -385,7 +385,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
- if (getGlobalVar(0x03C698DA) == 0) {
+ if (getGlobalVar(V_WINDOW_OPEN) == 0) {
tempSprite = insertStaticSprite(0x8C066150, 200);
_asWindow = insertSprite<AsScene1001Window>();
_asWindow->setClipRect(tempSprite->getDrawRect());
@@ -398,7 +398,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1001::~Scene1001() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX());
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX());
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -407,7 +407,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
+ if (param.asPoint().x == 0 && getGlobalVar(V_DEBUG)) {
leaveScene(0);
}
break;
@@ -423,7 +423,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList2(0x004B4910);
messageResult = 1;
} else if (param.asInteger() == 0x21E64A00) {
- if (getGlobalVar(0xD217189D)) {
+ if (getGlobalVar(V_DOOR_BUSTED)) {
setMessageList(0x004B48A8);
} else {
setMessageList(0x004B48C8);
@@ -432,7 +432,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x040424D0) {
sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x80006358) {
- if (getGlobalVar(0x03C698DA)) {
+ if (getGlobalVar(V_WINDOW_OPEN)) {
setMessageList(0x004B4938);
} else {
setMessageList(0x004B4960);
@@ -615,7 +615,7 @@ AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
_x = 526;
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
_y = 49;
} else {
_y = 239;
@@ -644,11 +644,11 @@ uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4808:
- setGlobalVar(0x8306F218, 1);
+ setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
SetSpriteUpdate(&AsScene1002Door::suOpenDoor);
break;
case 0x4809:
- setGlobalVar(0x8306F218, 0);
+ setGlobalVar(V_FLYTRAP_RING_DOOR, 0);
SetSpriteUpdate(&AsScene1002Door::suCloseDoor);
break;
}
@@ -872,20 +872,20 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
if (!_flag) {
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
setDoDeltaX(1);
_x = 366;
_y = 435;
stRingGrabbed();
} else {
- _x = 174 + getGlobalVar(0x1B144052) * 32;
+ _x = 174 + getGlobalVar(V_FLYTRAP_POSITION_1) * 32;
_y = 435;
stIdle();
}
} else {
- _x = 186 + getGlobalVar(0x86341E88) * 32;
+ _x = 186 + getGlobalVar(V_FLYTRAP_POSITION_2) * 32;
_y = 364;
- if (getGlobalVar(0x13206309) || getGlobalVar(0x80101B1E)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE) || getGlobalVar(V_FLYTRAP_RING_FENCE)) {
stRingGrabbed();
} else {
stIdle();
@@ -937,13 +937,13 @@ uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam
case 0x480B:
setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
if (!_flag) {
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
stRelease();
} else {
stWalk();
}
} else {
- if (getGlobalVar(0x13206309) || getGlobalVar(0x80101B1E)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE) || getGlobalVar(V_FLYTRAP_RING_FENCE)) {
stRelease();
} else {
stWalk();
@@ -1079,14 +1079,14 @@ void AsScene1002VenusFlyTrap::stIdle() {
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
if (_flag) {
if (_x >= 154 && _x <= 346) {
- setGlobalVar(0x86341E88, (_x - 186) / 32);
+ setGlobalVar(V_FLYTRAP_POSITION_2, (_x - 186) / 32);
} else {
NextState(&AsScene1002VenusFlyTrap::stWalkBack);
_countdown = 12;
}
} else {
if (_x >= 174 && _x <= 430) {
- setGlobalVar(0x1B144052, (_x - 174) / 32);
+ setGlobalVar(V_FLYTRAP_POSITION_1, (_x - 174) / 32);
} else {
NextState(&AsScene1002VenusFlyTrap::stWalkBack);
_countdown = 12;
@@ -1129,7 +1129,7 @@ AsScene1002OutsideDoorBackground::AsScene1002OutsideDoorBackground(NeverhoodEngi
createSurface(850, 186, 212);
_x = 320;
_y = 240;
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
startAnimation(0x004A4495, -1, -1);
_newStickFrameIndex = -2;
} else {
@@ -1346,7 +1346,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asRing1 = insertSprite<AsScene1002Ring>(this, false, 258, 191, _class599->getDrawRect().y, false);
_asRing2 = insertSprite<AsScene1002Ring>(this, false, 297, 189, _class599->getDrawRect().y, false);
- _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(0x8306F218) != 0);
+ _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_DOOR) != 0);
_asRing4 = insertSprite<AsScene1002Ring>(this, false, 334, 191, _class599->getDrawRect().y, false);
_asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _class599->getDrawRect().y, false);
@@ -1395,24 +1395,24 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
// Debug stuff (original)
- if (param.asPoint().x == 0 && getGlobalVar(0xA4014072)) {
- setGlobalVar(0x8306F218, 1);
- setGlobalVar(0x1B144052, 3);
+ if (param.asPoint().x == 0 && getGlobalVar(V_DEBUG)) {
+ setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
+ setGlobalVar(V_FLYTRAP_POSITION_1, 3);
leaveScene(1);
}
break;
case 0x000D:
// Debug stuff (original)
if (param.asInteger() == 0x48848178) {
- setGlobalVar(0x8306F218, 1);
- setGlobalVar(0x1B144052, 3);
+ setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
+ setGlobalVar(V_FLYTRAP_POSITION_1, 3);
leaveScene(1);
}
messageResult = 1;
break;
case 0x100D:
if (param.asInteger() == 0xE6EE60E1) {
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
setMessageList(0x004B4428);
} else {
setMessageList(0x004B4448);
@@ -1423,12 +1423,12 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x43807801) {
sendEntityMessage(_klayman, 0x1014, _asRing2);
} else if (param.asInteger() == 0x46C26A01) {
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
setMessageList(0x004B44B8);
} else {
sendEntityMessage(_klayman, 0x1014, _asRing3);
if (_asVenusFlyTrap->getX() - 10 < 366 && _asVenusFlyTrap->getX() + 10 > 366) {
- setGlobalVar(0x2B514304, 1);
+ setGlobalVar(V_FLYTRAP_RING_EATEN, 1);
setMessageList(0x004B44A8);
} else {
setMessageList(0x004B44A0);
@@ -1475,21 +1475,21 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_parentModule, 0x1024, 2);
_flag1BE = true;
if (sender == _asRing1) {
- setGlobalVar(0x4DE80AC0, 0);
+ setGlobalVar(V_RING5_PULLED, 0);
playSound(0, 0x665198C0);
} else if (sender == _asRing2) {
- setGlobalVar(0x4DE80AC0, 0);
+ setGlobalVar(V_RING5_PULLED, 0);
playSound(0, 0xE2D389C0);
} else if (sender == _asRing3) {
- setGlobalVar(0x4DE80AC0, 0);
+ setGlobalVar(V_RING5_PULLED, 0);
playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
} else if (sender == _asRing4) {
- setGlobalVar(0x4DE80AC0, 0);
+ setGlobalVar(V_RING5_PULLED, 0);
playSound(0, 0xE0558848);
} else if (sender == _asRing5) {
- setGlobalVar(0x4DE80AC0, 1);
+ setGlobalVar(V_RING5_PULLED, 1);
playSound(0, 0x44014282);
}
break;
@@ -1499,7 +1499,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asDoor, 0x4809, 0);
sendMessage(_asOutsideDoorBackground, 0x4809, 0);
} else if (sender == _asVenusFlyTrap) {
- if (getGlobalVar(0x8306F218)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
sendMessage(_asRing3, 0x4807, 0);
}
}
@@ -1508,7 +1508,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendEntityMessage(_klayman, 0x1014, _asDoorSpy);
break;
case 0x480F:
- setGlobalVar(0x4DE80AC0, 0);
+ setGlobalVar(V_RING5_PULLED, 0);
playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
@@ -1595,7 +1595,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x50C03005);
- if (getGlobalVar(0x0D0A14D10)) {
+ if (getGlobalVar(V_ENTRANCE_OPEN)) {
setPalette(0xA30BA329);
_palette->addBasePalette(0xA30BA329, 0, 256, 0);
} else {
@@ -1689,7 +1689,7 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- if (getGlobalVar(0xD0A14D10)) {
+ if (getGlobalVar(V_ENTRANCE_OPEN)) {
setBackground(0x2800E011);
setPalette(0x2800E011);
insertStaticSprite(0x492D5AD7, 100);
@@ -1745,7 +1745,7 @@ FontSurface *Scene1005::createFontSurface() {
uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
fontSurface = new FontSurface(_vm, tracking, numRows, firstChar, charWidth, charHeight);
- if (getGlobalVar(0xD0A14D10)) {
+ if (getGlobalVar(V_ENTRANCE_OPEN)) {
fontSprite.load2(0x283CE401);
} else {
fontSprite.load2(0xC6604282);
@@ -1757,71 +1757,71 @@ FontSurface *Scene1005::createFontSurface() {
uint32 Scene1005::getTextIndex() {
uint32 textIndex;
textIndex = getTextIndex1();
- if (getGlobalVar(0xD0A14D10)) {
+ if (getGlobalVar(V_ENTRANCE_OPEN)) {
textIndex = getTextIndex2();
}
- if (getGlobalVar(0x8440001F) && getGlobalVar(0x01830201) == textIndex) {
+ if (getGlobalVar(V_TEXT_FLAG1) && getGlobalVar(V_TEXT_INDEX) == textIndex) {
textIndex = getTextIndex3();
} else {
- setGlobalVar(0x8440001F, 1);
- setGlobalVar(0x01830201, textIndex);
+ setGlobalVar(V_TEXT_FLAG1, 1);
+ setGlobalVar(V_TEXT_INDEX, textIndex);
}
return textIndex;
}
uint32 Scene1005::getTextIndex1() {
uint32 textIndex;
- if (getGlobalVar(0x98109F12)) {
- if (!getGlobalVar(0x2090590C))
+ if (getGlobalVar(V_WORLDS_JOINED)) {
+ if (!getGlobalVar(V_DOOR_PASSED))
textIndex = 18;
- else if (!getGlobalVar(0x610210B7))
+ else if (!getGlobalVar(V_ROBOT_TARGET))
textIndex = 19;
- else if (getGlobalVar(0x0C0288F4)) {
- if (!getGlobalVar(0xD0A14D10))
+ else if (getGlobalVar(V_ROBOT_HIT)) {
+ if (!getGlobalVar(V_ENTRANCE_OPEN))
textIndex = 23;
else if (!getSubVar(0x0090EA95, 0) && !getSubVar(0x08D0AB11, 0))
textIndex = 24;
- else if (!getGlobalVar(0xC0780812))
+ else if (!getGlobalVar(V_HAS_FINAL_KEY))
textIndex = 26;
else if (!getSubVar(0x0090EA95, 1) && !getSubVar(0x08D0AB11, 1))
textIndex = 27;
- else if (!getGlobalVar(0xC0780812))
+ else if (!getGlobalVar(V_HAS_FINAL_KEY))
textIndex = 28;
else
textIndex = 29;
- } else if (!getGlobalVar(0xE7498218))
+ } else if (!getGlobalVar(V_FELL_DOWN_HOLE))
textIndex = 20;
- else if (!getGlobalVar(0x081890D14))
+ else if (!getGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT))
textIndex = 21;
else
textIndex = 22;
- } else if (getGlobalVar(0x00040153)) {
- if (!getGlobalVar(0x10938830))
+ } else if (getGlobalVar(V_BOLT_DOOR_UNLOCKED)) {
+ if (!getGlobalVar(V_WALL_BROKEN))
textIndex = 12;
else if (!getGlobalVar(0x2050861A))
textIndex = 13;
- else if (!getGlobalVar(0x4DE80AC0))
+ else if (!getGlobalVar(V_RING5_PULLED))
textIndex = 50;
else if (!getGlobalVar(0x89C669AA))
textIndex = 14;
- else if (!getGlobalVar(0x1C1B8A9A))
+ else if (!getGlobalVar(V_BEEN_SHRINKING_ROOM))
textIndex = 15;
- else if (!getGlobalVar(0xCB45DE03))
+ else if (!getGlobalVar(V_BEEN_STATUE_ROOM))
textIndex = 16;
else
textIndex = 17;
- } else if (!getGlobalVar(0x2B514304)) {
+ } else if (!getGlobalVar(V_FLYTRAP_RING_EATEN)) {
textIndex = 0;
} else if (getGlobalVar(0x0A18CA33)) {
- if (!getGlobalVar(0x404290D5))
+ if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))
textIndex = 4;
- else if (!getGlobalVar(0x45080C38))
+ else if (!getGlobalVar(V_HAS_TEST_TUBE))
textIndex = 5;
else if (!getSubVar(0x14800353, 0x40119852))
textIndex = 6;
- else if (!getGlobalVar(0x4E0BE910))
+ else if (!getGlobalVar(V_WATER_RUNNING))
textIndex = 7;
- else if (!getGlobalVar(0x86615030))
+ else if (!getGlobalVar(V_NOTES_PUZZLE_SOLVED))
textIndex = 8;
else if (!getSubVar(0x14800353, 0x304008D2))
textIndex = 9;
@@ -1829,9 +1829,9 @@ uint32 Scene1005::getTextIndex1() {
textIndex = 10;
else
textIndex = 11;
- } else if (!getGlobalVar(0x0A310817)) {
+ } else if (!getGlobalVar(V_CREATURE_ANGRY)) {
textIndex = 1;
- } else if (getGlobalVar(0x000CF819)) {
+ } else if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
textIndex = 3;
} else {
textIndex = 2;
@@ -1840,23 +1840,23 @@ uint32 Scene1005::getTextIndex1() {
}
uint32 Scene1005::getTextIndex2() {
- uint32 textIndex = getGlobalVar(0x29408F00);
+ uint32 textIndex = getGlobalVar(V_TEXT_COUNTING_INDEX1);
if (textIndex + 1 >= 10) {
- setGlobalVar(0x29408F00, 0);
+ setGlobalVar(V_TEXT_COUNTING_INDEX1, 0);
textIndex = 0;
} else {
- setGlobalVar(0x29408F00, textIndex + 1);
+ setGlobalVar(V_TEXT_COUNTING_INDEX1, textIndex + 1);
}
return textIndex + 40;
}
uint32 Scene1005::getTextIndex3() {
- uint32 textIndex = getGlobalVar(0x8A140C21);
+ uint32 textIndex = getGlobalVar(V_TEXT_COUNTING_INDEX2);
if (textIndex + 1 >= 10) {
- setGlobalVar(0x8A140C21, 0);
+ setGlobalVar(V_TEXT_COUNTING_INDEX2, 0);
textIndex = 0;
} else {
- setGlobalVar(0x8A140C21, textIndex + 1);
+ setGlobalVar(V_TEXT_COUNTING_INDEX2, textIndex + 1);
}
return textIndex + 30;
}
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 53ede43..44fe70e 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -76,14 +76,14 @@ void Module1100::createScene(int sceneNum, int which) {
createNavigationScene(0x004B8460, which);
break;
case 2:
- if (getGlobalVar(0x610210B7)) {
+ if (getGlobalVar(V_ROBOT_TARGET)) {
createNavigationScene(0x004B84F0, which);
} else {
createNavigationScene(0x004B8490, which);
}
break;
case 3:
- if (getGlobalVar(0x610210B7)) {
+ if (getGlobalVar(V_ROBOT_TARGET)) {
createNavigationScene(0x004B8580, which);
} else {
createNavigationScene(0x004B8550, which);
@@ -93,7 +93,7 @@ void Module1100::createScene(int sceneNum, int which) {
_childObject = new Scene1105(_vm, this, which);
break;
case 5:
- if (getGlobalVar(0x610210B7))
+ if (getGlobalVar(V_ROBOT_TARGET))
createSmackerScene(0x04180001, true, false, false);
else
createSmackerScene(0x04180007, true, false, false);
@@ -135,7 +135,7 @@ void Module1100::updateScene() {
break;
case 1:
_vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
- if (getGlobalVar(0x0C0288F4)) {
+ if (getGlobalVar(V_ROBOT_HIT)) {
if (_moduleResult == 0) {
createScene(6, -1);
} else if (_moduleResult == 1) {
@@ -175,7 +175,7 @@ void Module1100::updateScene() {
break;
case 5:
_vm->_soundMan->setTwoSoundsPlayFlag(false);
- if (getGlobalVar(0x610210B7)) {
+ if (getGlobalVar(V_ROBOT_TARGET)) {
createScene(3, 0);
} else {
createScene(4, 0);
@@ -372,7 +372,7 @@ uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam &p
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2002:
- if (getGlobalVar(0x610210B7)) {
+ if (getGlobalVar(V_ROBOT_TARGET)) {
startAnimation(0x6B0C0432, 0, -1);
playSound(0);
} else {
@@ -505,7 +505,7 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (getSubVar(0x7500993A, 0) == getSubVar(0x61084036, 0) &&
getSubVar(0x7500993A, 1) == getSubVar(0x61084036, 1) &&
getSubVar(0x7500993A, 2) == getSubVar(0x61084036, 2)) {
- setGlobalVar(0x610210B7, 1);
+ setGlobalVar(V_ROBOT_TARGET, 1);
playSound(2);
_flag3 = true;
} else {
@@ -520,7 +520,7 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _ssActionButton) {
sendMessage(_ssActionButton, 0x480B, 0);
_flag1 = false;
- } else if (!getGlobalVar(0x610210B7)) {
+ } else if (!getGlobalVar(V_ROBOT_TARGET)) {
if (sender == _ssSymbol1UpButton) {
if (getSubVar(0x61084036, 0) < 9) {
incSubVar(0x61084036, 0, +1);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index a20ed94..041be6f 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -60,7 +60,7 @@ void Module1200::createScene(int sceneNum, int which) {
case 2:
_vm->_soundMan->stopMusic(0x62222CAE, 0, 0);
createSmackerScene(0x31890001, true, true, false);
- setGlobalVar(0x2A02C07B, 1);
+ setGlobalVar(V_CREATURE_EXPLODED, 1);
break;
}
SetUpdateHandler(&Module1200::updateScene);
@@ -74,7 +74,7 @@ void Module1200::updateScene() {
if (_moduleResult == 1) {
createScene(1, 0);
} else if (_moduleResult == 2) {
- if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
+ if (getGlobalVar(0x0A18CA33) && !getGlobalVar(V_CREATURE_EXPLODED)) {
createScene(2, -1);
} else {
leaveModule(1);
@@ -439,7 +439,7 @@ AsScene1201TntManFlame::~AsScene1201TntManFlame() {
void AsScene1201TntManFlame::update() {
AnimatedSprite::update();
- if (getGlobalVar(0x20A0C516)) {
+ if (getGlobalVar(V_TNT_DUMMY_FUSE_LIT)) {
setVisible(true);
SetUpdateHandler(&AnimatedSprite::update);
_vm->_soundMan->addSound(0x041080A4, 0x460A1050);
@@ -459,7 +459,7 @@ AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
SetUpdateHandler(&AsScene1201Match::update);
SetMessageHandler(&AsScene1201Match::hmOnDoorFrameAboutToMove);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- switch (getGlobalVar(0x0112090A)) {
+ switch (getGlobalVar(V_MATCH_STATUS)) {
case 0:
_x = 521;
_y = 112;
@@ -522,7 +522,7 @@ uint32 AsScene1201Match::hmIdle(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4806:
setVisible(false);
- setGlobalVar(0x0112090A, 3);
+ setGlobalVar(V_MATCH_STATUS, 3);
break;
}
return messageResult;
@@ -539,7 +539,7 @@ void AsScene1201Match::stOnDoorFrameMoving() {
}
void AsScene1201Match::stFallingFromDoorFrame() {
- setGlobalVar(0x0112090A, 2);
+ setGlobalVar(V_MATCH_STATUS, 2);
_x -= 199;
_y += 119;
startAnimation(0x018D0240, 0, -1);
@@ -752,7 +752,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x04063110, 500);
topY4 = tempSprite->getY() + 1;
- _asTntManRope = insertSprite<AsScene1201TntManRope>(getGlobalVar(0x000CF819) && which != 1);
+ _asTntManRope = insertSprite<AsScene1201TntManRope>(getGlobalVar(V_TNT_DUMMY_BUILT) && which != 1);
_asTntManRope->setClipRect(0, topY4, 640, 480);
insertStaticSprite(0x400B04B0, 1200);
@@ -772,7 +772,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1201>(400, 329);
setMessageList(0x004AEC08);
} else if (which == 2) {
- if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
insertKlayman<KmScene1201>(374, 333);
setMessageList(0x004AEC08);
} else {
@@ -780,7 +780,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AEC20);
}
} else if (which == 1) {
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1201>(364, 333);
_klayman->setDoDeltaX(1);
} else {
@@ -795,7 +795,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(x1, 0, x2, 480);
_klayman->setRepl(64, 0);
- if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
setBackground(0x4019A2C4);
setPalette(0x4019A2C4);
_asRightDoor = NULL;
@@ -805,7 +805,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asRightDoor = insertSprite<AsScene1201RightDoor>(_klayman, which == 2);
}
- if (getGlobalVar(0x000CF819)) {
+ if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
insertStaticSprite(0x10002ED8, 500);
if (!getGlobalVar(0x0A18CA33)) {
_asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
@@ -838,7 +838,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex += 3;
}
- if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
setRectList(0x004AEE58);
} else {
setRectList(0x004AEDC8);
@@ -866,7 +866,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex++;
}
- if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
setRectList(0x004AEE18);
} else {
setRectList(0x004AED88);
@@ -879,18 +879,18 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asLeftDoor = insertSprite<AsScene1201LeftDoor>(_klayman);
_asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
- if (getGlobalVar(0x0A310817) && getGlobalVar(0x0112090A) == 0) {
- setGlobalVar(0x0112090A, 1);
+ if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_MATCH_STATUS) == 0) {
+ setGlobalVar(V_MATCH_STATUS, 1);
}
_asMatch = NULL;
- if (getGlobalVar(0x0112090A) < 3) {
+ if (getGlobalVar(V_MATCH_STATUS) < 3) {
_asMatch = insertSprite<AsScene1201Match>(this);
_vm->_collisionMan->addSprite(_asMatch);
}
- if (getGlobalVar(0x0A310817) && getGlobalVar(0x0A18CA33) == 0) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(0x0A18CA33) == 0) {
_asCreature = insertSprite<AsScene1201Creature>(this, _klayman);
_asCreature->setClipRect(x1, 0, x2, 480);
}
@@ -902,7 +902,7 @@ Scene1201::~Scene1201() {
void Scene1201::update() {
Scene::update();
- if (_asMatch && getGlobalVar(0x0112090A) == 3)
+ if (_asMatch && getGlobalVar(V_MATCH_STATUS) == 3)
deleteSprite(&_asMatch);
}
@@ -927,7 +927,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2001:
- if (!getGlobalVar(0x0112090A)) {
+ if (getGlobalVar(V_MATCH_STATUS) == 0) {
setMessageList2(0x004AECB0);
} else {
sendEntityMessage(_klayman, 0x1014, _asMatch);
@@ -935,12 +935,12 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2002:
- if (getGlobalVar(0x20A0C516)) {
- // Move the TNT dummy
+ if (getGlobalVar(V_TNT_DUMMY_FUSE_LIT)) {
+ // Move the TNT dummy if the fuse is burning
sendEntityMessage(_klayman, 0x1014, _asTntMan);
setMessageList2(0x004AECF0, false);
- } else if (getGlobalVar(0x0112090A) == 3) {
- // Light the TNT dummy
+ } else if (getGlobalVar(V_MATCH_STATUS) == 3) {
+ // Light the TNT dummy if we have the match
sendEntityMessage(_klayman, 0x1014, _asTntMan);
if (_klayman->getX() > _asTntMan->getX()) {
setMessageList(0x004AECD0);
@@ -1107,7 +1107,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x8E8419C1, 1100);
- if (getGlobalVar(0x000CF819)) {
+ if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
SetMessageHandler(&Scene1202::hmSolved);
}
@@ -1120,7 +1120,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
Scene1202::~Scene1202() {
if (isSolved()) {
- setGlobalVar(0x000CF819, 1);
+ setGlobalVar(V_TNT_DUMMY_BUILT, 1);
}
}
@@ -1133,7 +1133,7 @@ void Scene1202::update() {
} else if (_counter == 0 && isSolved()) {
_clickedIndex = 0;
SetMessageHandler(&Scene1202::hmSolved);
- setGlobalVar(0x000CF819, 1);
+ setGlobalVar(V_TNT_DUMMY_BUILT, 1);
doPaletteEffect();
playSound(3);
_soundFlag = true;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 6533e07..e8cc843 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -305,7 +305,7 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
createSurface1(0x88148150, 500);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1302Bridge::handleMessage);
- if (!getGlobalVar(0x13206309)) {
+ if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
startAnimation(0x88148150, 0, -1);
_newStickFrameIndex = 0;
} else {
@@ -358,7 +358,7 @@ SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
SetMessageHandler(&SsScene1302Fence::handleMessage);
SetSpriteUpdate(NULL);
_firstY = _y;
- if (getGlobalVar(0x80101B1E))
+ if (getGlobalVar(V_FLYTRAP_RING_FENCE))
_y += 152;
loadSound(0, 0x7A00400C);
loadSound(1, 0x78184098);
@@ -422,9 +422,9 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite3 = insertStaticSprite(0x16E01E20, 1100);
_asRing1 = insertSprite<AsScene1002Ring>(this, false, 218, 122, _class595->getDrawRect().y, false);
- _asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x13206309));
+ _asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_BRIDGE));
_asRing3 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false);
- _asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x80101B1E));
+ _asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_FENCE));
_asRing5 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false);
_asBridge = insertSprite<AsScene1302Bridge>(this);
@@ -456,7 +456,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asInteger() == 0x4A845A00) {
sendEntityMessage(_klayman, 0x1014, _asRing1);
} else if (param.asInteger() == 0x43807801) {
- if (!getGlobalVar(0x13206309)) {
+ if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
sendEntityMessage(_klayman, 0x1014, _asRing2);
if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) {
setMessageList(0x004B0940);
@@ -470,7 +470,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x46C26A01) {
sendEntityMessage(_klayman, 0x1014, _asRing3);
} else if (param.asInteger() == 0x468C7B11) {
- if (!getGlobalVar(0x80101B1E)) {
+ if (!getGlobalVar(V_FLYTRAP_RING_FENCE)) {
sendEntityMessage(_klayman, 0x1014, _asRing4);
if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) {
setMessageList(0x004B0940);
@@ -484,13 +484,13 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x42845B19) {
sendEntityMessage(_klayman, 0x1014, _asRing5);
} else if (param.asInteger() == 0x430A6060) {
- if (getGlobalVar(0x13206309)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
setMessageList2(0x004B0910);
} else {
cancelMessageList();
}
} else if (param.asInteger() == 0x012E2070) {
- if (getGlobalVar(0x13206309)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
setMessageList2(0x004B0968);
} else {
cancelMessageList();
@@ -525,12 +525,12 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
playSound(0, 0x665198C0);
} else if (sender == _asRing2) {
sendMessage(_asBridge, 0x4808, 0);
- setGlobalVar(0x13206309, 1);
+ setGlobalVar(V_FLYTRAP_RING_BRIDGE, 1);
} else if (sender == _asRing3) {
playSound(0, 0xE2D389C0);
} else if (sender == _asRing4) {
sendMessage(_ssFence, 0x4808, 0);
- setGlobalVar(0x80101B1E, 1);
+ setGlobalVar(V_FLYTRAP_RING_FENCE, 1);
} else if (sender == _asRing5) {
playSound(0, 0x40428A09);
}
@@ -538,13 +538,13 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x4807:
if (sender == _asRing2) {
sendMessage(_asBridge, 0x4809, 0);
- setGlobalVar(0x13206309, 0);
+ setGlobalVar(V_FLYTRAP_RING_BRIDGE, 0);
_sprite2->setVisible(false);
} else if (sender == _asRing4) {
sendMessage(_ssFence, 0x4809, 0);
- setGlobalVar(0x80101B1E, 0);
+ setGlobalVar(V_FLYTRAP_RING_FENCE, 0);
} else if (sender == _asVenusFlyTrap) {
- if (getGlobalVar(0x13206309)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
sendMessage(_asRing2, 0x4807, 0);
} else {
sendMessage(_asRing4, 0x4807, 0);
@@ -555,11 +555,11 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _asRing2) {
playSound(0, 0x60755842);
sendMessage(_asBridge, 0x4808, 0);
- setGlobalVar(0x13206309, 1);
+ setGlobalVar(V_FLYTRAP_RING_BRIDGE, 1);
} else if (sender == _asRing4) {
playSound(0, 0x60755842);
sendMessage(_ssFence, 0x4808, 0);
- setGlobalVar(0x80101B1E, 1);
+ setGlobalVar(V_FLYTRAP_RING_FENCE, 1);
}
break;
case 0x482A:
@@ -639,7 +639,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x01581A9C);
insertMouse433(0x81A9801D);
- if (!getGlobalVar(0xAC00C0D0)) {
+ if (!getGlobalVar(V_BALLOON_POPPED)) {
_asBalloon = insertSprite<AsScene1303Balloon>(this);
_vm->_collisionMan->addSprite(_asBalloon);
}
@@ -657,11 +657,11 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
- setGlobalVar(0xAC00C0D0, 1);
+ setGlobalVar(V_BALLOON_POPPED, 1);
sendMessage(_asBalloon, 0x2000, 0);
break;
case 0x4826:
- if (sender == _asBalloon && getGlobalVar(0x31C63C51)) {
+ if (sender == _asBalloon && getGlobalVar(V_HAS_NEEDLE)) {
setMessageList(0x004AF9B8);
}
break;
@@ -684,7 +684,7 @@ uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶
messageResult = 1;
break;
case 0x4806:
- setGlobalVar(0x31C63C51, 1);
+ setGlobalVar(V_HAS_NEEDLE, 1);
setVisible(false);
SetMessageHandler(NULL);
break;
@@ -703,7 +703,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x062C0214);
insertMouse433(0xC021006A);
- if (getGlobalVar(0xAC00C0D0)) {
+ if (getGlobalVar(V_BALLOON_POPPED)) {
_asKey = insertSprite<AsCommonKey>(this, 0, 1100, 278, 347);
_vm->_collisionMan->addSprite(_asKey);
} else {
@@ -711,7 +711,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO _asKey->setUpdateDeltaXY();
}
- if (!getGlobalVar(0x31C63C51)) {
+ if (!getGlobalVar(V_HAS_NEEDLE)) {
_asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347);
_vm->_collisionMan->addSprite(_asNeedle);
} else {
@@ -739,7 +739,7 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x415634A4) {
- if (getGlobalVar(0xAC00C0D0)) {
+ if (getGlobalVar(V_BALLOON_POPPED)) {
cancelMessageList();
} else {
setMessageList(0x004B9158);
@@ -874,8 +874,8 @@ void AsScene1306Elevator::cbGoingDownEvent() {
Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
- setGlobalVar(0x13382860, 4);
+ if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
+ setGlobalVar(V_KEY3_LOCATION, 4);
_surfaceFlag = true;
SetMessageHandler(&Scene1306::handleMessage);
@@ -884,7 +884,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x05303114);
insertMouse433(0x0311005B);
- if (getGlobalVar(0x13382860) == 4) {
+ if (getGlobalVar(V_KEY3_LOCATION) == 4) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 435, 445);
_vm->_collisionMan->addSprite(_asKey);
}
@@ -915,7 +915,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 2) {
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1306>(515, 440);
_klayman->setDoDeltaX(1);
} else {
@@ -955,7 +955,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1306::~Scene1306() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1320,7 +1320,7 @@ void Scene1307::update() {
}
if (_doLeaveScene && !isSoundPlaying(0)) {
leaveScene(1);
- setGlobalVar(0x80455A41, 1);
+ setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
}
}
@@ -1593,7 +1593,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 17, 1100, 502, 445, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- if (getGlobalVar(0x01023818)) {
+ if (getGlobalVar(V_MOUSE_SUCKED_IN)) {
insertSprite<AsScene1308Mouse>();
insertSprite<AnimatedSprite>(0x461A1490, 200, 235, 429);
}
@@ -1613,7 +1613,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
insertKlayman<KmScene1308>(380, 440);
setMessageList(0x004B57C0);
- if (getGlobalVar(0x80455A41)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
setRectList(0x004B5990);
} else {
@@ -1623,7 +1623,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 1) {
insertKlayman<KmScene1308>(640, 440);
setMessageList(0x004B57C8);
- if (getGlobalVar(0x80455A41)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
setRectList(0x004B5990);
} else {
@@ -1633,7 +1633,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 2) {
insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
- if (getGlobalVar(0x80455A41)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
_sprite5 = insertSprite<AsScene1308KeyboardDoor>(this);
_sprite4 = insertStaticSprite(0x0101A624, 1100);
_sprite4->setVisible(false);
@@ -1646,7 +1646,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B57D0);
sendMessage(_asJaggyDoor, 0x4808, 0);
_sprite1->setVisible(false);
- if (getGlobalVar(0x80455A41)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
_klayman->setVisible(false);
} else {
@@ -1661,7 +1661,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
}
- if (getGlobalVar(0x04A105B3) == 4) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_asProjector);
_asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
@@ -1681,7 +1681,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
_flag1 = true;
} else if (param.asInteger() == 0x08821382) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
- if (getGlobalVar(0x80455A41)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
setRectList(0x004B5990);
} else {
setRectList(0x004B5980);
@@ -1703,7 +1703,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- if (getGlobalVar(0x80455A41)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
setRectList(0x004B5990);
} else {
setRectList(0x004B5980);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 9cfb826..d207428 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -387,19 +387,18 @@ static const AsCommonProjectorItem kAsCommonProjectorItems[] = {
AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *asPipe)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _asPipe(asPipe) {
- _asProjectorItem = &kAsCommonProjectorItems[getGlobalVar(0x04A105B3)];
+ _asProjectorItem = &kAsCommonProjectorItems[getGlobalVar(V_PROJECTOR_LOCATION)];
// TODO createSurface3(990, dword_4B26D8);
createSurface(990, 640, 480); //TODO: Remeove once the line above is done
startAnimation(0x10E3042B, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsCommonProjector::handleMessage);
- _x = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
+ _x = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
_lockedInSlot = true;
moveProjector();
setDoDeltaX(1);
- if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->lockSlotIndex) {
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->lockSlotIndex)
stStayLockedInSlot();
- }
loadSound(2, 0xC8C2507C);
}
@@ -415,8 +414,8 @@ uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶
messageResult = 1;
break;
case 0x4807:
- setGlobalVar(0x04A10F33, (_x - _asProjectorItem->point.x) / 108);
- if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->lockSlotIndex) {
+ setGlobalVar(V_PROJECTOR_SLOT, (_x - _asProjectorItem->point.x) / 108);
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->lockSlotIndex) {
stStartLockedInSlot();
} else {
stIdle();
@@ -424,20 +423,20 @@ uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount) {
- incGlobalVar(0x04A10F33, 1);
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount) {
+ incGlobalVar(V_PROJECTOR_SLOT, 1);
}
- } else if (getGlobalVar(0x04A10F33) > 0) {
- incGlobalVar(0x04A10F33, -1);
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0) {
+ incGlobalVar(V_PROJECTOR_SLOT, -1);
}
stMoving();
break;
case 0x480C:
// Check if the projector can be moved
if (param.asInteger() != 1) {
- messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount ? 1 : 0;
+ messageResult = (int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount ? 1 : 0;
} else {
- messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
+ messageResult = getGlobalVar(V_PROJECTOR_SLOT) > 0 ? 1 : 0;
}
break;
case 0x482A:
@@ -471,20 +470,20 @@ uint32 AsCommonProjector::hmLockedInSlot(int messageNum, const MessageParam &par
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount) {
- incGlobalVar(0x04A10F33, 1);
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount) {
+ incGlobalVar(V_PROJECTOR_SLOT, 1);
}
- } else if (getGlobalVar(0x04A10F33) > 0) {
- incGlobalVar(0x04A10F33, -1);
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0) {
+ incGlobalVar(V_PROJECTOR_SLOT, -1);
}
stTurnToFront();
break;
case 0x480C:
// Check if the projector can be moved
if (param.asInteger() != 1) {
- messageResult = (int8)getGlobalVar(0x04A10F33) < _asProjectorItem->maxSlotCount ? 1 : 0;
+ messageResult = (int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount ? 1 : 0;
} else {
- messageResult = getGlobalVar(0x04A10F33) > 0 ? 1 : 0;
+ messageResult = getGlobalVar(V_PROJECTOR_SLOT) > 0 ? 1 : 0;
}
break;
case 0x480F:
@@ -517,14 +516,14 @@ void AsCommonProjector::suMoving() {
_x = _klayman->getX() + 100;
moveProjector();
if (_beforeMoveX == _x) {
- if (getGlobalVar(0x04A10F33) == 0 && _asProjectorItem->leftBorderLeaves != 0) {
+ if (getGlobalVar(V_PROJECTOR_SLOT) == 0 && _asProjectorItem->leftBorderLeaves != 0) {
sendMessage(_parentScene, 0x1019, 0);
- incGlobalVar(0x04A105B3, -1);
- setGlobalVar(0x04A10F33, kAsCommonProjectorItems[getGlobalVar(0x04A105B3)].maxSlotCount);
- } else if ((int8)getGlobalVar(0x04A10F33) == _asProjectorItem->maxSlotCount && _asProjectorItem->rightBorderLeaves != 0) {
+ incGlobalVar(V_PROJECTOR_LOCATION, -1);
+ setGlobalVar(V_PROJECTOR_SLOT, kAsCommonProjectorItems[getGlobalVar(V_PROJECTOR_LOCATION)].maxSlotCount);
+ } else if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->maxSlotCount && _asProjectorItem->rightBorderLeaves != 0) {
sendMessage(_parentScene, 0x1019, 1);
- incGlobalVar(0x04A105B3, +1);
- setGlobalVar(0x04A10F33, 0);
+ incGlobalVar(V_PROJECTOR_LOCATION, +1);
+ setGlobalVar(V_PROJECTOR_SLOT, 0);
}
}
Sprite::processDelta();
@@ -579,7 +578,7 @@ void AsCommonProjector::stIdle() {
}
void AsCommonProjector::stMoving() {
- _beforeMoveX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
+ _beforeMoveX = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
startAnimation(0x14A10137, 0, -1);
SetSpriteUpdate(&AsCommonProjector::suMoving);
SetMessageHandler(&AsCommonProjector::handleMessage);
@@ -604,7 +603,7 @@ void AsCommonProjector::stStartProjecting() {
SetMessageHandler(&AsCommonProjector::hmAnimation);
SetSpriteUpdate(NULL);
NextState(&AsCommonProjector::stLockedInSlot);
- setGlobalVar(0x12A10DB3, 1);
+ setGlobalVar(V_PROJECTOR_ACTIVE, 1);
playSound(0, 0xCC4A8456);
_vm->_soundMan->addSound(0x05331081, 0xCE428854);
_vm->_soundMan->playSoundLooping(0xCE428854);
@@ -622,13 +621,13 @@ void AsCommonProjector::stStopProjecting() {
SetSpriteUpdate(NULL);
SetMessageHandler(&AsCommonProjector::hmAnimation);
NextState(&AsCommonProjector::stStayLockedInSlot);
- setGlobalVar(0x12A10DB3, 0);
+ setGlobalVar(V_PROJECTOR_ACTIVE, 0);
playSound(0, 0xCC4A8456);
_vm->_soundMan->deleteSound(0xCE428854);
}
void AsCommonProjector::stTurnToFront() {
- _beforeMoveX = getGlobalVar(0x04A10F33) * 108 + _asProjectorItem->point.x;
+ _beforeMoveX = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
startAnimation(0x22CB4A33, 0, -1);
SetSpriteUpdate(&AsCommonProjector::suMoving);
SetMessageHandler(&AsCommonProjector::hmAnimation);
@@ -636,8 +635,8 @@ void AsCommonProjector::stTurnToFront() {
}
void AsCommonProjector::stStartSuckedIn() {
- setGlobalVar(0x04A105B3, 4);
- setGlobalVar(0x04A10F33, 0);
+ setGlobalVar(V_PROJECTOR_LOCATION, 4);
+ setGlobalVar(V_PROJECTOR_SLOT, 0);
SetSpriteUpdate(&AsCommonProjector::stSuckedIn);
SetMessageHandler(&Sprite::handleMessage);
startAnimation(0x708D4712, 0, -1);
@@ -661,7 +660,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x980F3124, 0x12192892, 100, 0);
_asPipe = insertSprite<AsScene1401Pipe>();
- if (!getGlobalVar(0x01023818)) {
+ if (!getGlobalVar(V_MOUSE_SUCKED_IN)) {
_asMouse = insertSprite<AsScene1401Mouse>();
_asCheese = insertSprite<AsScene1401Cheese>();
}
@@ -691,15 +690,15 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1->setVisible(false);
}
- if (getGlobalVar(0x04A105B3) == 2) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 2) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, _asPipe);
_vm->_collisionMan->addSprite(_asProjector);
- if (getGlobalVar(0x04A10F33) == 6) {
+ if (getGlobalVar(V_PROJECTOR_SLOT) == 6) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B6670);
- } else if (getGlobalVar(0x04A10F33) == 0) {
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
@@ -754,10 +753,10 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x480B:
if (sender == _ssFloorButton) {
sendMessage(_asPipe, 0x2000, 0);
- if (!getGlobalVar(0x01023818)) {
+ if (!getGlobalVar(V_MOUSE_SUCKED_IN)) {
sendMessage(_asMouse, 0x4839, 0);
sendMessage(_asCheese, 0x4839, 0);
- setGlobalVar(0x01023818, 1);
+ setGlobalVar(V_MOUSE_SUCKED_IN, 1);
}
if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504)
sendMessage(_asProjector , 0x4839, 0);
@@ -880,7 +879,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_ssBridgePart2 = insertSprite<SsScene1402BridgePart>(0x10A02120, 1100);
_ssBridgePart3 = insertSprite<SsScene1402BridgePart>(0x60882BE0, 1100);
- if (getGlobalVar(0x70A1189C))
+ if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED))
setRectList(0x004B0C48);
else
setRectList(0x004B0C98);
@@ -888,7 +887,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
- if (!getGlobalVar(0x70A1189C)) {
+ if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
_asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
}
} else if (which == 1) {
@@ -898,7 +897,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
- if (getGlobalVar(0x70A1189C)) {
+ if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
_asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 1);
clearRectList();
showMouse(false);
@@ -909,7 +908,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
- if (!getGlobalVar(0x70A1189C)) {
+ if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
_asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 2);
startShaking();
}
@@ -959,7 +958,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x00F43389) {
- if (getGlobalVar(0x70A1189C)) {
+ if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
leaveScene(0);
} else {
clearRectList();
@@ -1301,7 +1300,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2000:
// The mouse got the cheese (nomnom)
- setGlobalVar(0x70A1189C, 1);
+ setGlobalVar(V_MOUSE_PUZZLE_SOLVED, 1);
playSound(0, 0x68E25540);
showMouse(false);
_puzzleSolvedCountdown = 72;
@@ -1348,10 +1347,10 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
}
_klayman->setRepl(64, 0);
- if (getGlobalVar(0x04A105B3) == 4) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_asProjector);
- if (getGlobalVar(0x04A10F33) == 4) {
+ if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
@@ -1425,8 +1424,8 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _asProjector(NULL), _asKey(NULL) {
- if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
- setGlobalVar(0x13382860, 5);
+ if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
+ setGlobalVar(V_KEY3_LOCATION, 5);
SetMessageHandler(&Scene1404::handleMessage);
_surfaceFlag = true;
@@ -1438,7 +1437,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(0x00801510, 0, 65, 0);
insertMouse433(0xB006BAC8);
- if (getGlobalVar(0x13382860) == 5) {
+ if (getGlobalVar(V_KEY3_LOCATION) == 5) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 267, 411);
_vm->_collisionMan->addSprite(_asKey);
}
@@ -1455,7 +1454,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C30);
} else if (which == 2) {
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1404>(347, 406);
_klayman->setDoDeltaX(1);
} else {
@@ -1467,10 +1466,10 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B8C38);
}
- if (getGlobalVar(0x04A105B3) == 3) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 3) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_asProjector);
- if (getGlobalVar(0x04A10F33) == 0) {
+ if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
@@ -1484,7 +1483,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1404::~Scene1404() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 5d0207b..f45f87f 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -95,17 +95,17 @@ void Module1600::createScene(int sceneNum, int which) {
_childObject = new Scene1609(_vm, this, which);
break;
case 1001:
- if (getGlobalVar(0xA0808898) == 1) {
+ if (getGlobalVar(V_TALK_COUNTING_INDEX) == 1) {
createSmackerScene(0x80050200, true, true, false);
- } else if (getGlobalVar(0xA0808898) == 2) {
+ } else if (getGlobalVar(V_TALK_COUNTING_INDEX) == 2) {
createSmackerScene(0x80090200, true, true, false);
} else {
createSmackerScene(0x80000200, true, true, false);
}
- if (getGlobalVar(0xA0808898) >= 2)
- setGlobalVar(0xA0808898, 0);
+ if (getGlobalVar(V_TALK_COUNTING_INDEX) >= 2)
+ setGlobalVar(V_TALK_COUNTING_INDEX, 0);
else
- incGlobalVar(0xA0808898, +1);
+ incGlobalVar(V_TALK_COUNTING_INDEX, +1);
break;
}
SetUpdateHandler(&Module1600::updateScene);
@@ -210,13 +210,13 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
_rectList = NULL;
startAnimation(0xD4220027, 0, -1);
- setDoDeltaX(getGlobalVar(0x21E60190));
+ setDoDeltaX(getGlobalVar(V_CAR_DELTA_X));
}
AsCommonCar::~AsCommonCar() {
if (_finalizeStateCb == AnimationCallback(&AsCommonCar::sub45D620)) {
- setGlobalVar(0x21E60190, !getGlobalVar(0x21E60190));
+ setGlobalVar(V_CAR_DELTA_X, !getGlobalVar(V_CAR_DELTA_X));
}
}
@@ -548,7 +548,7 @@ void AsCommonCar::sub45D100() {
} else {
startAnimation(0xD4220027, 0, -1);
}
- setGlobalVar(0x21E60190, _doDeltaX ? 1 : 0);
+ setGlobalVar(V_CAR_DELTA_X, _doDeltaX ? 1 : 0);
}
void AsCommonCar::sub45D180() {
@@ -1068,7 +1068,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
the upper/lower floors and rename them accordingly.
*/
- setGlobalVar(0x21E60190, 1);
+ setGlobalVar(V_CAR_DELTA_X, 1);
_surfaceFlag = true;
SetMessageHandler(&Scene1608::hmLowerFloor);
@@ -1127,7 +1127,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
_asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
_asCar->setVisible(false);
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1608>(373, 220);
_klayman->setDoDeltaX(1);
} else {
@@ -1204,7 +1204,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1608::~Scene1608() {
- setGlobalVar(0xC0418A02, _kmScene1608->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _kmScene1608->isDoDeltaX() ? 1 : 0);
if (_klaymanInCar) {
delete _kmScene1608;
} else {
@@ -1388,7 +1388,7 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
// TODO _vm->gameModule()->initScene3011Vars();
- _noisySymbolIndex = getGlobalVar(0x2414C2F2);
+ _noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
_surfaceFlag = true;
SetMessageHandler(&Scene1609::handleMessage);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index b75167f..f6d140b 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -186,7 +186,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- setGlobalVar(0xE7498218, 1);
+ setGlobalVar(V_FELL_DOWN_HOLE, 1);
_vm->gameModule()->initScene3009Vars();
SetMessageHandler(&Scene1705::handleMessage);
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 5bb03d4..7925c46 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -101,9 +101,9 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x42213133, 1100);
- if (!getGlobalVar(0xA9035F60)) {
+ if (!getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
insertStaticSprite(0x40A40168, 100);
- } else if (getGlobalVar(0x09221A62)) {
+ } else if (getGlobalVar(V_STAIRS_DOWN)) {
insertStaticSprite(0x124404C4, 100);
setGlobalVar(0x2050861A, 1);
} else {
@@ -195,10 +195,10 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
_symbolFlag1 = 0;
_symbolFlag2 = 0;
- if (getGlobalVar(0xA9035F60)) {
+ if (getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
_isPluggedIn = true;
_currPositionIndex = elementIndex;
- if (!getGlobalVar(0x09221A62)) {
+ if (!getGlobalVar(V_STAIRS_DOWN)) {
_x = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].x;
_y = kAsScene1907SymbolPluggedInPositions[_currPositionIndex].y;
} else {
@@ -325,7 +325,7 @@ void AsScene1907Symbol::suMoveDown() {
void AsScene1907Symbol::suMoveUp() {
_y -= _yIncr;
- if (getGlobalVar(0x10938830)) {
+ if (getGlobalVar(V_WALL_BROKEN)) {
if (_y - (9 + (_elementIndex > 5 ? 31 : 0)) < kAsScene1907SymbolPluggedInPositions[_elementIndex].y) {
_yIncr--;
} else {
@@ -470,8 +470,8 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907
loadSound(0, 0x44061000);
SetUpdateHandler(&SsScene1907UpDownButton::update);
SetMessageHandler(&SsScene1907UpDownButton::handleMessage);
- if (getGlobalVar(0xA9035F60)) {
- if (getGlobalVar(0x09221A62))
+ if (getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
+ if (getGlobalVar(V_STAIRS_DOWN))
setToDownPosition();
else
setToUpPosition();
@@ -490,7 +490,7 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (_countdown1 == 0 && !_asScene1907Symbol->isMoving() && getGlobalVar(0xA9035F60)) {
+ if (_countdown1 == 0 && !_asScene1907Symbol->isMoving() && getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
setVisible(true);
_countdown1 = 4;
StaticSprite::update();
@@ -582,7 +582,7 @@ Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1907::handleMessage);
SetUpdateHandler(&Scene1907::update);
- if (getGlobalVar(0xA9035F60))
+ if (getGlobalVar(V_STAIRS_PUZZLE_SOLVED))
_pluggedInCount = 9;
loadSound(0, 0x72004A10);
@@ -640,20 +640,20 @@ uint32 Scene1907::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
// TODO Debug stuff
case 0x2000:
- if (getGlobalVar(0x09221A62)) {
+ if (getGlobalVar(V_STAIRS_DOWN)) {
playSound(0);
for (int i = 0; i < 9; i++)
_asSymbols[i]->moveUp();
_ssUpDownButton->setToUpPosition();
- setGlobalVar(0x09221A62, 0);
+ setGlobalVar(V_STAIRS_DOWN, 0);
} else {
- if (!getGlobalVar(0x10938830)) {
+ if (!getGlobalVar(V_WALL_BROKEN)) {
playSound(2);
_countdown3 = 5;
} else {
playSound(1);
_ssUpDownButton->setToDownPosition();
- setGlobalVar(0x09221A62, 1);
+ setGlobalVar(V_STAIRS_DOWN, 1);
}
_moveDownCountdown = 1;
_currMovingSymbolIndex = 8;
@@ -661,7 +661,7 @@ uint32 Scene1907::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2001:
playSound(3);
- setGlobalVar(0xA9035F60, 1);
+ setGlobalVar(V_STAIRS_PUZZLE_SOLVED, 1);
break;
}
return 0;
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 6ff8a40..befcc34 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -51,10 +51,10 @@ void Module2000::createScene(int sceneNum, int which) {
_childObject = new Scene2001(_vm, this, which);
break;
case 1:
- createNavigationScene(getGlobalVar(0x98109F12) ? 0x004B7B48 : 0x004B7B00, which);
+ createNavigationScene(getGlobalVar(V_WORLDS_JOINED) ? 0x004B7B48 : 0x004B7B00, which);
break;
case 2:
- setGlobalVar(0x98109F12, 1);
+ setGlobalVar(V_WORLDS_JOINED, 1);
setSubVar(0x2C145A98, 1, 1);
createSmackerScene(0x204B2031, true, true, false);
break;
@@ -75,7 +75,7 @@ void Module2000::updateScene() {
break;
case 1:
if (_moduleResult == 0) {
- if (getGlobalVar(0x98109F12)) {
+ if (getGlobalVar(V_WORLDS_JOINED)) {
createScene(1, 0);
} else {
createScene(2, -1);
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 44ef868..700f0cd 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -65,7 +65,7 @@ void Module2100::updateScene() {
switch (_vm->gameState().sceneNum) {
case 0:
if (_moduleResult == 1) {
- setGlobalVar(0x2090590C, 1);
+ setGlobalVar(V_DOOR_PASSED, 1);
leaveModule(0);
} else {
leaveModule(1);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 29b4103..503a1d3 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -200,13 +200,13 @@ void Module2200::createScene(int sceneNum, int which) {
_childObject = new Scene2247(_vm, this, which);
break;
case 47:
- if (!getGlobalVar(0x98109F12)) {
- if (getGlobalVar(0x4D080E54))
+ if (!getGlobalVar(V_WORLDS_JOINED)) {
+ if (getGlobalVar(V_LIGHTS_ON))
createStaticScene(0x83110287, 0x10283839);
else
createStaticScene(0x83412B9D, 0x12B9983C);
} else {
- if (getGlobalVar(0x4D080E54))
+ if (getGlobalVar(V_LIGHTS_ON))
createStaticScene(0x48632087, 0x3208348E);
else
createStaticScene(0x08C74886, 0x74882084);
@@ -533,7 +533,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[1].x2 = 640;
_clipRects[1].y2 = 480;
- if (!getGlobalVar(0x404290D5)) {
+ if (!getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
insertStaticSprite(0x00026027, 900);
}
@@ -560,7 +560,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B8130);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 2) {
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2201>(379, 427, _clipRects, 2);
_klayman->setDoDeltaX(1);
} else {
@@ -582,7 +582,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2201::~Scene2201() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
_vm->_soundMan->deleteSoundGroup(0x04106220);
}
@@ -607,7 +607,7 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList(0x004B81B8);
}
} else if (param.asInteger() == 0x51445010) {
- if (getGlobalVar(0x404290D5)) {
+ if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
setMessageList(0x004B8108);
} else {
setMessageList(0x004B8150);
@@ -615,7 +615,7 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x1D203082) {
setMessageList(0x004B8180);
} else if (param.asInteger() == 0x00049091) {
- if (getGlobalVar(0x404290D5)) {
+ if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
setMessageList(0x004B8138);
} else {
setMessageList(0x004B8108);
@@ -707,7 +707,7 @@ uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam &
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (!_isMoving && !getGlobalVar(0x404290D5)) {
+ if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
sendMessage(_parentScene, 0x2000, _tileIndex);
}
messageResult = 1;
@@ -956,7 +956,7 @@ void Scene2202::update() {
_ssDoneMovingTile = NULL;
if (testIsSolved()) {
playSound(0);
- setGlobalVar(0x404290D5, 1);
+ setGlobalVar(V_TILE_PUZZLE_SOLVED, 1);
_isSolved = true;
}
}
@@ -1061,7 +1061,7 @@ AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint d
_x = 320;
_y = 240;
createSurface1(kAsScene2203DoorFileHashes[_doorIndex], 900);
- if (getGlobalVar(0x9A500914) == _doorIndex) {
+ if (getGlobalVar(V_LARGE_DOOR_NUMBER) == _doorIndex) {
startAnimation(kAsScene2203DoorFileHashes[_doorIndex], -1, -1);
_newStickFrameIndex = -2;
} else {
@@ -1074,7 +1074,7 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (_doorIndex == getGlobalVar(0x9A500914))
+ if (_doorIndex == getGlobalVar(V_LARGE_DOOR_NUMBER))
sendMessage(_parentScene, 0x2002, 0);
else
sendMessage(_parentScene, 0x2001, 0);
@@ -1084,12 +1084,12 @@ uint32 AsScene2203Door::handleMessage(int messageNum, const MessageParam ¶m,
_otherDoor = (Sprite*)param.asEntity();
break;
case 0x3002:
- if (_doorIndex == getGlobalVar(0x9A500914))
+ if (_doorIndex == getGlobalVar(V_LARGE_DOOR_NUMBER))
sendMessage(_parentScene, 0x4808, 0);
stopAnimation();
break;
case 0x4808:
- setGlobalVar(0x9A500914, _doorIndex);
+ setGlobalVar(V_LARGE_DOOR_NUMBER, _doorIndex);
sendMessage(_otherDoor, 0x4809, 0);
openDoor();
break;
@@ -1115,8 +1115,8 @@ void AsScene2203Door::closeDoor() {
Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
- setGlobalVar(0x13382860, 1);
+ if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
+ setGlobalVar(V_KEY3_LOCATION, 1);
SetMessageHandler(&Scene2203::handleMessage);
_surfaceFlag = true;
@@ -1127,9 +1127,9 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B8320);
- //DEBUG setGlobalVar(0x13382860, 1);//###//TODO CHECK IF Below...
+ //DEBUG setGlobalVar(V_KEY3_LOCATION, 1);//###//TODO CHECK IF Below...
- if (getGlobalVar(0x13382860) == 1) {
+ if (getGlobalVar(V_KEY3_LOCATION) == 1) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
_vm->_collisionMan->addSprite(_asKey);
}
@@ -1159,7 +1159,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2203>(640, 427);
setMessageList(0x004B8350);
} else if (which == 2) {
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2203>(362, 427);
_klayman->setDoDeltaX(1);
} else {
@@ -1171,7 +1171,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B8348);
}
- if (getGlobalVar(0x9A500914)) {
+ if (getGlobalVar(V_LARGE_DOOR_NUMBER)) {
_ssSmallLeftDoor->setVisible(false);
_klayman->setClipRect(_rightDoorClipRect);
} else {
@@ -1184,7 +1184,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2203::~Scene2203() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1238,7 +1238,7 @@ SsScene2205DoorFrame::SsScene2205DoorFrame(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
SetMessageHandler(&SsScene2205DoorFrame::handleMessage);
- _spriteResource.load2(getGlobalVar(0x4D080E54) ? 0x24306227 : 0xD90032A0);
+ _spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
createSurface(1100, 45, 206);
_drawRect.x = 0;
_drawRect.y = 0;
@@ -1254,7 +1254,7 @@ uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam &p
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
- _spriteResource.load2(getGlobalVar(0x4D080E54) ? 0x24306227 : 0xD90032A0);
+ _spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
_drawRect.x = 0;
_drawRect.y = 0;
_drawRect.width = _spriteResource.getDimensions().width;
@@ -1276,7 +1276,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B0620);
_surfaceFlag = true;
- if (getGlobalVar(0x4D080E54)) {
+ if (getGlobalVar(V_LIGHTS_ON)) {
_isLightOn = true;
setBackground(0x0008028D);
setPalette(0x0008028D);
@@ -1299,14 +1299,14 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
insertKlayman<KmScene2205>(320, 417);
setMessageList(0x004B0658);
- if (!getGlobalVar(0x4D080E54)) {
+ if (!getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else if (which == 1) {
insertKlayman<KmScene2205>(640, 417);
setMessageList(0x004B0648);
- if (!getGlobalVar(0x4D080E54)) {
+ if (!getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
@@ -1326,14 +1326,14 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene2205::update() {
Scene::update();
- if (!_isLightOn && getGlobalVar(0x4D080E54)) {
+ if (!_isLightOn && getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0x0008028D, 0, 256, 0);
changeBackground(0x0008028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0x2D309030);
sendMessage(_ssDoorFrame, 0x2000, 0);
changeMouseCursor(0x80289008);
_isLightOn = true;
- } else if (_isLightOn && !getGlobalVar(0x4D080E54)) {
+ } else if (_isLightOn && !getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0xD00A028D, 0, 256, 0);
changeBackground(0xD00A028D);
_ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84);
@@ -1347,7 +1347,7 @@ void Scene2205::update() {
_isLightOn = false;
}
- if (!getGlobalVar(0x4D080E54)) {
+ if (!getGlobalVar(V_LIGHTS_ON)) {
if (_isKlaymanInLight && _klayman->getX() > 85) {
_palette->addBasePalette(0x68033B1C, 0, 65, 0);
_palette->startFadeToPalette(12);
@@ -1374,7 +1374,7 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480B:
- setGlobalVar(0x4D080E54, getGlobalVar(0x4D080E54) ? 0 : 1);
+ setGlobalVar(V_LIGHTS_ON, getGlobalVar(V_LIGHTS_ON) ? 0 : 1);
break;
}
return 0;
@@ -1409,7 +1409,7 @@ static const int16 kAsScene2206DoorSpikesXDeltasClose[] = {
AsScene2206DoorSpikes::AsScene2206DoorSpikes(NeverhoodEngine *vm, uint32 fileHash)
: StaticSprite(vm, fileHash, 200) {
- if (getGlobalVar(0x18890C91))
+ if (getGlobalVar(V_SPIKES_RETRACTED))
_x -= 63;
SetUpdateHandler(&AsScene2206DoorSpikes::update);
SetMessageHandler(&AsScene2206DoorSpikes::handleMessage);
@@ -1493,7 +1493,7 @@ void AsScene2206Platform::suMoveDown() {
SsScene2206TestTube::SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, uint32 fileHash)
: StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene) {
- if (getGlobalVar(0x45080C38)) {
+ if (getGlobalVar(V_HAS_TEST_TUBE)) {
setVisible(false);
SetMessageHandler(NULL);
} else {
@@ -1511,7 +1511,7 @@ uint32 SsScene2206TestTube::handleMessage(int messageNum, const MessageParam &pa
messageResult = 1;
break;
case 0x4806:
- setGlobalVar(0x45080C38, 1);
+ setGlobalVar(V_HAS_TEST_TUBE, 1);
setVisible(false);
SetMessageHandler(NULL);
break;
@@ -1528,7 +1528,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2206::handleMessage);
_surfaceFlag = true;
- if (getGlobalVar(0x4D080E54)) {
+ if (getGlobalVar(V_LIGHTS_ON)) {
fileHash = 0x41983216;
_sprite1 = insertStaticSprite(0x2201266A, 100);
_sprite2 = insertStaticSprite(0x3406A333, 300);
@@ -1563,7 +1563,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(fileHash, 0, 256, 0);
- if (!getGlobalVar(0x4D080E54)) {
+ if (!getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0x0263D144, 0, 65, 0);
}
@@ -1578,12 +1578,12 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 2) {
insertKlayman<KmScene2206>(205, 396);
setMessageList(0x004B88C8);
- _palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
+ _palette->addPalette(getGlobalVar(V_LIGHTS_ON) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
klaymanBehindSpikes();
playSound(0, 0x53B8284A);
} else if (which == 3) {
- insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
- if (getGlobalVar(0xC0418A02))
+ insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)], 430);
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
setMessageList(0x004B8A70);
} else {
@@ -1597,7 +1597,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2206::~Scene2206() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1609,7 +1609,7 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x11C40840) {
- if (getGlobalVar(0x18890C91))
+ if (getGlobalVar(V_SPIKES_RETRACTED))
setMessageList(0x004B8948);
else
setMessageList(0x004B8970);
@@ -1620,8 +1620,8 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (sender == _ssButton) {
- setGlobalVar(0x18890C91, getGlobalVar(0x18890C91) ? 0 : 1);
- if (getGlobalVar(0x18890C91))
+ setGlobalVar(V_SPIKES_RETRACTED, getGlobalVar(V_SPIKES_RETRACTED) ? 0 : 1);
+ if (getGlobalVar(V_SPIKES_RETRACTED))
sendMessage(_asDoorSpikes, 0x4808, 0);
else
sendMessage(_asDoorSpikes, 0x4809, 0);
@@ -1642,7 +1642,7 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
void Scene2206::klaymanInFrontSpikes() {
- if (getGlobalVar(0x4D080E54)) {
+ if (getGlobalVar(V_LIGHTS_ON)) {
_palette->addBasePalette(0x41983216, 0, 65, 0);
_palette->startFadeToPalette(12);
}
@@ -1654,7 +1654,7 @@ void Scene2206::klaymanInFrontSpikes() {
}
void Scene2206::klaymanBehindSpikes() {
- if (!getGlobalVar(0x4D080E54)) {
+ if (!getGlobalVar(V_LIGHTS_ON)) {
_palette->addBasePalette(0xB103B604, 0, 65, 0);
_palette->startFadeToPalette(12);
}
@@ -1666,16 +1666,16 @@ void Scene2206::klaymanBehindSpikes() {
}
void Scene2206::readClickedColumn() {
- setGlobalVar(0x48A68852, (_mouseClickPos.x - 354) / 96);
- if (getGlobalVar(0x48A68852) > 2)
- setGlobalVar(0x48A68852, 2);
- setGlobalVar(0x49C40058, (_mouseClickPos.y - 183) / 7);
- setGlobalVar(0xC8C28808, calcHash("stLineagex"));
- setGlobalVar(0x4CE79018, 0);
- if (ABS(kScene2206XPositions[getGlobalVar(0x48A68852)] - _klayman->getX()) >= 144) {
- setMessageList2(kScene2206MessageIds1[getGlobalVar(0x48A68852)]);
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, (_mouseClickPos.x - 354) / 96);
+ if (getGlobalVar(V_CLICKED_COLUMN_INDEX) > 2)
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, 2);
+ setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 183) / 7);
+ setGlobalVar(V_COLUMN_TEXT_NAME, calcHash("stLineagex"));
+ setGlobalVar(V_COLUMN_BACK_NAME, 0);
+ if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144) {
+ setMessageList2(kScene2206MessageIds1[getGlobalVar(V_CLICKED_COLUMN_INDEX)]);
} else {
- setMessageList2(kScene2206MessageIds2[getGlobalVar(0x48A68852)]);
+ setMessageList2(kScene2206MessageIds2[getGlobalVar(V_CLICKED_COLUMN_INDEX)]);
}
}
@@ -1705,7 +1705,7 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
_x = pt.x;
_y = pt.y;
createSurface(1100, 129, 103);
- startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, 0, 0);
+ startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, 0, 0);
SetUpdateHandler(&AsScene2207Elevator::update);
SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);
SetMessageHandler(&AsScene2207Elevator::handleMessage);
@@ -1720,7 +1720,7 @@ void AsScene2207Elevator::update() {
if (_destPointIndex + _destPointIndexDelta > _pointIndex) {
_pointIndex++;
- startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
+ startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
if (_destPointIndexDelta != 0) {
@@ -1736,7 +1736,7 @@ void AsScene2207Elevator::update() {
_pointIndex--;
if (_pointIndex == 0)
sendMessage(_parentScene, 0x2003, 0);
- startAnimation(getGlobalVar(0x4D080E54) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
+ startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
if (_destPointIndexDelta != 0) {
@@ -2012,7 +2012,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
//DEBUG>>>
- setGlobalVar(0x4D080E54, 1);
+ //setGlobalVar(V_LIGHTS_ON, 1);
//DEBUG<<<
_vm->gameModule()->initScene3009Vars();
@@ -2031,7 +2031,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_asElevator = insertSprite<AsScene2207Elevator>(this);
- if (getGlobalVar(0x4D080E54)) {
+ if (getGlobalVar(V_LIGHTS_ON)) {
setBackground(0x88C00241);
setPalette(0x88C00241);
@@ -2061,7 +2061,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
- setGlobalVar(0x81890D14, 1);
+ setGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT, 1);
setBackground(0x05C02A55);
setPalette(0x05C02A55);
@@ -2227,18 +2227,18 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
SpriteResource spriteResource(_vm);
const char *textStart, *textEnd;
- if (!getGlobalVar(0xC8C28808))
- setGlobalVar(0xC8C28808, calcHash("stLineagex"));
+ if (!getGlobalVar(V_COLUMN_TEXT_NAME))
+ setGlobalVar(V_COLUMN_TEXT_NAME, calcHash("stLineagex"));
- _textResource.load(getGlobalVar(0xC8C28808));
+ _textResource.load(getGlobalVar(V_COLUMN_TEXT_NAME));
- textStart = _textResource.getString(getGlobalVar(0x48A68852), textEnd);
+ textStart = _textResource.getString(getGlobalVar(V_CLICKED_COLUMN_INDEX), textEnd);
while (textStart < textEnd) {
_strings.push_back(textStart);
textStart += strlen(textStart) + 1;
}
- _maxRowIndex = 8 + 10 * (3 - (getGlobalVar(0xC8C28808) == calcHash("stLineagex") ? 1 : 0));
+ _maxRowIndex = 8 + 10 * (3 - (getGlobalVar(V_COLUMN_TEXT_NAME) == calcHash("stLineagex") ? 1 : 0));
_background = new Background(_vm, 0);
_background->createSurface(0, 640, 528);
@@ -2257,11 +2257,11 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
_topBackgroundSurface = new BaseSurface(_vm, 0, 640, 192);
- spriteResource.load2(!getGlobalVar(0x4CE79018) ? kScene2208FileHashes1[getGlobalVar(0x48A68852) % 6] : getGlobalVar(0x4CE79018));
+ spriteResource.load2(!getGlobalVar(V_COLUMN_BACK_NAME) ? kScene2208FileHashes1[getGlobalVar(V_CLICKED_COLUMN_INDEX) % 6] : getGlobalVar(V_COLUMN_BACK_NAME));
_topBackgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
_bottomBackgroundSurface = new BaseSurface(_vm, 0, 640, 192);
- spriteResource.load2(kScene2208FileHashes2[getGlobalVar(0x48A68852) % 6]);
+ spriteResource.load2(kScene2208FileHashes2[getGlobalVar(V_CLICKED_COLUMN_INDEX) % 6]);
_bottomBackgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
SetUpdateHandler(&Scene2208::update);
@@ -2269,7 +2269,7 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_visibleRowsCount = 10;
- _newRowIndex = (int16)getGlobalVar(0x49C40058);
+ _newRowIndex = (int16)getGlobalVar(V_CLICKED_COLUMN_ROW);
if (_newRowIndex + _visibleRowsCount > _maxRowIndex)
_newRowIndex = _maxRowIndex - _visibleRowsCount;
if (_newRowIndex < 6)
@@ -2416,7 +2416,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2242::handleMessage);
SetUpdateHandler(&Scene2242::update);
- if (getGlobalVar(0x4D080E54)) {
+ if (getGlobalVar(V_LIGHTS_ON)) {
setBackground(0x11840E24);
setPalette(0x11840E24);
insertMouse433(0x40E20110);
@@ -2441,9 +2441,9 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2242>(530, 430);
setMessageList(0x004B3D60);
} else if (which == 2) {
- insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
+ insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(V_CLICKED_COLUMN_INDEX) ? 0 : 1], 430);
setMessageList(0x004B3D48);
- if (getGlobalVar(0xC0418A02))
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
} else {
insertKlayman<KmScene2242>(0, 430);
@@ -2455,11 +2455,11 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2242::~Scene2242() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
void Scene2242::update() {
- if (!getGlobalVar(0x4D080E54)) {
+ if (!getGlobalVar(V_LIGHTS_ON)) {
if (_isKlaymanInLight && _klayman->getX() < 440) {
_palette->addBasePalette(0x68033B1C, 0, 65, 0);
_palette->startFadeToPalette(12);
@@ -2494,17 +2494,17 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2242::readClickedColumn() {
int index;
if (_mouseClickPos.x < 108) {
- setGlobalVar(0xC8C28808, 0x04290188);
- setGlobalVar(0x48A68852, 42);
- setGlobalVar(0x4CE79018, calcHash("bgRecPanelStart1"));
+ setGlobalVar(V_COLUMN_TEXT_NAME, 0x04290188);
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, 42);
+ setGlobalVar(V_COLUMN_BACK_NAME, calcHash("bgRecPanelStart1"));
index = 0;
} else {
- setGlobalVar(0xC8C28808, 0x04290188);
- setGlobalVar(0x48A68852, 43);
- setGlobalVar(0x4CE79018, calcHash("bgRecPanelStart2"));
+ setGlobalVar(V_COLUMN_TEXT_NAME, 0x04290188);
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, 43);
+ setGlobalVar(V_COLUMN_BACK_NAME, calcHash("bgRecPanelStart2"));
index = 1;
}
- setGlobalVar(0x49C40058, (_mouseClickPos.y - 100) / 7);
+ setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) {
setMessageList2(kScene2242MessageListIds1[index]);
} else {
@@ -2536,7 +2536,7 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
SetMessageHandler(&HallOfRecordsScene::handleMessage);
SetUpdateHandler(&Scene::update);
- if (!getGlobalVar(0x4D080E54) && _sceneInfo140->bgFilename2) {
+ if (!getGlobalVar(V_LIGHTS_ON) && _sceneInfo140->bgFilename2) {
setRectList(0x004B2BF8);
setBackground(_sceneInfo140->bgFilename2);
setPalette(_sceneInfo140->bgFilename2);
@@ -2555,9 +2555,9 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
insertKlayman<KmHallOfRecords>(640, 430);
setMessageList(0x004B2910);
} else if (which == 2) {
- insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
+ insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _sceneInfo140->xPosIndex], 430);
setMessageList(0x004B2B70);
- if (getGlobalVar(0xC0418A02))
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
} else {
insertKlayman<KmHallOfRecords>(0, 430);
@@ -2570,7 +2570,7 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
}
HallOfRecordsScene::~HallOfRecordsScene() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2590,13 +2590,13 @@ void HallOfRecordsScene::readClickedColumn() {
if (index >= _sceneInfo140->count) {
setMessageList2(0x004B2920);
} else {
- setGlobalVar(0x48A68852, _sceneInfo140->xPosIndex + index);
- setGlobalVar(0x49C40058, (_mouseClickPos.y - 100) / 7);
- setGlobalVar(0xC8C28808, _sceneInfo140->txFilename);
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, _sceneInfo140->xPosIndex + index);
+ setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
+ setGlobalVar(V_COLUMN_TEXT_NAME, _sceneInfo140->txFilename);
if (index == 0 && _sceneInfo140->bgFilename3) {
- setGlobalVar(0x4CE79018, _sceneInfo140->bgFilename3);
+ setGlobalVar(V_COLUMN_BACK_NAME, _sceneInfo140->bgFilename3);
} else {
- setGlobalVar(0x4CE79018, 0);
+ setGlobalVar(V_COLUMN_BACK_NAME, 0);
}
if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133) {
setMessageList2(kHallOfRecordsSceneMessageListIds1[index]);
@@ -2622,13 +2622,13 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
//DEBUG
- setGlobalVar(0x4D080E54, 1);
+ setGlobalVar(V_LIGHTS_ON, 1);
_surfaceFlag = true;
SetMessageHandler(&Scene2247::handleMessage);
SetUpdateHandler(&Scene::update);
- if (getGlobalVar(0x4D080E54)) {
+ if (getGlobalVar(V_LIGHTS_ON)) {
setRectList(0x004B5588);
setBackground(0x40339414);
setPalette(0x40339414);
@@ -2647,8 +2647,8 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2247>(640, 430);
setMessageList(0x004B5438);
} else if (which == 2) {
- insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
- if (getGlobalVar(0xC0418A02))
+ insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(V_COLUMN_TEXT_NAME) == 0x0008E486 ? 0 : 1], 430);
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
setMessageList(0x004B5530);
} else {
@@ -2661,7 +2661,7 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2247::~Scene2247() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2680,16 +2680,16 @@ uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2247::readClickedColumn() {
int index;
if (_mouseClickPos.x < 553) {
- setGlobalVar(0xC8C28808, 0x0008E486);
- setGlobalVar(0x4CE79018, calcHash("bgFatherHeader"));
+ setGlobalVar(V_COLUMN_TEXT_NAME, 0x0008E486);
+ setGlobalVar(V_COLUMN_BACK_NAME, calcHash("bgFatherHeader"));
index = 0;
} else {
- setGlobalVar(0xC8C28808, 0x03086004);
- setGlobalVar(0x4CE79018, calcHash("bgQuaterHeader"));
+ setGlobalVar(V_COLUMN_TEXT_NAME, 0x03086004);
+ setGlobalVar(V_COLUMN_BACK_NAME, calcHash("bgQuaterHeader"));
index = 1;
}
- setGlobalVar(0x48A68852, 0);
- setGlobalVar(0x49C40058, (_mouseClickPos.y - 100) / 7);
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, 0);
+ setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133) {
setMessageList2(kScene2247MessageListIds1[index]);
} else {
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 9e2acff..c2cf0df 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -37,10 +37,10 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->setSoundListParams(kModule2300SoundList, true, 50, 600, 10, 150);
//DEBUG>>>
- setGlobalVar(0x10938830, 0);
+ setGlobalVar(V_WALL_BROKEN, 0);
//DEBUG<<<
- _flag = getGlobalVar(0x10938830) == 0;
+ _flag = getGlobalVar(V_WALL_BROKEN) == 0;
if (_flag) {
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
@@ -90,7 +90,7 @@ void Module2300::createScene(int sceneNum, int which) {
createNavigationScene(0x004B6878, which);
break;
case 3:
- if (getGlobalVar(0x10938830)) {
+ if (getGlobalVar(V_WALL_BROKEN)) {
createNavigationScene(0x004B68F0, which);
} else {
_vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index a29795b..4e8d26d 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -389,8 +389,8 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene2401Vars();
- setGlobalVar(0x4E0BE910, 1); //DEBUG! Enables water
- setGlobalVar(0x45080C38, 1); //DEBUG! Gives the test tube
+ setGlobalVar(V_WATER_RUNNING, 1); //DEBUG! Enables water
+ setGlobalVar(V_HAS_TEST_TUBE, 1); //DEBUG! Gives the test tube
_surfaceFlag = true;
SetMessageHandler(&Scene2401::handleMessage);
@@ -454,8 +454,8 @@ void Scene2401::update() {
waterInside = true;
}
if (puzzleSolved) {
- setGlobalVar(0x0045D021, 1);
- setGlobalVar(0x86615030, 1);
+ setGlobalVar(V_NOTES_DOOR_UNLOCKED, 1);
+ setGlobalVar(V_NOTES_PUZZLE_SOLVED, 1);
sendMessage(_asDoor, 0x4808, 0);
} else if (waterInside) {
playPipeSound(0xD0431020);
@@ -495,20 +495,20 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
else if (param.asInteger() == 0x02144CB1)
sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
else if (param.asInteger() == 0x11C40840) {
- if (getGlobalVar(0x0045D021) && sendMessage(_asDoor, 0x2004, 0)) {
+ if (getGlobalVar(V_NOTES_DOOR_UNLOCKED) && sendMessage(_asDoor, 0x2004, 0)) {
setMessageList(0x004B3090);
} else {
setMessageList(0x004B30B0);
}
} else if (param.asInteger() == 0x412722C0) {
- if (_countdown2 > 0 && getGlobalVar(0x45080C38)) {
+ if (_countdown2 > 0 && getGlobalVar(V_HAS_TEST_TUBE)) {
_countdown2 = 144;
setMessageList(0x004B3020);
} else {
setMessageList(0x004B3050);
}
} else if (param.asInteger() == 0x21142050) {
- if (_flag && _countdown1 == 0 && getGlobalVar(0x86615030) == 0) {
+ if (_flag && _countdown1 == 0 && getGlobalVar(V_NOTES_PUZZLE_SOLVED) == 0) {
setMessageList(0x004B2FA8);
} else {
setMessageList(0x004B2FC8);
@@ -542,7 +542,7 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sender == _ssButton) {
_pipeStatus = 0;
_countdown1 = 8;
- } else if (sender == _ssFloorButton && getGlobalVar(0x4E0BE910)) {
+ } else if (sender == _ssFloorButton && getGlobalVar(V_WATER_RUNNING)) {
_countdown2 = 144;
sendMessage(_asFlowingWater, 0x2002, 0);
playSound(0, 0xE1130324);
@@ -643,7 +643,7 @@ AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
_y = 210;
setDoDeltaX(1);
- if (!getGlobalVar(0x92603A79)) {
+ if (!getGlobalVar(V_TV_JOKE_TOLD)) {
loadSound(0, 0x58208810);
_countdown1 = 48;
startAnimation(0x4919397A, 0, -1);
@@ -697,7 +697,7 @@ void AsScene2402TV::upFocusKlayman() {
}
void AsScene2402TV::stJokeFinished() {
- setGlobalVar(0x92603A79, 1);
+ setGlobalVar(V_TV_JOKE_TOLD, 1);
startAnimation(0x050A0103, 0, -1);
_newStickFrameIndex = 0;
SetUpdateHandler(&AsScene2402TV::upFocusKlayman);
@@ -743,7 +743,7 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AF7D8);
} else if (which == 2) {
insertKlayman<KmScene2402>(409, 404);
- _klayman->setDoDeltaX(getGlobalVar(0xC0418A02) ? 1 : 0);
+ _klayman->setDoDeltaX(getGlobalVar(V_KLAYMAN_IS_DELTA_X) ? 1 : 0);
setMessageList(0x004AF888);
} else {
insertKlayman<KmScene2402>(0, 404);
@@ -760,7 +760,7 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2402::~Scene2402() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
void Scene2402::update() {
@@ -921,8 +921,8 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite1, *tempSprite2;
- if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
- setGlobalVar(0x13382860, 2);
+ if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
+ setGlobalVar(V_KEY3_LOCATION, 2);
_surfaceFlag = true;
SetMessageHandler(&Scene2406::handleMessage);
@@ -930,7 +930,7 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B78C8);
insertMouse433(0xB03001A8);
- if (getGlobalVar(0x13382860) == 2) {
+ if (getGlobalVar(V_KEY3_LOCATION) == 2) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 560, 409);
_vm->_collisionMan->addSprite(_asKey);
}
@@ -944,7 +944,7 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[0].x2 = tempSprite2->getDrawRect().x2();
_clipRects[0].y2 = 480;
- if (getGlobalVar(0x18890C91)) {
+ if (getGlobalVar(V_SPIKES_RETRACTED)) {
setBackground(0x1A0B0304);
setPalette(0x1A0B0304);
tempSprite1 = insertStaticSprite(0x32923922, 1100);
@@ -998,7 +998,7 @@ uint32 Scene2406::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x41062804) {
- if (getGlobalVar(0x18890C91)) {
+ if (getGlobalVar(V_SPIKES_RETRACTED)) {
setMessageList(0x004B7758);
} else {
setMessageList(0x004B7738);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index b4d39d9..d6840a3 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -92,9 +92,9 @@ void Module2500::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B01B8, 220);
break;
case 2:
- setGlobalVar(0x98109F12, 1);// TODO DEBUG! Join the tracks.
+ setGlobalVar(V_WORLDS_JOINED, 1);// TODO DEBUG! Join the tracks.
_vm->gameState().which = which;
- if (getGlobalVar(0x98109F12))
+ if (getGlobalVar(V_WORLDS_JOINED))
createScene2704(which, 0x004B01E0, 150);
else
createScene2704(which, 0x004B0208, 150);
@@ -107,7 +107,7 @@ void Module2500::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B0230, 150, kScene2505StaticSprites, &kScene2505ClipRect);
break;
case 5:
- setGlobalVar(0x21E60190, 1);
+ setGlobalVar(V_CAR_DELTA_X, 1);
_vm->gameState().which = which;
createScene2704(which, 0x004B0268, 150, kScene2506StaticSprites, &kScene2506ClipRect);
break;
@@ -117,7 +117,7 @@ void Module2500::createScene(int sceneNum, int which) {
break;
case 7:
_vm->gameState().which = which;
- if (getGlobalVar(0xD0A14D10))
+ if (getGlobalVar(V_ENTRANCE_OPEN))
createScene2704(which, 0x004B02C8, 150, kScene2508StaticSprites1, &kScene2508ClipRect1);
else
createScene2704(which, 0x004B02C8, 150, kScene2508StaticSprites2, &kScene2508ClipRect2);
@@ -126,7 +126,7 @@ void Module2500::createScene(int sceneNum, int which) {
_childObject = new Scene1608(_vm, this, which);
break;
case 9:
- if (getGlobalVar(0xD0A14D10))
+ if (getGlobalVar(V_ENTRANCE_OPEN))
createStaticScene(0xC62A0645, 0xA0641C6A);
else
createStaticScene(0x7A343546, 0x435427AB);
@@ -224,7 +224,7 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_sceneInfos[1] = _vm->_staticData->getSceneInfo2700(0x004B264C);
_sceneInfos[2] = _vm->_staticData->getSceneInfo2700(0x004B2670);
- setGlobalVar(0x21E60190, 1);
+ setGlobalVar(V_CAR_DELTA_X, 1);
SetUpdateHandler(&Scene2501::update);
_surfaceFlag = true;
setBackground(0x1B8E8115);
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 435c38c..6eebd40 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -68,7 +68,7 @@ void Module2600::createScene(int sceneNum, int which) {
createNavigationScene(0x004B86C8, which);
break;
case 3:
- if (getGlobalVar(0x0A310817)) {
+ if (getGlobalVar(V_CREATURE_ANGRY)) {
createNavigationScene(0x004B8758, which);
} else {
createNavigationScene(0x004B86F8, which);
@@ -88,31 +88,31 @@ void Module2600::createScene(int sceneNum, int which) {
_childObject = new Scene2609(_vm, this, which);
break;
case 1002:
- if (getGlobalVar(0x40040831) == 1) {
+ if (getGlobalVar(V_FRUIT_COUNTING_INDEX) == 1) {
createSmackerScene(0x018C0404, true, true, false);
- } else if (getGlobalVar(0x40040831) == 2) {
+ } else if (getGlobalVar(V_FRUIT_COUNTING_INDEX) == 2) {
createSmackerScene(0x018C0407, true, true, false);
} else {
createSmackerScene(0x818C0405, true, true, false);
}
- if (getGlobalVar(0x40040831) >= 2) {
- setGlobalVar(0x40040831, 0);
+ if (getGlobalVar(V_FRUIT_COUNTING_INDEX) >= 2) {
+ setGlobalVar(V_FRUIT_COUNTING_INDEX, 0);
} else {
- incGlobalVar(0x40040831, +1);
+ incGlobalVar(V_FRUIT_COUNTING_INDEX, +1);
}
break;
case 1003:
createSmackerScene(0x001C0007, true, true, false);
break;
case 1006:
- if (getGlobalVar(0x4E0BE910)) {
+ if (getGlobalVar(V_WATER_RUNNING)) {
createSmackerScene(0x049A1181, true, true, false);
} else {
createSmackerScene(0x04981181, true, true, false);
}
break;
case 1008:
- if (getGlobalVar(0x4E0BE910)) {
+ if (getGlobalVar(V_WATER_RUNNING)) {
createSmackerScene(0x42B80941, true, true, false);
} else {
createSmackerScene(0x42980941, true, true, false);
@@ -153,7 +153,7 @@ void Module2600::updateScene() {
break;
case 3:
if (_moduleResult == 0) {
- if (getGlobalVar(0x0A310817)) {
+ if (getGlobalVar(V_CREATURE_ANGRY)) {
createScene(4, 0);
} else {
createScene(1003, -1);
@@ -161,10 +161,10 @@ void Module2600::updateScene() {
} else if (_moduleResult == 2) {
createScene(1, 1);
} else if (_moduleResult == 3) {
- if (getGlobalVar(0x0A310817)) {
+ if (getGlobalVar(V_CREATURE_ANGRY)) {
createScene(4, 0);
} else {
- setGlobalVar(0x0A310817, 1);
+ setGlobalVar(V_CREATURE_ANGRY, 1);
createScene(7, -1);
}
}
@@ -210,7 +210,7 @@ SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
_spriteResource.load2(0x825A6923);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- if (!getGlobalVar(0x4E0BE910))
+ if (!getGlobalVar(V_WATER_RUNNING))
setVisible(false);
_drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
@@ -233,11 +233,11 @@ SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
void SsScene2609Button::update() {
StaticSprite::update();
if (_countdown != 0 && (--_countdown == 0)) {
- if (getGlobalVar(0x4E0BE910)) {
- setGlobalVar(0x4E0BE910, 0);
+ if (getGlobalVar(V_WATER_RUNNING)) {
+ setGlobalVar(V_WATER_RUNNING, 0);
sendMessage(_parentScene, 0x2001, 0);
} else {
- setGlobalVar(0x4E0BE910, 1);
+ setGlobalVar(V_WATER_RUNNING, 1);
sendMessage(_parentScene, 0x2002, 0);
}
}
@@ -249,7 +249,7 @@ uint32 SsScene2609Button::handleMessage(int messageNum, const MessageParam ¶
case 0x1011:
if (_countdown == 0) {
sendMessage(_parentScene, 0x2000, 0);
- if (getGlobalVar(0x4E0BE910)) {
+ if (getGlobalVar(V_WATER_RUNNING)) {
setVisible(false);
playSound(3);
playSound(1);
@@ -278,7 +278,7 @@ AsScene2609Water::AsScene2609Water(NeverhoodEngine *vm)
_vm->_soundMan->addSound(0x08526C36, 0xDC2769B0);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2609Water::handleMessage);
- if (getGlobalVar(0x4E0BE910))
+ if (getGlobalVar(V_WATER_RUNNING))
sendMessage(this, 0x2002, 0);
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 983e265..9603f70 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -459,7 +459,7 @@ void Module2700::updateScene() {
if (!_flag1) {
_vm->_soundMan->stopMusic(0x04020210, 0, 1);
// TODO _vm->gameModule()->initScene2801Vars();
- _musicFileHash = getGlobalVar(0x89A82A15);
+ _musicFileHash = getGlobalVar(V_MUSIC_NAME);
// TODO? GameState_sub_469C50(&field_52, 0);
// TODO MusicMan_create(); // Why?
_vm->_soundMan->addMusic(0x42212411, _musicFileHash);
@@ -594,7 +594,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
NRect clipRect;
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(0x004B2240);
- setGlobalVar(0x21E60190, 1);
+ setGlobalVar(V_CAR_DELTA_X, 1);
_surfaceFlag = true;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 1ec23e0..e664eb3 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -76,8 +76,8 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 2:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- //setGlobalVar(0x1860C990,1);//DEBUG
- if (getGlobalVar(0x1860C990))
+ //setGlobalVar(V_KLAYMAN_SMALL,1);//DEBUG
+ if (getGlobalVar(V_KLAYMAN_SMALL))
_childObject = new Scene2803Small(_vm, this, which);
else
_childObject = new Scene2803(_vm, this, which);
@@ -171,7 +171,7 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 25:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- if (getGlobalVar(0x190A1D18))
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON))
createStaticScene(0x01600204, 0x0020001E);
else
createStaticScene(0x08611204, 0x1120008E);
@@ -378,7 +378,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2801::handleMessage);
SetUpdateHandler(&Scene::update);
- if (getGlobalVar(0x4DE80AC0) == 0) {
+ if (getGlobalVar(V_RING5_PULLED) == 0) {
insertStaticSprite(0x0001264C, 100);
}
@@ -389,7 +389,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2801>(443, 398);
setMessageList(0x004B6BC0);
} else if (which == 2) {
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2801>(312, 432);
_klayman->setDoDeltaX(1);
} else {
@@ -450,7 +450,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2801::~Scene2801() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -640,7 +640,7 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
0x28680AD4
};
- setGlobalVar(0x1C1B8A9A, 1);
+ setGlobalVar(V_BEEN_SHRINKING_ROOM, 1);
_vm->gameModule()->initScene2808Vars1();
SetMessageHandler(&Scene2803::handleMessage);
@@ -815,13 +815,13 @@ void Scene2803::klaymanFloor() {
}
void Scene2803::toggleBackground() {
- setGlobalVar(0x190A1D18, getGlobalVar(0x190A1D18) ? 0 : 1);
+ setGlobalVar(V_SHRINK_LIGHTS_ON, getGlobalVar(V_SHRINK_LIGHTS_ON) ? 0 : 1);
changeBackground();
}
void Scene2803::changeBackground() {
// TODO? g_screen->resetDirtyRects();
- if (getGlobalVar(0x190A1D18)) {
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
_asLightCord->setFileHashes(0x8FAD5932, 0x276E1A3D);
_background->load(0x412A423E);
_palette->addPalette(0x412A423E, 0, 256, 0);
@@ -911,7 +911,7 @@ void Scene2803::setPaletteArea1() {
void Scene2803::updatePaletteArea() {
uint32 fadePaletteHash;
- if (getGlobalVar(0x190A1D18))
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON))
fadePaletteHash = (_paletteArea == 1) ? 0xB103B604 : 0x412A423E;
else
fadePaletteHash = (_paletteArea == 1) ? 0x0263D144 : 0x29800A01;
@@ -938,7 +938,7 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
insertSprite<AsScene2803LightCord>(this, 0xAFAD591A, 0x276E321D, 578, 200);
- if (getGlobalVar(0x190A1D18)) {
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
setBackground(0x412A423E);
setPalette(0x412A423E);
_palette->addBasePalette(0x412A423E, 0, 256, 0);
@@ -1148,7 +1148,7 @@ void Scene2803Small::setPaletteArea3() {
}
void Scene2803Small::updatePaletteArea(bool instantly) {
- if (getGlobalVar(0x190A1D18)) {
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
switch (_paletteArea) {
case 1:
_palette->addBasePalette(0x0A938204, 0, 64, 0);
@@ -1182,7 +1182,7 @@ void Scene2803Small::updatePaletteArea(bool instantly) {
SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene)
: StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene) {
- if (getGlobalVar(0x190A1D18))
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON))
_spriteResource.load2(0x51A10202);
else
_spriteResource.load2(0x11814A21);
@@ -1387,7 +1387,7 @@ AsScene2804Crystal::AsScene2804Crystal(NeverhoodEngine *vm, AsScene2804CrystalWa
};
_colorNum = (int16)getSubVar(0xE11A1929, crystalIndex);
- _isLightOn = getGlobalVar(0x190A1D18) != 0;
+ _isLightOn = getGlobalVar(V_SHRINK_LIGHTS_ON) != 0;
if (_isLightOn) {
_x = kAsScene2804CrystalPoints[crystalIndex].x;
_y = kAsScene2804CrystalPoints[crystalIndex].y;
@@ -1464,7 +1464,7 @@ SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene280
0x5008292B
};
- if (getGlobalVar(0x190A1D18))
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON))
_spriteResource.load2(kSsScene2804CrystalButtonFileHashes1[crystalIndex]);
else
_spriteResource.load2(kSsScene2804CrystalButtonFileHashes2[crystalIndex]);
@@ -1626,9 +1626,9 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2804::handleMessage);
SetUpdateHandler(&Scene2804::update);
- //setGlobalVar(0x190A1D18, 1); // DEBUG Set lights on
+ //setGlobalVar(V_SHRINK_LIGHTS_ON, 1); // DEBUG Set lights on
- if (getGlobalVar(0x190A1D18)) {
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
setBackground(0xA1D03005);
setPalette(0xA1D03005);
addEntity(_palette);
@@ -1652,7 +1652,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint crystalIndex = 0; crystalIndex < 5; crystalIndex++) {
AsScene2804CrystalWaves *asCrystalWaves = NULL;
- if (crystalIndex < 4 && getGlobalVar(0x190A1D18) == 0)
+ if (crystalIndex < 4 && getGlobalVar(V_SHRINK_LIGHTS_ON) == 0)
asCrystalWaves = insertSprite<AsScene2804CrystalWaves>(crystalIndex);
_asCrystals[crystalIndex] = insertSprite<AsScene2804Crystal>(asCrystalWaves, crystalIndex);
_ssCrystalButtons[crystalIndex] = insertSprite<SsScene2804CrystalButton>(this, _asCrystals[crystalIndex], crystalIndex);
@@ -1676,7 +1676,7 @@ uint32 Scene2804::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2000:
_isWorking = true;
sendMessage(_asCoil, 0x2002, 0);
- if (getGlobalVar(0x190A1D18)) {
+ if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
sendMessage(_asTarget, 0x2004, 0);
_countdown2 = 48;
}
@@ -1716,7 +1716,7 @@ void Scene2804::update() {
if (_isSolved) {
_palette->fillBaseWhite(0, 256);
_palette->startFadeToPalette(18);
- setGlobalVar(0x1860C990, 1);
+ setGlobalVar(V_KLAYMAN_SMALL, 1);
_countdown1 = 48;
}
} else if (_beamStatus == 6) {
@@ -1736,7 +1736,7 @@ void Scene2804::update() {
void Scene2804::initCrystalColors() {
// TODO Maybe move this into the GameModule so all puzzle init code is together
- if (getGlobalVar(0xDE2EC914) == 0) {
+ if (getGlobalVar(V_CRYSTAL_COLORS_INIT) == 0) {
TextResource textResource(_vm);
const char *textStart, *textEnd;
textResource.load(0x46691611);
@@ -1770,7 +1770,7 @@ void Scene2804::initCrystalColors() {
setSubVar(0xD4B2089C, index, correctColorNum);
setSubVar(0xE11A1929, index, misalignedColorNum);
}
- setGlobalVar(0xDE2EC914, 1);
+ setGlobalVar(V_CRYSTAL_COLORS_INIT, 1);
}
}
@@ -1927,7 +1927,7 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 3) {
insertKlayman<KmScene2806>(378, 423, true, _clipRects, 4);
setMessageList(0x004AF0A0, false);
- setGlobalVar(0x1860C990, 0);
+ setGlobalVar(V_KLAYMAN_SMALL, 0);
} else {
insertKlayman<KmScene2806>(670, 423, false, _clipRects, 4);
setMessageList(0x004AF090);
@@ -2562,7 +2562,7 @@ Scene2809::Scene2809(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 3) {
insertKlayman<KmScene2809>(262, 423, true, _clipRects, 4);
setMessageList(0x004B5BA8, false);
- setGlobalVar(0x1860C990, 0);
+ setGlobalVar(V_KLAYMAN_SMALL, 0);
} else {
insertKlayman<KmScene2809>(-30, 423, false, _clipRects, 4);
setMessageList(0x004B5B88);
@@ -2670,7 +2670,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[1].x2 = _sprite6->getDrawRect().x2();
_clipRects[1].y2 = 480;
- if (getGlobalVar(0x1860C990)) {
+ if (getGlobalVar(V_KLAYMAN_SMALL)) {
_asTape = insertSprite<AsScene1201Tape>(this, 0, 900, 245, 429, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
} else {
@@ -2680,9 +2680,9 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x430001C4, 1200);
- if (getGlobalVar(0x0018CA22)) {
- setGlobalVar(0xCB45DE03, 1);
- if (getGlobalVar(0x1860C990)) {
+ if (getGlobalVar(V_LADDER_DOWN)) {
+ setGlobalVar(V_BEEN_STATUE_ROOM, 1);
+ if (getGlobalVar(V_KLAYMAN_SMALL)) {
_sprite4 = insertStaticSprite(0x82653808, 100);
} else {
_sprite4 = insertStaticSprite(0x82653808, 1100);
@@ -2691,7 +2691,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
- if (getGlobalVar(0x1860C990)) {
+ if (getGlobalVar(V_KLAYMAN_SMALL)) {
insertKlayman<KmScene2810Small>(240, 448);
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE438);
@@ -2701,7 +2701,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
insertKlayman<KmScene2810>(300, 424, _clipRects, 2);
setMessageList(0x004AE438);
- if (getGlobalVar(0x0018CA22))
+ if (getGlobalVar(V_LADDER_DOWN))
loadDataResource(0x84130112);
else
loadDataResource(0x84500132);
@@ -2733,9 +2733,9 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->setSoundVolume(0xC874EE6C, 50);
_isRopingDown = false;
} else if ((which >= 11 && which <= 14) || (which >= 19 && which <= 22) || which == 3) {
- if (getGlobalVar(0x1860C990)) {
- insertKlayman<KmScene2810Small>((int16)getGlobalVar(0x00D30138), 448);
- if (getGlobalVar(0xC0418A02))
+ if (getGlobalVar(V_KLAYMAN_SMALL)) {
+ insertKlayman<KmScene2810Small>((int16)getGlobalVar(V_KLAYMAN_SAVED_X), 448);
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE6D8);
@@ -2744,9 +2744,9 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->removeSprite(_asTape);
} else {
insertKlaymanLadder();
- if (getGlobalVar(0x00188211)) {
+ if (getGlobalVar(V_LADDER_DOWN_ACTION)) {
setMessageList(0x004AE6E8);
- setGlobalVar(0x00188211, 0);
+ setGlobalVar(V_LADDER_DOWN_ACTION, 0);
_isRopingDown = false;
} else {
setMessageList(0x004AE6D8);
@@ -2758,7 +2758,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE6E0);
_isRopingDown = false;
} else if (which == 4) {
- if (getGlobalVar(0x1860C990)) {
+ if (getGlobalVar(V_KLAYMAN_SMALL)) {
insertKlayman<KmScene2810Small>(473, 448);
_klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480);
setMessageList(0x004AE428);
@@ -2768,7 +2768,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
insertKlayman<KmScene2810>(450, 424, _clipRects, 2);
setMessageList(0x004AE418);
- if (getGlobalVar(0x0018CA22))
+ if (getGlobalVar(V_LADDER_DOWN))
loadDataResource(0x84130112);
else
loadDataResource(0x84500132);
@@ -2789,23 +2789,23 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene2810::~Scene2810() {
- setGlobalVar(0xC0418A02, _klayman->isDoDeltaX() ? 1 : 0);
- setGlobalVar(0x00D30138, _klayman->getX());
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
+ setGlobalVar(V_KLAYMAN_SAVED_X, _klayman->getX());
_vm->_soundMan->deleteSoundGroup(0x84400112);
}
void Scene2810::insertKlaymanLadder() {
Sprite *tempSprite;
- if (getGlobalVar(0x00188211)) {
+ if (getGlobalVar(V_LADDER_DOWN_ACTION)) {
insertKlayman<KmScene2810>(430, 424, _clipRects, 2);
_klayman->setDoDeltaX(1);
} else {
- insertKlayman<KmScene2810>((int16)getGlobalVar(0x00D30138), 424, _clipRects, 2);
- if (getGlobalVar(0xC0418A02))
+ insertKlayman<KmScene2810>((int16)getGlobalVar(V_KLAYMAN_SAVED_X), 424, _clipRects, 2);
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
}
- if (getGlobalVar(0x0018CA22))
+ if (getGlobalVar(V_LADDER_DOWN))
loadDataResource(0x84130112);
else
loadDataResource(0x84500132);
@@ -2848,20 +2848,18 @@ uint32 Scene2810::handleMessage(int messageNum, const MessageParam ¶m, Entit
setMessageList(0x004AE688);
break;
case 0x2000:
- debug("0x2000");
setRectList(0x004AE800);
_isRopingDown = true;
break;
case 0x2001:
- debug("0x2001");
- if (getGlobalVar(0x0018CA22))
+ if (getGlobalVar(V_LADDER_DOWN))
loadDataResource(0x84130112);
else
loadDataResource(0x84500132);
_isRopingDown = false;
break;
case 0x4826:
- if (sender == _asTape && getGlobalVar(0x1860C990) == 0 && !_isRopingDown) {
+ if (sender == _asTape && getGlobalVar(V_KLAYMAN_SMALL) == 0 && !_isRopingDown) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004AE750);
}
@@ -2968,8 +2966,8 @@ uint32 AsScene2812TrapDoor::handleMessage(int messageNum, const MessageParam &pa
Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _paletteArea(0) {
- if (getGlobalVar(0xC0780812) && getGlobalVar(0x13382860) == 0)
- setGlobalVar(0x13382860, 3);
+ if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
+ setGlobalVar(V_KEY3_LOCATION, 3);
_surfaceFlag = true;
SetMessageHandler(&Scene2812::handleMessage);
@@ -2985,7 +2983,7 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x0C06C860, 1100);
insertMouse433(0x0060203E);
- if (getGlobalVar(0x13382860) == 3) {
+ if (getGlobalVar(V_KEY3_LOCATION) == 3) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 474, 437);
_vm->_collisionMan->addSprite(_asKey);
}
@@ -3015,7 +3013,7 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2());
} else if (which == 2) {
_isRopingDown = false;
- if (getGlobalVar(0xC0418A02)) {
+ if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2812>(554, 432);
_klayman->setDoDeltaX(1);
} else {
@@ -3153,10 +3151,10 @@ void Scene2822::update() {
playSound(0, 0x1384CB60);
_countdownStatus = 2;
_countdown = 12;
- } else if (_countdownStatus == 2 && getGlobalVar(0x00188211)) {
+ } else if (_countdownStatus == 2 && getGlobalVar(V_LADDER_DOWN_ACTION)) {
leaveScene(0);
}
- } else if (_countdownStatus == 2 && getGlobalVar(0x00188211)) {
+ } else if (_countdownStatus == 2 && getGlobalVar(V_LADDER_DOWN_ACTION)) {
if (_scrollIndex < 9) {
_background->getSurface()->getDrawRect().y = kScene2822BackgroundYPositions[_scrollIndex];
_scrollIndex++;
@@ -3180,9 +3178,9 @@ uint32 Scene2822::handleMessage(int messageNum, const MessageParam ¶m, Entit
_countdownStatus = 0;
_countdown = 12;
playSound(1, 0x44061000);
- if (getGlobalVar(0x0018CA22) == 0) {
- setGlobalVar(0x0018CA22, 1);
- setGlobalVar(0x00188211, 1);
+ if (getGlobalVar(V_LADDER_DOWN) == 0) {
+ setGlobalVar(V_LADDER_DOWN, 1);
+ setGlobalVar(V_LADDER_DOWN_ACTION, 1);
SetMessageHandler(NULL);
playSound(2);
_mouseCursor->setVisible(false);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 88caff9..7312da7 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -47,7 +47,7 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
_vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
- _flag = getGlobalVar(0x10938830) != 0;
+ _flag = getGlobalVar(V_WALL_BROKEN) != 0;
if (_flag) {
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
@@ -79,9 +79,9 @@ void Module3000::createScene(int sceneNum, int which) {
_vm->gameState().sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 1:
- if (!getGlobalVar(0x01BA1A52)) {
+ if (!getGlobalVar(V_BOLT_DOOR_OPEN)) {
createNavigationScene(0x004B7C80, which);
- } else if (getGlobalVar(0x10938830)) {
+ } else if (getGlobalVar(V_WALL_BROKEN)) {
createNavigationScene(0x004B7CE0, which);
} else {
createNavigationScene(0x004B7CB0, which);
@@ -93,22 +93,22 @@ void Module3000::createScene(int sceneNum, int which) {
_soundVolume = 90;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 90);
}
- if (getGlobalVar(0x10938830)) {
+ if (getGlobalVar(V_WALL_BROKEN)) {
createNavigationScene(0x004B7D58, which);
} else {
createNavigationScene(0x004B7D10, which);
}
break;
case 3:
- if (getGlobalVar(0x09221A62))
+ if (getGlobalVar(V_STAIRS_DOWN))
createNavigationScene(0x004B7E60, which);
- else if (getGlobalVar(0x10938830))
+ else if (getGlobalVar(V_WALL_BROKEN))
createNavigationScene(0x004B7DA0, which);
else
createNavigationScene(0x004B7E00, which);
break;
case 4:
- if (getGlobalVar(0x09221A62))
+ if (getGlobalVar(V_STAIRS_DOWN))
createNavigationScene(0x004B7F20, which);
else
createNavigationScene(0x004B7EC0, which);
@@ -149,23 +149,23 @@ void Module3000::createScene(int sceneNum, int which) {
break;
// NOTE: Newly introduced sceneNums
case 1001:
- if (!getGlobalVar(0x01BA1A52))
- if (getGlobalVar(0x10938830))
+ if (!getGlobalVar(V_BOLT_DOOR_OPEN))
+ if (getGlobalVar(V_WALL_BROKEN))
createSmackerScene(0x00940021, true, true, false);
else
createSmackerScene(0x01140021, true, true, false);
else
- if (getGlobalVar(0x10938830))
+ if (getGlobalVar(V_WALL_BROKEN))
createSmackerScene(0x001011B1, true, true, false);
else
createSmackerScene(0x001021B1, true, true, false);
- setGlobalVar(0x01BA1A52, getGlobalVar(0x01BA1A52) ? 0 : 1);
+ setGlobalVar(V_BOLT_DOOR_OPEN, getGlobalVar(V_BOLT_DOOR_OPEN) ? 0 : 1);
break;
case 1006:
createSmackerScene(0x080810C5, true, true, false);
break;
case 1008:
- createSmackerScene(getGlobalVar(0xF0402B0A), true, true, false);
+ createSmackerScene(getGlobalVar(V_CANNON_SMACKER_NAME), true, true, false);
break;
}
SetUpdateHandler(&Module3000::updateScene);
@@ -176,7 +176,7 @@ void Module3000::updateScene() {
if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 1:
- if (!getGlobalVar(0x01BA1A52)) {
+ if (!getGlobalVar(V_BOLT_DOOR_OPEN)) {
if (_moduleResult == 0)
createScene(9, -1);
else if (_moduleResult == 1)
@@ -200,7 +200,7 @@ void Module3000::updateScene() {
if (_moduleResult == 0) {
createScene(3, 0);
} else if (_moduleResult == 1) {
- setGlobalVar(0x01BA1A52, 0);
+ setGlobalVar(V_BOLT_DOOR_OPEN, 0);
createScene(1, 1);
}
break;
@@ -209,7 +209,7 @@ void Module3000::updateScene() {
createScene(4, 0);
else if (_moduleResult == 3)
createScene(10, -1);
- else if (getGlobalVar(0x09221A62))
+ else if (getGlobalVar(V_STAIRS_DOWN))
createScene(5, 0);
else
createScene(2, 1);
@@ -238,11 +238,11 @@ void Module3000::updateScene() {
createScene(8, -1);
break;
case 8:
- _flag = getGlobalVar(0x10938830); // CHECKME
+ _flag = getGlobalVar(V_WALL_BROKEN); // CHECKME
if (_moduleResult != 1) {
_vm->_soundMan->setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
createScene(4, 1);
- } else if (getGlobalVar(0xF0402B0A)) {
+ } else if (getGlobalVar(V_CANNON_SMACKER_NAME)) {
createScene(1008, -1);
} else {
_vm->_soundMan->setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
@@ -265,7 +265,7 @@ void Module3000::updateScene() {
createScene(1, 0);
break;
case 1001:
- if (getGlobalVar(0x01BA1A52))
+ if (getGlobalVar(V_BOLT_DOOR_OPEN))
createScene(1, 0);
else
createScene(12, -1);
@@ -526,7 +526,7 @@ SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index)
_drawRect.width = _spriteResource.getDimensions().width;
_drawRect.height = _spriteResource.getDimensions().height;
_needRefresh = true;
- if (getGlobalVar(0x0C0288F4)) {
+ if (getGlobalVar(V_ROBOT_HIT)) {
hide();
} else {
startBlinking();
@@ -649,7 +649,7 @@ AsScene3009VerticalIndicator::AsScene3009VerticalIndicator(NeverhoodEngine *vm,
: AnimatedSprite(vm, 1000), _parentScene(parentScene), _enabled(false) {
_x = 300;
- _y = getGlobalVar(0x000809C2) ? 52 : 266;
+ _y = getGlobalVar(V_CANNON_RAISED) ? 52 : 266;
createSurface1(0xC2463913, 1200);
_needRefresh = true;
updatePosition();
@@ -681,7 +681,7 @@ uint32 AsScene3009VerticalIndicator::handleMessage(int messageNum, const Message
AsScene3009HorizontalIndicator::AsScene3009HorizontalIndicator(NeverhoodEngine *vm, Scene3009 *parentScene, uint32 cannonTargetStatus)
: AnimatedSprite(vm, 1000), _parentScene(parentScene), _enabled(false) {
- _x = getGlobalVar(0x9040018A) ? 533 : 92;
+ _x = getGlobalVar(V_CANNON_TURNED) ? 533 : 92;
_y = 150;
createSurface1(0xC0C12954, 1200);
_needRefresh = true;
@@ -799,12 +799,12 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _keepVideo(false), _moveCannonLeftFirst(false),
_isTurning(false), _lockSymbolsPart1Countdown(1), _lockSymbolsPart2Countdown(1) {
- _cannonTargetStatus = getGlobalVar(0x20580A86);
+ _cannonTargetStatus = getGlobalVar(V_CANNON_TARGET_STATUS);
debug("_cannonTargetStatus = %d", _cannonTargetStatus);
_vm->gameModule()->initScene3009Vars();
- setGlobalVar(0xF0402B0A, 0);
+ setGlobalVar(V_CANNON_SMACKER_NAME, 0);
_surfaceFlag = true;
_vm->_screen->clear();
@@ -858,7 +858,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
for (int i = 0; i < 6; i++)
setSubVar(0x00000914, i, _correctSymbols[i]);
sendMessage(this, 0x2003, 0);
- //setGlobalVar(0x610210B7, 1);
+ //setGlobalVar(V_ROBOT_TARGET, 1);
}
@@ -914,7 +914,7 @@ void Scene3009::update() {
if (_lockSymbolsPart1Countdown != 0 && (--_lockSymbolsPart1Countdown == 0) && isSymbolsPart1Solved()) {
for (int i = 0; i < 3; i++)
_asSymbols[i]->hide();
- if (!getGlobalVar(0x0C0288F4) || getGlobalVar(0x000809C2) || getGlobalVar(0x9040018A)) {
+ if (!getGlobalVar(V_ROBOT_HIT) || getGlobalVar(V_CANNON_RAISED) || getGlobalVar(V_CANNON_TURNED)) {
_ssSymbolEdges[0]->show();
_ssTargetLines[0]->show();
_asVerticalIndicator->show();
@@ -924,7 +924,7 @@ void Scene3009::update() {
if (_lockSymbolsPart2Countdown != 0 && (--_lockSymbolsPart2Countdown == 0) && isSymbolsPart2Solved()) {
for (int i = 3; i < 6; i++)
_asSymbols[i]->hide();
- if (!getGlobalVar(0x0C0288F4) || getGlobalVar(0x000809C2) || getGlobalVar(0x9040018A)) {
+ if (!getGlobalVar(V_ROBOT_HIT) || getGlobalVar(V_CANNON_RAISED) || getGlobalVar(V_CANNON_TURNED)) {
_ssSymbolEdges[1]->show();
_ssTargetLines[1]->show();
_asHorizontalIndicator->show();
@@ -938,8 +938,8 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
// TODO: Debug stuff
- if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !getGlobalVar(0x000809C2)) {
- setGlobalVar(0x20580A86, 0);
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !getGlobalVar(V_CANNON_RAISED)) {
+ setGlobalVar(V_CANNON_TARGET_STATUS, 0);
leaveScene(0);
}
break;
@@ -947,19 +947,19 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO: Debug stuff
break;
case 0x2000:
- if (!getGlobalVar(0x000809C2)) {
- if (!getGlobalVar(0x10938830)) {
+ if (!getGlobalVar(V_CANNON_RAISED)) {
+ if (!getGlobalVar(V_WALL_BROKEN)) {
_cannonTargetStatus = kCTSBreakWall;
- setGlobalVar(0x10938830, 1);
+ setGlobalVar(V_WALL_BROKEN, 1);
} else {
_cannonTargetStatus = kCTSWall;
}
- } else if (!getGlobalVar(0x9040018A)) {
+ } else if (!getGlobalVar(V_CANNON_TURNED)) {
_cannonTargetStatus = kCTSEmptyness;
- } else if (!getGlobalVar(0x610210B7)) {
+ } else if (!getGlobalVar(V_ROBOT_TARGET)) {
_cannonTargetStatus = kCTSFireRobotNoTarget;
- } else if (!getGlobalVar(0x0C0288F4)) {
- setGlobalVar(0x0C0288F4, 1);
+ } else if (!getGlobalVar(V_ROBOT_HIT)) {
+ setGlobalVar(V_ROBOT_HIT, 1);
_cannonTargetStatus = kCTSFireRobotIsTarget;
} else {
_cannonTargetStatus = kCTSFireNoRobot;
@@ -971,13 +971,13 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2002:
// Raise/lower the cannon
- if (!getGlobalVar(0x9040018A) && !_isTurning) {
- if (getGlobalVar(0x000809C2)) {
+ if (!getGlobalVar(V_CANNON_TURNED) && !_isTurning) {
+ if (getGlobalVar(V_CANNON_RAISED)) {
_cannonTargetStatus = kCTSLowerCannon;
- setGlobalVar(0x000809C2, 0);
+ setGlobalVar(V_CANNON_RAISED, 0);
} else {
_cannonTargetStatus = kCTSRaiseCannon;
- setGlobalVar(0x000809C2, 1);
+ setGlobalVar(V_CANNON_RAISED, 1);
}
playActionVideo();
}
@@ -987,25 +987,25 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2004:
// Turn the cannon if it's raised
- if (getGlobalVar(0x000809C2)) {
- if (!getGlobalVar(0x9040018A)) {
+ if (getGlobalVar(V_CANNON_RAISED)) {
+ if (!getGlobalVar(V_CANNON_TURNED)) {
// Cannon is at the left position
- if (!getGlobalVar(0x610210B7)) {
+ if (!getGlobalVar(V_ROBOT_TARGET)) {
_cannonTargetStatus = kCTSRightRobotNoTarget;
- } else if (!getGlobalVar(0x0C0288F4)) {
+ } else if (!getGlobalVar(V_ROBOT_HIT)) {
_cannonTargetStatus = kCTSRightRobotIsTarget;
} else {
_cannonTargetStatus = kCTSRightNoRobot;
}
- setGlobalVar(0x9040018A, 1);
+ setGlobalVar(V_CANNON_TURNED, 1);
_isTurning = true;
playActionVideo();
} else {
// Cannon is at the right position
- if (!getGlobalVar(0x610210B7)) {
+ if (!getGlobalVar(V_ROBOT_TARGET)) {
_cannonTargetStatus = kCTSLeftRobotNoTarget;
_smackerPlayer->open(0x108A000F, false);
- } else if (!getGlobalVar(0x0C0288F4)) {
+ } else if (!getGlobalVar(V_ROBOT_HIT)) {
_cannonTargetStatus = kCTSLeftRobotIsTarget;
_smackerPlayer->open(0x500B002F, false);
} else {
@@ -1016,7 +1016,7 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
_moveCannonLeftFirst = true;
_isTurning = true;
_keepVideo = false;
- setGlobalVar(0x9040018A, 0);
+ setGlobalVar(V_CANNON_TURNED, 0);
}
}
break;
@@ -1025,8 +1025,8 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
void Scene3009::playActionVideo() {
- setGlobalVar(0x20580A86, _cannonTargetStatus);
- setGlobalVar(0xF0402B0A, kScene3009CannonActionVideos[_cannonTargetStatus]);
+ setGlobalVar(V_CANNON_TARGET_STATUS, _cannonTargetStatus);
+ setGlobalVar(V_CANNON_SMACKER_NAME, kScene3009CannonActionVideos[_cannonTargetStatus]);
leaveScene(1);
}
@@ -1378,8 +1378,8 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit
_boltUnlocked[param.asInteger()] = true;
_boltUnlocking[param.asInteger()] = false;
if (_boltUnlocked[0] && _boltUnlocked[1] && _boltUnlocked[2]) {
- if (!getGlobalVar(0x00040153)) {
- setGlobalVar(0x00040153, 1);
+ if (!getGlobalVar(V_BOLT_DOOR_UNLOCKED)) {
+ setGlobalVar(V_BOLT_DOOR_UNLOCKED, 1);
playSound(0);
_countdown = 60;
} else {
@@ -1539,7 +1539,7 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0) {
// TODO _vm->gameModule()->initScene3011Vars();
- _noisySymbolIndex = getGlobalVar(0x2414C2F2);
+ _noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
_surfaceFlag = true;
SetMessageHandler(&Scene3011::handleMessage);
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 5594cce..5dc80c9 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -39,11 +39,11 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
//DEBUG<<<
if (_navigationIndex < 0) {
- _navigationIndex = (int)getGlobalVar(0x4200189E);
+ _navigationIndex = (int)getGlobalVar(V_NAVIGATION_INDEX);
if (_navigationIndex >= (int)_navigationList->size())
_navigationIndex = 0;
}
- setGlobalVar(0x4200189E, _navigationIndex);
+ setGlobalVar(V_NAVIGATION_INDEX, _navigationIndex);
SetUpdateHandler(&NavigationScene::update);
SetMessageHandler(&NavigationScene::handleMessage);
@@ -173,7 +173,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
if (_navigationIndex < 0)
_navigationIndex = _navigationList->size() - 1;
} while (!(*_navigationList)[_navigationIndex].interactive);
- setGlobalVar(0x4200189E, _navigationIndex);
+ setGlobalVar(V_NAVIGATION_INDEX, _navigationIndex);
} else {
_vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, _navigationIndex);
@@ -190,7 +190,7 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
if (_navigationIndex >= (int)_navigationList->size())
_navigationIndex = 0;
} while (!(*_navigationList)[_navigationIndex].interactive);
- setGlobalVar(0x4200189E, _navigationIndex);
+ setGlobalVar(V_NAVIGATION_INDEX, _navigationIndex);
} else {
_vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, _navigationIndex);
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 9bf6549..e009ff2 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -397,6 +397,17 @@ void TextResource::load(uint32 fileHash) {
if (_vm->_res->getResourceType(_resourceHandle) == 6) {
_textData = _vm->_res->loadResource(_resourceHandle, true);
_count = READ_LE_UINT32(_textData);
+
+ debug("TEXT RESOURCE %08X, count = %d:", fileHash, _count);
+ for (uint i = 0; i < _count-1; i++) {
+ const char *textEnd, *text = getString(i, textEnd);
+ while (text < textEnd) {
+ debug("[%04d] [%s]", i, text);
+ text += strlen(text) + 1;
+ }
+ debug("------------------");
+ }
+
} else {
_vm->_res->unuseResource(_resourceHandle);
_resourceHandle = -1;
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 375f7f3..e96fe8a 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -32,7 +32,7 @@ SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubl
// NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags)
- if (getGlobalVar(0x06C02850)) {
+ if (getGlobalVar(V_SMACKER_CAN_ABORT)) {
_flag1 = true;
_canAbort = true;
}
Commit: 02c5cc75a7cb8885d2a0fa141fbc0e763c5b31a0
https://github.com/scummvm/scummvm/commit/02c5cc75a7cb8885d2a0fa141fbc0e763c5b31a0
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2013-05-08T11:46:44-07:00
Commit Message:
Merge branch 'master'
Conflicts:
configure
base/plugins.cpp
Changed paths:
A backends/midi/sndio.cpp
A backends/platform/dingux/scummvm.png
A backends/platform/gph/caanoo-bundle.mk
A backends/platform/gph/gp2xwiz-bundle.mk
A backends/platform/openpandora/module.mk
A backends/platform/openpandora/op-bundle.mk
A backends/platform/sdl/macosx/appmenu_osx.h
A backends/platform/sdl/macosx/appmenu_osx.mm
A common/coroutines.cpp
A common/coroutines.h
A common/installshield_cab.cpp
A common/installshield_cab.h
A devtools/create_project/msvc11/create_project.sln
A devtools/create_project/msvc11/create_project.vcxproj
A devtools/create_project/msvc11/create_project.vcxproj.filters
A devtools/create_tony/create_tony.cpp
A devtools/create_tony/create_tony.h
A devtools/create_tony/module.mk
A devtools/create_tony/staticdata.h
A dists/engine-data/tony.dat
A dists/iphone/scummvm.xcodeproj/project.pbxproj
A dists/macosx/scummvm_osx_appcast.xml
A dists/msvc11/create_msvc11.bat
A dists/msvc11/readme.txt
A doc/da/HurtigStart
A engines/configure.engines
A engines/dreamweb/mouse.cpp
A engines/dreamweb/sound.h
A engines/gob/backbuffer.cpp
A engines/gob/backbuffer.h
A engines/gob/cmpfile.cpp
A engines/gob/cmpfile.h
A engines/gob/detection/detection.cpp
A engines/gob/detection/tables.h
A engines/gob/detection/tables_adi2.h
A engines/gob/detection/tables_adi4.h
A engines/gob/detection/tables_adibou.h
A engines/gob/detection/tables_ajworld.h
A engines/gob/detection/tables_bargon.h
A engines/gob/detection/tables_dynasty.h
A engines/gob/detection/tables_fallback.h
A engines/gob/detection/tables_fascin.h
A engines/gob/detection/tables_geisha.h
A engines/gob/detection/tables_gob1.h
A engines/gob/detection/tables_gob2.h
A engines/gob/detection/tables_gob3.h
A engines/gob/detection/tables_inca2.h
A engines/gob/detection/tables_lit.h
A engines/gob/detection/tables_littlered.h
A engines/gob/detection/tables_onceupon.h
A engines/gob/detection/tables_playtoons.h
A engines/gob/detection/tables_urban.h
A engines/gob/detection/tables_ween.h
A engines/gob/detection/tables_woodruff.h
A engines/gob/inter_littlered.cpp
A engines/gob/minigames/geisha/mouth.cpp
A engines/gob/minigames/geisha/mouth.h
A engines/gob/minigames/geisha/submarine.cpp
A engines/gob/minigames/geisha/submarine.h
A engines/gob/pregob/gctfile.cpp
A engines/gob/pregob/gctfile.h
A engines/gob/pregob/onceupon/abracadabra.cpp
A engines/gob/pregob/onceupon/abracadabra.h
A engines/gob/pregob/onceupon/babayaga.cpp
A engines/gob/pregob/onceupon/babayaga.h
A engines/gob/pregob/onceupon/brokenstrings.h
A engines/gob/pregob/onceupon/chargenchild.cpp
A engines/gob/pregob/onceupon/chargenchild.h
A engines/gob/pregob/onceupon/onceupon.cpp
A engines/gob/pregob/onceupon/onceupon.h
A engines/gob/pregob/onceupon/palettes.h
A engines/gob/pregob/onceupon/parents.cpp
A engines/gob/pregob/onceupon/parents.h
A engines/gob/pregob/onceupon/stork.cpp
A engines/gob/pregob/onceupon/stork.h
A engines/gob/pregob/onceupon/title.cpp
A engines/gob/pregob/onceupon/title.h
A engines/gob/pregob/pregob.cpp
A engines/gob/pregob/pregob.h
A engines/gob/pregob/seqfile.cpp
A engines/gob/pregob/seqfile.h
A engines/gob/pregob/txtfile.cpp
A engines/gob/pregob/txtfile.h
A engines/gob/save/saveload_ajworld.cpp
A engines/gob/sound/adlplayer.cpp
A engines/gob/sound/adlplayer.h
A engines/gob/sound/musplayer.cpp
A engines/gob/sound/musplayer.h
A engines/parallaction/adlib.cpp
A engines/pegasus/ai/ai_action.cpp
A engines/pegasus/ai/ai_action.h
A engines/pegasus/ai/ai_area.cpp
A engines/pegasus/ai/ai_area.h
A engines/pegasus/ai/ai_condition.cpp
A engines/pegasus/ai/ai_condition.h
A engines/pegasus/ai/ai_rule.cpp
A engines/pegasus/ai/ai_rule.h
A engines/pegasus/compass.cpp
A engines/pegasus/compass.h
A engines/pegasus/console.cpp
A engines/pegasus/console.h
A engines/pegasus/constants.h
A engines/pegasus/cursor.cpp
A engines/pegasus/cursor.h
A engines/pegasus/detection.cpp
A engines/pegasus/elements.cpp
A engines/pegasus/elements.h
A engines/pegasus/energymonitor.cpp
A engines/pegasus/energymonitor.h
A engines/pegasus/fader.cpp
A engines/pegasus/fader.h
A engines/pegasus/gamestate.cpp
A engines/pegasus/gamestate.h
A engines/pegasus/graphics.cpp
A engines/pegasus/graphics.h
A engines/pegasus/hotspot.cpp
A engines/pegasus/hotspot.h
A engines/pegasus/input.cpp
A engines/pegasus/input.h
A engines/pegasus/interaction.h
A engines/pegasus/interface.cpp
A engines/pegasus/interface.h
A engines/pegasus/items/autodragger.cpp
A engines/pegasus/items/autodragger.h
A engines/pegasus/items/biochips/aichip.cpp
A engines/pegasus/items/biochips/aichip.h
A engines/pegasus/items/biochips/biochipitem.cpp
A engines/pegasus/items/biochips/biochipitem.h
A engines/pegasus/items/biochips/mapchip.cpp
A engines/pegasus/items/biochips/mapchip.h
A engines/pegasus/items/biochips/mapimage.cpp
A engines/pegasus/items/biochips/mapimage.h
A engines/pegasus/items/biochips/opticalchip.cpp
A engines/pegasus/items/biochips/opticalchip.h
A engines/pegasus/items/biochips/pegasuschip.cpp
A engines/pegasus/items/biochips/pegasuschip.h
A engines/pegasus/items/biochips/retscanchip.cpp
A engines/pegasus/items/biochips/retscanchip.h
A engines/pegasus/items/biochips/shieldchip.cpp
A engines/pegasus/items/biochips/shieldchip.h
A engines/pegasus/items/inventory.cpp
A engines/pegasus/items/inventory.h
A engines/pegasus/items/inventory/airmask.cpp
A engines/pegasus/items/inventory/airmask.h
A engines/pegasus/items/inventory/gascanister.cpp
A engines/pegasus/items/inventory/gascanister.h
A engines/pegasus/items/inventory/inventoryitem.cpp
A engines/pegasus/items/inventory/inventoryitem.h
A engines/pegasus/items/inventory/keycard.cpp
A engines/pegasus/items/inventory/keycard.h
A engines/pegasus/items/inventorypicture.cpp
A engines/pegasus/items/inventorypicture.h
A engines/pegasus/items/item.cpp
A engines/pegasus/items/item.h
A engines/pegasus/items/itemdragger.cpp
A engines/pegasus/items/itemdragger.h
A engines/pegasus/items/itemlist.cpp
A engines/pegasus/items/itemlist.h
A engines/pegasus/menu.cpp
A engines/pegasus/menu.h
A engines/pegasus/module.mk
A engines/pegasus/movie.cpp
A engines/pegasus/movie.h
A engines/pegasus/neighborhood/caldoria/caldoria.cpp
A engines/pegasus/neighborhood/caldoria/caldoria.h
A engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp
A engines/pegasus/neighborhood/caldoria/caldoria4dsystem.h
A engines/pegasus/neighborhood/caldoria/caldoriabomb.cpp
A engines/pegasus/neighborhood/caldoria/caldoriabomb.h
A engines/pegasus/neighborhood/caldoria/caldoriamessages.cpp
A engines/pegasus/neighborhood/caldoria/caldoriamessages.h
A engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp
A engines/pegasus/neighborhood/caldoria/caldoriamirror.h
A engines/pegasus/neighborhood/door.cpp
A engines/pegasus/neighborhood/door.h
A engines/pegasus/neighborhood/exit.cpp
A engines/pegasus/neighborhood/exit.h
A engines/pegasus/neighborhood/extra.cpp
A engines/pegasus/neighborhood/extra.h
A engines/pegasus/neighborhood/hotspotinfo.cpp
A engines/pegasus/neighborhood/hotspotinfo.h
A engines/pegasus/neighborhood/mars/constants.h
A engines/pegasus/neighborhood/mars/energybeam.cpp
A engines/pegasus/neighborhood/mars/energybeam.h
A engines/pegasus/neighborhood/mars/gravitoncannon.cpp
A engines/pegasus/neighborhood/mars/gravitoncannon.h
A engines/pegasus/neighborhood/mars/hermite.cpp
A engines/pegasus/neighborhood/mars/hermite.h
A engines/pegasus/neighborhood/mars/mars.cpp
A engines/pegasus/neighborhood/mars/mars.h
A engines/pegasus/neighborhood/mars/planetmover.cpp
A engines/pegasus/neighborhood/mars/planetmover.h
A engines/pegasus/neighborhood/mars/reactor.cpp
A engines/pegasus/neighborhood/mars/reactor.h
A engines/pegasus/neighborhood/mars/robotship.cpp
A engines/pegasus/neighborhood/mars/robotship.h
A engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp
A engines/pegasus/neighborhood/mars/shuttleenergymeter.h
A engines/pegasus/neighborhood/mars/shuttlehud.cpp
A engines/pegasus/neighborhood/mars/shuttlehud.h
A engines/pegasus/neighborhood/mars/shuttleweapon.cpp
A engines/pegasus/neighborhood/mars/shuttleweapon.h
A engines/pegasus/neighborhood/mars/spacechase3d.cpp
A engines/pegasus/neighborhood/mars/spacechase3d.h
A engines/pegasus/neighborhood/mars/spacejunk.cpp
A engines/pegasus/neighborhood/mars/spacejunk.h
A engines/pegasus/neighborhood/mars/tractorbeam.cpp
A engines/pegasus/neighborhood/mars/tractorbeam.h
A engines/pegasus/neighborhood/neighborhood.cpp
A engines/pegasus/neighborhood/neighborhood.h
A engines/pegasus/neighborhood/norad/alpha/ecrmonitor.cpp
A engines/pegasus/neighborhood/norad/alpha/ecrmonitor.h
A engines/pegasus/neighborhood/norad/alpha/fillingstation.cpp
A engines/pegasus/neighborhood/norad/alpha/fillingstation.h
A engines/pegasus/neighborhood/norad/alpha/noradalpha.cpp
A engines/pegasus/neighborhood/norad/alpha/noradalpha.h
A engines/pegasus/neighborhood/norad/alpha/panorama.cpp
A engines/pegasus/neighborhood/norad/alpha/panorama.h
A engines/pegasus/neighborhood/norad/alpha/panoramascroll.cpp
A engines/pegasus/neighborhood/norad/alpha/panoramascroll.h
A engines/pegasus/neighborhood/norad/constants.h
A engines/pegasus/neighborhood/norad/delta/globegame.cpp
A engines/pegasus/neighborhood/norad/delta/globegame.h
A engines/pegasus/neighborhood/norad/delta/noraddelta.cpp
A engines/pegasus/neighborhood/norad/delta/noraddelta.h
A engines/pegasus/neighborhood/norad/norad.cpp
A engines/pegasus/neighborhood/norad/norad.h
A engines/pegasus/neighborhood/norad/noradelevator.cpp
A engines/pegasus/neighborhood/norad/noradelevator.h
A engines/pegasus/neighborhood/norad/pressuredoor.cpp
A engines/pegasus/neighborhood/norad/pressuredoor.h
A engines/pegasus/neighborhood/norad/pressuretracker.cpp
A engines/pegasus/neighborhood/norad/pressuretracker.h
A engines/pegasus/neighborhood/norad/subcontrolroom.cpp
A engines/pegasus/neighborhood/norad/subcontrolroom.h
A engines/pegasus/neighborhood/norad/subplatform.cpp
A engines/pegasus/neighborhood/norad/subplatform.h
A engines/pegasus/neighborhood/prehistoric/prehistoric.cpp
A engines/pegasus/neighborhood/prehistoric/prehistoric.h
A engines/pegasus/neighborhood/spot.cpp
A engines/pegasus/neighborhood/spot.h
A engines/pegasus/neighborhood/tsa/fulltsa.cpp
A engines/pegasus/neighborhood/tsa/fulltsa.h
A engines/pegasus/neighborhood/tsa/tinytsa.cpp
A engines/pegasus/neighborhood/tsa/tinytsa.h
A engines/pegasus/neighborhood/turn.cpp
A engines/pegasus/neighborhood/turn.h
A engines/pegasus/neighborhood/view.cpp
A engines/pegasus/neighborhood/view.h
A engines/pegasus/neighborhood/wsc/moleculebin.cpp
A engines/pegasus/neighborhood/wsc/moleculebin.h
A engines/pegasus/neighborhood/wsc/wsc.cpp
A engines/pegasus/neighborhood/wsc/wsc.h
A engines/pegasus/neighborhood/zoom.cpp
A engines/pegasus/neighborhood/zoom.h
A engines/pegasus/notification.cpp
A engines/pegasus/notification.h
A engines/pegasus/pegasus.cpp
A engines/pegasus/pegasus.h
A engines/pegasus/scoring.h
A engines/pegasus/sound.cpp
A engines/pegasus/sound.h
A engines/pegasus/surface.cpp
A engines/pegasus/surface.h
A engines/pegasus/timers.cpp
A engines/pegasus/timers.h
A engines/pegasus/transition.cpp
A engines/pegasus/transition.h
A engines/pegasus/types.h
A engines/pegasus/util.cpp
A engines/pegasus/util.h
A engines/plugins_table.h
A engines/sci/engine/file.cpp
A engines/sci/engine/file.h
A engines/sci/engine/kgraphics32.cpp
A engines/scumm/imuse/mac_m68k.cpp
A engines/scumm/imuse/mac_m68k.h
A engines/tony/custom.cpp
A engines/tony/custom.h
A engines/tony/debugger.cpp
A engines/tony/debugger.h
A engines/tony/detection.cpp
A engines/tony/detection_tables.h
A engines/tony/font.cpp
A engines/tony/font.h
A engines/tony/game.cpp
A engines/tony/game.h
A engines/tony/gfxcore.cpp
A engines/tony/gfxcore.h
A engines/tony/gfxengine.cpp
A engines/tony/gfxengine.h
A engines/tony/globals.cpp
A engines/tony/globals.h
A engines/tony/input.cpp
A engines/tony/input.h
A engines/tony/inventory.cpp
A engines/tony/inventory.h
A engines/tony/loc.cpp
A engines/tony/loc.h
A engines/tony/module.mk
A engines/tony/mpal/expr.cpp
A engines/tony/mpal/expr.h
A engines/tony/mpal/loadmpc.cpp
A engines/tony/mpal/loadmpc.h
A engines/tony/mpal/lzo.cpp
A engines/tony/mpal/lzo.h
A engines/tony/mpal/memory.cpp
A engines/tony/mpal/memory.h
A engines/tony/mpal/mpal.cpp
A engines/tony/mpal/mpal.h
A engines/tony/mpal/mpaldll.h
A engines/tony/mpal/mpalutils.cpp
A engines/tony/mpal/mpalutils.h
A engines/tony/resid.h
A engines/tony/sound.cpp
A engines/tony/sound.h
A engines/tony/tony.cpp
A engines/tony/tony.h
A engines/tony/tonychar.cpp
A engines/tony/tonychar.h
A engines/tony/utils.cpp
A engines/tony/utils.h
A engines/tony/window.cpp
A engines/tony/window.h
A engines/wintermute/ad/ad_actor.cpp
A engines/wintermute/ad/ad_actor.h
A engines/wintermute/ad/ad_entity.cpp
A engines/wintermute/ad/ad_entity.h
A engines/wintermute/ad/ad_game.cpp
A engines/wintermute/ad/ad_game.h
A engines/wintermute/ad/ad_inventory.cpp
A engines/wintermute/ad/ad_inventory.h
A engines/wintermute/ad/ad_inventory_box.cpp
A engines/wintermute/ad/ad_inventory_box.h
A engines/wintermute/ad/ad_item.cpp
A engines/wintermute/ad/ad_item.h
A engines/wintermute/ad/ad_layer.cpp
A engines/wintermute/ad/ad_layer.h
A engines/wintermute/ad/ad_node_state.cpp
A engines/wintermute/ad/ad_node_state.h
A engines/wintermute/ad/ad_object.cpp
A engines/wintermute/ad/ad_object.h
A engines/wintermute/ad/ad_path.cpp
A engines/wintermute/ad/ad_path.h
A engines/wintermute/ad/ad_path_point.cpp
A engines/wintermute/ad/ad_path_point.h
A engines/wintermute/ad/ad_region.cpp
A engines/wintermute/ad/ad_region.h
A engines/wintermute/ad/ad_response.cpp
A engines/wintermute/ad/ad_response.h
A engines/wintermute/ad/ad_response_box.cpp
A engines/wintermute/ad/ad_response_box.h
A engines/wintermute/ad/ad_response_context.cpp
A engines/wintermute/ad/ad_response_context.h
A engines/wintermute/ad/ad_rot_level.cpp
A engines/wintermute/ad/ad_rot_level.h
A engines/wintermute/ad/ad_scale_level.cpp
A engines/wintermute/ad/ad_scale_level.h
A engines/wintermute/ad/ad_scene.cpp
A engines/wintermute/ad/ad_scene.h
A engines/wintermute/ad/ad_scene_node.cpp
A engines/wintermute/ad/ad_scene_node.h
A engines/wintermute/ad/ad_scene_state.cpp
A engines/wintermute/ad/ad_scene_state.h
A engines/wintermute/ad/ad_sentence.cpp
A engines/wintermute/ad/ad_sentence.h
A engines/wintermute/ad/ad_sprite_set.cpp
A engines/wintermute/ad/ad_sprite_set.h
A engines/wintermute/ad/ad_talk_def.cpp
A engines/wintermute/ad/ad_talk_def.h
A engines/wintermute/ad/ad_talk_holder.cpp
A engines/wintermute/ad/ad_talk_holder.h
A engines/wintermute/ad/ad_talk_node.cpp
A engines/wintermute/ad/ad_talk_node.h
A engines/wintermute/ad/ad_types.h
A engines/wintermute/ad/ad_waypoint_group.cpp
A engines/wintermute/ad/ad_waypoint_group.h
A engines/wintermute/base/base.cpp
A engines/wintermute/base/base.h
A engines/wintermute/base/base_active_rect.cpp
A engines/wintermute/base/base_active_rect.h
A engines/wintermute/base/base_dynamic_buffer.cpp
A engines/wintermute/base/base_dynamic_buffer.h
A engines/wintermute/base/base_engine.cpp
A engines/wintermute/base/base_engine.h
A engines/wintermute/base/base_fader.cpp
A engines/wintermute/base/base_fader.h
A engines/wintermute/base/base_file_manager.cpp
A engines/wintermute/base/base_file_manager.h
A engines/wintermute/base/base_frame.cpp
A engines/wintermute/base/base_frame.h
A engines/wintermute/base/base_game.cpp
A engines/wintermute/base/base_game.h
A engines/wintermute/base/base_keyboard_state.cpp
A engines/wintermute/base/base_keyboard_state.h
A engines/wintermute/base/base_named_object.cpp
A engines/wintermute/base/base_named_object.h
A engines/wintermute/base/base_object.cpp
A engines/wintermute/base/base_object.h
A engines/wintermute/base/base_parser.cpp
A engines/wintermute/base/base_parser.h
A engines/wintermute/base/base_persistence_manager.cpp
A engines/wintermute/base/base_persistence_manager.h
A engines/wintermute/base/base_point.cpp
A engines/wintermute/base/base_point.h
A engines/wintermute/base/base_quick_msg.cpp
A engines/wintermute/base/base_quick_msg.h
A engines/wintermute/base/base_region.cpp
A engines/wintermute/base/base_region.h
A engines/wintermute/base/base_save_thumb_helper.cpp
A engines/wintermute/base/base_save_thumb_helper.h
A engines/wintermute/base/base_script_holder.cpp
A engines/wintermute/base/base_script_holder.h
A engines/wintermute/base/base_scriptable.cpp
A engines/wintermute/base/base_scriptable.h
A engines/wintermute/base/base_sprite.cpp
A engines/wintermute/base/base_sprite.h
A engines/wintermute/base/base_string_table.cpp
A engines/wintermute/base/base_string_table.h
A engines/wintermute/base/base_sub_frame.cpp
A engines/wintermute/base/base_sub_frame.h
A engines/wintermute/base/base_surface_storage.cpp
A engines/wintermute/base/base_surface_storage.h
A engines/wintermute/base/base_transition_manager.cpp
A engines/wintermute/base/base_transition_manager.h
A engines/wintermute/base/base_viewport.cpp
A engines/wintermute/base/base_viewport.h
A engines/wintermute/base/file/base_disk_file.cpp
A engines/wintermute/base/file/base_disk_file.h
A engines/wintermute/base/file/base_file.cpp
A engines/wintermute/base/file/base_file.h
A engines/wintermute/base/file/base_file_entry.cpp
A engines/wintermute/base/file/base_file_entry.h
A engines/wintermute/base/file/base_package.cpp
A engines/wintermute/base/file/base_package.h
A engines/wintermute/base/file/base_resources.cpp
A engines/wintermute/base/file/base_resources.h
A engines/wintermute/base/file/base_save_thumb_file.cpp
A engines/wintermute/base/file/base_save_thumb_file.h
A engines/wintermute/base/file/dcpackage.h
A engines/wintermute/base/font/base_font.cpp
A engines/wintermute/base/font/base_font.h
A engines/wintermute/base/font/base_font_bitmap.cpp
A engines/wintermute/base/font/base_font_bitmap.h
A engines/wintermute/base/font/base_font_storage.cpp
A engines/wintermute/base/font/base_font_storage.h
A engines/wintermute/base/font/base_font_truetype.cpp
A engines/wintermute/base/font/base_font_truetype.h
A engines/wintermute/base/gfx/base_image.cpp
A engines/wintermute/base/gfx/base_image.h
A engines/wintermute/base/gfx/base_renderer.cpp
A engines/wintermute/base/gfx/base_renderer.h
A engines/wintermute/base/gfx/base_surface.cpp
A engines/wintermute/base/gfx/base_surface.h
A engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
A engines/wintermute/base/gfx/osystem/base_render_osystem.h
A engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
A engines/wintermute/base/gfx/osystem/base_surface_osystem.h
A engines/wintermute/base/particles/part_emitter.cpp
A engines/wintermute/base/particles/part_emitter.h
A engines/wintermute/base/particles/part_force.cpp
A engines/wintermute/base/particles/part_force.h
A engines/wintermute/base/particles/part_particle.cpp
A engines/wintermute/base/particles/part_particle.h
A engines/wintermute/base/saveload.cpp
A engines/wintermute/base/saveload.h
A engines/wintermute/base/scriptables/dcscript.h
A engines/wintermute/base/scriptables/script.cpp
A engines/wintermute/base/scriptables/script.h
A engines/wintermute/base/scriptables/script_engine.cpp
A engines/wintermute/base/scriptables/script_engine.h
A engines/wintermute/base/scriptables/script_ext_array.cpp
A engines/wintermute/base/scriptables/script_ext_array.h
A engines/wintermute/base/scriptables/script_ext_date.cpp
A engines/wintermute/base/scriptables/script_ext_date.h
A engines/wintermute/base/scriptables/script_ext_file.cpp
A engines/wintermute/base/scriptables/script_ext_file.h
A engines/wintermute/base/scriptables/script_ext_math.cpp
A engines/wintermute/base/scriptables/script_ext_math.h
A engines/wintermute/base/scriptables/script_ext_mem_buffer.cpp
A engines/wintermute/base/scriptables/script_ext_mem_buffer.h
A engines/wintermute/base/scriptables/script_ext_object.cpp
A engines/wintermute/base/scriptables/script_ext_object.h
A engines/wintermute/base/scriptables/script_ext_string.cpp
A engines/wintermute/base/scriptables/script_ext_string.h
A engines/wintermute/base/scriptables/script_stack.cpp
A engines/wintermute/base/scriptables/script_stack.h
A engines/wintermute/base/scriptables/script_value.cpp
A engines/wintermute/base/scriptables/script_value.h
A engines/wintermute/base/sound/base_sound.cpp
A engines/wintermute/base/sound/base_sound.h
A engines/wintermute/base/sound/base_sound_buffer.cpp
A engines/wintermute/base/sound/base_sound_buffer.h
A engines/wintermute/base/sound/base_sound_manager.cpp
A engines/wintermute/base/sound/base_sound_manager.h
A engines/wintermute/coll_templ.h
A engines/wintermute/dcgf.h
A engines/wintermute/dctypes.h
A engines/wintermute/detection.cpp
A engines/wintermute/detection_tables.h
A engines/wintermute/graphics/transparent_surface.cpp
A engines/wintermute/graphics/transparent_surface.h
A engines/wintermute/math/math_util.cpp
A engines/wintermute/math/math_util.h
A engines/wintermute/math/matrix4.cpp
A engines/wintermute/math/matrix4.h
A engines/wintermute/math/rect32.h
A engines/wintermute/math/vector2.cpp
A engines/wintermute/math/vector2.h
A engines/wintermute/module.mk
A engines/wintermute/persistent.cpp
A engines/wintermute/persistent.h
A engines/wintermute/platform_osystem.cpp
A engines/wintermute/platform_osystem.h
A engines/wintermute/system/sys_class.cpp
A engines/wintermute/system/sys_class.h
A engines/wintermute/system/sys_class_registry.cpp
A engines/wintermute/system/sys_class_registry.h
A engines/wintermute/system/sys_instance.cpp
A engines/wintermute/system/sys_instance.h
A engines/wintermute/ui/ui_button.cpp
A engines/wintermute/ui/ui_button.h
A engines/wintermute/ui/ui_edit.cpp
A engines/wintermute/ui/ui_edit.h
A engines/wintermute/ui/ui_entity.cpp
A engines/wintermute/ui/ui_entity.h
A engines/wintermute/ui/ui_object.cpp
A engines/wintermute/ui/ui_object.h
A engines/wintermute/ui/ui_text.cpp
A engines/wintermute/ui/ui_text.h
A engines/wintermute/ui/ui_tiled_image.cpp
A engines/wintermute/ui/ui_tiled_image.h
A engines/wintermute/ui/ui_window.cpp
A engines/wintermute/ui/ui_window.h
A engines/wintermute/utils/convert_utf.cpp
A engines/wintermute/utils/convert_utf.h
A engines/wintermute/utils/crc.cpp
A engines/wintermute/utils/crc.h
A engines/wintermute/utils/path_util.cpp
A engines/wintermute/utils/path_util.h
A engines/wintermute/utils/string_util.cpp
A engines/wintermute/utils/string_util.h
A engines/wintermute/utils/utils.cpp
A engines/wintermute/utils/utils.h
A engines/wintermute/video/video_player.cpp
A engines/wintermute/video/video_player.h
A engines/wintermute/video/video_theora_player.cpp
A engines/wintermute/video/video_theora_player.h
A engines/wintermute/wintermute.cpp
A engines/wintermute/wintermute.h
A engines/wintermute/wintypes.h
A graphics/decoders/bmp.cpp
A graphics/decoders/bmp.h
A graphics/decoders/image_decoder.h
A graphics/decoders/jpeg.cpp
A graphics/decoders/jpeg.h
A graphics/decoders/pcx.cpp
A graphics/decoders/pcx.h
A graphics/decoders/pict.cpp
A graphics/decoders/pict.h
A graphics/decoders/png.cpp
A graphics/decoders/png.h
A graphics/decoders/tga.cpp
A graphics/decoders/tga.h
A gui/predictivedialog.cpp
A gui/predictivedialog.h
A gui/saveload-dialog.cpp
A gui/saveload-dialog.h
A gui/themes/scummmodern/delbtn.bmp
A gui/themes/scummmodern/grid.bmp
A gui/themes/scummmodern/list.bmp
A po/eu.po
A po/gl_ES.po
A test/common/memorywritestream.h
A video/codecs/svq1.cpp
A video/codecs/svq1.h
A video/codecs/svq1_cb.h
A video/codecs/svq1_vlc.h
A video/theora_decoder.cpp
A video/theora_decoder.h
R backends/platform/gph/caanoo-bundle.mk
R backends/platform/gph/gp2xwiz-bundle.mk
R backends/platform/openpandora/module.mk
R backends/platform/openpandora/op-bundle.mk
R backends/platform/sdl/macosx/appmenu_osx.h
R backends/platform/sdl/macosx/appmenu_osx.mm
R backends/platform/sdl/main.cpp
R engines/agos/installshield_cab.cpp
R engines/agos/installshield_cab.h
R dists/iphone/scummvm.xcodeproj/project.pbxproj
R dists/macosx/scummvm_osx_appcast.xml
R engines/agi/predictive.cpp
R engines/gob/detection.cpp
R engines/gob/detection_tables.h
R engines/sword25/fmv/theora_decoder.cpp
R engines/sword25/fmv/theora_decoder.h
R engines/tinsel/coroutine.cpp
R engines/tinsel/coroutine.h
R graphics/imagedec.h
R graphics/jpeg.cpp
R graphics/jpeg.h
R graphics/pict.cpp
R graphics/pict.h
R graphics/imagedec.cpp
R graphics/png.cpp
R graphics/png.h
AUTHORS
Makefile
NEWS
README
audio/audiostream.cpp
audio/audiostream.h
audio/decoders/adpcm.cpp
audio/decoders/adpcm_intern.h
audio/decoders/aiff.h
audio/decoders/qdm2.cpp
audio/decoders/quicktime.cpp
audio/decoders/quicktime.h
audio/decoders/quicktime_intern.h
audio/decoders/voc.cpp
audio/mididrv.cpp
audio/midiparser.cpp
audio/midiparser.h
audio/midiparser_smf.cpp
audio/midiparser_xmidi.cpp
audio/mixer.h
audio/mods/maxtrax.h
audio/mods/protracker.cpp
audio/mods/protracker.h
audio/mods/tfmx.h
audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
audio/softsynth/mt32/Part.cpp
audio/softsynth/mt32/Partial.h
audio/softsynth/mt32/PartialManager.cpp
audio/softsynth/mt32/Structures.h
audio/softsynth/mt32/Synth.cpp
audio/softsynth/mt32/TVA.cpp
audio/softsynth/mt32/TVF.cpp
audio/softsynth/mt32/freeverb.cpp
audio/softsynth/opl/mame.cpp
backends/events/gph/gph-events.cpp
backends/events/gph/gph-events.h
backends/events/openpandora/op-events.cpp
backends/events/sdl/sdl-events.cpp
backends/events/sdl/sdl-events.h
backends/events/webossdl/webossdl-events.h
backends/fs/symbian/symbian-fs.cpp
backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
backends/graphics/gph/gph-graphics.cpp
backends/graphics/graphics.h
backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
backends/graphics/null/null-graphics.h
backends/graphics/opengl/opengl-graphics.cpp
backends/graphics/opengl/opengl-graphics.h
backends/graphics/openglsdl/openglsdl-graphics.cpp
backends/graphics/openpandora/op-graphics.cpp
backends/graphics/openpandora/op-graphics.h
backends/graphics/surfacesdl/surfacesdl-graphics.cpp
backends/graphics/surfacesdl/surfacesdl-graphics.h
backends/graphics/wincesdl/wincesdl-graphics.cpp
backends/graphics/wincesdl/wincesdl-graphics.h
backends/keymapper/hardware-input.cpp
backends/keymapper/hardware-input.h
backends/keymapper/keymap.cpp
backends/keymapper/keymap.h
backends/keymapper/keymapper.cpp
backends/keymapper/keymapper.h
backends/keymapper/remap-dialog.cpp
backends/keymapper/remap-dialog.h
backends/midi/coreaudio.cpp
backends/midi/stmidi.cpp
backends/midi/timidity.cpp
backends/mixer/sdl13/sdl13-mixer.cpp
backends/mixer/symbiansdl/symbiansdl-mixer.cpp
backends/modular-backend.cpp
backends/modular-backend.h
backends/module.mk
backends/platform/android/android.cpp
backends/platform/android/android.h
backends/platform/android/android.mk
backends/platform/android/gfx.cpp
backends/platform/android/texture.cpp
backends/platform/bada/application.cpp
backends/platform/bada/sscanf.cpp
backends/platform/bada/system.cpp
backends/platform/dc/dc.h
backends/platform/dc/dcmain.cpp
backends/platform/dc/display.cpp
backends/platform/dc/vmsave.cpp
backends/platform/dingux/README.DINGUX
backends/platform/dingux/dingux.mk
backends/platform/ds/arm9/source/gbampsave.cpp
backends/platform/ds/arm9/source/gbampsave.h
backends/platform/ds/arm9/source/osystem_ds.cpp
backends/platform/ds/arm9/source/osystem_ds.h
backends/platform/gph/gph-backend.cpp
backends/platform/gph/gph-main.cpp
backends/platform/gph/gph.h
backends/platform/iphone/iphone_common.h
backends/platform/iphone/iphone_video.h
backends/platform/iphone/iphone_video.mm
backends/platform/iphone/osys_events.cpp
backends/platform/iphone/osys_main.cpp
backends/platform/iphone/osys_main.h
backends/platform/iphone/osys_video.mm
backends/platform/maemo/debian/changelog
backends/platform/maemo/debian/control
backends/platform/maemo/debian/rules
backends/platform/maemo/maemo.cpp
backends/platform/n64/framfs_save_manager.h
backends/platform/n64/osys_n64.h
backends/platform/n64/osys_n64_base.cpp
backends/platform/n64/pakfs_save_manager.h
backends/platform/openpandora/op-backend.cpp
backends/platform/openpandora/op-options.cpp
backends/platform/openpandora/op-sdl.h
backends/platform/ps2/Gs2dScreen.cpp
backends/platform/ps2/Gs2dScreen.h
backends/platform/ps2/icon.h
backends/platform/ps2/ps2time.cpp
backends/platform/ps2/savefilemgr.cpp
backends/platform/ps2/savefilemgr.h
backends/platform/ps2/systemps2.cpp
backends/platform/ps2/systemps2.h
backends/platform/psp/README.PSP
backends/platform/psp/default_display_client.cpp
backends/platform/psp/default_display_client.h
backends/platform/psp/display_manager.cpp
backends/platform/psp/osys_psp.cpp
backends/platform/psp/osys_psp.h
backends/platform/psp/psp_main.cpp
backends/platform/psp/tests.cpp
backends/platform/psp/tests.h
backends/platform/psp/trace.h
backends/platform/sdl/macosx/macosx.cpp
backends/platform/sdl/macosx/macosx.h
backends/platform/sdl/module.mk
backends/platform/sdl/sdl.cpp
backends/platform/symbian/src/ScummApp.cpp
backends/platform/symbian/src/ScummApp.h
backends/platform/symbian/src/SymbianActions.cpp
backends/platform/symbian/src/portdefs.h
backends/platform/webos/webos.cpp
backends/platform/webos/webos.h
backends/platform/wii/osystem.cpp
backends/platform/wii/osystem.h
backends/platform/wii/osystem_gfx.cpp
backends/platform/wince/wince-sdl.cpp
backends/saves/default/default-saves.cpp
backends/saves/default/default-saves.h
backends/saves/windows/windows-saves.cpp
backends/taskbar/win32/mingw-compat.h
backends/timer/bada/timer.cpp
backends/timer/bada/timer.h
backends/timer/default/default-timer.cpp
backends/timer/default/default-timer.h
backends/timer/psp/timer.cpp
backends/vkeybd/virtual-keyboard-gui.cpp
backends/vkeybd/virtual-keyboard-parser.cpp
base/commandLine.cpp
base/internal_version.h
base/main.cpp
base/plugins.cpp
base/plugins.h
base/version.cpp
common/EventDispatcher.cpp
common/EventMapper.cpp
common/array.h
common/cosinetables.cpp
common/cosinetables.h
common/dct.cpp
common/dct.h
common/endian.h
common/events.h
common/fft.cpp
common/fft.h
common/gui_options.cpp
common/gui_options.h
common/keyboard.h
common/language.cpp
common/language.h
common/macresman.cpp
common/macresman.h
common/math.h
common/memstream.h
common/module.mk
common/ptr.h
common/quicktime.cpp
common/quicktime.h
common/rational.h
common/rdft.cpp
common/rdft.h
common/rect.h
common/rendermode.cpp
common/rendermode.h
common/savefile.h
common/scummsys.h
common/sinetables.cpp
common/sinetables.h
common/singleton.h
common/system.h
common/taskbar.h
common/translation.cpp
common/unzip.cpp
common/updates.h
common/util.h
common/winexe_pe.cpp
common/xmlparser.cpp
common/zlib.cpp
common/zlib.h
configure
devtools/README
devtools/create_drascula/staticdata.h
devtools/create_kyradat/create_kyradat.cpp
devtools/create_kyradat/extract.cpp
devtools/create_kyradat/games.cpp
devtools/create_kyradat/tables.cpp
devtools/create_lure/create_lure_dat.h
devtools/create_project/config.h
devtools/create_project/create_project.cpp
devtools/create_project/create_project.h
devtools/create_project/msbuild.cpp
devtools/create_project/msvc.cpp
devtools/create_project/msvc.h
devtools/create_project/scripts/postbuild.cmd
devtools/create_project/visualstudio.cpp
devtools/create_project/xcode.cpp
devtools/create_teenagent/create_teenagent.cpp
devtools/create_translations/cp_parser.cpp
devtools/create_translations/po_parser.cpp
devtools/credits.pl
devtools/module.mk
devtools/scumm-md5.txt
dists/android/AndroidManifest.xml
dists/android/plugin-manifest.xml
dists/bada/Res/scummmobile/THEMERC
dists/bada/Res/scummmobile/scummmobile_layout.stx
dists/engine-data/README
dists/engine-data/drascula.dat
dists/engine-data/kyra.dat
dists/engine-data/teenagent.dat
dists/gph/README-GPH
dists/gph/scummvm.ini
dists/iphone/Info.plist
dists/irix/scummvm.spec
dists/macosx/Info.plist
dists/openpandora/PXML.xml
dists/openpandora/README-OPENPANDORA
dists/openpandora/README-PND.txt
dists/openpandora/index.html
dists/redhat/scummvm-tools.spec
dists/redhat/scummvm.spec
dists/redhat/scummvm.spec.in
dists/samsungtv/scummvm.dat
dists/scummvm.6
dists/scummvm.rc
dists/scummvm.rc.in
dists/slackware/scummvm.SlackBuild
dists/wii/meta.xml
dists/win32/ScummVM.iss
dists/win32/scummvm.nsi
doc/cz/PrectiMe
doc/de/Liesmich
doc/de/Neues
doc/se/LasMig
engines/advancedDetector.cpp
engines/advancedDetector.h
engines/agi/agi.cpp
engines/agi/agi.h
engines/agi/detection.cpp
engines/agi/detection_tables.h
engines/agi/keyboard.cpp
engines/agi/loader_v1.cpp
engines/agi/menu.cpp
engines/agi/module.mk
engines/agi/op_cmd.cpp
engines/agi/op_test.cpp
engines/agi/opcodes.cpp
engines/agi/saveload.cpp
engines/agi/sound_pcjr.cpp
engines/agi/text.cpp
engines/agi/words.cpp
engines/agos/agos.h
engines/agos/animation.cpp
engines/agos/animation.h
engines/agos/charset-fontdata.cpp
engines/agos/event.cpp
engines/agos/midiparser_s1d.cpp
engines/agos/module.mk
engines/agos/res.cpp
engines/agos/saveload.cpp
engines/agos/script_s1.cpp
engines/agos/sound.cpp
engines/cge/bitmap.cpp
engines/cge/cge.cpp
engines/cge/cge.h
engines/cge/cge_main.cpp
engines/cge/cge_main.h
engines/cge/detection.cpp
engines/cge/events.cpp
engines/cge/events.h
engines/cge/fileio.cpp
engines/cge/sound.cpp
engines/cge/text.cpp
engines/cge/vga13h.cpp
engines/cge/vga13h.h
engines/cge/vmenu.cpp
engines/cge/vmenu.h
engines/cine/anim.cpp
engines/cine/anim.h
engines/cine/bg_list.cpp
engines/cine/cine.cpp
engines/cine/cine.h
engines/cine/console.cpp
engines/cine/detection_tables.h
engines/cine/gfx.cpp
engines/cine/gfx.h
engines/cine/main_loop.cpp
engines/cine/object.cpp
engines/cine/pal.cpp
engines/cine/part.cpp
engines/cine/saveload.cpp
engines/cine/saveload.h
engines/cine/script.h
engines/cine/script_fw.cpp
engines/cine/sound.cpp
engines/cine/sound.h
engines/cine/texte.cpp
engines/cine/texte.h
engines/cine/various.cpp
engines/cine/various.h
engines/composer/composer.cpp
engines/composer/resource.cpp
engines/cruise/cruise.cpp
engines/cruise/cruise_main.cpp
engines/cruise/detection.cpp
engines/cruise/menu.cpp
engines/cruise/staticres.cpp
engines/cruise/staticres.h
engines/dialogs.cpp
engines/draci/detection.cpp
engines/drascula/detection.cpp
engines/drascula/interface.cpp
engines/dreamweb/detection.cpp
engines/dreamweb/detection_tables.h
engines/dreamweb/dreamweb.cpp
engines/dreamweb/dreamweb.h
engines/dreamweb/keypad.cpp
engines/dreamweb/module.mk
engines/dreamweb/monitor.cpp
engines/dreamweb/newplace.cpp
engines/dreamweb/object.cpp
engines/dreamweb/people.cpp
engines/dreamweb/print.cpp
engines/dreamweb/rain.cpp
engines/dreamweb/saveload.cpp
engines/dreamweb/sound.cpp
engines/dreamweb/sprite.cpp
engines/dreamweb/stubs.cpp
engines/dreamweb/talk.cpp
engines/dreamweb/titles.cpp
engines/dreamweb/use.cpp
engines/dreamweb/vgafades.cpp
engines/dreamweb/vgagrafx.cpp
engines/engines.mk
engines/gob/anifile.cpp
engines/gob/anifile.h
engines/gob/aniobject.cpp
engines/gob/aniobject.h
engines/gob/cheater.h
engines/gob/cheater_geisha.cpp
engines/gob/decfile.cpp
engines/gob/decfile.h
engines/gob/draw.cpp
engines/gob/draw.h
engines/gob/draw_fascin.cpp
engines/gob/draw_playtoons.cpp
engines/gob/draw_v1.cpp
engines/gob/draw_v2.cpp
engines/gob/game.cpp
engines/gob/game.h
engines/gob/global.cpp
engines/gob/global.h
engines/gob/gob.cpp
engines/gob/gob.h
engines/gob/hotspots.cpp
engines/gob/hotspots.h
engines/gob/init.cpp
engines/gob/init.h
engines/gob/init_fascin.cpp
engines/gob/init_geisha.cpp
engines/gob/init_v1.cpp
engines/gob/init_v2.cpp
engines/gob/inter.cpp
engines/gob/inter.h
engines/gob/inter_bargon.cpp
engines/gob/inter_fascin.cpp
engines/gob/inter_geisha.cpp
engines/gob/inter_v1.cpp
engines/gob/inter_v2.cpp
engines/gob/inter_v5.cpp
engines/gob/inter_v7.cpp
engines/gob/minigames/geisha/diving.cpp
engines/gob/minigames/geisha/evilfish.cpp
engines/gob/minigames/geisha/evilfish.h
engines/gob/minigames/geisha/meter.cpp
engines/gob/minigames/geisha/meter.h
engines/gob/minigames/geisha/penetration.cpp
engines/gob/minigames/geisha/penetration.h
engines/gob/module.mk
engines/gob/mult.cpp
engines/gob/mult_v2.cpp
engines/gob/palanim.cpp
engines/gob/resources.cpp
engines/gob/resources.h
engines/gob/rxyfile.cpp
engines/gob/rxyfile.h
engines/gob/save/saveload.h
engines/gob/sound/adlib.cpp
engines/gob/sound/adlib.h
engines/gob/sound/sound.cpp
engines/gob/sound/sound.h
engines/gob/sound/soundblaster.cpp
engines/gob/sound/soundblaster.h
engines/gob/surface.cpp
engines/gob/surface.h
engines/gob/util.cpp
engines/gob/util.h
engines/gob/video.cpp
engines/gob/video.h
engines/gob/videoplayer.cpp
engines/gob/videoplayer.h
engines/groovie/cursor.cpp
engines/groovie/detection.cpp
engines/groovie/graphics.cpp
engines/groovie/groovie.cpp
engines/groovie/resource.cpp
engines/groovie/roq.cpp
engines/groovie/saveload.cpp
engines/groovie/script.cpp
engines/hugo/console.cpp
engines/hugo/detection.cpp
engines/hugo/dialogs.cpp
engines/hugo/dialogs.h
engines/hugo/display.cpp
engines/hugo/display.h
engines/hugo/file.cpp
engines/hugo/file.h
engines/hugo/file_v1d.cpp
engines/hugo/file_v1w.cpp
engines/hugo/file_v2d.cpp
engines/hugo/file_v3d.cpp
engines/hugo/game.h
engines/hugo/hugo.cpp
engines/hugo/hugo.h
engines/hugo/intro.cpp
engines/hugo/intro.h
engines/hugo/inventory.cpp
engines/hugo/inventory.h
engines/hugo/mouse.cpp
engines/hugo/mouse.h
engines/hugo/object.cpp
engines/hugo/object.h
engines/hugo/object_v1d.cpp
engines/hugo/object_v1w.cpp
engines/hugo/object_v2d.cpp
engines/hugo/object_v3d.cpp
engines/hugo/parser.cpp
engines/hugo/parser.h
engines/hugo/parser_v1d.cpp
engines/hugo/parser_v1w.cpp
engines/hugo/parser_v2d.cpp
engines/hugo/parser_v3d.cpp
engines/hugo/route.cpp
engines/hugo/route.h
engines/hugo/schedule.cpp
engines/hugo/schedule.h
engines/hugo/sound.cpp
engines/hugo/sound.h
engines/kyra/animator_hof.cpp
engines/kyra/animator_mr.cpp
engines/kyra/detection.cpp
engines/kyra/detection_tables.h
engines/kyra/eobcommon.cpp
engines/kyra/eobcommon.h
engines/kyra/gui_eob.cpp
engines/kyra/gui_hof.cpp
engines/kyra/gui_lok.cpp
engines/kyra/gui_lol.cpp
engines/kyra/gui_mr.cpp
engines/kyra/gui_v1.cpp
engines/kyra/gui_v2.cpp
engines/kyra/items_hof.cpp
engines/kyra/items_lok.cpp
engines/kyra/items_lol.cpp
engines/kyra/items_mr.cpp
engines/kyra/items_v2.cpp
engines/kyra/kyra_hof.cpp
engines/kyra/kyra_lok.cpp
engines/kyra/kyra_mr.cpp
engines/kyra/kyra_v2.cpp
engines/kyra/lol.cpp
engines/kyra/lol.h
engines/kyra/screen.cpp
engines/kyra/screen.h
engines/kyra/screen_eob.cpp
engines/kyra/screen_lok.cpp
engines/kyra/screen_lol.cpp
engines/kyra/screen_lol.h
engines/kyra/screen_v2.cpp
engines/kyra/script_hof.cpp
engines/kyra/script_lok.cpp
engines/kyra/script_lol.cpp
engines/kyra/script_mr.cpp
engines/kyra/sequences_hof.cpp
engines/kyra/sequences_lok.cpp
engines/kyra/sound_intern.h
engines/kyra/sound_midi.cpp
engines/kyra/sound_towns.cpp
engines/kyra/sprites_lol.cpp
engines/kyra/staticres.cpp
engines/kyra/text_hof.cpp
engines/kyra/text_lok.cpp
engines/kyra/text_mr.cpp
engines/kyra/timer_eob.cpp
engines/kyra/vqa.cpp
engines/lastexpress/data/animation.cpp
engines/lastexpress/data/background.cpp
engines/lastexpress/data/cursor.cpp
engines/lastexpress/data/font.cpp
engines/lastexpress/data/scene.cpp
engines/lastexpress/data/sequence.cpp
engines/lastexpress/data/sequence.h
engines/lastexpress/data/snd.cpp
engines/lastexpress/data/subtitle.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/debug.h
engines/lastexpress/detection.cpp
engines/lastexpress/entities/abbot.cpp
engines/lastexpress/entities/abbot.h
engines/lastexpress/entities/alexei.cpp
engines/lastexpress/entities/alexei.h
engines/lastexpress/entities/alouan.cpp
engines/lastexpress/entities/alouan.h
engines/lastexpress/entities/anna.cpp
engines/lastexpress/entities/anna.h
engines/lastexpress/entities/august.cpp
engines/lastexpress/entities/august.h
engines/lastexpress/entities/boutarel.cpp
engines/lastexpress/entities/boutarel.h
engines/lastexpress/entities/chapters.cpp
engines/lastexpress/entities/chapters.h
engines/lastexpress/entities/cooks.cpp
engines/lastexpress/entities/cooks.h
engines/lastexpress/entities/coudert.cpp
engines/lastexpress/entities/coudert.h
engines/lastexpress/entities/entity.cpp
engines/lastexpress/entities/entity.h
engines/lastexpress/entities/entity39.cpp
engines/lastexpress/entities/entity39.h
engines/lastexpress/entities/entity_intern.h
engines/lastexpress/entities/francois.cpp
engines/lastexpress/entities/francois.h
engines/lastexpress/entities/gendarmes.cpp
engines/lastexpress/entities/gendarmes.h
engines/lastexpress/entities/hadija.cpp
engines/lastexpress/entities/hadija.h
engines/lastexpress/entities/ivo.cpp
engines/lastexpress/entities/ivo.h
engines/lastexpress/entities/kahina.cpp
engines/lastexpress/entities/kahina.h
engines/lastexpress/entities/kronos.cpp
engines/lastexpress/entities/kronos.h
engines/lastexpress/entities/mahmud.cpp
engines/lastexpress/entities/mahmud.h
engines/lastexpress/entities/max.cpp
engines/lastexpress/entities/max.h
engines/lastexpress/entities/mertens.cpp
engines/lastexpress/entities/mertens.h
engines/lastexpress/entities/milos.cpp
engines/lastexpress/entities/milos.h
engines/lastexpress/entities/mmeboutarel.cpp
engines/lastexpress/entities/mmeboutarel.h
engines/lastexpress/entities/pascale.cpp
engines/lastexpress/entities/pascale.h
engines/lastexpress/entities/rebecca.cpp
engines/lastexpress/entities/rebecca.h
engines/lastexpress/entities/salko.cpp
engines/lastexpress/entities/salko.h
engines/lastexpress/entities/servers0.cpp
engines/lastexpress/entities/servers0.h
engines/lastexpress/entities/servers1.cpp
engines/lastexpress/entities/servers1.h
engines/lastexpress/entities/sophie.cpp
engines/lastexpress/entities/sophie.h
engines/lastexpress/entities/tables.cpp
engines/lastexpress/entities/tables.h
engines/lastexpress/entities/tatiana.cpp
engines/lastexpress/entities/tatiana.h
engines/lastexpress/entities/train.cpp
engines/lastexpress/entities/train.h
engines/lastexpress/entities/vassili.cpp
engines/lastexpress/entities/vassili.h
engines/lastexpress/entities/verges.cpp
engines/lastexpress/entities/verges.h
engines/lastexpress/entities/vesna.cpp
engines/lastexpress/entities/vesna.h
engines/lastexpress/entities/yasmin.cpp
engines/lastexpress/entities/yasmin.h
engines/lastexpress/fight/fight.cpp
engines/lastexpress/fight/fighter.cpp
engines/lastexpress/fight/fighter.h
engines/lastexpress/game/action.cpp
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/beetle.h
engines/lastexpress/game/entities.cpp
engines/lastexpress/game/entities.h
engines/lastexpress/game/inventory.cpp
engines/lastexpress/game/inventory.h
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/object.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/game/savegame.h
engines/lastexpress/game/savepoint.cpp
engines/lastexpress/game/savepoint.h
engines/lastexpress/game/scenes.cpp
engines/lastexpress/game/scenes.h
engines/lastexpress/game/state.cpp
engines/lastexpress/game/state.h
engines/lastexpress/graphics.cpp
engines/lastexpress/helpers.h
engines/lastexpress/lastexpress.cpp
engines/lastexpress/menu/menu.cpp
engines/lastexpress/resource.cpp
engines/lastexpress/resource.h
engines/lastexpress/shared.h
engines/lastexpress/sound/entry.cpp
engines/lastexpress/sound/queue.cpp
engines/lastexpress/sound/queue.h
engines/lastexpress/sound/sound.cpp
engines/lure/debugger.cpp
engines/lure/decode.cpp
engines/lure/game.cpp
engines/lure/hotspots.cpp
engines/lure/hotspots.h
engines/lure/menu.cpp
engines/lure/res.cpp
engines/lure/res_struct.cpp
engines/lure/res_struct.h
engines/lure/room.cpp
engines/lure/sound.cpp
engines/lure/surface.cpp
engines/made/pmvplayer.cpp
engines/made/screen.cpp
engines/made/screen.h
engines/made/screenfx.cpp
engines/made/scriptfuncs.cpp
engines/metaengine.h
engines/mohawk/bitmap.cpp
engines/mohawk/bitmap.h
engines/mohawk/cursors.cpp
engines/mohawk/detection.cpp
engines/mohawk/detection_tables.h
engines/mohawk/graphics.cpp
engines/mohawk/livingbooks.cpp
engines/mohawk/livingbooks.h
engines/mohawk/myst.cpp
engines/mohawk/myst_areas.cpp
engines/mohawk/myst_graphics.cpp
engines/mohawk/myst_graphics.h
engines/mohawk/myst_scripts.cpp
engines/mohawk/myst_stacks/dni.cpp
engines/mohawk/myst_stacks/intro.cpp
engines/mohawk/riven.cpp
engines/mohawk/riven.h
engines/mohawk/riven_external.cpp
engines/mohawk/riven_graphics.cpp
engines/mohawk/riven_saveload.cpp
engines/mohawk/riven_saveload.h
engines/mohawk/riven_vars.cpp
engines/mohawk/video.cpp
engines/mohawk/video.h
engines/neverhood/smackerplayer.cpp
engines/parallaction/callables_ns.cpp
engines/parallaction/debug.cpp
engines/parallaction/dialogue.cpp
engines/parallaction/disk_br.cpp
engines/parallaction/disk_ns.cpp
engines/parallaction/exec.cpp
engines/parallaction/exec_br.cpp
engines/parallaction/exec_ns.cpp
engines/parallaction/font.cpp
engines/parallaction/gfxbase.cpp
engines/parallaction/graphics.cpp
engines/parallaction/graphics.h
engines/parallaction/gui_ns.cpp
engines/parallaction/input.cpp
engines/parallaction/module.mk
engines/parallaction/objects.cpp
engines/parallaction/objects.h
engines/parallaction/parallaction.cpp
engines/parallaction/parallaction.h
engines/parallaction/parallaction_br.cpp
engines/parallaction/parallaction_ns.cpp
engines/parallaction/parser_br.cpp
engines/parallaction/parser_ns.cpp
engines/parallaction/saveload.cpp
engines/parallaction/sound.h
engines/parallaction/sound_br.cpp
engines/parallaction/sound_ns.cpp
engines/parallaction/staticres.cpp
engines/parallaction/walk.cpp
engines/parallaction/walk.h
engines/queen/display.cpp
engines/queen/queen.cpp
engines/queen/queen.h
engines/saga/actor_path.cpp
engines/saga/detection.cpp
engines/saga/introproc_ihnm.cpp
engines/saga/introproc_ite.cpp
engines/saga/introproc_saga2.cpp
engines/saga/script.cpp
engines/saga/shorten.cpp
engines/saga/sndres.cpp
engines/saga/sndres.h
engines/savestate.h
engines/sci/console.cpp
engines/sci/console.h
engines/sci/detection.cpp
engines/sci/detection_tables.h
engines/sci/engine/features.cpp
engines/sci/engine/features.h
engines/sci/engine/gc.cpp
engines/sci/engine/gc.h
engines/sci/engine/kernel.cpp
engines/sci/engine/kernel.h
engines/sci/engine/kernel_tables.h
engines/sci/engine/kevent.cpp
engines/sci/engine/kfile.cpp
engines/sci/engine/kgraphics.cpp
engines/sci/engine/klists.cpp
engines/sci/engine/kmath.cpp
engines/sci/engine/kmenu.cpp
engines/sci/engine/kmisc.cpp
engines/sci/engine/kparse.cpp
engines/sci/engine/kpathing.cpp
engines/sci/engine/kscripts.cpp
engines/sci/engine/ksound.cpp
engines/sci/engine/kstring.cpp
engines/sci/engine/kvideo.cpp
engines/sci/engine/message.cpp
engines/sci/engine/object.cpp
engines/sci/engine/object.h
engines/sci/engine/savegame.cpp
engines/sci/engine/script.cpp
engines/sci/engine/script.h
engines/sci/engine/script_patches.cpp
engines/sci/engine/scriptdebug.cpp
engines/sci/engine/seg_manager.cpp
engines/sci/engine/seg_manager.h
engines/sci/engine/segment.cpp
engines/sci/engine/segment.h
engines/sci/engine/selector.cpp
engines/sci/engine/selector.h
engines/sci/engine/state.cpp
engines/sci/engine/state.h
engines/sci/engine/vm.cpp
engines/sci/engine/vm.h
engines/sci/engine/vm_types.cpp
engines/sci/engine/vm_types.h
engines/sci/engine/workarounds.cpp
engines/sci/event.cpp
engines/sci/graphics/animate.cpp
engines/sci/graphics/controls16.cpp
engines/sci/graphics/controls32.cpp
engines/sci/graphics/cursor.cpp
engines/sci/graphics/font.cpp
engines/sci/graphics/frameout.cpp
engines/sci/graphics/frameout.h
engines/sci/graphics/maciconbar.cpp
engines/sci/graphics/maciconbar.h
engines/sci/graphics/menu.cpp
engines/sci/graphics/paint16.cpp
engines/sci/graphics/palette.cpp
engines/sci/graphics/palette.h
engines/sci/graphics/ports.cpp
engines/sci/graphics/screen.cpp
engines/sci/graphics/screen.h
engines/sci/graphics/text32.cpp
engines/sci/graphics/text32.h
engines/sci/graphics/view.cpp
engines/sci/module.mk
engines/sci/resource.cpp
engines/sci/resource.h
engines/sci/sci.cpp
engines/sci/sci.h
engines/sci/sound/audio.cpp
engines/sci/sound/drivers/adlib.cpp
engines/sci/sound/drivers/fmtowns.cpp
engines/sci/sound/drivers/midi.cpp
engines/sci/sound/midiparser_sci.cpp
engines/sci/sound/midiparser_sci.h
engines/sci/sound/music.cpp
engines/sci/sound/soundcmd.cpp
engines/sci/video/robot_decoder.cpp
engines/sci/video/robot_decoder.h
engines/sci/video/seq_decoder.cpp
engines/sci/video/seq_decoder.h
engines/scumm/actor.cpp
engines/scumm/actor.h
engines/scumm/charset.cpp
engines/scumm/charset.h
engines/scumm/costume.cpp
engines/scumm/cursor.cpp
engines/scumm/debugger.cpp
engines/scumm/detection.cpp
engines/scumm/detection.h
engines/scumm/detection_tables.h
engines/scumm/dialogs.cpp
engines/scumm/gfx.cpp
engines/scumm/gfx_towns.cpp
engines/scumm/he/animation_he.cpp
engines/scumm/he/intern_he.h
engines/scumm/he/logic/football.cpp
engines/scumm/he/logic/soccer.cpp
engines/scumm/he/logic_he.cpp
engines/scumm/he/logic_he.h
engines/scumm/he/resource_he.cpp
engines/scumm/he/script_v100he.cpp
engines/scumm/he/script_v60he.cpp
engines/scumm/he/script_v90he.cpp
engines/scumm/he/sound_he.cpp
engines/scumm/he/wiz_he.cpp
engines/scumm/imuse/imuse.cpp
engines/scumm/imuse/imuse_internal.h
engines/scumm/imuse/imuse_part.cpp
engines/scumm/imuse/imuse_player.cpp
engines/scumm/imuse/instrument.cpp
engines/scumm/imuse/instrument.h
engines/scumm/imuse/sysex_scumm.cpp
engines/scumm/imuse_digi/dimuse_sndmgr.h
engines/scumm/insane/insane_scenes.cpp
engines/scumm/midiparser_ro.cpp
engines/scumm/module.mk
engines/scumm/object.cpp
engines/scumm/player_apple2.cpp
engines/scumm/player_apple2.h
engines/scumm/player_towns.cpp
engines/scumm/player_v2cms.cpp
engines/scumm/proc3ARM.s
engines/scumm/saveload.cpp
engines/scumm/saveload.h
engines/scumm/script.cpp
engines/scumm/script_v0.cpp
engines/scumm/script_v2.cpp
engines/scumm/script_v5.cpp
engines/scumm/scumm-md5.h
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/scumm_v7.h
engines/scumm/sound.cpp
engines/scumm/verbs.cpp
engines/sky/control.cpp
engines/sky/control.h
engines/sky/detection.cpp
engines/sword1/animation.cpp
engines/sword1/animation.h
engines/sword1/control.cpp
engines/sword1/detection.cpp
engines/sword1/logic.cpp
engines/sword1/objectman.cpp
engines/sword1/objectman.h
engines/sword1/sound.cpp
engines/sword1/sword1.cpp
engines/sword1/sword1.h
engines/sword1/text.cpp
engines/sword2/animation.cpp
engines/sword2/animation.h
engines/sword2/function.cpp
engines/sword2/sprite.cpp
engines/sword2/sword2.cpp
engines/sword25/fmv/movieplayer.cpp
engines/sword25/fmv/movieplayer.h
engines/sword25/gfx/graphicengine.cpp
engines/sword25/gfx/image/art.cpp
engines/sword25/gfx/image/art.h
engines/sword25/gfx/image/imgloader.cpp
engines/sword25/gfx/image/renderedimage.cpp
engines/sword25/kernel/inputpersistenceblock.cpp
engines/sword25/module.mk
engines/sword25/script/luabindhelper.cpp
engines/sword25/script/luabindhelper.h
engines/sword25/sfx/soundengine.cpp
engines/sword25/util/lua/luaconf.h
engines/sword25/util/pluto/pluto.cpp
engines/teenagent/callbacks.cpp
engines/teenagent/detection.cpp
engines/teenagent/resources.cpp
engines/teenagent/scene.cpp
engines/teenagent/teenagent.cpp
engines/testbed/graphics.cpp
engines/testbed/testsuite.cpp
engines/tinsel/actors.cpp
engines/tinsel/background.h
engines/tinsel/bg.cpp
engines/tinsel/bmv.cpp
engines/tinsel/bmv.h
engines/tinsel/detection.cpp
engines/tinsel/detection_tables.h
engines/tinsel/dialogs.cpp
engines/tinsel/dialogs.h
engines/tinsel/drives.cpp
engines/tinsel/drives.h
engines/tinsel/effect.cpp
engines/tinsel/events.cpp
engines/tinsel/events.h
engines/tinsel/faders.cpp
engines/tinsel/handle.cpp
engines/tinsel/module.mk
engines/tinsel/move.cpp
engines/tinsel/music.cpp
engines/tinsel/music.h
engines/tinsel/pcode.cpp
engines/tinsel/pcode.h
engines/tinsel/pdisplay.cpp
engines/tinsel/play.cpp
engines/tinsel/play.h
engines/tinsel/polygons.cpp
engines/tinsel/rince.cpp
engines/tinsel/rince.h
engines/tinsel/saveload.cpp
engines/tinsel/savescn.cpp
engines/tinsel/scene.cpp
engines/tinsel/scene.h
engines/tinsel/sched.cpp
engines/tinsel/sched.h
engines/tinsel/sound.cpp
engines/tinsel/text.h
engines/tinsel/tinlib.cpp
engines/tinsel/tinsel.cpp
engines/tinsel/tinsel.h
engines/tinsel/token.cpp
engines/toltecs/animation.cpp
engines/toltecs/animation.h
engines/toltecs/detection.cpp
engines/toltecs/menu.cpp
engines/toltecs/menu.h
engines/toltecs/microtiles.cpp
engines/toltecs/movie.cpp
engines/toltecs/movie.h
engines/toltecs/music.cpp
engines/toltecs/music.h
engines/toltecs/palette.cpp
engines/toltecs/palette.h
engines/toltecs/render.cpp
engines/toltecs/render.h
engines/toltecs/resource.cpp
engines/toltecs/saveload.cpp
engines/toltecs/screen.cpp
engines/toltecs/screen.h
engines/toltecs/script.cpp
engines/toltecs/script.h
engines/toltecs/segmap.cpp
engines/toltecs/segmap.h
engines/toltecs/sound.cpp
engines/toltecs/sound.h
engines/toltecs/sprite.cpp
engines/toltecs/toltecs.cpp
engines/toltecs/toltecs.h
engines/toon/anim.cpp
engines/toon/anim.h
engines/toon/audio.cpp
engines/toon/character.cpp
engines/toon/character.h
engines/toon/detection.cpp
engines/toon/drew.cpp
engines/toon/drew.h
engines/toon/flux.cpp
engines/toon/flux.h
engines/toon/font.cpp
engines/toon/font.h
engines/toon/hotspot.cpp
engines/toon/hotspot.h
engines/toon/movie.cpp
engines/toon/movie.h
engines/toon/path.cpp
engines/toon/path.h
engines/toon/picture.cpp
engines/toon/picture.h
engines/toon/script_func.cpp
engines/toon/toon.cpp
engines/toon/toon.h
engines/touche/detection.cpp
engines/touche/staticres.cpp
engines/tsage/blue_force/blueforce_dialogs.cpp
engines/tsage/blue_force/blueforce_scenes3.cpp
engines/tsage/blue_force/blueforce_scenes7.cpp
engines/tsage/blue_force/blueforce_scenes9.cpp
engines/tsage/blue_force/blueforce_speakers.cpp
engines/tsage/blue_force/blueforce_speakers.h
engines/tsage/converse.cpp
engines/tsage/detection.cpp
engines/tsage/detection_tables.h
engines/tsage/dialogs.cpp
engines/tsage/globals.cpp
engines/tsage/globals.h
engines/tsage/graphics.cpp
engines/tsage/graphics.h
engines/tsage/ringworld/ringworld_dialogs.cpp
engines/tsage/ringworld/ringworld_logic.cpp
engines/tsage/ringworld/ringworld_scenes5.cpp
engines/tsage/ringworld2/ringworld2_dialogs.cpp
engines/tsage/ringworld2/ringworld2_logic.cpp
engines/tsage/ringworld2/ringworld2_scenes1.cpp
engines/tsage/ringworld2/ringworld2_scenes3.cpp
engines/tsage/ringworld2/ringworld2_speakers.h
engines/tsage/scenes.cpp
engines/tsage/scenes.h
engines/tsage/sound.cpp
engines/tsage/sound.h
engines/tsage/tsage.cpp
engines/tsage/user_interface.cpp
engines/tucker/resource.cpp
engines/tucker/sequences.cpp
graphics/VectorRenderer.cpp
graphics/VectorRenderer.h
graphics/VectorRendererSpec.cpp
graphics/conversion.cpp
graphics/conversion.h
graphics/cursorman.cpp
graphics/cursorman.h
graphics/fontman.cpp
graphics/fontman.h
graphics/fonts/bdf.h
graphics/fonts/consolefont.cpp
graphics/fonts/newfont.cpp
graphics/fonts/newfont_big.cpp
graphics/fonts/ttf.cpp
graphics/fonts/ttf.h
graphics/iff.cpp
graphics/module.mk
graphics/pixelformat.h
graphics/primitives.cpp
graphics/primitives.h
graphics/scaler.cpp
graphics/scaler/aspect.cpp
graphics/sjis.h
graphics/surface.cpp
graphics/surface.h
graphics/wincursor.cpp
graphics/wincursor.h
graphics/yuv_to_rgb.cpp
graphics/yuv_to_rgb.h
gui/ThemeEngine.cpp
gui/ThemeEngine.h
gui/ThemeParser.cpp
gui/ThemeParser.h
gui/Tooltip.cpp
gui/credits.h
gui/debugger.cpp
gui/dialog.cpp
gui/dialog.h
gui/gui-manager.cpp
gui/launcher.cpp
gui/module.mk
gui/options.cpp
gui/options.h
gui/saveload.cpp
gui/saveload.h
gui/themes/default.inc
gui/themes/scummclassic.zip
gui/themes/scummclassic/THEMERC
gui/themes/scummclassic/classic_gfx.stx
gui/themes/scummclassic/classic_layout.stx
gui/themes/scummclassic/classic_layout_lowres.stx
gui/themes/scummmodern.zip
gui/themes/scummmodern/THEMERC
gui/themes/scummmodern/scummmodern_gfx.stx
gui/themes/scummmodern/scummmodern_layout.stx
gui/themes/scummmodern/scummmodern_layout_lowres.stx
gui/themes/translations.dat
gui/widget.cpp
gui/widget.h
gui/widgets/editable.h
gui/widgets/list.h
po/POTFILES
po/ca_ES.po
po/cs_CZ.po
po/da_DA.po
po/de_DE.po
po/es_ES.po
po/fr_FR.po
po/hu_HU.po
po/it_IT.po
po/nb_NO.po
po/nn_NO.po
po/pl_PL.po
po/pt_BR.po
po/ru_RU.po
po/scummvm.pot
po/se_SE.po
po/uk_UA.po
ports.mk
video/avi_decoder.cpp
video/avi_decoder.h
video/bink_decoder.cpp
video/bink_decoder.h
video/codecs/mjpeg.cpp
video/codecs/mjpeg.h
video/codecs/qtrle.cpp
video/codecs/qtrle.h
video/codecs/rpza.cpp
video/codecs/rpza.h
video/coktel_decoder.cpp
video/coktel_decoder.h
video/dxa_decoder.cpp
video/dxa_decoder.h
video/flic_decoder.cpp
video/flic_decoder.h
video/module.mk
video/psx_decoder.cpp
video/psx_decoder.h
video/qt_decoder.cpp
video/qt_decoder.h
video/smk_decoder.cpp
video/smk_decoder.h
video/video_decoder.cpp
video/video_decoder.h
diff --cc engines/configure.engines
index 0000000,a8eb89a..c7f142b
mode 000000,100644..100644
--- a/engines/configure.engines
+++ b/engines/configure.engines
@@@ -1,0 -1,51 +1,52 @@@
+ # This file is included from the main "configure" script
+ # add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
+ add_engine scumm "SCUMM" yes "scumm_7_8 he" "v0-v6 games"
+ add_engine scumm_7_8 "v7 & v8 games" yes
+ add_engine he "HE71+ games" yes
+ add_engine agi "AGI" yes
+ add_engine agos "AGOS" yes "agos2" "AGOS 1 games"
+ add_engine agos2 "AGOS 2 games" yes
+ add_engine cge "CGE" yes
+ add_engine cine "Cinematique evo 1" yes
+ add_engine composer "Magic Composer" yes
+ add_engine cruise "Cinematique evo 2" yes
+ add_engine draci "Dragon History" yes
+ add_engine drascula "Drascula: The Vampire Strikes Back" yes
+ add_engine dreamweb "Dreamweb" yes
+ add_engine gob "Gobli*ns" yes
+ add_engine groovie "Groovie" yes "groovie2" "7th Guest"
+ add_engine groovie2 "Groovie 2 games" no
+ add_engine hugo "Hugo Trilogy" yes
+ add_engine kyra "Kyra" yes "lol eob" "Legend of Kyrandia 1-3"
+ add_engine lol "Lands of Lore" yes
+ add_engine eob "Eye of the Beholder" no
+ add_engine lastexpress "The Last Express" no "" "" "16bit"
+ add_engine lure "Lure of the Temptress" yes
+ add_engine made "MADE" yes
+ add_engine mohawk "Mohawk" yes "cstime myst riven" "Living Books"
+ add_engine cstime "Where in Time is Carmen Sandiego?" no
+ add_engine riven "Riven: The Sequel to Myst" no "" "" "16bit"
+ add_engine myst "Myst" no "" "" "16bit"
++add_engine neverhood "Neverhood" no
+ add_engine parallaction "Parallaction" yes
+ add_engine pegasus "The Journeyman Project: Pegasus Prime" no "" "" "16bit"
+ add_engine queen "Flight of the Amazon Queen" yes
+ add_engine saga "SAGA" yes "ihnm saga2" "ITE"
+ add_engine ihnm "IHNM" yes
+ add_engine saga2 "SAGA 2 games" no
+ add_engine sci "SCI" yes "sci32" "SCI 0-1.1 games"
+ add_engine sci32 "SCI32 games" no
+ add_engine sky "Beneath a Steel Sky" yes
+ add_engine sword1 "Broken Sword" yes
+ add_engine sword2 "Broken Sword II" yes
+ add_engine sword25 "Broken Sword 2.5" no "" "" "png zlib 16bit"
+ add_engine teenagent "Teen Agent" yes
+ add_engine testbed "TestBed: the Testing framework" no
+ add_engine tinsel "Tinsel" yes
+ add_engine toltecs "3 Skulls of the Toltecs" no
+ add_engine toon "Toonstruck" yes
+ add_engine touche "Touche: The Adventures of the Fifth Musketeer" yes
+ add_engine tony "Tony Tough and the Night of Roasted Moths" no "" "" "16bit"
+ add_engine tsage "TsAGE" yes
+ add_engine tucker "Bud Tucker in Double Trouble" yes
+ add_engine wintermute "Wintermute" no "" "" "png zlib vorbis 16bit"
diff --cc engines/neverhood/smackerplayer.cpp
index 1b40c8f,0000000..799f04f
mode 100644,000000..100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@@ -1,230 -1,0 +1,230 @@@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/palette.h"
+#include "neverhood/smackerplayer.h"
+#include "neverhood/palette.h"
+#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// SmackerSurface
+
+SmackerSurface::SmackerSurface(NeverhoodEngine *vm)
+ : BaseSurface(vm, 0, 0, 0), _smackerFrame(NULL) {
+}
+
+void SmackerSurface::draw() {
+ if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0)
+ _vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect, false);
+}
+
+void SmackerSurface::setSmackerFrame(const Graphics::Surface *smackerFrame) {
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = smackerFrame->w;
+ _drawRect.height = smackerFrame->h;
+ // TODO: Check if _sysRect is needed at all in the reimplementation...
+ _sysRect.x = 0;
+ _sysRect.y = 0;
+ _sysRect.width = (smackerFrame->w + 3) & 0xFFFC; // align by 4 bytes
+ _sysRect.height = smackerFrame->h;
+ _smackerFrame = smackerFrame;
+}
+
+// SmackerDoubleSurface
+
+SmackerDoubleSurface::SmackerDoubleSurface(NeverhoodEngine *vm)
+ : SmackerSurface(vm) {
+}
+
+void SmackerDoubleSurface::draw() {
+ if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0)
+ _vm->_screen->drawDoubleSurface2(_smackerFrame, _drawRect);
+}
+
+// SmackerPlayer
+
+SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag)
+ : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _videoDone(false),
+ _palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true),
+ _drawX(-1), _drawY(-1) {
+
+ SetUpdateHandler(&SmackerPlayer::update);
+ open(fileHash, flag);
+}
+
+SmackerPlayer::~SmackerPlayer() {
+ close();
- }
++}
+
+void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
+ debug("SmackerPlayer::open(%08X)", fileHash);
+
+ _fileHash = fileHash;
+ _keepLastFrame = keepLastFrame;
+
+ close();
+
+ if (_doubleSurface) {
+ _smackerSurface = new SmackerDoubleSurface(_vm);
+ } else {
+ _smackerSurface = new SmackerSurface(_vm);
+ }
+
+ _smackerFirst = true;
+
+ _stream = _vm->_res->createStream(fileHash);
+
+ // TODO: _keepLastFrame stuff
+
- _smackerDecoder = new Video::SmackerDecoder(_vm->_mixer);
++ _smackerDecoder = new Video::SmackerDecoder();
+ _smackerDecoder->loadStream(_stream);
+
+ _palette = new Palette(_vm);
+ _palette->usePalette();
+
+}
+
+void SmackerPlayer::close() {
+ delete _smackerDecoder;
+ delete _palette;
+ // NOTE: The SmackerDecoder deletes the _stream
+ delete _smackerSurface;
+ _smackerDecoder = NULL;
+ _palette = NULL;
+ _stream = NULL;
+ _smackerSurface = NULL;
+}
+
+void SmackerPlayer::gotoFrame(uint frameNumber) {
+ // TODO?
+}
+
+uint32 SmackerPlayer::getFrameCount() {
+ return _smackerDecoder ? _smackerDecoder->getFrameCount() : 0;
+}
+
+uint32 SmackerPlayer::getFrameNumber() {
+ return _smackerDecoder ? _smackerDecoder->getCurFrame() : 0;
+}
+
+uint SmackerPlayer::getStatus() {
+ return 0;
+}
+
+void SmackerPlayer::setDrawPos(int16 x, int16 y) {
+ _drawX = x;
+ _drawY = y;
+ if (_smackerSurface) {
+ _smackerSurface->getDrawRect().x = _drawX;
+ _smackerSurface->getDrawRect().y = _drawY;
+ }
+}
+
+void SmackerPlayer::rewind() {
+
+ // TODO Quite dirty, try to implement this in the decoder
+
+ delete _smackerDecoder;
+ _smackerDecoder = NULL;
+ _stream = NULL;
+
+ _smackerFirst = true;
+
+ _stream = _vm->_res->createStream(_fileHash);
+
- _smackerDecoder = new Video::SmackerDecoder(_vm->_mixer);
++ _smackerDecoder = new Video::SmackerDecoder();
+ _smackerDecoder->loadStream(_stream);
+
+}
+
+void SmackerPlayer::update() {
+ debug(8, "SmackerPlayer::update()");
+
+ if (!_smackerDecoder)
+ return;
+
+ if (_dirtyFlag) {
+ // TODO _vm->_screen->resetDirtyRects();
+ _dirtyFlag = false;
+ }
+
+ if (!_smackerDecoder->endOfVideo()) {
+ updateFrame();
+ } else if (!_keepLastFrame) {
+ // Inform the scene about the end of the video playback
+ if (_scene)
+ sendMessage(_scene, 0x3002, 0);
+ _videoDone = true;
+ } else {
+ rewind();
+ updateFrame();
+ _videoDone = false;
+ }
+
+}
+
+void SmackerPlayer::updateFrame() {
+ const Graphics::Surface *smackerFrame = _smackerDecoder->decodeNextFrame();
+
+ if (_smackerFirst) {
+ _smackerSurface->setSmackerFrame(smackerFrame);
+ if (_drawX < 0 || _drawY < 0) {
+ if (_doubleSurface) {
+ _drawX = 320 - _smackerDecoder->getWidth();
+ _drawY = 240 - _smackerDecoder->getHeight();
+ } else {
+ _drawX = (640 - _smackerDecoder->getWidth()) / 2;
+ _drawY = (480 - _smackerDecoder->getHeight()) / 2;
+ }
+ }
+ _smackerSurface->getDrawRect().x = _drawX;
+ _smackerSurface->getDrawRect().y = _drawY;
+ _smackerFirst = false;
+ }
+
+ if (_doubleSurface) {
+ // TODO
+ }
+
+ // TODO _vm->_screen->_skipUpdate = true;
+ _dirtyFlag = true;
+
+ if (_smackerDecoder->hasDirtyPalette())
+ updatePalette();
+
+}
+
+void SmackerPlayer::updatePalette() {
+ byte tempPalette[1024];
+ const byte *smackerPalette = _smackerDecoder->getPalette();
+ for (int i = 0; i < 256; i++) {
+ tempPalette[i * 4 + 0] = smackerPalette[i * 3 + 0];
+ tempPalette[i * 4 + 1] = smackerPalette[i * 3 + 1];
+ tempPalette[i * 4 + 2] = smackerPalette[i * 3 + 2];
+ }
+ _palette->copyPalette(tempPalette, 0, 256, 0);
+}
+
+} // End of namespace Neverhood
diff --cc engines/plugins_table.h
index 0000000,010de0d..152c45f
mode 000000,100644..100644
--- a/engines/plugins_table.h
+++ b/engines/plugins_table.h
@@@ -1,0 -1,112 +1,115 @@@
+ // This file is being included by "base/plugins.cpp"
+ #if PLUGIN_ENABLED_STATIC(SCUMM)
+ LINK_PLUGIN(SCUMM)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(AGI)
+ LINK_PLUGIN(AGI)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(AGOS)
+ LINK_PLUGIN(AGOS)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(CGE)
+ LINK_PLUGIN(CGE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(CINE)
+ LINK_PLUGIN(CINE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(COMPOSER)
+ LINK_PLUGIN(COMPOSER)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(CRUISE)
+ LINK_PLUGIN(CRUISE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(DRACI)
+ LINK_PLUGIN(DRACI)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(DRASCULA)
+ LINK_PLUGIN(DRASCULA)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(DREAMWEB)
+ LINK_PLUGIN(DREAMWEB)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(GOB)
+ LINK_PLUGIN(GOB)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(GROOVIE)
+ LINK_PLUGIN(GROOVIE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(HUGO)
+ LINK_PLUGIN(HUGO)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(KYRA)
+ LINK_PLUGIN(KYRA)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(LASTEXPRESS)
+ LINK_PLUGIN(LASTEXPRESS)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(LURE)
+ LINK_PLUGIN(LURE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(MADE)
+ LINK_PLUGIN(MADE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(MOHAWK)
+ LINK_PLUGIN(MOHAWK)
+ #endif
++#if PLUGIN_ENABLED_STATIC(NEVERHOOD)
++LINK_PLUGIN(NEVERHOOD)
++#endif
+ #if PLUGIN_ENABLED_STATIC(PARALLACTION)
+ LINK_PLUGIN(PARALLACTION)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(PEGASUS)
+ LINK_PLUGIN(PEGASUS)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(QUEEN)
+ LINK_PLUGIN(QUEEN)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(SAGA)
+ LINK_PLUGIN(SAGA)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(SCI)
+ LINK_PLUGIN(SCI)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(SKY)
+ LINK_PLUGIN(SKY)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(SWORD1)
+ LINK_PLUGIN(SWORD1)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(SWORD2)
+ LINK_PLUGIN(SWORD2)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(SWORD25)
+ LINK_PLUGIN(SWORD25)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TEENAGENT)
+ LINK_PLUGIN(TEENAGENT)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TESTBED)
+ LINK_PLUGIN(TESTBED)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TINSEL)
+ LINK_PLUGIN(TINSEL)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TOLTECS)
+ LINK_PLUGIN(TOLTECS)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TONY)
+ LINK_PLUGIN(TONY)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TOON)
+ LINK_PLUGIN(TOON)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TSAGE)
+ LINK_PLUGIN(TSAGE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TOUCHE)
+ LINK_PLUGIN(TOUCHE)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(TUCKER)
+ LINK_PLUGIN(TUCKER)
+ #endif
+ #if PLUGIN_ENABLED_STATIC(WINTERMUTE)
+ LINK_PLUGIN(WINTERMUTE)
+ #endif
Commit: 2e7d100a6f2834b68e4d5d18cf72f63871ddfdf9
https://github.com/scummvm/scummvm/commit/2e7d100a6f2834b68e4d5d18cf72f63871ddfdf9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:06-07:00
Commit Message:
NEVERHOOD: Replace most of the literal digits in get/setSubVar with constants
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/gamevars.h
engines/neverhood/klayman.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 54c33dd..65bbc0d 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -346,13 +346,13 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
// DEBUG>>>: Give all disks
for (int i = 0; i < 20; i++) {
- setSubVar(0x02720344, i, 1);
+ setSubVar(VA_IS_TAPE_INSERTED, i, 1);
}
// DEBUG<<<
for (int i = 0; i < 20; i++) {
_diskAvailable[i] = 0;
- if (getSubVar(0x02720344, i))
+ if (getSubVar(VA_IS_TAPE_INSERTED, i))
availableDisksCount++;
}
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index ac20138..1b9c9f3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -88,17 +88,17 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
void GameModule::initScene1307Vars() {
// Exit if it's already initialized
- if (getSubVar(0x40050052, 0x25400B10))
+ if (getSubVar(VA_IS_PUZZLE_INIT, 0x25400B10))
return;
for (uint i = 0; i < 3; i++) {
bool more;
do {
more = false;
- setSubVar(0x0C10A000, i, _vm->_rnd->getRandomNumber(16 - 1));
+ setSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
if (i > 0) {
for (uint j = 0; j < i && !more; j++) {
- more = getSubVar(0x0C10A000, j) == getSubVar(0x0C10A000, i);
+ more = getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, j) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i);
}
}
} while (more);
@@ -108,18 +108,18 @@ void GameModule::initScene1307Vars() {
bool more;
do {
more = false;
- setSubVar(0xA010B810, i, _vm->_rnd->getRandomNumber(16 - 1));
+ setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
if (i > 0) {
for (uint j = 0; j < i && !more; j++) {
- more = getSubVar(0xA010B810, j) == getSubVar(0xA010B810, i);
+ more = getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i);
}
}
- if (getSubVar(0xA010B810, i) == getSubVar(0x0C10A000, i))
+ if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i))
more = true;
} while (more);
}
- setSubVar(0x40050052, 0x25400B10, 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x25400B10, 1);
}
@@ -136,11 +136,11 @@ void GameModule::initScene1405Vars() {
uint32 rndIndex;
// Exit if it's already initialized
- if (getSubVar(0x40050052, 0xC8606803))
+ if (getSubVar(VA_IS_PUZZLE_INIT, 0xC8606803))
return;
for (uint32 i = 0; i < 3; i++)
- setSubVar(0x61084036, i, 1);
+ setSubVar(VA_CURR_DICE_NUMBERS, i, 1);
for (byte i = 0; i < 3; i++)
array44[i] = i;
@@ -153,7 +153,7 @@ void GameModule::initScene1405Vars() {
rndIndex = _vm->_rnd->getRandomNumber(3 - 1);
- setSubVar(0x13100631, array44[rndIndex], 5);
+ setSubVar(VA_DICE_MEMORY_SYMBOLS, array44[rndIndex], 5);
for (byte i = 5; i < 9; i++)
array3C[i] = array3C[i + 1];
@@ -166,7 +166,7 @@ void GameModule::initScene1405Vars() {
for (int i = 0; i < 2; i++) {
uint32 rndIndex1 = _vm->_rnd->getRandomNumber(index2 - 1); // si
uint32 rndIndex2 = _vm->_rnd->getRandomNumber(index1 - 1); // di
- setSubVar(0x13100631, array44[rndIndex2], array3C[rndIndex1]);
+ setSubVar(VA_DICE_MEMORY_SYMBOLS, array44[rndIndex2], array3C[rndIndex1]);
index2--;
while (rndIndex1 < index2) {
array3C[rndIndex1] = array3C[rndIndex1 + 1];
@@ -182,10 +182,10 @@ void GameModule::initScene1405Vars() {
for (uint32 i = 0; i < 3; i++) {
uint32 rndValue = _vm->_rnd->getRandomNumber(4 - 1) * 2 + 2;
uint32 index4 = 0;
- setSubVar(0x7500993A, i, rndValue);
+ setSubVar(VA_GOOD_DICE_NUMBERS, i, rndValue);
while (index4 < rndValue) {
uint32 rndIndex3 = _vm->_rnd->getRandomNumber(index3 - 1);
- setSubVar(0x0C65F80B, array30[rndIndex3], getSubVar(0x13100631, i));
+ setSubVar(VA_TILE_SYMBOLS, array30[rndIndex3], getSubVar(VA_DICE_MEMORY_SYMBOLS, i));
index3--;
while (rndIndex3 < index3) {
array30[rndIndex3] = array30[rndIndex3 + 1];
@@ -199,14 +199,14 @@ void GameModule::initScene1405Vars() {
while (index3 != 0) {
uint32 rndIndex4 = _vm->_rnd->getRandomNumber(index3 - 1);
index1 = array3C[index5];
- setSubVar(0x0C65F80B, array30[rndIndex4], index1);
+ setSubVar(VA_TILE_SYMBOLS, array30[rndIndex4], index1);
index3--;
while (rndIndex4 < index3) {
array30[rndIndex4] = array30[rndIndex4 + 1];
rndIndex4++;
}
uint32 rndIndex5 = _vm->_rnd->getRandomNumber(index3 - 1);
- setSubVar(0x0C65F80B, array30[rndIndex5], index1);
+ setSubVar(VA_TILE_SYMBOLS, array30[rndIndex5], index1);
index3--;
while (rndIndex5 < index3) {
array30[rndIndex5] = array30[rndIndex5 + 1];
@@ -218,57 +218,57 @@ void GameModule::initScene1405Vars() {
}
- setSubVar(0x40050052, 0xC8606803, 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0xC8606803, 1);
}
void GameModule::initScene2401Vars() {
- if (getSubVar(0x40050052, 0x40520234))
+ if (getSubVar(VA_IS_PUZZLE_INIT, 0x40520234))
return;
- setSubVar(0x90405038, 0, 3);
- setSubVar(0x90405038, 1, 1);
- setSubVar(0x90405038, 2, 2);
- setSubVar(0x90405038, 3, 0);
- setSubVar(0x90405038, 4, 4);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 0, 3);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 1, 1);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 2, 2);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 3, 0);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 4, 4);
- setSubVar(0x40050052, 0x40520234, 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x40520234, 1);
}
void GameModule::initScene2808Vars1() {
// Exit if it's already initialized
- if (getSubVar(0x40050052, 0x20479010))
+ if (getSubVar(VA_IS_PUZZLE_INIT, 0x20479010))
return;
for (uint i = 0; i < 3; i++)
- setSubVar(0x0C601058, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
- setSubVar(0x40050052, 0x20479010, 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x20479010, 1);
}
void GameModule::initScene2808Vars2() {
// Exit if it's already initialized
- if (getSubVar(0x40050052, 0x66059818))
+ if (getSubVar(VA_IS_PUZZLE_INIT, 0x66059818))
return;
for (uint i = 0; i < 3; i++)
- setSubVar(0x40005834, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
- setSubVar(0x40050052, 0x66059818, 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x66059818, 1);
}
void GameModule::initScene3009Vars() {
- if (!getSubVar(0x40050052, 0x8C9819C2)) {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x8C9819C2)) {
for (int i = 0; i < 3; i++) {
- setSubVar(0x00504B86, i, _vm->_rnd->getRandomNumber(12 - 1));
- setSubVar(0x0A4C0A9A, i, _vm->_rnd->getRandomNumber(12 - 1));
+ setSubVar(VA_GOOD_CANNON_SYMBOLS_1, i, _vm->_rnd->getRandomNumber(12 - 1));
+ setSubVar(VA_GOOD_CANNON_SYMBOLS_2, i, _vm->_rnd->getRandomNumber(12 - 1));
}
- setSubVar(0x40050052, 0x8C9819C2, 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x8C9819C2, 1);
}
}
@@ -313,7 +313,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 5;
+ _vm->gameState().sceneNum = 1;
createModule(2200, -1);
#endif
#if 0
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index a99459f..52740dc 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -30,97 +30,119 @@ namespace Neverhood {
enum {
// Misc
- V_MODULE_NAME = 0x91080831, // Currently active module name hash
- V_DEBUG = 0xA4014072, // Original debug-flag, can probably be removed
- V_SMACKER_CAN_ABORT = 0x06C02850, // Not set anywhere (yet), seems like a debug flag
- V_KEY3_LOCATION = 0x13382860, // Location of the third key
- V_TEXT_FLAG1 = 0x8440001F,
- V_TEXT_INDEX = 0x01830201,
- V_TEXT_COUNTING_INDEX1 = 0x29408F00,
- V_TEXT_COUNTING_INDEX2 = 0x8A140C21,
- V_TALK_COUNTING_INDEX = 0xA0808898,
- V_FRUIT_COUNTING_INDEX = 0x40040831,
- V_NOISY_SYMBOL_INDEX = 0x2414C2F2,
- V_COLUMN_BACK_NAME = 0x4CE79018,
- V_COLUMN_TEXT_NAME = 0xC8C28808,
- V_CLICKED_COLUMN_INDEX = 0x48A68852,
- V_CLICKED_COLUMN_ROW = 0x49C40058,
- V_MUSIC_NAME = 0x89A82A15,
+ V_MODULE_NAME = 0x91080831, // Currently active module name hash
+ V_DEBUG = 0xA4014072, // Original debug-flag, can probably be removed
+ V_SMACKER_CAN_ABORT = 0x06C02850, // Not set anywhere (yet), seems like a debug flag
+ V_KEY3_LOCATION = 0x13382860, // Location of the third key
+ V_TEXT_FLAG1 = 0x8440001F,
+ V_TEXT_INDEX = 0x01830201,
+ V_TEXT_COUNTING_INDEX1 = 0x29408F00,
+ V_TEXT_COUNTING_INDEX2 = 0x8A140C21,
+ V_TALK_COUNTING_INDEX = 0xA0808898,
+ V_FRUIT_COUNTING_INDEX = 0x40040831,
+ V_NOISY_SYMBOL_INDEX = 0x2414C2F2,
+ V_COLUMN_BACK_NAME = 0x4CE79018,
+ V_COLUMN_TEXT_NAME = 0xC8C28808,
+ V_CLICKED_COLUMN_INDEX = 0x48A68852,
+ V_CLICKED_COLUMN_ROW = 0x49C40058,
+ V_MUSIC_NAME = 0x89A82A15,
// Klayman
- V_KLAYMAN_SMALL = 0x1860C990, // Is Klayman small?
- V_KLAYMAN_FRAMEINDEX = 0x18288913,
- V_KLAYMAN_IS_DELTA_X = 0xC0418A02,
- V_KLAYMAN_SAVED_X = 0x00D30138,
- V_CAR_DELTA_X = 0x21E60190,
+ V_KLAYMAN_SMALL = 0x1860C990, // Is Klayman small?
+ V_KLAYMAN_FRAMEINDEX = 0x18288913,
+ V_KLAYMAN_IS_DELTA_X = 0xC0418A02,
+ V_KLAYMAN_SAVED_X = 0x00D30138,
+ V_CAR_DELTA_X = 0x21E60190,
// Flags
- V_CRYSTAL_COLORS_INIT = 0xDE2EC914,
- V_TV_JOKE_TOLD = 0x92603A79,
- V_NOTES_DOOR_UNLOCKED = 0x0045D021,
- V_WATER_RUNNING = 0x4E0BE910,
- V_CREATURE_ANGRY = 0x0A310817, // After having played with the music box
- V_BEEN_SHRINKING_ROOM = 0x1C1B8A9A,
- V_BEEN_STATUE_ROOM = 0xCB45DE03,
- V_MOUSE_PUZZLE_SOLVED = 0x70A1189C,
- V_NOTES_PUZZLE_SOLVED = 0x86615030,
- V_TILE_PUZZLE_SOLVED = 0x404290D5,
- V_STAIRS_PUZZLE_SOLVED = 0xA9035F60,
- V_SPIKES_RETRACTED = 0x18890C91,
- V_LARGE_DOOR_NUMBER = 0x9A500914, // Number of the currently "large" door
- V_LIGHTS_ON = 0x4D080E54,
- V_SHRINK_LIGHTS_ON = 0x190A1D18, // Lights on in the room with the shrinking device
- V_STAIRS_DOWN = 0x09221A62,
- V_LADDER_DOWN = 0x0018CA22, // Is the ladder in the statue room down?
- V_LADDER_DOWN_ACTION = 0x00188211,
- V_WALL_BROKEN = 0x10938830,
- V_BOLT_DOOR_OPEN = 0x01BA1A52,
- V_BOLT_DOOR_UNLOCKED = 0x00040153,
- V_SEEN_SYMBOLS_NO_LIGHT = 0x81890D14,
- V_FELL_DOWN_HOLE = 0xE7498218,
- V_DOOR_PASSED = 0x2090590C, // Auto-closing door was passed
- V_ENTRANCE_OPEN = 0xD0A14D10, // Is the entrance to Module1300 open (after the robot got his teddy)
- V_WINDOW_OPEN = 0x03C698DA,
- V_DOOR_STATUS = 0x52371C95,
- V_DOOR_BUSTED = 0xD217189D,
- V_WORLDS_JOINED = 0x98109F12, // Are the worlds joined?
- V_KEYDOOR_UNLOCKED = 0x80455A41, // Is the keyboard-door unlocked?
- V_MOUSE_SUCKED_IN = 0x01023818, // Are mouse/cheese in Scene1308?
- V_BALLOON_POPPED = 0xAC00C0D0, // Has the balloon with the key been popped?
- V_TNT_DUMMY_BUILT = 0x000CF819, // Are all TNT parts on the dummy?
- V_TNT_DUMMY_FUSE_LIT = 0x20A0C516,
- V_RING5_PULLED = 0x4DE80AC0,
- V_CREATURE_EXPLODED = 0x2A02C07B,
+ V_CRYSTAL_COLORS_INIT = 0xDE2EC914,
+ V_TV_JOKE_TOLD = 0x92603A79,
+ V_NOTES_DOOR_UNLOCKED = 0x0045D021,
+ V_WATER_RUNNING = 0x4E0BE910,
+ V_CREATURE_ANGRY = 0x0A310817, // After having played with the music box
+ V_BEEN_SHRINKING_ROOM = 0x1C1B8A9A,
+ V_BEEN_STATUE_ROOM = 0xCB45DE03,
+ V_MOUSE_PUZZLE_SOLVED = 0x70A1189C,
+ V_NOTES_PUZZLE_SOLVED = 0x86615030,
+ V_TILE_PUZZLE_SOLVED = 0x404290D5,
+ V_STAIRS_PUZZLE_SOLVED = 0xA9035F60,
+ V_SPIKES_RETRACTED = 0x18890C91,
+ V_LARGE_DOOR_NUMBER = 0x9A500914, // Number of the currently "large" door
+ V_LIGHTS_ON = 0x4D080E54,
+ V_SHRINK_LIGHTS_ON = 0x190A1D18, // Lights on in the room with the shrinking device
+ V_STAIRS_DOWN = 0x09221A62,
+ V_LADDER_DOWN = 0x0018CA22, // Is the ladder in the statue room down?
+ V_LADDER_DOWN_ACTION = 0x00188211,
+ V_WALL_BROKEN = 0x10938830,
+ V_BOLT_DOOR_OPEN = 0x01BA1A52,
+ V_BOLT_DOOR_UNLOCKED = 0x00040153,
+ V_SEEN_SYMBOLS_NO_LIGHT = 0x81890D14,
+ V_FELL_DOWN_HOLE = 0xE7498218,
+ V_DOOR_PASSED = 0x2090590C, // Auto-closing door was passed
+ V_ENTRANCE_OPEN = 0xD0A14D10, // Is the entrance to Module1300 open (after the robot got his teddy)
+ V_WINDOW_OPEN = 0x03C698DA,
+ V_DOOR_STATUS = 0x52371C95,
+ V_DOOR_BUSTED = 0xD217189D,
+ V_WORLDS_JOINED = 0x98109F12, // Are the worlds joined?
+ V_KEYDOOR_UNLOCKED = 0x80455A41, // Is the keyboard-door unlocked?
+ V_MOUSE_SUCKED_IN = 0x01023818, // Are mouse/cheese in Scene1308?
+ V_BALLOON_POPPED = 0xAC00C0D0, // Has the balloon with the key been popped?
+ V_TNT_DUMMY_BUILT = 0x000CF819, // Are all TNT parts on the dummy?
+ V_TNT_DUMMY_FUSE_LIT = 0x20A0C516,
+ V_RING5_PULLED = 0x4DE80AC0,
+ V_CREATURE_EXPLODED = 0x2A02C07B,
// Match
- V_MATCH_STATUS = 0x0112090A,
+ V_MATCH_STATUS = 0x0112090A,
// Venus fly trap
- V_FLYTRAP_RING_EATEN = 0x2B514304,
- V_FLYTRAP_RING_DOOR = 0x8306F218,
- V_FLYTRAP_RING_FENCE = 0x80101B1E,
- V_FLYTRAP_RING_BRIDGE = 0x13206309,
- V_FLYTRAP_POSITION_1 = 0x1B144052,
- V_FLYTRAP_POSITION_2 = 0x86341E88,
+ V_FLYTRAP_RING_EATEN = 0x2B514304,
+ V_FLYTRAP_RING_DOOR = 0x8306F218,
+ V_FLYTRAP_RING_FENCE = 0x80101B1E,
+ V_FLYTRAP_RING_BRIDGE = 0x13206309,
+ V_FLYTRAP_POSITION_1 = 0x1B144052,
+ V_FLYTRAP_POSITION_2 = 0x86341E88,
// Navigation
- V_NAVIGATION_INDEX = 0x4200189E, // Navigation scene: Current navigation index
+ V_NAVIGATION_INDEX = 0x4200189E, // Navigation scene: Current navigation index
// Cannon
- V_CANNON_RAISED = 0x000809C2, // Is the cannon raised?
- V_CANNON_TURNED = 0x9040018A, // Is the cannon turned?
- V_ROBOT_HIT = 0x0C0288F4, // Was the robot hit by the cannon?
- V_ROBOT_TARGET = 0x610210B7, // Is the robot at the cannon target position? (teddy)
- V_CANNON_SMACKER_NAME = 0xF0402B0A,
- V_CANNON_TARGET_STATUS = 0x20580A86,
+ V_CANNON_RAISED = 0x000809C2, // Is the cannon raised?
+ V_CANNON_TURNED = 0x9040018A, // Is the cannon turned?
+ V_ROBOT_HIT = 0x0C0288F4, // Was the robot hit by the cannon?
+ V_ROBOT_TARGET = 0x610210B7, // Is the robot at the cannon target position? (teddy)
+ V_CANNON_SMACKER_NAME = 0xF0402B0A,
+ V_CANNON_TARGET_STATUS = 0x20580A86,
// Projector
- V_PROJECTOR_SLOT = 0x04A10F33, // Projector x slot index
- V_PROJECTOR_LOCATION = 0x04A105B3, // Projector scene location
- V_PROJECTOR_ACTIVE = 0x12A10DB3, // Is the projecor projecting?
+ V_PROJECTOR_SLOT = 0x04A10F33, // Projector x slot index
+ V_PROJECTOR_LOCATION = 0x04A105B3, // Projector scene location
+ V_PROJECTOR_ACTIVE = 0x12A10DB3, // Is the projecor projecting?
// Inventory
- V_HAS_NEEDLE = 0x31C63C51, // Has Klayman the needle?
- V_HAS_FINAL_KEY = 0xC0780812, // Has Klayman the key from the diskplayer?
- V_HAS_TEST_TUBE = 0x45080C38,
-#if 0
-Arrays:
-0x0800547C Water pipes water level (index equals pipe number; 0 to 4)
-0x0090EA95 Has Klayman the key (index equals the key number; 0 to 2)
-0x08D0AB11 Has Klayman inserted the key (index equals the key number; 0 to 2)
-#endif
+ V_HAS_NEEDLE = 0x31C63C51, // Has Klayman the needle?
+ V_HAS_FINAL_KEY = 0xC0780812, // Has Klayman the key from the diskplayer?
+ V_HAS_TEST_TUBE = 0x45080C38,
+ // Arrays
+ // NOTE "GOOD" means the solution, "CURR" is the current setup of the puzzle variables
+ VA_IS_PUZZLE_INIT = 0x40050052,
+ VA_SMACKER_PLAYED = 0x00800410,
+ VA_CURR_CRYSTAL_COLORS = 0xE11A1929,
+ VA_GOOD_CRYSTAL_COLORS = 0xD4B2089C,
+ VA_GOOD_TEST_TUBES_LEVEL_1 = 0x0C601058,
+ VA_GOOD_TEST_TUBES_LEVEL_2 = 0x40005834,
+ VA_CURR_CANNON_SYMBOLS = 0x00000914,
+ VA_GOOD_CANNON_SYMBOLS_1 = 0x00504B86,
+ VA_GOOD_CANNON_SYMBOLS_2 = 0x0A4C0A9A,
+ VA_CURR_WATER_PIPES_LEVEL = 0x0800547C,
+ VA_GOOD_WATER_PIPES_LEVEL = 0x90405038,
+ VA_CURR_DICE_NUMBERS = 0x61084036,
+ VA_GOOD_DICE_NUMBERS = 0x7500993A,
+ VA_CURR_KEY_SLOT_NUMBERS = 0xA010B810,
+ VA_GOOD_KEY_SLOT_NUMBERS = 0x0C10A000,
+ VA_CUBE_POSITIONS = 0x484498D0,
+ VA_CODE_SYMBOLS = 0x04909A50,
+ VA_TILE_SYMBOLS = 0x0C65F80B,
+ VA_IS_TILE_MATCH = 0xCCE0280F,
+ VA_TNT_POSITIONS = 0x10055D14,
+ VA_DICE_MEMORY_SYMBOLS = 0x13100631,
+ VA_HAS_TAPE = 0x02038314,
+ VA_IS_TAPE_INSERTED = 0x02720344,
+ VA_HAS_KEY = 0x0090EA95,
+ VA_IS_KEY_INSERTED = 0x08D0AB11,
+ VA_LOCKS_DISABLED = 0x14800353,
V_END_
};
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 0342b02..8f0a94e 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2090,9 +2090,9 @@ void Klayman::stInsertDisk() {
_status2 = 2;
_tapesToInsert = 0;
for (uint32 i = 0; i < 20; i++) {
- if (getSubVar(0x02038314, i)) {
- setSubVar(0x02720344, i, 1);
- setSubVar(0x02038314, i, 0);
+ if (getSubVar(VA_HAS_TAPE, i)) {
+ setSubVar(VA_IS_TAPE_INSERTED, i, 1);
+ setSubVar(VA_HAS_TAPE, i, 0);
_tapesToInsert++;
}
}
@@ -2496,18 +2496,18 @@ void Klayman::stInsertKey() {
_status2 = 2;
_keysToInsert = 0;
for (uint32 i = 0; i < 3; i++) {
- if (getSubVar(0x0090EA95, i)) {
+ if (getSubVar(VA_HAS_KEY, i)) {
bool more;
- setSubVar(0x08D0AB11, i, 1);
- setSubVar(0x0090EA95, i, 0);
+ setSubVar(VA_IS_KEY_INSERTED, i, 1);
+ setSubVar(VA_HAS_KEY, i, 0);
do {
more = false;
- setSubVar(0xA010B810, i, _vm->_rnd->getRandomNumber(16 - 1));
+ setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
for (uint j = 0; j < i && !more; j++) {
- if (getSubVar(0x08D0AB11, j) && getSubVar(0xA010B810, j) == getSubVar(0xA010B810, i))
+ if (getSubVar(VA_IS_KEY_INSERTED, j) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i))
more = true;
}
- if (getSubVar(0xA010B810, i) == getSubVar(0x0C10A000, i))
+ if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i))
more = true;
} while (more);
_keysToInsert++;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 2c52842..6cae11a 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1779,11 +1779,11 @@ uint32 Scene1005::getTextIndex1() {
else if (getGlobalVar(V_ROBOT_HIT)) {
if (!getGlobalVar(V_ENTRANCE_OPEN))
textIndex = 23;
- else if (!getSubVar(0x0090EA95, 0) && !getSubVar(0x08D0AB11, 0))
+ else if (!getSubVar(VA_HAS_KEY, 0) && !getSubVar(VA_IS_KEY_INSERTED, 0))
textIndex = 24;
else if (!getGlobalVar(V_HAS_FINAL_KEY))
textIndex = 26;
- else if (!getSubVar(0x0090EA95, 1) && !getSubVar(0x08D0AB11, 1))
+ else if (!getSubVar(VA_HAS_KEY, 1) && !getSubVar(VA_IS_KEY_INSERTED, 1))
textIndex = 27;
else if (!getGlobalVar(V_HAS_FINAL_KEY))
textIndex = 28;
@@ -1817,15 +1817,15 @@ uint32 Scene1005::getTextIndex1() {
textIndex = 4;
else if (!getGlobalVar(V_HAS_TEST_TUBE))
textIndex = 5;
- else if (!getSubVar(0x14800353, 0x40119852))
+ else if (!getSubVar(VA_LOCKS_DISABLED, 0x40119852))
textIndex = 6;
else if (!getGlobalVar(V_WATER_RUNNING))
textIndex = 7;
else if (!getGlobalVar(V_NOTES_PUZZLE_SOLVED))
textIndex = 8;
- else if (!getSubVar(0x14800353, 0x304008D2))
+ else if (!getSubVar(VA_LOCKS_DISABLED, 0x304008D2))
textIndex = 9;
- else if (!getSubVar(0x14800353, 0x01180951))
+ else if (!getSubVar(VA_LOCKS_DISABLED, 0x01180951))
textIndex = 10;
else
textIndex = 11;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 44fe70e..a3e092b 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -338,7 +338,7 @@ uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam &p
}
void SsScene1105SymbolDie::loadSymbolSprite() {
- load(kSsScene1105SymbolDieFileHashes[getSubVar(0x61084036, _index)], true, false);
+ load(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], true, false);
_drawRect.x = -(_spriteResource.getDimensions().width / 2);
_drawRect.y = -(_spriteResource.getDimensions().height / 2);
StaticSprite::update();
@@ -502,9 +502,9 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4807:
if (sender == _ssActionButton) {
- if (getSubVar(0x7500993A, 0) == getSubVar(0x61084036, 0) &&
- getSubVar(0x7500993A, 1) == getSubVar(0x61084036, 1) &&
- getSubVar(0x7500993A, 2) == getSubVar(0x61084036, 2)) {
+ if (getSubVar(VA_GOOD_DICE_NUMBERS, 0) == getSubVar(VA_CURR_DICE_NUMBERS, 0) &&
+ getSubVar(VA_GOOD_DICE_NUMBERS, 1) == getSubVar(VA_CURR_DICE_NUMBERS, 1) &&
+ getSubVar(VA_GOOD_DICE_NUMBERS, 2) == getSubVar(VA_CURR_DICE_NUMBERS, 2)) {
setGlobalVar(V_ROBOT_TARGET, 1);
playSound(2);
_flag3 = true;
@@ -522,38 +522,38 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
_flag1 = false;
} else if (!getGlobalVar(V_ROBOT_TARGET)) {
if (sender == _ssSymbol1UpButton) {
- if (getSubVar(0x61084036, 0) < 9) {
- incSubVar(0x61084036, 0, +1);
+ if (getSubVar(VA_CURR_DICE_NUMBERS, 0) < 9) {
+ incSubVar(VA_CURR_DICE_NUMBERS, 0, +1);
sendMessage(_ssSymbol1UpButton, 0x480B, 0);
sendMessage(_ssSymbolDice[0], 0x2000, 0);
}
} else if (sender == _ssSymbol1DownButton) {
- if (getSubVar(0x61084036, 0) > 1) {
- incSubVar(0x61084036, 0, -1);
+ if (getSubVar(VA_CURR_DICE_NUMBERS, 0) > 1) {
+ incSubVar(VA_CURR_DICE_NUMBERS, 0, -1);
sendMessage(_ssSymbol1DownButton, 0x480B, 0);
sendMessage(_ssSymbolDice[0], 0x2000, 0);
}
} else if (sender == _ssSymbol2UpButton) {
- if (getSubVar(0x61084036, 1) < 9) {
- incSubVar(0x61084036, 1, +1);
+ if (getSubVar(VA_CURR_DICE_NUMBERS, 1) < 9) {
+ incSubVar(VA_CURR_DICE_NUMBERS, 1, +1);
sendMessage(_ssSymbol2UpButton, 0x480B, 0);
sendMessage(_ssSymbolDice[1], 0x2000, 0);
}
} else if (sender == _ssSymbol2DownButton) {
- if (getSubVar(0x61084036, 1) > 1) {
- incSubVar(0x61084036, 1, -1);
+ if (getSubVar(VA_CURR_DICE_NUMBERS, 1) > 1) {
+ incSubVar(VA_CURR_DICE_NUMBERS, 1, -1);
sendMessage(_ssSymbol2DownButton, 0x480B, 0);
sendMessage(_ssSymbolDice[1], 0x2000, 0);
}
} else if (sender == _ssSymbol3UpButton) {
- if (getSubVar(0x61084036, 2) < 9) {
- incSubVar(0x61084036, 2, +1);
+ if (getSubVar(VA_CURR_DICE_NUMBERS, 2) < 9) {
+ incSubVar(VA_CURR_DICE_NUMBERS, 2, +1);
sendMessage(_ssSymbol3UpButton, 0x480B, 0);
sendMessage(_ssSymbolDice[2], 0x2000, 0);
}
} else if (sender == _ssSymbol3DownButton) {
- if (getSubVar(0x61084036, 2) > 1) {
- incSubVar(0x61084036, 2, -1);
+ if (getSubVar(VA_CURR_DICE_NUMBERS, 2) > 1) {
+ incSubVar(VA_CURR_DICE_NUMBERS, 2, -1);
sendMessage(_ssSymbol3DownButton, 0x480B, 0);
sendMessage(_ssSymbolDice[2], 0x2000, 0);
}
@@ -566,9 +566,9 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
void Scene1105::createObjects() {
- _ssSymbols[0] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(0x13100631, 0)], 161, 304);
- _ssSymbols[1] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(0x13100631, 1)], 294, 304);
- _ssSymbols[2] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(0x13100631, 2)], 440, 304);
+ _ssSymbols[0] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(VA_DICE_MEMORY_SYMBOLS, 0)], 161, 304);
+ _ssSymbols[1] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(VA_DICE_MEMORY_SYMBOLS, 1)], 294, 304);
+ _ssSymbols[2] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(VA_DICE_MEMORY_SYMBOLS, 2)], 440, 304);
_ssSymbolDice[0] = insertSprite<SsScene1105SymbolDie>(0, 206, 304);
_ssSymbolDice[1] = insertSprite<SsScene1105SymbolDie>(1, 339, 304);
@@ -651,9 +651,9 @@ void Scene1105::update() {
// DEBUG: Show the correct code
debug("(%d, %d) (%d, %d) (%d, %d)",
- getSubVar(0x7500993A, 0), getSubVar(0x61084036, 0),
- getSubVar(0x7500993A, 1), getSubVar(0x61084036, 1),
- getSubVar(0x7500993A, 2), getSubVar(0x61084036, 2));
+ getSubVar(VA_GOOD_DICE_NUMBERS, 0), getSubVar(VA_CURR_DICE_NUMBERS, 0),
+ getSubVar(VA_GOOD_DICE_NUMBERS, 1), getSubVar(VA_CURR_DICE_NUMBERS, 1),
+ getSubVar(VA_GOOD_DICE_NUMBERS, 2), getSubVar(VA_CURR_DICE_NUMBERS, 2));
Scene::update();
if (_countdown != 0 && (--_countdown == 0)) {
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 041be6f..99d15b9 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -195,7 +195,7 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
AsScene1201Tape::AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash)
: AnimatedSprite(vm, fileHash, surfacePriority, x, y), _parentScene(parentScene), _nameHash(nameHash) {
- if (!getSubVar(0x02038314, _nameHash) && !getSubVar(0x02720344, _nameHash)) {
+ if (!getSubVar(VA_HAS_TAPE, _nameHash) && !getSubVar(VA_IS_TAPE_INSERTED, _nameHash)) {
SetMessageHandler(&AsScene1201Tape::handleMessage);
} else {
setVisible(false);
@@ -211,7 +211,7 @@ uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m,
messageResult = 1;
break;
case 0x4806:
- setSubVar(0x02038314, _nameHash, 1);
+ setSubVar(VA_HAS_TAPE, _nameHash, 1);
setVisible(false);
SetMessageHandler(NULL);
break;
@@ -728,10 +728,10 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- if (!getSubVar(0x40050052, 0xE8058B52)) {
- setSubVar(0x40050052, 0xE8058B52, 1);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52)) {
+ setSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52, 1);
for (uint32 index = 0; index < 18; index++) {
- setSubVar(0x10055D14, index, kScene1201InitArray[index]);
+ setSubVar(VA_TNT_POSITIONS, index, kScene1201InitArray[index]);
}
}
@@ -818,7 +818,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
uint32 tntIndex = 1;
while (tntIndex < 18) {
- uint32 elemIndex = getSubVar(0x10055D14, tntIndex);
+ uint32 elemIndex = getSubVar(VA_TNT_POSITIONS, tntIndex);
int16 clipY2;
if (kScene1201PointArray[elemIndex].y < 175)
clipY2 = topY1;
@@ -826,15 +826,15 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
clipY2 = topY2;
else
clipY2 = topY3;
- insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(0x10055D14, tntIndex), clipY2);
- elemIndex = getSubVar(0x10055D14, tntIndex + 1);
+ insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(VA_TNT_POSITIONS, tntIndex), clipY2);
+ elemIndex = getSubVar(VA_TNT_POSITIONS, tntIndex + 1);
if (kScene1201PointArray[elemIndex].y < 175)
clipY2 = topY1;
else if (kScene1201PointArray[elemIndex].y < 230)
clipY2 = topY2;
else
clipY2 = topY3;
- insertSprite<SsScene1201Tnt>(tntIndex + 1, getSubVar(0x10055D14, tntIndex + 1), clipY2);
+ insertSprite<SsScene1201Tnt>(tntIndex + 1, getSubVar(VA_TNT_POSITIONS, tntIndex + 1), clipY2);
tntIndex += 3;
}
@@ -850,7 +850,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
uint32 tntIndex = 0;
while (tntIndex < 18) {
- uint32 elemIndex = getSubVar(0x10055D14, tntIndex);
+ uint32 elemIndex = getSubVar(VA_TNT_POSITIONS, tntIndex);
int16 clipY2;
if (kScene1201PointArray[elemIndex].x < 300) {
clipY2 = 480;
@@ -862,7 +862,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
else
clipY2 = topY3;
}
- insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(0x10055D14, tntIndex), clipY2);
+ insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(VA_TNT_POSITIONS, tntIndex), clipY2);
tntIndex++;
}
@@ -1023,7 +1023,7 @@ AsScene1202TntItem::AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene,
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1202TntItem::hmShowIdle);
- positionIndex = getSubVar(0x10055D14, _itemIndex);
+ positionIndex = getSubVar(VA_TNT_POSITIONS, _itemIndex);
createSurface(900, 37, 67);
_x = kScene1202Points[positionIndex].x;
_y = kScene1202Points[positionIndex].y;
@@ -1139,11 +1139,11 @@ void Scene1202::update() {
_soundFlag = true;
} else if (_clickedIndex >= 0 && _counter == 0) {
int destIndex = kScene1202Table[_clickedIndex];
- sendMessage(_asTntItems[_clickedIndex], 0x2001, getSubVar(0x10055D14, destIndex));
- sendMessage(_asTntItems[destIndex], 0x2001, getSubVar(0x10055D14, _clickedIndex));
- int temp = getSubVar(0x10055D14, destIndex);
- setSubVar(0x10055D14, destIndex, getSubVar(0x10055D14, _clickedIndex));
- setSubVar(0x10055D14, _clickedIndex, temp);
+ sendMessage(_asTntItems[_clickedIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, destIndex));
+ sendMessage(_asTntItems[destIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, _clickedIndex));
+ int temp = getSubVar(VA_TNT_POSITIONS, destIndex);
+ setSubVar(VA_TNT_POSITIONS, destIndex, getSubVar(VA_TNT_POSITIONS, _clickedIndex));
+ setSubVar(VA_TNT_POSITIONS, _clickedIndex, temp);
_counter = 2;
_clickedIndex = -1;
if (_flag) {
@@ -1196,14 +1196,14 @@ uint32 Scene1202::hmSolved(int messageNum, const MessageParam ¶m, Entity *se
bool Scene1202::isSolved() {
debug("isSolved() %d %d %d %d %d %d",
- getSubVar(0x10055D14, 0), getSubVar(0x10055D14, 3),
- getSubVar(0x10055D14, 6), getSubVar(0x10055D14, 9),
- getSubVar(0x10055D14, 12), getSubVar(0x10055D14, 15));
+ getSubVar(VA_TNT_POSITIONS, 0), getSubVar(VA_TNT_POSITIONS, 3),
+ getSubVar(VA_TNT_POSITIONS, 6), getSubVar(VA_TNT_POSITIONS, 9),
+ getSubVar(VA_TNT_POSITIONS, 12), getSubVar(VA_TNT_POSITIONS, 15));
return
- getSubVar(0x10055D14, 0) == 0 && getSubVar(0x10055D14, 3) == 3 &&
- getSubVar(0x10055D14, 6) == 6 && getSubVar(0x10055D14, 9) == 9 &&
- getSubVar(0x10055D14, 12) == 12 && getSubVar(0x10055D14, 15) == 15;
+ getSubVar(VA_TNT_POSITIONS, 0) == 0 && getSubVar(VA_TNT_POSITIONS, 3) == 3 &&
+ getSubVar(VA_TNT_POSITIONS, 6) == 6 && getSubVar(VA_TNT_POSITIONS, 9) == 9 &&
+ getSubVar(VA_TNT_POSITIONS, 12) == 12 && getSubVar(VA_TNT_POSITIONS, 15) == 15;
}
void Scene1202::doPaletteEffect() {
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index e8cc843..978eb03 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1115,12 +1115,12 @@ AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint ind
_dataResource.load(0x22102142);
_pointList = _dataResource.getPointArray(0xAC849240);
- pt = (*_pointList)[getSubVar(0xA010B810, _index)];
+ pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
_x = pt.x;
_y = pt.y;
- // TODO createSurface3(kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4], fileHashes);
- createSurface(kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4], 640, 480); //TODO: Remeove once the line above is done
+ // TODO createSurface3(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], fileHashes);
+ createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], 640, 480); //TODO: Remeove once the line above is done
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1307Key::handleMessage);
@@ -1148,7 +1148,7 @@ uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m,
_isClickable = param.asInteger() != 0;
break;
case 0x2001:
- setSubVar(0xA010B810, _index, param.asInteger());
+ setSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index, param.asInteger());
stMoveKey();
break;
case 0x2003:
@@ -1196,7 +1196,7 @@ void AsScene1307Key::suMoveKey() {
processDelta();
_pointIndex++;
} else {
- NPoint pt = (*_pointList)[getSubVar(0xA010B810, _index)];
+ NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
_x = pt.x + kAsScene1307KeyXDelta;
_y = pt.y + kAsScene1307KeyYDelta;
stInsertKey();
@@ -1213,14 +1213,14 @@ void AsScene1307Key::stRemoveKey() {
void AsScene1307Key::stInsertKey() {
_pointIndex = 0;
- sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(0xA010B810, _index) % 4]);
- setClipRect(_clipRects[getSubVar(0xA010B810, _index) % 4]);
+ sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]);
+ setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]);
SetSpriteUpdate(&AsScene1307Key::suInsertKey);
_newStickFrameIndex = -2;
}
void AsScene1307Key::stMoveKey() {
- NPoint pt = (*_pointList)[getSubVar(0xA010B810, _index)];
+ NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
int16 newX = pt.x + kAsScene1307KeyXDelta;
int16 newY = pt.y + kAsScene1307KeyYDelta;
sendMessage(_parentScene, 0x1022, 1000);
@@ -1257,9 +1257,9 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
_isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
//DEBUG>>>
- setSubVar(0x08D0AB11, 0, 1);
- setSubVar(0x08D0AB11, 1, 1);
- setSubVar(0x08D0AB11, 2, 1);
+ setSubVar(VA_IS_KEY_INSERTED, 0, 1);
+ setSubVar(VA_IS_KEY_INSERTED, 1, 1);
+ setSubVar(VA_IS_KEY_INSERTED, 2, 1);
//DEBUG<<<
Sprite *tempSprite;
@@ -1299,7 +1299,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[3].set(tempSprite->getDrawRect().x, 0, 640, 480);
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
- if (getSubVar(0x08D0AB11, keyIndex)) {
+ if (getSubVar(VA_IS_KEY_INSERTED, keyIndex)) {
_asKeys[keyIndex] = insertSprite<AsScene1307Key>(this, keyIndex, _clipRects);
_vm->_collisionMan->addSprite(_asKeys[keyIndex]);
} else {
@@ -1345,8 +1345,8 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Check if the clicked keyhole is already occupied with a key
bool occupied = false;
for (uint keyIndex = 0; keyIndex < 3 && !occupied; keyIndex++) {
- if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex] != _asCurrKey) {
- if (getSubVar(0xA010B810, keyIndex) == clickedKeyHoleIndex)
+ if (getSubVar(VA_IS_KEY_INSERTED, keyIndex) && _asKeys[keyIndex] != _asCurrKey) {
+ if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, keyIndex) == clickedKeyHoleIndex)
occupied = true;
}
}
@@ -1366,9 +1366,9 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
// TODO Debug stuff
case 0x2002:
// Check if all keys are in the correct keyholes
- if (getSubVar(0x08D0AB11, 0) && getSubVar(0xA010B810, 0) == getSubVar(0x0C10A000, 0) &&
- getSubVar(0x08D0AB11, 1) && getSubVar(0xA010B810, 1) == getSubVar(0x0C10A000, 1) &&
- getSubVar(0x08D0AB11, 2) && getSubVar(0xA010B810, 2) == getSubVar(0x0C10A000, 2)) {
+ if (getSubVar(VA_IS_KEY_INSERTED, 0) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 0) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0) &&
+ getSubVar(VA_IS_KEY_INSERTED, 1) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 1) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 1) &&
+ getSubVar(VA_IS_KEY_INSERTED, 2) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 2) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 2)) {
// Play unlock animations for all keys
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (_asKeys[keyIndex])
@@ -1378,11 +1378,9 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
_isPuzzleSolved = true;
_countdown = 47;
} else {
- for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
- if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex]) {
+ for (uint keyIndex = 0; keyIndex < 3; keyIndex++)
+ if (getSubVar(VA_IS_KEY_INSERTED, keyIndex) && _asKeys[keyIndex])
sendMessage(_asKeys[keyIndex], 0x2000, 1);
- }
- }
sendMessage(_asCurrKey, 0x2004, 1);
}
_asCurrKey = NULL;
@@ -1390,11 +1388,9 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
_asCurrKey = (Sprite*)sender;
- for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
- if (getSubVar(0x08D0AB11, keyIndex) && _asKeys[keyIndex]) {
+ for (uint keyIndex = 0; keyIndex < 3; keyIndex++)
+ if (getSubVar(VA_IS_KEY_INSERTED, keyIndex) && _asKeys[keyIndex])
sendMessage(_asKeys[keyIndex], 0x2000, 0);
- }
- }
break;
}
return messageResult;
@@ -1602,9 +1598,9 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_asJaggyDoor = insertSprite<AsScene1308JaggyDoor>(this);
_asLightWallSymbols = insertSprite<AsScene1308LightWallSymbols>(this);
- _ssNumber1 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(0x0C10A000, 1)], 0);
- _ssNumber2 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(0x0C10A000, 0)], 1);
- _ssNumber3 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(0x0C10A000, 2)], 2);
+ _ssNumber1 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 1)], 0);
+ _ssNumber2 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0)], 1);
+ _ssNumber3 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 2)], 2);
_sprite2 = insertStaticSprite(0x40043120, 995);
_sprite3 = insertStaticSprite(0x43003100, 995);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index d207428..eb8f4fe 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1547,15 +1547,15 @@ AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, ui
_y = kAsScene1405TileItemPositions[_tileIndex].y;
createSurface1(0x844B805C, 1100);
setVisible(false);
- if (getSubVar(0xCCE0280F, _tileIndex))
+ if (getSubVar(VA_IS_TILE_MATCH, _tileIndex))
_countdown = _vm->_rnd->getRandomNumber(36 - 1) + 1;
SetUpdateHandler(&AsScene1405Tile::update);
SetMessageHandler(&AsScene1405Tile::handleMessage);
- debug("getSubVar(0x0C65F80B, _tileIndex) = %d", getSubVar(0x0C65F80B, _tileIndex));
+ debug("getSubVar(VA_TILE_SYMBOLS, _tileIndex) = %d", getSubVar(VA_TILE_SYMBOLS, _tileIndex));
- startAnimation(0x844B805C, getSubVar(0x0C65F80B, _tileIndex), -1);
- _newStickFrameIndex = (int16)getSubVar(0x0C65F80B, _tileIndex);
+ startAnimation(0x844B805C, getSubVar(VA_TILE_SYMBOLS, _tileIndex), -1);
+ _newStickFrameIndex = (int16)getSubVar(VA_TILE_SYMBOLS, _tileIndex);
}
void AsScene1405Tile::update() {
@@ -1570,7 +1570,7 @@ uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (getSubVar(0xCCE0280F, _tileIndex) == 0 && _parentScene->getCountdown() == 0) {
+ if (getSubVar(VA_IS_TILE_MATCH, _tileIndex) == 0 && _parentScene->getCountdown() == 0) {
show();
sendMessage(_parentScene, 0x2000, _tileIndex);
}
@@ -1609,12 +1609,12 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
// DEBUG>>>
// TODO: Some debug code: Leave two matching tiles open
for (int i = 0; i < 48; i++)
- setSubVar(0xCCE0280F, i, 1);
+ setSubVar(VA_IS_TILE_MATCH, i, 1);
int debugIndex = 0;
- setSubVar(0xCCE0280F, debugIndex, 0);
+ setSubVar(VA_IS_TILE_MATCH, debugIndex, 0);
for (int i = 0; i < 48; i++) {
- if (i != debugIndex && getSubVar(0x0C65F80B, i) == getSubVar(0x0C65F80B, debugIndex)) {
- setSubVar(0xCCE0280F, i, 0);
+ if (i != debugIndex && getSubVar(VA_TILE_SYMBOLS, i) == getSubVar(VA_TILE_SYMBOLS, debugIndex)) {
+ setSubVar(VA_IS_TILE_MATCH, i, 0);
break;
}
}
@@ -1623,7 +1623,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
_tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
_vm->_collisionMan->addSprite(_tiles[tileIndex]);
- if (getSubVar(0xCCE0280F, tileIndex))
+ if (getSubVar(VA_IS_TILE_MATCH, tileIndex))
_tilesLeft--;
}
@@ -1641,9 +1641,9 @@ void Scene1405::update() {
_tiles[_firstTileIndex]->hide();
_tiles[_secondTileIndex]->hide();
for (uint32 i = 0; i < 48; i++) {
- if (getSubVar(0xCCE0280F, i)) {
+ if (getSubVar(VA_IS_TILE_MATCH, i)) {
_tiles[i]->hide();
- setSubVar(0xCCE0280F, i, 0);
+ setSubVar(VA_IS_TILE_MATCH, i, 0);
}
}
}
@@ -1669,9 +1669,9 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
_secondTileIndex = param.asInteger();
if (_firstTileIndex != _secondTileIndex) {
_selectFirstTile = true;
- if (getSubVar(0x0C65F80B, _secondTileIndex) == getSubVar(0x0C65F80B, _firstTileIndex)) {
- setSubVar(0xCCE0280F, _firstTileIndex, 1);
- setSubVar(0xCCE0280F, _secondTileIndex, 1);
+ if (getSubVar(VA_TILE_SYMBOLS, _secondTileIndex) == getSubVar(VA_TILE_SYMBOLS, _firstTileIndex)) {
+ setSubVar(VA_IS_TILE_MATCH, _firstTileIndex, 1);
+ setSubVar(VA_IS_TILE_MATCH, _secondTileIndex, 1);
_tilesLeft -= 2;
if (_tilesLeft == 0) {
playSound(0);
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index f45f87f..22ffaf6 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1415,7 +1415,7 @@ void Scene1609::update() {
_currentSymbolIndex++;
if (_currentSymbolIndex >= 12)
_currentSymbolIndex = 0;
- _asSymbols[_symbolPosition]->change(_currentSymbolIndex + 12, _currentSymbolIndex == (int)getSubVar(0x04909A50, _noisySymbolIndex));
+ _asSymbols[_symbolPosition]->change(_currentSymbolIndex + 12, _currentSymbolIndex == (int)getSubVar(VA_CODE_SYMBOLS, _noisySymbolIndex));
_changeCurrentSymbol = false;
_countdown1 = 36;
} else {
@@ -1468,12 +1468,12 @@ bool Scene1609::testVars() {
int cmpSymbolIndex = 0;
// Find the position of the first symbol
- while ((int)getSubVar(0x04909A50, cmpSymbolIndex) != _asSymbols[0]->getSymbolIndex())
+ while ((int)getSubVar(VA_CODE_SYMBOLS, cmpSymbolIndex) != _asSymbols[0]->getSymbolIndex())
cmpSymbolIndex++;
// Check if the entered symbols match
for (int enteredSymbolIndex = 0; enteredSymbolIndex < 12; enteredSymbolIndex++) {
- if ((int)getSubVar(0x04909A50, cmpSymbolIndex) != _asSymbols[enteredSymbolIndex]->getSymbolIndex())
+ if ((int)getSubVar(VA_CODE_SYMBOLS, cmpSymbolIndex) != _asSymbols[enteredSymbolIndex]->getSymbolIndex())
return false;
cmpSymbolIndex++;
if (cmpSymbolIndex >= 12)
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index f6d140b..adbd853 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -151,7 +151,7 @@ SsScene1705WallSymbol::SsScene1705WallSymbol(NeverhoodEngine *vm, uint32 fileHas
SsScene1705Tape::SsScene1705Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 tapeIndex, int surfacePriority, int16 x, int16 y, uint32 fileHash)
: StaticSprite(vm, fileHash, surfacePriority, x - 24, y - 4), _parentScene(parentScene), _tapeIndex(tapeIndex) {
- if (!getSubVar(0x02038314, _tapeIndex) && !getSubVar(0x02720344, _tapeIndex)) {
+ if (!getSubVar(VA_HAS_TAPE, _tapeIndex) && !getSubVar(VA_IS_TAPE_INSERTED, _tapeIndex)) {
SetMessageHandler(&SsScene1705Tape::handleMessage);
} else {
setVisible(false);
@@ -173,7 +173,7 @@ uint32 SsScene1705Tape::handleMessage(int messageNum, const MessageParam ¶m,
messageResult = 1;
break;
case 0x4806:
- setSubVar(0x02038314, _tapeIndex, 1);
+ setSubVar(VA_HAS_TAPE, _tapeIndex, 1);
setVisible(false);
SetMessageHandler(NULL);
break;
@@ -205,9 +205,9 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x18222039);
- insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0);
- insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1);
- insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2);
+ insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 0)], 0);
+ insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 1)], 1);
+ insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 2)], 2);
_sprite = insertStaticSprite(0x31313A22, 1100);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 503a1d3..20a8559 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -504,7 +504,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- if (!getSubVar(0x40050052, 0x60400854)) {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x60400854)) {
// TODO _vm->gameModule()->initScene2201Vars();
}
@@ -525,8 +525,8 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++)
- if ((int16)getSubVar(0x484498D0, cubeIndex) >= 0)
- insertSprite<SsScene2201PuzzleCube>(cubeIndex, (int16)getSubVar(0x484498D0, cubeIndex));
+ if ((int16)getSubVar(VA_CUBE_POSITIONS, cubeIndex) >= 0)
+ insertSprite<SsScene2201PuzzleCube>(cubeIndex, (int16)getSubVar(VA_CUBE_POSITIONS, cubeIndex));
_clipRects[0].y1 = 0;
_clipRects[0].x2 = 640;
@@ -799,8 +799,8 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
_drawRect.height = _spriteResource.getDimensions().height;
_needRefresh = true;
- setSubVar(0x484498D0, _tileIndex, (uint32)-1);
- setSubVar(0x484498D0, newTileIndex, (uint32)_value);
+ setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1);
+ setSubVar(VA_CUBE_POSITIONS, newTileIndex, (uint32)_value);
_tileIndex = newTileIndex;
@@ -901,11 +901,11 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
//DEBUG>>>
for (uint32 index = 0; index < 9; index++)
- setSubVar(0x484498D0, index, 7 - index);
+ setSubVar(VA_CUBE_POSITIONS, index, 7 - index);
//DEBUG<<<
for (uint32 index = 0; index < 9; index++) {
- int16 value = (int16)getSubVar(0x484498D0, index);
+ int16 value = (int16)getSubVar(VA_CUBE_POSITIONS, index);
if (value >= 0) {
Sprite *puzzleTileSprite = insertSprite<SsScene2202PuzzleTile>(this, index, value);
_vm->_collisionMan->addSprite(puzzleTileSprite);
@@ -995,13 +995,13 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
int16 Scene2202::getFreeTileIndex(int16 index) {
- if (index >= 3 && (int16)getSubVar(0x484498D0, index - 3) == -1) {
+ if (index >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 3) == -1) {
return index - 3;
- } else if (index <= 5 && (int16)getSubVar(0x484498D0, index + 3) == -1) {
+ } else if (index <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 3) == -1) {
return index + 3;
- } else if (index != 0 && index != 3 && index != 6 && (int16)getSubVar(0x484498D0, index - 1) == -1) {
+ } else if (index != 0 && index != 3 && index != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 1) == -1) {
return index - 1;
- } else if (index != 2 && index != 5 && index != 8 && (int16)getSubVar(0x484498D0, index + 1) == -1) {
+ } else if (index != 2 && index != 5 && index != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 1) == -1) {
return index + 1;
} else
return -1;
@@ -1009,13 +1009,13 @@ int16 Scene2202::getFreeTileIndex(int16 index) {
bool Scene2202::testIsSolved() {
return
- getSubVar(0x484498D0, 0) == 0 &&
- getSubVar(0x484498D0, 2) == 2 &&
- getSubVar(0x484498D0, 3) == 3 &&
- getSubVar(0x484498D0, 4) == 4 &&
- getSubVar(0x484498D0, 5) == 5 &&
- getSubVar(0x484498D0, 6) == 6 &&
- getSubVar(0x484498D0, 8) == 7;
+ getSubVar(VA_CUBE_POSITIONS, 0) == 0 &&
+ getSubVar(VA_CUBE_POSITIONS, 2) == 2 &&
+ getSubVar(VA_CUBE_POSITIONS, 3) == 3 &&
+ getSubVar(VA_CUBE_POSITIONS, 4) == 4 &&
+ getSubVar(VA_CUBE_POSITIONS, 5) == 5 &&
+ getSubVar(VA_CUBE_POSITIONS, 6) == 6 &&
+ getSubVar(VA_CUBE_POSITIONS, 8) == 7;
}
static const uint32 kAsCommonKeyFileHashes[] = {
@@ -1025,7 +1025,7 @@ static const uint32 kAsCommonKeyFileHashes[] = {
AsCommonKey::AsCommonKey(NeverhoodEngine *vm, Scene *parentScene, int keyIndex, int surfacePriority, int16 x, int16 y)
: AnimatedSprite(vm, kAsCommonKeyFileHashes[keyIndex], surfacePriority, x, y), _parentScene(parentScene), _keyIndex(keyIndex) {
- if (!getSubVar(0x0090EA95, _keyIndex) && !getSubVar(0x08D0AB11, _keyIndex)) {
+ if (!getSubVar(VA_HAS_KEY, _keyIndex) && !getSubVar(VA_IS_KEY_INSERTED, _keyIndex)) {
SetMessageHandler(&AsCommonKey::handleMessage);
} else {
// If Klayman already has the key or it's already inserted then don't show it
@@ -1042,7 +1042,7 @@ uint32 AsCommonKey::handleMessage(int messageNum, const MessageParam ¶m, Ent
messageResult = 1;
break;
case 0x4806:
- setSubVar(0x0090EA95, _keyIndex, 1);
+ setSubVar(VA_HAS_KEY, _keyIndex, 1);
setVisible(false);
SetMessageHandler(NULL);
}
@@ -2017,8 +2017,8 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene3009Vars();
- if (!getSubVar(0x40050052, 0x88460852))
- setSubVar(0x40050052, 0x88460852, 1);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x88460852))
+ setSubVar(VA_IS_PUZZLE_INIT, 0x88460852, 1);
SetMessageHandler(&Scene2207::handleMessage);
SetUpdateHandler(&Scene2207::update);
@@ -2069,9 +2069,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
- insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0);
- insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1);
- insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 0)], 0);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 1)], 1);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 2)], 2);
_asTape = NULL;
_asLever = NULL;
@@ -2162,11 +2162,11 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (sender == _ssButton) {
- if (getSubVar(0x14800353, 0x40119852)) {
- setSubVar(0x14800353, 0x40119852, 0);
+ if (getSubVar(VA_LOCKS_DISABLED, 0x40119852)) {
+ setSubVar(VA_LOCKS_DISABLED, 0x40119852, 0);
playSound(0, calcHash("fx3LocksDisable"));
} else {
- setSubVar(0x14800353, 0x40119852, 1);
+ setSubVar(VA_LOCKS_DISABLED, 0x40119852, 1);
playSound(1);
}
}
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 4e8d26d..d29330f 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -222,7 +222,7 @@ uint32 AsScene2401WaterSpit::handleMessage(int messageNum, const MessageParam &p
case 0x2000:
_x = 240;
_y = 447;
- _soundIndex = getSubVar(0x0800547C, param.asInteger());
+ _soundIndex = getSubVar(VA_CURR_WATER_PIPES_LEVEL, param.asInteger());
playSound(0, 0x48640244);
startAnimation(kAsScene2401WaterSpitFileHashes2[param.asInteger()], 0, -1);
setVisible(true);
@@ -448,9 +448,9 @@ void Scene2401::update() {
if (_pipeStatus >= 10) {
bool puzzleSolved = true, waterInside = false;
for (uint i = 0; i < 5; i++) {
- if (getSubVar(0x0800547C, i) != getSubVar(0x90405038, i))
+ if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, i) != getSubVar(VA_GOOD_WATER_PIPES_LEVEL, i))
puzzleSolved = false;
- if (getSubVar(0x0800547C, i) != 0)
+ if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, i) != 0)
waterInside = true;
}
if (puzzleSolved) {
@@ -460,18 +460,18 @@ void Scene2401::update() {
} else if (waterInside) {
playPipeSound(0xD0431020);
for (uint i = 0; i < 5; i++) {
- sendMessage(_asWaterFlushing[i], 0x2002, getSubVar(0x0800547C, i));
- setSubVar(0x0800547C, i, 0);
+ sendMessage(_asWaterFlushing[i], 0x2002, getSubVar(VA_CURR_WATER_PIPES_LEVEL, i));
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, i, 0);
}
}
} else if (_pipeStatus >= 5) {
_ssWaterPipes[_pipeStatus]->setVisible(true);
_countdown1 = 8;
- playPipeSound(kScene2401FileHashes3[getSubVar(0x0800547C, _pipeStatus - 5)]);
+ playPipeSound(kScene2401FileHashes3[getSubVar(VA_CURR_WATER_PIPES_LEVEL, _pipeStatus - 5)]);
} else {
_ssWaterPipes[_pipeStatus]->setVisible(true);
_countdown1 = _pipeStatus == 4 ? 16 : 8;
- playPipeSound(kScene2401FileHashes3[getSubVar(0x90405038, _pipeStatus)]);
+ playPipeSound(kScene2401FileHashes3[getSubVar(VA_GOOD_WATER_PIPES_LEVEL, _pipeStatus)]);
}
_pipeStatus++;
}
@@ -534,9 +534,9 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x2001:
sendMessage(_asWaterSpit[_asWaterSpitIndex], 0x2000, param.asInteger());
_asWaterSpitIndex = (_asWaterSpitIndex + 1) & 1;
- incSubVar(0x0800547C, param.asInteger(), 1);
- if (getSubVar(0x0800547C, param.asInteger()) >= 5)
- setSubVar(0x0800547C, param.asInteger(), 4);
+ incSubVar(VA_CURR_WATER_PIPES_LEVEL, param.asInteger(), 1);
+ if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, param.asInteger()) >= 5)
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, param.asInteger(), 4);
break;
case 0x480B:
if (sender == _ssButton) {
@@ -771,10 +771,10 @@ void Scene2402::update() {
_ssDoorFrame->update();
} else if (_pipeStatus >= 5) {
_countdown = 8;
- playPipeSound(kScene2402FileHashes[getSubVar(0x0800547C, _pipeStatus - 5)]);
+ playPipeSound(kScene2402FileHashes[getSubVar(VA_CURR_WATER_PIPES_LEVEL, _pipeStatus - 5)]);
} else {
_countdown = _pipeStatus == 4 ? 16 : 8;
- playPipeSound(kScene2402FileHashes[getSubVar(0x90405038, _pipeStatus)]);
+ playPipeSound(kScene2402FileHashes[getSubVar(VA_GOOD_WATER_PIPES_LEVEL, _pipeStatus)]);
}
_pipeStatus++;
}
@@ -892,11 +892,11 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x480B:
if (sender == _ssButton) {
- if (getSubVar(0x14800353, 0x304008D2)) {
- setSubVar(0x14800353, 0x304008D2, 0);
+ if (getSubVar(VA_LOCKS_DISABLED, 0x304008D2)) {
+ setSubVar(VA_LOCKS_DISABLED, 0x304008D2, 0);
playSound(0, calcHash("fx3LocksDisable"));
} else {
- setSubVar(0x14800353, 0x304008D2, 1);
+ setSubVar(VA_LOCKS_DISABLED, 0x304008D2, 1);
playSound(1);
}
}
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index d6840a3..0a14fb6 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -516,7 +516,7 @@ void SsScene2504Button::update() {
_isSoundPlaying = false;
}
if (_countdown != 0 && (--_countdown) == 0) {
- if (getSubVar(0x14800353, 0x01180951)) {
+ if (getSubVar(VA_LOCKS_DISABLED, 0x01180951)) {
playSound(0);
} else {
playSound(1);
@@ -532,10 +532,10 @@ uint32 SsScene2504Button::handleMessage(int messageNum, const MessageParam ¶
if (_countdown == 0 && !_isSoundPlaying) {
setVisible(true);
_countdown = 2;
- if (getSubVar(0x14800353, 0x01180951)) {
- setSubVar(0x14800353, 0x01180951, 0);
+ if (getSubVar(VA_LOCKS_DISABLED, 0x01180951)) {
+ setSubVar(VA_LOCKS_DISABLED, 0x01180951, 0);
} else {
- setSubVar(0x14800353, 0x01180951, 1);
+ setSubVar(VA_LOCKS_DISABLED, 0x01180951, 1);
}
playSound(2);
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 9603f70..080f815 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -168,9 +168,9 @@ void Module2700::createScene(int sceneNum, int which) {
break;
case 10:
// TODO _vm->gameModule()->initScene2808Vars2();
- _scene2711StaticSprites[0] = kScene2711FileHashes1[getSubVar(0x40005834, 2)];
- _scene2711StaticSprites[1] = kScene2711FileHashes2[getSubVar(0x40005834, 1)];
- _scene2711StaticSprites[2] = kScene2711FileHashes3[getSubVar(0x40005834, 0)];
+ _scene2711StaticSprites[0] = kScene2711FileHashes1[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 2)];
+ _scene2711StaticSprites[1] = kScene2711FileHashes2[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 1)];
+ _scene2711StaticSprites[2] = kScene2711FileHashes3[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 0)];
_scene2711StaticSprites[3] = 0x0261282E;
_scene2711StaticSprites[4] = 0x9608E5A0;
_scene2711StaticSprites[5] = 0;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index e664eb3..4232b79 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -658,18 +658,18 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xA423A41A);
- if (getSubVar(0x0C601058, 0) == 0) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
_asTestTubeOne = (StaticSprite*)insertStaticSprite(0x66121222, 100);
} else {
_asTestTubeOne = (StaticSprite*)insertSprite<AsScene2803TestTubeOne>(
- kScene2803FileHashes1[getSubVar(0x0C601058, 0)],
- kScene2803FileHashes2[getSubVar(0x0C601058, 0)]);
+ kScene2803FileHashes1[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0)],
+ kScene2803FileHashes2[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0)]);
}
- if (getSubVar(0x0C601058, 1) == 3)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
_asTestTubeTwo = (StaticSprite*)insertStaticSprite(0x64330236, 100);
- if (getSubVar(0x0C601058, 2) == 3)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
_asTestTubeThree = (StaticSprite*)insertStaticSprite(0x2E4A22A2, 100);
_asLightCord = insertSprite<AsScene2803LightCord>(this, 0x8FAD5932, 0x276E1A3D, 578, 200);
@@ -842,16 +842,16 @@ void Scene2803::changeBackground() {
_sprite8->update();
_sprite9->load(0x341A0237, false, false);
_sprite9->update();
- if (getSubVar(0x0C601058, 0) == 0) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
_asTestTubeOne->load(0x66121222, false, false);
_asTestTubeOne->update();
} else
sendMessage(_asTestTubeOne, 0x2000, 0);
- if (getSubVar(0x0C601058, 1) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
_asTestTubeTwo->load(0x64330236, false, false);
_asTestTubeTwo->update();
}
- if (getSubVar(0x0C601058, 2) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
_asTestTubeThree->load(0x2E4A22A2, false, false);
_asTestTubeThree->update();
}
@@ -877,16 +877,16 @@ void Scene2803::changeBackground() {
_sprite8->update();
_sprite9->load(0x708072E0, false, false);
_sprite9->update();
- if (getSubVar(0x0C601058, 0) == 0) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
_asTestTubeOne->load(0x50C027A8, false, false);
_asTestTubeOne->update();
} else
sendMessage(_asTestTubeOne, 0x2000, 1);
- if (getSubVar(0x0C601058, 1) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
_asTestTubeTwo->load(0xD48077A0, false, false);
_asTestTubeTwo->update();
}
- if (getSubVar(0x0C601058, 2) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
_asTestTubeThree->load(0x30022689, false, false);
_asTestTubeThree->update();
}
@@ -951,15 +951,15 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
_sprite6 = insertStaticSprite(0x3C42022F, 1100);
_sprite7 = insertStaticSprite(0x341A0237, 1100);
- if (getSubVar(0x0C601058, 0) == 0)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0)
insertStaticSprite(0x66121222, 100);
else
- insertSprite<AnimatedSprite>(kScene2803SmallFileHashes1[getSubVar(0x0C601058, 0)], 100, 529, 326);
+ insertSprite<AnimatedSprite>(kScene2803SmallFileHashes1[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0)], 100, 529, 326);
- if (getSubVar(0x0C601058, 1) == 3)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
insertStaticSprite(0x64330236, 100);
- if (getSubVar(0x0C601058, 2) == 3)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
insertStaticSprite(0x2E4A22A2, 100);
} else {
@@ -976,16 +976,16 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
_sprite7 = insertStaticSprite(0x708072E0, 1100);
insertStaticSprite(0x90582EA4, 100);
- setSubVar(0x0C601058, 0, 1);//DEBUG, FIXME crashes when not done?!
- if (getSubVar(0x0C601058, 0) == 0)
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0, 1);//DEBUG, FIXME crashes when not done?!
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0)
insertStaticSprite(0x50C027A8, 100);
else
- insertSprite<AnimatedSprite>(kScene2803SmallFileHashes2[getSubVar(0x0C601058, 0)], 100, 529, 326);
+ insertSprite<AnimatedSprite>(kScene2803SmallFileHashes2[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0)], 100, 529, 326);
- if (getSubVar(0x0C601058, 1) == 3)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
insertStaticSprite(0xD48077A0, 100);
- if (getSubVar(0x0C601058, 2) == 3)
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
insertStaticSprite(0x30022689, 100);
}
@@ -1386,7 +1386,7 @@ AsScene2804Crystal::AsScene2804Crystal(NeverhoodEngine *vm, AsScene2804CrystalWa
{470, 180}
};
- _colorNum = (int16)getSubVar(0xE11A1929, crystalIndex);
+ _colorNum = (int16)getSubVar(VA_CURR_CRYSTAL_COLORS, crystalIndex);
_isLightOn = getGlobalVar(V_SHRINK_LIGHTS_ON) != 0;
if (_isLightOn) {
_x = kAsScene2804CrystalPoints[crystalIndex].x;
@@ -1441,7 +1441,7 @@ void AsScene2804Crystal::activate() {
startAnimation(kAsScene2804CrystalFileHashes[_crystalIndex], _colorNum, -1);
_newStickFrameIndex = _colorNum;
}
- setSubVar(0xE11A1929, _crystalIndex, _colorNum);
+ setSubVar(VA_CURR_CRYSTAL_COLORS, _crystalIndex, _colorNum);
}
}
@@ -1686,7 +1686,7 @@ uint32 Scene2804::handleMessage(int messageNum, const MessageParam ¶m, Entit
_isSolved = true;
_beamStatus = 0;
for (uint index = 0; index < 5; index++)
- if (_asCrystals[index]->getColorNum() != (int16)getSubVar(0xD4B2089C, index))
+ if (_asCrystals[index]->getColorNum() != (int16)getSubVar(VA_GOOD_CRYSTAL_COLORS, index))
_isSolved = false;
_countdown2 = 48;
break;
@@ -1767,8 +1767,8 @@ void Scene2804::initCrystalColors() {
do {
misalignedColorNum = _vm->_rnd->getRandomNumber(6 - 1);
} while (misalignedColorNum == correctColorNum);
- setSubVar(0xD4B2089C, index, correctColorNum);
- setSubVar(0xE11A1929, index, misalignedColorNum);
+ setSubVar(VA_GOOD_CRYSTAL_COLORS, index, correctColorNum);
+ setSubVar(VA_CURR_CRYSTAL_COLORS, index, misalignedColorNum);
}
setGlobalVar(V_CRYSTAL_COLORS_INIT, 1);
}
@@ -1989,27 +1989,27 @@ Scene2807::Scene2807(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
SetMessageHandler(&Scene2807::handleMessage);
- if (getSubVar(0x0C601058, 0) == 1) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 1) {
insertStaticSprite(0x103021E2, 300);
- } else if (getSubVar(0x0C601058, 0) == 2) {
+ } else if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 2) {
insertStaticSprite(0x103022E2, 300);
- } else if (getSubVar(0x0C601058, 0) == 3) {
+ } else if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 3) {
insertStaticSprite(0x103024E2, 300);
}
- if (getSubVar(0x0C601058, 1) == 1) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 1) {
insertStaticSprite(0x4800A52A, 200);
- } else if (getSubVar(0x0C601058, 1) == 2) {
+ } else if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 2) {
insertStaticSprite(0x4800A62A, 200);
- } else if (getSubVar(0x0C601058, 1) == 3) {
+ } else if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
insertStaticSprite(0x4800A02A, 200);
}
- if (getSubVar(0x0C601058, 2) == 1) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 1) {
insertStaticSprite(0x31203430, 100);
- } else if (getSubVar(0x0C601058, 2) == 2) {
+ } else if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 2) {
insertStaticSprite(0x31203400, 100);
- } else if (getSubVar(0x0C601058, 2) == 3) {
+ } else if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
insertStaticSprite(0x31203460, 100);
}
@@ -2439,7 +2439,7 @@ void Scene2808::update() {
// DEBUG>>>: Show correct values
debug("---------------");
- debug("%03d %03d %03d", getSubVar(0x0C601058, 0), getSubVar(0x0C601058, 1), getSubVar(0x0C601058, 2));
+ debug("%03d %03d %03d", getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2));
debug("%03d %03d %03d", _asTestTubes[0]->getFillLevel(), _asTestTubes[1]->getFillLevel(), _asTestTubes[2]->getFillLevel());
// DEBUG<<<
@@ -2452,14 +2452,14 @@ void Scene2808::update() {
bool Scene2808::isMixtureGood() {
if (_testTubeSetNum == 0) {
return
- _asTestTubes[0]->getFillLevel() == getSubVar(0x0C601058, 0) &&
- _asTestTubes[1]->getFillLevel() == getSubVar(0x0C601058, 1) &&
- _asTestTubes[2]->getFillLevel() == getSubVar(0x0C601058, 2);
+ _asTestTubes[0]->getFillLevel() == getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) &&
+ _asTestTubes[1]->getFillLevel() == getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) &&
+ _asTestTubes[2]->getFillLevel() == getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2);
} else {
return
- _asTestTubes[0]->getFillLevel() == getSubVar(0x40005834, 0) &&
- _asTestTubes[1]->getFillLevel() == getSubVar(0x40005834, 1) &&
- _asTestTubes[2]->getFillLevel() == getSubVar(0x40005834, 2);
+ _asTestTubes[0]->getFillLevel() == getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 0) &&
+ _asTestTubes[1]->getFillLevel() == getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 1) &&
+ _asTestTubes[2]->getFillLevel() == getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 2);
}
}
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 7312da7..242a00e 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -121,8 +121,8 @@ void Module3000::createScene(int sceneNum, int which) {
break;
case 7:
_vm->_soundMan->setSoundListParams(kModule3000SoundList, false, 0, 0, 0, 0);
- if (!getSubVar(0x40050052, 0x089809C2)) {
- setSubVar(0x40050052, 0x089809C2, 1);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x089809C2)) {
+ setSubVar(VA_IS_PUZZLE_INIT, 0x089809C2, 1);
createSmackerScene(0x90022001, true, true, false);
} else
createSmackerScene(0x98022001, true, true, false);
@@ -138,8 +138,8 @@ void Module3000::createScene(int sceneNum, int which) {
break;
case 11:
_vm->_soundMan->setSoundListParams(kModule3000SoundList, false, 0, 0, 0, 0);
- if (!getSubVar(0x40050052, 0x10130993)) {
- setSubVar(0x40050052, 0x10130993, 1);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x10130993)) {
+ setSubVar(VA_IS_PUZZLE_INIT, 0x10130993, 1);
createSmackerScene(0x31093019, true, true, false);
} else
createSmackerScene(0x20093019, true, true, false);
@@ -744,7 +744,7 @@ void AsScene3009HorizontalIndicator::stMoveRight() {
AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene, int symbolPosition)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _symbolPosition(symbolPosition) {
- _symbolIndex = getSubVar(0x00000914, _symbolPosition);
+ _symbolIndex = getSubVar(VA_CURR_CANNON_SYMBOLS, _symbolPosition);
_x = kAsScene3009SymbolPoints[_symbolPosition].x;
_y = kAsScene3009SymbolPoints[_symbolPosition].y;
@@ -778,7 +778,7 @@ uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶
}
startAnimation(kAsScene3009SymbolFileHashes[_symbolPosition / 3], _symbolIndex, -1);
_newStickFrameIndex = _symbolIndex;
- setSubVar(0x00000914, _symbolPosition, _symbolIndex);
+ setSubVar(VA_CURR_CANNON_SYMBOLS, _symbolPosition, _symbolIndex);
if (_symbolPosition / 3 == 0) {
sendMessage(_parentScene, 0x2001, 0);
} else {
@@ -846,9 +846,9 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
for (int symbolPosition = 0; symbolPosition < 6; symbolPosition++) {
_asSymbols[symbolPosition] = insertSprite<AsScene3009Symbol>(this, symbolPosition);
if (symbolPosition < 3)
- _correctSymbols[symbolPosition] = getSubVar(0x00504B86, symbolPosition);
+ _correctSymbols[symbolPosition] = getSubVar(VA_GOOD_CANNON_SYMBOLS_1, symbolPosition);
else
- _correctSymbols[symbolPosition] = getSubVar(0x0A4C0A9A, symbolPosition - 3);
+ _correctSymbols[symbolPosition] = getSubVar(VA_GOOD_CANNON_SYMBOLS_2, symbolPosition - 3);
}
SetMessageHandler(&Scene3009::handleMessage);
@@ -856,7 +856,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
// DEBUG: Set the correct code
for (int i = 0; i < 6; i++)
- setSubVar(0x00000914, i, _correctSymbols[i]);
+ setSubVar(VA_CURR_CANNON_SYMBOLS, i, _correctSymbols[i]);
sendMessage(this, 0x2003, 0);
//setGlobalVar(V_ROBOT_TARGET, 1);
@@ -1032,14 +1032,14 @@ void Scene3009::playActionVideo() {
bool Scene3009::isSymbolsPart1Solved() {
for (int i = 0; i < 3; i++)
- if (_correctSymbols[i] != getSubVar(0x00000914, i))
+ if (_correctSymbols[i] != getSubVar(VA_CURR_CANNON_SYMBOLS, i))
return false;
return true;
}
bool Scene3009::isSymbolsPart2Solved() {
for (int i = 3; i < 6; i++)
- if (_correctSymbols[i] != getSubVar(0x00000914, i))
+ if (_correctSymbols[i] != getSubVar(VA_CURR_CANNON_SYMBOLS, i))
return false;
return true;
}
@@ -1091,7 +1091,7 @@ SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene
NDimensions dimensions1, dimensions2;
- _buttonEnabled = getSubVar(0x14800353, kScene3010ButtonNameHashes[_buttonIndex]) != 0;
+ _buttonEnabled = getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[_buttonIndex]) != 0;
_spriteResource.load2(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
dimensions1 = _spriteResource.getDimensions();
_spriteResource.load2(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
@@ -1181,7 +1181,7 @@ AsScene3010DeadBolt::AsScene3010DeadBolt(NeverhoodEngine *vm, Scene *parentScene
_x = kAsScene3010DeadBoltPoints[_boltIndex].x;
_y = kAsScene3010DeadBoltPoints[_boltIndex].y;
- if (getSubVar(0x14800353, kScene3010ButtonNameHashes[_boltIndex])) {
+ if (getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[_boltIndex])) {
createSurface1(kAsScene3010DeadBoltFileHashes1[_boltIndex], 1200);
startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
loadSound(0, 0x46005BC4);
@@ -1293,9 +1293,9 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
int initCountdown = 0;
// DEBUG: Enable all buttons
- setSubVar(0x14800353, kScene3010ButtonNameHashes[0], 1);
- setSubVar(0x14800353, kScene3010ButtonNameHashes[1], 1);
- setSubVar(0x14800353, kScene3010ButtonNameHashes[2], 1);
+ setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[0], 1);
+ setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[1], 1);
+ setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[2], 1);
_surfaceFlag = true;
@@ -1306,7 +1306,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
_asDeadBolts[i] = insertSprite<AsScene3010DeadBolt>(this, i, which == 1);//CHECKME
_ssDeadBoltButtons[i] = insertSprite<SsScene3010DeadBoltButton>(this, i, initCountdown, which == 1);//CHECKME
_vm->_collisionMan->addSprite(_ssDeadBoltButtons[i]);
- if (getSubVar(0x14800353, kScene3010ButtonNameHashes[i]))
+ if (getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[i]))
initCountdown++;
_boltUnlocking[i] = false;
_boltUnlocked[i] = false;
@@ -1570,9 +1570,9 @@ void Scene3011::update() {
do {
_noisyRandomSymbolIndex = _vm->_rnd->getRandomNumber(12 - 1);
} while (_noisySymbolIndex == _noisyRandomSymbolIndex);
- _asSymbols[getSubVar(0x04909A50, _noisyRandomSymbolIndex)]->show(true);
+ _asSymbols[getSubVar(VA_CODE_SYMBOLS, _noisyRandomSymbolIndex)]->show(true);
} else {
- _asSymbols[getSubVar(0x04909A50, _currentSymbolIndex)]->show(false);
+ _asSymbols[getSubVar(VA_CODE_SYMBOLS, _currentSymbolIndex)]->show(false);
}
_updateStatus = 1;
_countdown = 24;
@@ -1593,9 +1593,9 @@ void Scene3011::update() {
_updateStatus = 0;
_countdown = 1;
if (_noisySymbolIndex == _currentSymbolIndex) {
- _asSymbols[getSubVar(0x04909A50, _noisyRandomSymbolIndex)]->hide();
+ _asSymbols[getSubVar(VA_CODE_SYMBOLS, _noisyRandomSymbolIndex)]->hide();
} else {
- _asSymbols[getSubVar(0x04909A50, _currentSymbolIndex)]->hide();
+ _asSymbols[getSubVar(VA_CODE_SYMBOLS, _currentSymbolIndex)]->hide();
}
_currentSymbolIndex++;
if (_currentSymbolIndex >= 12)
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index e96fe8a..e2cb7cd 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -77,9 +77,9 @@ void SmackerScene::nextVideo() {
sendMessage(_parentModule, 0x1009, 0);
return;
}
- _fieldDF = getSubVar(0x00800410, smackerFileHash);
+ _fieldDF = getSubVar(VA_SMACKER_PLAYED, smackerFileHash);
if (!_fieldDF) {
- setSubVar(0x00800410, smackerFileHash, 1);
+ setSubVar(VA_SMACKER_PLAYED, smackerFileHash, 1);
}
if (_fileHashListIndex == 0)
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false));
Commit: 111b6d32c6c8e6aaafdb6e5efaeea0a0ae4aa998
https://github.com/scummvm/scummvm/commit/111b6d32c6c8e6aaafdb6e5efaeea0a0ae4aa998
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:06-07:00
Commit Message:
NEVERHOOD: Fix Smacker framerate bug after the video decoder changes
- React to the space key which can skip some videos and navigation transitions
- Minor renaming in SmackerScene
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/neverhood.cpp
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerscene.cpp
engines/neverhood/smackerscene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1b9c9f3..0c2e090 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -85,6 +85,13 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
}
}
+void GameModule::handleSpaceKey() {
+ if (_childObject) {
+ debug(2, "GameModule::handleSpaceKey()");
+ sendMessage(_childObject, 9, 0);
+ }
+}
+
void GameModule::initScene1307Vars() {
// Exit if it's already initialized
@@ -314,7 +321,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
- createModule(2200, -1);
+ createModule(3000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index af72d53..7031bbb 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -37,6 +37,7 @@ public:
void startup();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
+ void handleSpaceKey();
void initScene1307Vars();
void initScene1405Vars();
void initScene2401Vars();
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index e5c07b5..4b75f68 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -116,6 +116,13 @@ Common::Error NeverhoodEngine::run() {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_keyState = event.kbd.keycode;
+ switch (_keyState) {
+ case Common::KEYCODE_SPACE:
+ _gameModule->handleSpaceKey();
+ break;
+ default:
+ break;
+ }
break;
case Common::EVENT_KEYUP:
_keyState = Common::KEYCODE_INVALID;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 799f04f..0ed6748 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -103,10 +103,14 @@ void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
_palette = new Palette(_vm);
_palette->usePalette();
+
+ _smackerDecoder->start();
}
void SmackerPlayer::close() {
+ if (_smackerDecoder)
+ _smackerDecoder->stop();
delete _smackerDecoder;
delete _palette;
// NOTE: The SmackerDecoder deletes the _stream
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index e2cb7cd..d4f65b3 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -25,7 +25,7 @@
namespace Neverhood {
SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort)
- : Scene(vm, parentModule, true), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _fieldDF(false),
+ : Scene(vm, parentModule, true), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _videoPlayedBefore(false),
_fileHashListIndex(-1), _fileHashList(NULL), _playNextVideoFlag(false) {
debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, flag1, canAbort);
@@ -77,10 +77,9 @@ void SmackerScene::nextVideo() {
sendMessage(_parentModule, 0x1009, 0);
return;
}
- _fieldDF = getSubVar(VA_SMACKER_PLAYED, smackerFileHash);
- if (!_fieldDF) {
+ _videoPlayedBefore = getSubVar(VA_SMACKER_PLAYED, smackerFileHash);
+ if (!_videoPlayedBefore)
setSubVar(VA_SMACKER_PLAYED, smackerFileHash, 1);
- }
if (_fileHashListIndex == 0)
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false));
else
@@ -105,7 +104,7 @@ uint32 SmackerScene::handleMessage(int messageNum, const MessageParam ¶m, En
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0009:
- if ((_fieldDF && _flag1) || (_canAbort && _flag1))
+ if ((_videoPlayedBefore && _flag1) || (_canAbort && _flag1))
_playNextVideoFlag = true;
break;
case 0x000C:
diff --git a/engines/neverhood/smackerscene.h b/engines/neverhood/smackerscene.h
index 0523766..54de28a 100644
--- a/engines/neverhood/smackerscene.h
+++ b/engines/neverhood/smackerscene.h
@@ -40,7 +40,7 @@ protected:
bool _doubleSurface;
bool _flag1;
bool _canAbort;
- bool _fieldDF;
+ bool _videoPlayedBefore;
bool _playNextVideoFlag;
int _fileHashListIndex;
const uint32 *_fileHashList;
Commit: b8d939a94b364a8d992a5053b527a822babccd37
https://github.com/scummvm/scummvm/commit/b8d939a94b364a8d992a5053b527a822babccd37
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:06-07:00
Commit Message:
NEVERHOOD: Implement Scene2802 (radio tuning scene)
- Handle mouse button up events
- Use the SmackerDecoder's rewind
- Implement SmackerPlayer::gotoFrame (slow but better than nothing)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
engines/neverhood/neverhood.cpp
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 0c2e090..a85d8a9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -46,6 +46,27 @@
namespace Neverhood {
+static const uint32 kScene2801MusicFileHashes[] = {
+ 0x82B22000,
+ 0x02B22004,
+ 0x42B22000,
+ 0x03322008,
+ 0x02B22001,
+ 0x02B22008,
+ 0x02B22020,
+ 0x03322001,
+ 0x03322002,
+ 0x03322004,
+ 0x03322040,
+ 0x02B22002,
+ 0x02B22010,
+ 0x03322010,
+ 0x02B22040,
+ 0x43322000,
+ 0x83322000,
+ 0x03322020
+};
+
GameModule::GameModule(NeverhoodEngine *vm)
: Module(vm, NULL), _moduleNum(-1) {
@@ -85,6 +106,16 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
}
}
+void GameModule::handleMouseUp(int16 x, int16 y) {
+ if (_childObject) {
+ NPoint mousePos;
+ mousePos.x = x;
+ mousePos.y = y;
+ debug(2, "GameModule::handleMouseUp(%d, %d)", x, y);
+ sendPointMessage(_childObject, 2, mousePos);
+ }
+}
+
void GameModule::handleSpaceKey() {
if (_childObject) {
debug(2, "GameModule::handleSpaceKey()");
@@ -279,6 +310,12 @@ void GameModule::initScene3009Vars() {
}
}
+uint32 GameModule::getScene2802MusicFileHash() {
+ uint musicNum = getGlobalVar(0x08CC0828);
+ return (musicNum % 5 != 0) ? 0 : kScene2801MusicFileHashes[CLIP<uint>(musicNum / 5, 0, 17)];
+}
+
+
uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -321,7 +358,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
- createModule(3000, -1);
+ createModule(2800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 7031bbb..82e6fa5 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -37,6 +37,7 @@ public:
void startup();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
+ void handleMouseUp(int16 x, int16 y);
void handleSpaceKey();
void initScene1307Vars();
void initScene1405Vars();
@@ -44,6 +45,7 @@ public:
void initScene2808Vars1();
void initScene2808Vars2();
void initScene3009Vars();
+ uint32 getScene2802MusicFileHash();
protected:
Entity *_prevChildObject;
bool _someFlag1;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 4232b79..1a51571 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -31,9 +31,9 @@
namespace Neverhood {
Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
+ : Module(vm, parentModule), _musicResource(NULL) {
- _fileHash = 0;
+ _currentMusicFileHash = 0;
// TODO music stuff
_vm->_soundMan->addMusic(0x64210814, 0xD2FA4D14);
setGlobalVar(0x28D8C940, 1);
@@ -51,7 +51,10 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
}
Module2800::~Module2800() {
- // TODO music stuff
+ if (_musicResource) {
+ _musicResource->unload();
+ delete _musicResource;
+ }
_vm->_soundMan->deleteGroup(0x64210814);
}
@@ -65,6 +68,11 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 1:
_vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
+
+ // TODO!!
+
+ _childObject = new Scene2802(_vm, this, which);
+
#if 0
_flag = true; // DEBUG!
if (_flag) {
@@ -180,10 +188,10 @@ void Module2800::createScene(int sceneNum, int which) {
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 4);
break;
- //
case 1001:
+ _vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
+ createSmackerScene(0x00800801, true, true, false);
break;
- // TODO ...
}
SetUpdateHandler(&Module2800::updateScene);
_childObject->handleUpdate();
@@ -351,22 +359,51 @@ void Module2800::updateScene() {
case 26:
createScene(11, 2);
break;
- //
case 1001:
+ createScene(1, -1);
break;
}
} else {
switch (_vm->gameState().sceneNum) {
case 0:
- // TODO Module2800_updateMusic(true);
+ updateMusic(true);
break;
case 1:
- // TODO Module2800_updateMusic(false);
+ updateMusic(false);
break;
}
}
}
+void Module2800::updateMusic(bool halfVolume) {
+
+ uint32 newMusicFileHash = _vm->_gameModule->getScene2802MusicFileHash();
+
+ if (!_musicResource)
+ _musicResource = new MusicResource(_vm);
+
+ if (newMusicFileHash != _currentMusicFileHash) {
+ _currentMusicFileHash = newMusicFileHash;
+ if (_currentMusicFileHash != 0) {
+ _musicResource->load(_currentMusicFileHash);
+ _musicResource->setVolume(halfVolume ? 60 : 100);
+ _musicResource->play(0);
+ } else {
+ _musicResource->stop(0);
+ }
+ } else if (_currentMusicFileHash != 0) {
+ if (!_musicResource->isPlaying()) {
+ _musicResource->setVolume(halfVolume ? 60 : 100);
+ _musicResource->play(0);
+ } else {
+ _musicResource->setVolume(halfVolume ? 60 : 100);
+ }
+ } else {
+ _musicResource->stop(0);
+ }
+
+}
+
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
@@ -475,6 +512,168 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
+Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _countdownType(0), _countdown1(0), _countdown2(0) {
+
+ //DEBUG>>> Disable video
+ setGlobalVar(0x28D8C940, 0);
+ //DEBUG<<<
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene2802::handleMessage);
+ SetUpdateHandler(&Scene2802::update);
+ insertMouse435(0x008810A8, 20, 620);
+ _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x8284C100, true, true, true));
+ _smackerFrameNumber = getGlobalVar(0x08CC0828);
+ _smackerPlayer->gotoFrame(_smackerFrameNumber);
+ _vm->_soundMan->addSound(0x04360A18, 0x422630C2);
+ _vm->_soundMan->addSound(0x04360A18, 0x00632252);
+ _vm->_soundMan->addSound(0x04360A18, 0x00372241);
+ _vm->_soundMan->setSoundVolume(0x00372241, 60);
+ changeCountdownType(0, 0);
+ _vm->_soundMan->playSoundLooping(0x00372241);
+}
+
+Scene2802::~Scene2802() {
+ _vm->_soundMan->deleteSoundGroup(0x04360A18);
+ if (_smackerFrameNumber == 0) {
+ setGlobalVar(0x09880D40, 1);
+ setGlobalVar(0x08180ABC, 0);
+ } else if (_smackerFrameNumber == getGlobalVar(0x88880915)) {
+ setGlobalVar(0x09880D40, 0);
+ setGlobalVar(0x08180ABC, 1);
+ } else {
+ setGlobalVar(0x09880D40, 0);
+ setGlobalVar(0x08180ABC, 0);
+ }
+ setGlobalVar(0x08CC0828, _smackerFrameNumber);
+}
+
+void Scene2802::update() {
+ int prevCountdownType = _countdownType;
+ uint prevSmackerFrameNumber = _smackerFrameNumber;
+
+ Scene::update();
+ if (_countdown1 > 0)
+ --_countdown1;
+ else if (_countdownType == 1)
+ _countdownType = 3;
+ else if (_countdownType == 4)
+ _countdownType = 6;
+
+ switch (_countdownType) {
+ case 2:
+ if (_smackerFrameNumber < 90)
+ incSmackerFrameNumber(+1);
+ _countdownType = 0;
+ break;
+ case 3:
+ if (_countdown2 > 0)
+ --_countdown2;
+ else if (_smackerFrameNumber < 90) {
+ incSmackerFrameNumber(+1);
+ _countdown2 = 1;
+ } else
+ _countdownType = 0;
+ break;
+ case 5:
+ if (_smackerFrameNumber > 0)
+ incSmackerFrameNumber(-1);
+ _countdownType = 0;
+ break;
+ case 6:
+ if (_countdown2 > 0)
+ --_countdown2;
+ else if (_smackerFrameNumber > 0) {
+ incSmackerFrameNumber(-1);
+ _countdown2 = 1;
+ } else
+ _countdownType = 0;
+ break;
+
+ }
+
+ if (prevSmackerFrameNumber != _smackerFrameNumber)
+ _smackerPlayer->gotoFrame(_smackerFrameNumber);
+
+ if (prevCountdownType != _countdownType)
+ changeCountdownType(prevCountdownType, _countdownType);
+
+ if (getGlobalVar(0x28D8C940) && prevCountdownType != _countdownType && _smackerFrameNumber != 0) {
+ setGlobalVar(0x28D8C940, 0);
+ leaveScene(1);
+ }
+
+}
+
+uint32 Scene2802::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ int prevCountdownType = _countdownType;
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ leaveScene(0);
+ } else if (_countdownType == 0) {
+ if (param.asPoint().x > 180 && param.asPoint().x < 300 &&
+ param.asPoint().y > 130 && param.asPoint().y < 310) {
+ _countdownType = 4;
+ } else if (param.asPoint().x > 300 && param.asPoint().x < 400 &&
+ param.asPoint().y > 130 && param.asPoint().y < 310) {
+ _countdownType = 1;
+ }
+ if (_countdownType == 1 || _countdownType == 4) {
+ _countdown1 = 8;
+ changeCountdownType(0, _countdownType);
+ }
+ }
+ break;
+ case 0x0002: // TODO Implement button up event
+ if (_countdown1 == 0)
+ _countdownType = 0;
+ else {
+ if (_countdownType == 1)
+ _countdownType = 2;
+ else if (_countdownType == 4)
+ _countdownType = 5;
+ else
+ _countdownType = 0;
+ _countdown1 = 0;
+ }
+ if (prevCountdownType != _countdownType)
+ changeCountdownType(prevCountdownType, _countdownType);
+ break;
+ case 0x000D:
+ // DEBUG message
+ break;
+ }
+ return 0;
+}
+
+void Scene2802::incSmackerFrameNumber(int delta) {
+ _smackerFrameNumber += delta;
+ setGlobalVar(0x08CC0828, _smackerFrameNumber);
+}
+
+void Scene2802::changeCountdownType(int prevCountdownType, int newCountdownType) {
+
+ if (prevCountdownType == 3 || prevCountdownType == 6) {
+ _vm->_soundMan->stopSound(0x422630C2);
+ _vm->_soundMan->stopSound(0x00632252);
+ }
+
+ if (newCountdownType == 0) {
+ if (_vm->_gameModule->getScene2802MusicFileHash() != 0) {
+ _vm->_soundMan->stopSound(0x00632252);
+ }
+ else
+ _vm->_soundMan->playSoundLooping(0x00632252);
+ } else if (newCountdownType == 3 || newCountdownType == 6) {
+ _vm->_soundMan->playSoundLooping(0x422630C2);
+ _vm->_soundMan->playSoundLooping(0x00632252);
+ }
+
+}
+
AsScene2803LightCord::AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
_isPulled(false), _isBusy(false) {
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index f0403f4..ca8b058 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -37,15 +37,17 @@ public:
virtual ~Module2800();
protected:
bool _flag;
- uint32 _fileHash;
+ uint32 _currentMusicFileHash;
+ MusicResource *_musicResource;
void createScene(int sceneNum, int which);
void updateScene();
+ void updateMusic(bool halfVolume);
};
class Scene2801 : public Scene {
public:
Scene2801(NeverhoodEngine *vm, Module *parentModule, int which);
- ~Scene2801();
+ virtual ~Scene2801();
protected:
Sprite *_sprite1;
Sprite *_sprite2;
@@ -54,6 +56,22 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Scene2802 : public Scene {
+public:
+ Scene2802(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~Scene2802();
+protected:
+ SmackerPlayer *_smackerPlayer;
+ uint _smackerFrameNumber;
+ int _countdownType;
+ int _countdown1;
+ int _countdown2;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void incSmackerFrameNumber(int delta);
+ void changeCountdownType(int prevCountdownType, int newCountdownType);
+};
+
class AsScene2803LightCord : public AnimatedSprite {
public:
AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 4b75f68..cfeaf92 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -136,6 +136,10 @@ Common::Error NeverhoodEngine::run() {
case Common::EVENT_RBUTTONDOWN:
_gameModule->handleMouseDown(event.mouse.x, event.mouse.y);
break;
+ case Common::EVENT_LBUTTONUP:
+ case Common::EVENT_RBUTTONUP:
+ _gameModule->handleMouseUp(event.mouse.x, event.mouse.y);
+ break;
case Common::EVENT_QUIT:
_system->quit();
break;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 0ed6748..b491bc5 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -65,8 +65,8 @@ void SmackerDoubleSurface::draw() {
// SmackerPlayer
-SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag)
- : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _videoDone(false),
+SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag, bool paused)
+ : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _videoDone(false), _paused(paused),
_palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true),
_drawX(-1), _drawY(-1) {
@@ -104,7 +104,8 @@ void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
_palette = new Palette(_vm);
_palette->usePalette();
- _smackerDecoder->start();
+ if (!_paused)
+ _smackerDecoder->start();
}
@@ -121,8 +122,14 @@ void SmackerPlayer::close() {
_smackerSurface = NULL;
}
-void SmackerPlayer::gotoFrame(uint frameNumber) {
- // TODO?
+void SmackerPlayer::gotoFrame(int frameNumber) {
+ // NOTE Slow as hell but only used in Scene2802
+ if (frameNumber != _smackerDecoder->getCurFrame()) {
+ if (frameNumber < _smackerDecoder->getCurFrame())
+ rewind();
+ while (_smackerDecoder->getCurFrame() != frameNumber)
+ updateFrame();
+ }
}
uint32 SmackerPlayer::getFrameCount() {
@@ -147,20 +154,8 @@ void SmackerPlayer::setDrawPos(int16 x, int16 y) {
}
void SmackerPlayer::rewind() {
-
- // TODO Quite dirty, try to implement this in the decoder
-
- delete _smackerDecoder;
- _smackerDecoder = NULL;
- _stream = NULL;
-
- _smackerFirst = true;
-
- _stream = _vm->_res->createStream(_fileHash);
-
- _smackerDecoder = new Video::SmackerDecoder();
- _smackerDecoder->loadStream(_stream);
-
+ if (_smackerDecoder)
+ _smackerDecoder->rewind();
}
void SmackerPlayer::update() {
@@ -174,17 +169,22 @@ void SmackerPlayer::update() {
_dirtyFlag = false;
}
- if (!_smackerDecoder->endOfVideo()) {
- updateFrame();
- } else if (!_keepLastFrame) {
- // Inform the scene about the end of the video playback
- if (_scene)
- sendMessage(_scene, 0x3002, 0);
- _videoDone = true;
+ if (_paused) {
+ if (_smackerFirst)
+ updateFrame();
} else {
- rewind();
- updateFrame();
- _videoDone = false;
+ if (!_smackerDecoder->endOfVideo()) {
+ updateFrame();
+ } else if (!_keepLastFrame) {
+ // Inform the scene about the end of the video playback
+ if (_scene)
+ sendMessage(_scene, 0x3002, 0);
+ _videoDone = true;
+ } else {
+ rewind();
+ updateFrame();
+ _videoDone = false;
+ }
}
}
@@ -214,7 +214,7 @@ void SmackerPlayer::updateFrame() {
// TODO _vm->_screen->_skipUpdate = true;
_dirtyFlag = true;
-
+
if (_smackerDecoder->hasDirtyPalette())
updatePalette();
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index c480c2d..63c9ebb 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -49,12 +49,12 @@ public:
class SmackerPlayer : public Entity {
public:
- SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag);
+ SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag, bool paused = false);
~SmackerPlayer();
BaseSurface *getSurface() { return _smackerSurface; }
void open(uint32 fileHash, bool keepLastFrame);
void close();
- void gotoFrame(uint frameNumber);
+ void gotoFrame(int frameNumber);
uint32 getFrameCount();
uint32 getFrameNumber();
uint getStatus();
@@ -74,6 +74,7 @@ protected:
bool _keepLastFrame;
bool _videoDone;
bool _dirtyFlag;
+ bool _paused;
int _drawX, _drawY;
void update();
void updateFrame();
Commit: a80ec8c89c4cb102a92cf5e0fa2b2871d763486a
https://github.com/scummvm/scummvm/commit/a80ec8c89c4cb102a92cf5e0fa2b2871d763486a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:06-07:00
Commit Message:
NEVERHOOD: Implement Module2900, the teleporter
- Also fix a related bug in Module2000 (teleporter appearing animation didn't play)
Changed paths:
A engines/neverhood/module2900.cpp
A engines/neverhood/module2900.h
engines/neverhood/gamemodule.cpp
engines/neverhood/module.mk
engines/neverhood/module1100.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index a85d8a9..afd01f7 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -42,6 +42,7 @@
#include "neverhood/module2600.h"
#include "neverhood/module2700.h"
#include "neverhood/module2800.h"
+#include "neverhood/module2900.h"
#include "neverhood/module3000.h"
namespace Neverhood {
@@ -358,7 +359,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
- createModule(2800, -1);
+ createModule(2900, 1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -499,6 +500,12 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(V_MODULE_NAME, 0x64210814);
_childObject = new Module2800(_vm, this, which);
break;
+ case 2900:
+ setGlobalVar(V_MODULE_NAME, 0x81100020);
+ if (which >= 0)
+ setGlobalVar(0x0152899A, which);
+ _childObject = new Module2900(_vm, this, which);
+ break;
case 3000:
setGlobalVar(V_MODULE_NAME, 0x81293110);
_childObject = new Module3000(_vm, this, which);
@@ -629,6 +636,55 @@ void GameModule::updateModule() {
createModule(1800, 0);
}
break;
+ case 2900:
+ if (_moduleResult != 0xFFFFFFFF) {
+ switch (_moduleResult) {
+ case 0:
+ createModule(1300, 5);
+ break;
+ case 1:
+ createModule(2100, 1);
+ break;
+ case 2:
+ createModule(1100, 1);
+ break;
+ case 3:
+ setSubVar(0x2C145A98, 2, 1);
+ createModule(1700, 1);
+ break;
+ case 4:
+ createModule(2000, 0);
+ break;
+ case 5:
+ default:
+ createModule(2800, 1);
+ break;
+ }
+ } else {
+ switch (getGlobalVar(0x0152899A)) {
+ case 0:
+ createModule(1300, 6);
+ break;
+ case 1:
+ createModule(2100, 2);
+ break;
+ case 2:
+ createModule(1100, 2);
+ break;
+ case 3:
+ createModule(1700, 2);
+ break;
+ case 4:
+ createModule(2000, 1);
+ break;
+ case 5:
+ default:
+ createModule(2800, 2);
+ break;
+ }
+ }
+ setGlobalVar(0x0152899A, 0);
+ break;
case 3000:
if (_moduleResult == 1) {
createModule(1900, 0);
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 2ee28d2..5cd41c8 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -31,6 +31,7 @@ MODULE_OBJS = \
module2600.o \
module2700.o \
module2800.o \
+ module2900.o \
module3000.o \
mouse.o \
navigationscene.o \
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index a3e092b..3335155 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -44,9 +44,9 @@ Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
} else if (which == 1) {
- createScene(9, 1);
+ createScene(8, 1);
} else {
- createScene(9, 3);
+ createScene(8, 3);
}
_vm->_soundMan->addSoundList(0x0002C818, kModule1100SoundList);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index befcc34..75a6ebe 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -32,9 +32,9 @@ Module2000::Module2000(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
createScene(_vm->gameState().sceneNum, -1);
} else if (which == 0) {
- createScene(0, 3);
- } else if (which == 1) {
createScene(0, 1);
+ } else if (which == 1) {
+ createScene(0, 3);
}
}
diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h
index 4690913..cf7a613 100644
--- a/engines/neverhood/module2100.h
+++ b/engines/neverhood/module2100.h
@@ -71,7 +71,6 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-
class Scene2101 : public Scene {
public:
Scene2101(NeverhoodEngine *vm, Module *parentModule, int which);
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
new file mode 100644
index 0000000..2ebdb09
--- /dev/null
+++ b/engines/neverhood/module2900.cpp
@@ -0,0 +1,484 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/module2900.h"
+#include "neverhood/gamemodule.h"
+#include "neverhood/module1100.h"
+#include "neverhood/module1300.h"
+#include "neverhood/module1700.h"
+#include "neverhood/module2000.h"
+#include "neverhood/module2100.h"
+#include "neverhood/module2800.h"
+
+namespace Neverhood {
+
+Module2900::Module2900(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ if (which >= 0)
+ setGlobalVar(0x60826830, which);
+
+ createScene(0, 0);
+
+}
+
+void Module2900::createScene(int sceneNum, int which) {
+ debug("Module2900::createScene(%d, %d)", sceneNum, which);
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
+ case 0:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene2901(_vm, this, getGlobalVar(0x60826830));
+ break;
+ case 1:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene2805(_vm, this, which);
+ break;
+ case 2:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene2101(_vm, this, which);
+ break;
+ case 3:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1306(_vm, this, which);
+ break;
+ case 4:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1705(_vm, this, which);
+ break;
+ case 5:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1109(_vm, this, which);
+ break;
+ case 6:
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene2001(_vm, this, which);
+ break;
+ }
+ SetUpdateHandler(&Module2900::updateScene);
+ _childObject->handleUpdate();
+}
+
+void Module2900::updateScene() {
+ if (!updateChild()) {
+ switch (_sceneNum) {
+ case 0:
+ if (_moduleResult == 0xFFFFFFFF) {
+ leaveModule(0xFFFFFFFF);
+ } else {
+ _field2C = _moduleResult;
+ switch (getGlobalVar(0x60826830)) {
+ case 0:
+ createScene(3, 4);
+ break;
+ case 1:
+ createScene(2, 2);
+ break;
+ case 2:
+ createScene(5, 2);
+ break;
+ case 3:
+ createScene(4, 2);
+ break;
+ case 4:
+ createScene(6, 2);
+ break;
+ case 5:
+ createScene(1, 2);
+ break;
+ default:
+ leaveModule(_moduleResult);
+ break;
+ }
+ }
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ leaveModule(_field2C);
+ break;
+ }
+ }
+}
+
+static const uint32 kScene2901FileHashes1[] = {
+ 0x023023B4,
+ 0x36204507,
+ 0x046CF08E,
+ 0x9313A237,
+ 0xA651F246,
+ 0x02108034
+};
+
+static const uint32 kScene2901FileHashes2[] = {
+ 0x023B002B,
+ 0x0450336A,
+ 0xCF08A04E,
+ 0x3A233939,
+ 0x1F242A6D,
+ 0x08030029
+};
+
+static const uint32 kSsScene2901LocationButtonFileHashes[] = {
+ 0x2311326A,
+ 0x212323AC,
+ 0x10098138,
+ 0x25213167,
+ 0x1119A363,
+ 0x94452612,
+ 0x39464212,
+ 0x01860450,
+ 0x53002104,
+ 0x58E68412,
+ 0x18600300,
+ 0xB650A890,
+ 0x2452A7C4,
+ 0xA0232748,
+ 0x08862B02,
+ 0x2491E648,
+ 0x0010EB46,
+ 0x214C8A11,
+ 0x16A31921,
+ 0x0AC33A00,
+ 0x238028AA,
+ 0x26737A21,
+ 0x063039A8,
+ 0x51286C60,
+ 0x464006B4,
+ 0x42242538,
+ 0x20716010,
+ 0x4A2000AE,
+ 0x225124A6,
+ 0x28E82E45,
+ 0x58652C04,
+ 0xC82210A4,
+ 0x62A84060,
+ 0xC0693CB4,
+ 0x22212C64,
+ 0x5034EA71
+};
+
+static const NPoint kSsScene2901LocationButtonPoints[] = {
+ {525, 120}, {576, 149}, {587, 205},
+ {538, 232}, {484, 205}, {479, 153}
+};
+
+static const uint32 kSsScene2901LocationButtonLightFileHashes1[] = {
+ 0x03136246,
+ 0x2106216E,
+ 0x4025A13A,
+ 0x21816927,
+ 0x110B2202,
+ 0xCC0522B2,
+ 0x3CC24258,
+ 0x59C600F0,
+ 0x534A2480,
+ 0x50E61019,
+ 0x34400150,
+ 0x225BA090,
+ 0xB059AFC4,
+ 0xE093A741,
+ 0x0086BF09,
+ 0x3281E760,
+ 0xA048AB42,
+ 0x20649C01,
+ 0x14611904,
+ 0x26E33850,
+ 0x23A52A68,
+ 0xA2733024,
+ 0x10203880,
+ 0x1B2DE860,
+ 0x0644A6EC,
+ 0x426E20BC,
+ 0x80292014,
+ 0x4360B02E,
+ 0x22742664,
+ 0x98682705,
+ 0x0925B82C,
+ 0x5C2918A4,
+ 0xD2284920,
+ 0x41083CA6,
+ 0x6824A864,
+ 0x50266B10
+};
+
+static const uint32 kSsScene2901LocationButtonLightFileHashes2[] = {
+ 0x43C46D4C,
+ 0x43C4AD4C,
+ 0x43C52D4C,
+ 0x43C62D4C,
+ 0x43C02D4C,
+ 0x43CC2D4C
+};
+
+static const uint32 kSsScene2901BrokenButtonFileHashes[] = {
+ 0x3081BD3A,
+ 0xD3443003,
+ 0x0786A320,
+ 0xE3A22029,
+ 0x61611814,
+ 0x425848E2
+};
+
+static const uint32 kSsScene2901BigButtonFileHashes[] = {
+ 0x010D7748,
+ 0x9D02019A,
+ 0x351A2F43,
+ 0x448138E5,
+ 0x02788CF0,
+ 0x71718024
+};
+
+SsScene2901LocationButton::SsScene2901LocationButton(NeverhoodEngine *vm, Scene *parentScene, int which, uint index)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _index(index), _countdown1(0) {
+
+ _spriteResource.load2(kSsScene2901LocationButtonFileHashes[which * 6 + index]);
+ createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _rect.x1 = kSsScene2901LocationButtonPoints[_index].x - 25;
+ _rect.y1 = kSsScene2901LocationButtonPoints[_index].y - 25;
+ _rect.x2 = kSsScene2901LocationButtonPoints[_index].x + 25;
+ _rect.y2 = kSsScene2901LocationButtonPoints[_index].y + 25;
+ setVisible(false);
+ _needRefresh = true;
+ loadSound(0, 0x440430C0);
+ SetUpdateHandler(&SsScene2901LocationButton::update);
+ SetMessageHandler(&SsScene2901LocationButton::handleMessage);
+}
+
+void SsScene2901LocationButton::update() {
+ StaticSprite::update();
+ if (_countdown1 != 0 && (--_countdown1) == 0) {
+ setVisible(false);
+ }
+}
+
+uint32 SsScene2901LocationButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown1 == 0) {
+ playSound(0);
+ setVisible(true);
+ _countdown1 = 4;
+ sendMessage(_parentScene, 0x2001, _index);
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+SsScene2901LocationButtonLight::SsScene2901LocationButtonLight(NeverhoodEngine *vm, int which, uint index)
+ : StaticSprite(vm, 900), _index(index) {
+
+ _spriteResource.load2(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index]);
+ createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ setVisible(false);
+ _needRefresh = true;
+ loadSound(0, kSsScene2901LocationButtonLightFileHashes2[_index]);
+}
+
+void SsScene2901LocationButtonLight::show() {
+ playSound(0);
+ setVisible(true);
+ StaticSprite::update();
+}
+
+void SsScene2901LocationButtonLight::hide() {
+ setVisible(false);
+ StaticSprite::update();
+}
+
+SsScene2901BrokenButton::SsScene2901BrokenButton(NeverhoodEngine *vm, int which)
+ : StaticSprite(vm, 900) {
+
+ _spriteResource.load2(kSsScene2901BrokenButtonFileHashes[which]);
+ createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _needRefresh = true;
+ StaticSprite::update();
+}
+
+SsScene2901BigButton::SsScene2901BigButton(NeverhoodEngine *vm, Scene *parentScene, int which)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _which(which), _countdown1(0) {
+
+ _spriteResource.load2(kSsScene2901BigButtonFileHashes[which]);
+ createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ _rect.x1 = 62;
+ _rect.y1 = 94;
+ _rect.x2 = 322;
+ _rect.y2 = 350;
+ setVisible(false);
+ _needRefresh = true;
+ loadSound(0, 0xF3D420C8);
+ SetUpdateHandler(&SsScene2901BigButton::update);
+ SetMessageHandler(&SsScene2901BigButton::handleMessage);
+}
+
+void SsScene2901BigButton::update() {
+ StaticSprite::update();
+ if (_countdown1 != 0 && (--_countdown1) == 0) {
+ setVisible(false);
+ sendMessage(_parentScene, 0x2000, 0);
+ }
+}
+
+uint32 SsScene2901BigButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown1 == 0) {
+ playSound(0);
+ setVisible(true);
+ _countdown1 = 4;
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _currLocationButtonNum(which), _selectedButtonNum(which),
+ _currWhirlButtonNum(0), _prevWhirlButtonNum(0), _countdown1(1), _skipCountdown(0), _blinkOn(0) {
+
+ _isButton2Broken = getGlobalVar(V_ENTRANCE_OPEN) != 0;
+
+ //DEBUG>>> Enable all locations
+ for (int i = 0; i < 6; i++)
+ setSubVar(0x2C145A98, i, 1);
+ //DEBUG<<<
+
+ setSubVar(0x2C145A98, which, 1);
+ setSubVar(0x2C145A98, 5, 1);
+ setSubVar(0x2C145A98, 4, 1);
+
+ if (_currLocationButtonNum == 3)
+ setSubVar(0x2C145A98, 2, 1);
+
+ _surfaceFlag = true;
+ setBackground(kScene2901FileHashes1[_currLocationButtonNum]);
+ setPalette(kScene2901FileHashes1[_currLocationButtonNum]);
+
+ for (uint i = 0; i < 6; ++i) {
+ if (i != 2 || !_isButton2Broken) {
+ _ssLocationButtons[i] = insertSprite<SsScene2901LocationButton>(this, _currLocationButtonNum, i);
+ _vm->_collisionMan->addSprite(_ssLocationButtons[i]);
+ _ssLocationButtonLights[i] = insertSprite<SsScene2901LocationButtonLight>(_currLocationButtonNum, i);
+ }
+ }
+
+ if (_isButton2Broken)
+ insertSprite<SsScene2901BrokenButton>(_currLocationButtonNum);
+
+ _ssBigButton = insertSprite<SsScene2901BigButton>(this, _currLocationButtonNum);
+ _vm->_collisionMan->addSprite(_ssBigButton);
+
+ insertMouse435(kScene2901FileHashes2[_currLocationButtonNum], 20, 620);
+
+ SetUpdateHandler(&Scene2901::update);
+ SetMessageHandler(&Scene2901::handleMessage);
+
+}
+
+void Scene2901::update() {
+ Scene::update();
+ if (_countdown1 != 0 && (--_countdown1) == 0) {
+ if (_currLocationButtonNum == _selectedButtonNum) {
+ _ssLocationButtonLights[_currWhirlButtonNum]->hide();
+ ++_currWhirlButtonNum;
+ while (!getSubVar(0x2C145A98, _currWhirlButtonNum) || (_currWhirlButtonNum == 2 && _isButton2Broken) || _currLocationButtonNum == _currWhirlButtonNum) {
+ ++_currWhirlButtonNum;
+ if (_currWhirlButtonNum >= 6)
+ _currWhirlButtonNum = 0;
+ }
+ if (_currWhirlButtonNum != _prevWhirlButtonNum || _skipCountdown == 0) {
+ _ssLocationButtonLights[_currWhirlButtonNum]->show();
+ _skipCountdown = 4;
+ }
+ _countdown1 = 2;
+ --_skipCountdown;
+ _prevWhirlButtonNum = _currWhirlButtonNum;
+ } else if (_blinkOn) {
+ _blinkOn = false;
+ _ssLocationButtonLights[_selectedButtonNum]->hide();
+ _countdown1 = 16;
+ } else {
+ _blinkOn = true;
+ _ssLocationButtonLights[_selectedButtonNum]->show();
+ _countdown1 = 4;
+ }
+ }
+}
+
+uint32 Scene2901::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ leaveScene(0xFFFFFFFF);
+ }
+ break;
+ case 0x2000:
+ if (_currLocationButtonNum != _selectedButtonNum) {
+ leaveScene(_selectedButtonNum);
+ }
+ break;
+ case 0x2001:
+ if (_currLocationButtonNum == _selectedButtonNum)
+ _selectedButtonNum = _currWhirlButtonNum;
+ _ssLocationButtonLights[_selectedButtonNum]->hide();
+ _selectedButtonNum = param.asInteger();
+ if (!getSubVar(0x2C145A98, _selectedButtonNum))
+ _selectedButtonNum = _currLocationButtonNum;
+ break;
+ }
+ return 0;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/module2900.h b/engines/neverhood/module2900.h
new file mode 100644
index 0000000..7d4e1e4
--- /dev/null
+++ b/engines/neverhood/module2900.h
@@ -0,0 +1,102 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NEVERHOOD_MODULE2900_H
+#define NEVERHOOD_MODULE2900_H
+
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+// Module2900
+
+class Module2900 : public Module {
+public:
+ Module2900(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ int _sceneNum;
+ int _field2C;
+ void createScene(int sceneNum, int which);
+ void updateScene();
+ void updateMusic(bool halfVolume);
+};
+
+class SsScene2901LocationButton : public StaticSprite {
+public:
+ SsScene2901LocationButton(NeverhoodEngine *vm, Scene *parentScene, int which, uint index);
+protected:
+ Scene *_parentScene;
+ uint _index;
+ int _countdown1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class SsScene2901LocationButtonLight : public StaticSprite {
+public:
+ SsScene2901LocationButtonLight(NeverhoodEngine *vm, int which, uint index);
+ void show();
+ void hide();
+protected:
+ uint _index;
+};
+
+class SsScene2901BrokenButton : public StaticSprite {
+public:
+ SsScene2901BrokenButton(NeverhoodEngine *vm, int which);
+};
+
+class SsScene2901BigButton : public StaticSprite {
+public:
+ SsScene2901BigButton(NeverhoodEngine *vm, Scene *parentScene, int which);
+protected:
+ Scene *_parentScene;
+ int _which;
+ int _countdown1;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class Scene2901 : public Scene {
+public:
+ Scene2901(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ Sprite *_ssLocationButtons[6];
+ SsScene2901LocationButtonLight *_ssLocationButtonLights[6];
+ Sprite *_ssBigButton;
+ int _currWhirlButtonNum;
+ int _prevWhirlButtonNum;
+ int _countdown1;
+ int _currLocationButtonNum;
+ int _selectedButtonNum;
+ int _skipCountdown;
+ int _blinkOn;
+ bool _isButton2Broken;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MODULE2900_H */
Commit: fa53c0cf8350a873a3278c5debaee1562f51e15b
https://github.com/scummvm/scummvm/commit/fa53c0cf8350a873a3278c5debaee1562f51e15b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:07-07:00
Commit Message:
NEVERHOOD: Work on the resource system:
- Remove unused stuff
- Shuffle some stuff around
Changed paths:
engines/neverhood/blbarchive.cpp
engines/neverhood/blbarchive.h
engines/neverhood/navigationscene.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/resourceman.cpp
engines/neverhood/resourceman.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index cb422a1..5551ff0 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -56,7 +56,8 @@ BlbArchive::~BlbArchive() {
}
void BlbArchive::open(const Common::String &filename) {
- BlbHeader header;
+ BlbHeader header;
+ uint16 *extDataOffsets;
_entries.clear();
@@ -72,7 +73,7 @@ void BlbArchive::open(const Common::String &filename) {
if (header.id1 != 0x2004940 || header.id2 != 7 || header.fileSize != _fd.size())
error("BlbArchive::open() %s seems to be corrupt", filename.c_str());
- debug(2, "fileCount = %d", header.fileCount);
+ debug(2, "%s: fileCount = %d", filename.c_str(), header.fileCount);
_entries.reserve(header.fileCount);
@@ -83,63 +84,80 @@ void BlbArchive::open(const Common::String &filename) {
_entries.push_back(entry);
}
+ extDataOffsets = new uint16[header.fileCount];
+
// Load file records
for (uint i = 0; i < header.fileCount; i++) {
BlbArchiveEntry &entry = _entries[i];
entry.type = _fd.readByte();
entry.comprType = _fd.readByte();
- entry.extDataOfs = _fd.readUint16LE();
+ //entry.extDataOfs = _fd.readUint16LE();
+ entry.extData = NULL;
+ extDataOffsets[i] = _fd.readUint16LE();
entry.timeStamp = _fd.readUint32LE();
entry.offset = _fd.readUint32LE();
entry.diskSize = _fd.readUint32LE();
entry.size = _fd.readUint32LE();
debug(2, "%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
- entry.fileHash, entry.type, entry.comprType, entry.extDataOfs, entry.timeStamp,
+ entry.fileHash, entry.type, entry.comprType, extDataOffsets[i], entry.timeStamp,
entry.offset, entry.diskSize, entry.size);
}
-
+
// Load ext data
if (header.extDataSize > 0) {
_extData = new byte[header.extDataSize];
_fd.read(_extData, header.extDataSize);
+ for (uint i = 0; i < header.fileCount; i++)
+ _entries[i].extData = extDataOffsets[i] > 0 ? _extData + extDataOffsets[i] - 1 : NULL;
}
+ delete[] extDataOffsets;
+
}
void BlbArchive::load(uint index, byte *buffer, uint32 size) {
+ load(&_entries[index], buffer, size);
+}
+
+void BlbArchive::load(BlbArchiveEntry *entry, byte *buffer, uint32 size) {
Common::StackLock lock(_mutex);
- BlbArchiveEntry &entry = _entries[index];
+ _fd.seek(entry->offset);
- _fd.seek(entry.offset);
-
- switch (entry.comprType) {
+ switch (entry->comprType) {
case 1: // Uncompressed
if (size == 0)
- size = entry.diskSize;
+ size = entry->diskSize;
_fd.read(buffer, size);
break;
case 3: // DCL-compressed
- if (!Common::decompressDCL(&_fd, buffer, entry.diskSize, entry.size)) {
- debug("decompressDCL(diskSize: %d; size: %d)", entry.diskSize, entry.size);
- debug("-> fileHash: %08X; type: %d; offset: %08X; endOffset: %08X", entry.fileHash, entry.type, entry.offset, entry.offset + entry.diskSize);
+ if (!Common::decompressDCL(&_fd, buffer, entry->diskSize, entry->size)) {
+ debug("decompressDCL(diskSize: %d; size: %d)", entry->diskSize, entry->size);
+ debug("-> fileHash: %08X; type: %d; offset: %08X; endOffset: %08X", entry->fileHash, entry->type, entry->offset, entry->offset + entry->diskSize);
debug("-> fd.pos() = %08X", _fd.pos());
}
break;
default:
- error("BlbArchive::load() Unknown compression type %d", entry.comprType);
+ error("BlbArchive::load() Unknown compression type %d", entry->comprType);
}
}
byte *BlbArchive::getEntryExtData(uint index) {
- BlbArchiveEntry &entry = _entries[index];
- return (_extData && entry.extDataOfs != 0) ? &_extData[entry.extDataOfs - 1] : NULL;
+ return getEntryExtData(&_entries[index]);
+}
+
+byte *BlbArchive::getEntryExtData(BlbArchiveEntry *entry) {
+ //return (_extData && entry->extDataOfs != 0) ? &_extData[entry->extDataOfs - 1] : NULL;
+ return entry->extData;
}
Common::SeekableReadStream *BlbArchive::createStream(uint index) {
- const BlbArchiveEntry &entry = _entries[index];
- return new SafeMutexedSeekableSubReadStream(&_fd, entry.offset, entry.offset + entry.diskSize,
+ return createStream(&_entries[index]);
+}
+
+Common::SeekableReadStream *BlbArchive::createStream(BlbArchiveEntry *entry) {
+ return new SafeMutexedSeekableSubReadStream(&_fd, entry->offset, entry->offset + entry->diskSize,
DisposeAfterUse::NO,_mutex);
}
diff --git a/engines/neverhood/blbarchive.h b/engines/neverhood/blbarchive.h
index cd2fd11..620b12b 100644
--- a/engines/neverhood/blbarchive.h
+++ b/engines/neverhood/blbarchive.h
@@ -44,7 +44,7 @@ struct BlbArchiveEntry {
uint32 fileHash;
byte type;
byte comprType;
- uint16 extDataOfs;
+ byte *extData;
uint32 timeStamp;
uint32 offset;
uint32 diskSize;
@@ -57,11 +57,14 @@ public:
~BlbArchive();
void open(const Common::String &filename);
void load(uint index, byte *buffer, uint32 size);
+ void load(BlbArchiveEntry *entry, byte *buffer, uint32 size);
byte *getEntryExtData(uint index);
+ byte *getEntryExtData(BlbArchiveEntry *entry);
uint32 getSize(uint index) { return _entries[index].size; }
BlbArchiveEntry *getEntry(uint index) { return &_entries[index]; }
uint getCount() { return _entries.size(); }
Common::SeekableReadStream *createStream(uint index);
+ Common::SeekableReadStream *createStream(BlbArchiveEntry *entry);
private:
Common::File _fd;
Common::Mutex _mutex;
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 5dc80c9..bf3de5d 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -80,6 +80,10 @@ void NavigationScene::update() {
_vm->_screen->clear();
_vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_smackerDone = false;
+ /*
+ if (!_interactive)
+ _smackerDone = true;
+ */
_smackerFileHash = 0;
} else if (_smackerDone) {
if (_leaveSceneAfter) {
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index cfeaf92..72fa360 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -238,11 +238,11 @@ void NeverhoodEngine::dumpAllResources() {
for (uint i = 0; i < entriesCount; i++) {
const ResourceFileEntry &entry = _res->getEntry(i);
- int type = _res->getResourceTypeByHash(entry.fileHash);
- debug("hash: %08X; type: %d", entry.fileHash, type);
+ int type = _res->getResourceTypeByHash(entry.archiveEntry->fileHash);
+ debug("hash: %08X; type: %d", entry.archiveEntry->fileHash, type);
if (type == 4) {
AnimResource anim(this);
- anim.load(entry.fileHash);
+ anim.load(entry.archiveEntry->fileHash);
for (uint frameIndex = 0; frameIndex < anim.getFrameCount(); frameIndex++) {
const AnimFrameInfo &frameInfo = anim.getFrameInfo(frameIndex);
int16 width = (frameInfo.rect.width + 3) & 0xFFFC;
@@ -251,8 +251,8 @@ void NeverhoodEngine::dumpAllResources() {
anim.draw(frameIndex, pixels, width, false, false);
Common::String filename =
frameInfo.frameHash != 0
- ? Common::String::format("%08X_%03d_%08X.tga", entry.fileHash, frameIndex, frameInfo.frameHash)
- : Common::String::format("%08X_%03d.tga", entry.fileHash, frameIndex);
+ ? Common::String::format("%08X_%03d_%08X.tga", entry.archiveEntry->fileHash, frameIndex, frameInfo.frameHash)
+ : Common::String::format("%08X_%03d.tga", entry.archiveEntry->fileHash, frameIndex);
writeTga(filename.c_str(), pixels, vgaPalette, width, frameInfo.rect.height);
delete[] pixels;
}
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 28cef36..eb6aa01 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -32,49 +32,40 @@ ResourceMan::~ResourceMan() {
void ResourceMan::addArchive(const Common::String &filename) {
BlbArchive *archive = new BlbArchive();
- uint archiveIndex = _archives.size();
archive->open(filename);
_archives.push_back(archive);
debug(3, "ResourceMan::addArchive(%s) %d files", filename.c_str(), archive->getCount());
- _entries.reserve(_entries.size() + archive->getCount());
for (uint archiveEntryIndex = 0; archiveEntryIndex < archive->getCount(); archiveEntryIndex++) {
BlbArchiveEntry *archiveEntry = archive->getEntry(archiveEntryIndex);
ResourceFileEntry *entry = findEntrySimple(archiveEntry->fileHash);
if (entry) {
- if (archiveEntry->timeStamp > _archives[entry->archiveIndex]->getEntry(entry->entryIndex)->timeStamp) {
- entry->archiveIndex = archiveIndex;
- entry->entryIndex = archiveEntryIndex;
+ if (archiveEntry->timeStamp > entry->archiveEntry->timeStamp) {
+ entry->archive = archive;
+ entry->archiveEntry = archiveEntry;
}
} else {
ResourceFileEntry newEntry;
- newEntry.fileHash = archiveEntry->fileHash;
newEntry.resourceHandle = -1;
- newEntry.archiveIndex = archiveIndex;
- newEntry.entryIndex = archiveEntryIndex;
- _entries.push_back(newEntry);
+ newEntry.archive = archive;
+ newEntry.archiveEntry = archiveEntry;
+ _entries[archiveEntry->fileHash] = newEntry;
}
}
+ debug("_entries.size() = %d", _entries.size());
}
ResourceFileEntry *ResourceMan::findEntrySimple(uint32 fileHash) {
- for (uint i = 0; i < _entries.size(); i++) {
- if (_entries[i].fileHash == fileHash)
- return &_entries[i];
- }
- return NULL;
+ EntriesMap::iterator p = _entries.find(fileHash);
+ return p != _entries.end() ? &(*p)._value : NULL;
}
ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash) {
ResourceFileEntry *entry = findEntrySimple(fileHash);
- for (; entry && getArchiveEntry(entry)->comprType == 0x65; fileHash = getArchiveEntry(entry)->diskSize)
+ for (; entry && entry->archiveEntry->comprType == 0x65; fileHash = entry->archiveEntry->diskSize)
entry = findEntrySimple(fileHash);
return entry;
}
-BlbArchiveEntry *ResourceMan::getArchiveEntry(ResourceFileEntry *entry) const {
- return _archives[entry->archiveIndex]->getEntry(entry->entryIndex);
-}
-
int ResourceMan::useResource(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
if (!entry)
@@ -83,11 +74,7 @@ int ResourceMan::useResource(uint32 fileHash) {
_resources[entry->resourceHandle]->useRefCount++;
} else {
Resource *resource = new Resource();
- resource->fileHash = entry->fileHash;
- resource->archiveIndex = entry->archiveIndex;
- resource->entryIndex = entry->entryIndex;
- resource->data = NULL;
- resource->dataRefCount = 0;
+ resource->entry = entry;
resource->useRefCount = 1;
entry->resourceHandle = (int)_resources.size();
_resources.push_back(resource);
@@ -103,86 +90,68 @@ void ResourceMan::unuseResource(int resourceHandle) {
resource->useRefCount--;
}
-void ResourceMan::unuseResourceByHash(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- if (entry->resourceHandle != -1)
- unuseResource(entry->resourceHandle);
-}
-
-int ResourceMan::getResourceHandleByHash(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- return entry->resourceHandle;
-}
-
-bool ResourceMan::isResourceDataValid(int resourceHandle) const {
- if (resourceHandle < 0)
- return false;
- return _resources[resourceHandle]->data != NULL;
-}
-
uint32 ResourceMan::getResourceSize(int resourceHandle) const {
if (resourceHandle < 0)
return 0;
Resource *resource = _resources[resourceHandle];
- return _archives[resource->archiveIndex]->getEntry(resource->entryIndex)->size;
+ return resource->entry->archiveEntry->size;
}
byte ResourceMan::getResourceType(int resourceHandle) {
if (resourceHandle < 0)
return 0;
Resource *resource = _resources[resourceHandle];
- return _archives[resource->archiveIndex]->getEntry(resource->entryIndex)->type;
+ return resource->entry->archiveEntry->type;
}
byte ResourceMan::getResourceTypeByHash(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
- return getArchiveEntry(entry)->type;
+ return entry->archiveEntry->type;
}
byte *ResourceMan::getResourceExtData(int resourceHandle) {
if (resourceHandle < 0)
return NULL;
Resource *resource = _resources[resourceHandle];
- return _archives[resource->archiveIndex]->getEntryExtData(resource->entryIndex);
+ return resource->entry->archive->getEntryExtData(resource->entry->archiveEntry);
}
byte *ResourceMan::getResourceExtDataByHash(uint32 fileHash) {
ResourceFileEntry *entry = findEntrySimple(fileHash);
- return entry ? _archives[entry->archiveIndex]->getEntryExtData(entry->entryIndex) : NULL;
+ return entry ? entry->archive->getEntryExtData(entry->archiveEntry) : NULL;
}
byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
if (resourceHandle < 0)
return NULL;
Resource *resource = _resources[resourceHandle];
- if (resource->data != NULL) {
- resource->dataRefCount++;
+ ResourceData *resourceData = _data[resource->entry->archiveEntry->fileHash];
+ if (!resourceData) {
+ resourceData = new ResourceData();
+ _data[resource->entry->archiveEntry->fileHash] = resourceData;
+ }
+ if (resourceData->data != NULL) {
+ resourceData->dataRefCount++;
} else {
- BlbArchive *archive = _archives[resource->archiveIndex];
- BlbArchiveEntry *archiveEntry = archive->getEntry(resource->entryIndex);
- resource->data = new byte[archiveEntry->size];
- archive->load(resource->entryIndex, resource->data, 0);
- resource->dataRefCount = 1;
+ resourceData->data = new byte[resource->entry->archiveEntry->size];
+ resource->entry->archive->load(resource->entry->archiveEntry, resourceData->data, 0);
+ resourceData->dataRefCount = 1;
}
- return resource->data;
+ return resourceData->data;
}
void ResourceMan::unloadResource(int resourceHandle) {
if (resourceHandle < 0)
return;
Resource *resource = _resources[resourceHandle];
- if (resource->dataRefCount > 0)
- resource->dataRefCount--;
-}
-
-void ResourceMan::freeResource(Resource *resource) {
- delete[] resource->data;
- resource->data = NULL;
+ ResourceData *resourceData = _data[resource->entry->archiveEntry->fileHash];
+ if (resourceData && resourceData->dataRefCount > 0)
+ resourceData->dataRefCount--;
}
Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
- return _archives[entry->archiveIndex]->createStream(entry->entryIndex);
+ return entry->archive->createStream(entry->archiveEntry);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
index ed5bffa..5ca8fa2 100644
--- a/engines/neverhood/resourceman.h
+++ b/engines/neverhood/resourceman.h
@@ -25,26 +25,43 @@
#include "common/array.h"
#include "common/file.h"
+#include "common/hashmap.h"
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
namespace Neverhood {
struct ResourceFileEntry {
- uint32 fileHash;
int resourceHandle;
- uint archiveIndex;
- uint entryIndex;
+ BlbArchive *archive;
+ BlbArchiveEntry *archiveEntry;
};
struct Resource {
- uint32 fileHash;
- uint archiveIndex;
- uint entryIndex;
+ ResourceFileEntry *entry;
+ int useRefCount;
+};
+
+struct ResourceData {
byte *data;
int dataRefCount;
- int useRefCount;
+ ResourceData() : data(NULL), dataRefCount() {}
+};
+
+#if 0
+class ResourceMan;
+
+struct ResourceHandle {
+public:
+ ResourceHandle();
+ ~ResourceHandle();
+ const byte *data();
+ uint32 size() const { return _archiveEntry ? _archiveEntry->size : 0 };
+protected:
+ ResourceMan *_res;
+ ResourceFileEntry *_resourceFileEntry;
};
+#endif
class ResourceMan {
public:
@@ -53,12 +70,8 @@ public:
void addArchive(const Common::String &filename);
ResourceFileEntry *findEntrySimple(uint32 fileHash);
ResourceFileEntry *findEntry(uint32 fileHash);
- BlbArchiveEntry *getArchiveEntry(ResourceFileEntry *entry) const;
int useResource(uint32 fileHash);
void unuseResource(int resourceHandle);
- void unuseResourceByHash(uint32 fileHash);
- int getResourceHandleByHash(uint32 fileHash);
- bool isResourceDataValid(int resourceHandle) const;
uint32 getResourceSize(int resourceHandle) const;
byte getResourceType(int resourceHandle);
byte getResourceTypeByHash(uint32 fileHash);
@@ -66,13 +79,17 @@ public:
byte *getResourceExtDataByHash(uint32 fileHash);
byte *loadResource(int resourceHandle, bool moveToFront = false);
void unloadResource(int resourceHandle);
- void freeResource(Resource *resource);
Common::SeekableReadStream *createStream(uint32 fileHash);
const ResourceFileEntry& getEntry(uint index) { return _entries[index]; }
uint getEntryCount() { return _entries.size(); }
-private:
+#if 0
+ ResourceHandle getResource(uint32 fileHash);
+#endif
+protected:
+ typedef Common::HashMap<uint32, ResourceFileEntry> EntriesMap;
Common::Array<BlbArchive*> _archives;
- Common::Array<ResourceFileEntry> _entries;
+ EntriesMap _entries;
+ Common::HashMap<uint32, ResourceData*> _data;
Common::Array<Resource*> _resources;
};
Commit: a724e603dace28b1fc4d1f9036849c119712c93a
https://github.com/scummvm/scummvm/commit/a724e603dace28b1fc4d1f9036849c119712c93a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:07-07:00
Commit Message:
NEVERHOOD: Use CursorMan
- Only update entities according to the current frame rate but run the actual game loop at a faster rate so the mouse cursor movement doesn't get choppy
Changed paths:
engines/neverhood/mouse.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 03b1478..a1c4a9a 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -21,11 +21,10 @@
*/
#include "neverhood/mouse.h"
+#include "graphics/cursorman.h"
namespace Neverhood {
-// TODO: Use CursorMan
-
Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect)
: StaticSprite(vm, 2000), _mouseType(kMouseType433),
_mouseCursorResource(vm), _frameNum(0) {
@@ -95,64 +94,59 @@ void Mouse::update() {
uint32 Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
debug(7, "Mouse::handleMessage(%04X)", messageNum);
- uint32 messageResult = 0;
- if (messageNum != 5) {
- messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2064:
- _x = param.asPoint().x;
- _y = param.asPoint().y;
- switch (_type) {
- case 1:
- if (_x >= 320)
- messageResult = 1;
- else
- messageResult = 0;
- break;
- case 2:
- default:
- if (_x < 100)
- messageResult = 0;
- else if (_x > 540)
- messageResult = 1;
- else
- messageResult = 2;
- break;
- case 3:
- if (_x < 100)
- messageResult = 0;
- else if (_x > 540)
- messageResult = 1;
- else
- messageResult = 4;
- break;
- case 4:
- if (_x < 100)
- messageResult = 0;
- else if (_x > 540)
- messageResult = 1;
- else if (_y >= 150)
- messageResult = 2;
- else
- messageResult = 3;
- break;
- case 5:
- if (_y >= 240)
- messageResult = 4;
- else
- messageResult = 3;
- break;
- }
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2064:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ switch (_type) {
+ case 1:
+ if (_x >= 320)
+ messageResult = 1;
+ else
+ messageResult = 0;
+ break;
+ case 2:
+ default:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else
+ messageResult = 2;
+ break;
+ case 3:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else
+ messageResult = 4;
+ break;
+ case 4:
+ if (_x < 100)
+ messageResult = 0;
+ else if (_x > 540)
+ messageResult = 1;
+ else if (_y >= 150)
+ messageResult = 2;
+ else
+ messageResult = 3;
break;
- case 0x4002:
- _x = param.asPoint().x;
- _y = param.asPoint().y;
- updateCursorNum();
- processDelta();
+ case 5:
+ if (_y >= 240)
+ messageResult = 4;
+ else
+ messageResult = 3;
break;
}
- } else {
- // TODO: Debug stuff
+ break;
+ case 0x4002:
+ _x = param.asPoint().x;
+ _y = param.asPoint().y;
+ updateCursorNum();
+ processDelta();
+ break;
}
return messageResult;
}
@@ -178,6 +172,9 @@ void Mouse::updateCursor() {
_needRefresh = false;
_drawRect = _mouseCursorResource.getRect();
_surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
+ Graphics::Surface *cursorSurface = _surface->getSurface();
+ CursorMan.replaceCursor((const byte*)cursorSurface->pixels,
+ cursorSurface->w, cursorSurface->h, -_drawRect.x, -_drawRect.y, 0);
}
}
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 72fa360..5152def 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -106,6 +106,8 @@ Common::Error NeverhoodEngine::run() {
_gameModule = new GameModule(this);
_gameModule->startup();
+
+ uint32 nextFrameTime = 0;
// Preliminary main loop, needs some more work but works for testing
while (!shouldQuit()) {
@@ -148,13 +150,16 @@ Common::Error NeverhoodEngine::run() {
}
}
- //debug("millis %d", _system->getMillis());
- _gameModule->handleUpdate();
- _gameModule->draw();
+ if (_system->getMillis() >= nextFrameTime) {
+ _gameModule->handleUpdate();
+ _gameModule->draw();
+ nextFrameTime = _screen->getNextFrameTime();
+ };
+
_soundMan->update();
_audioResourceMan->update();
- _screen->wait();
_screen->update();
+ _system->delayMillis(10);
debug(0, "---------------------------------------");
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 1678296..b49ee88 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -114,7 +114,7 @@ public:
NDrawRect& getRect();
void draw(int frameNum, byte *dest, int destPitch);
int getCursorNum() const { return _cursorNum; }
- void setCursorNum(int value) { _cursorNum = value; }
+ void setCursorNum(int cursorNum) { _cursorNum = cursorNum; }
protected:
int _cursorNum;
SpriteResource _cursorSprite;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 318a0df..bec399a 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -209,17 +209,17 @@ void Scene::insertMouse433(uint32 fileHash, NRect *mouseRect) {
if (mouseRect)
rect = *mouseRect;
_mouseCursor = new Mouse(_vm, 0x0820C408, rect);
- addSprite(_mouseCursor);
+ addEntity(_mouseCursor);
}
void Scene::insertMouse435(uint32 fileHash, int16 x1, int16 x2) {
_mouseCursor = new Mouse(_vm, fileHash, x1, x2);
- addSprite(_mouseCursor);
+ addEntity(_mouseCursor);
}
void Scene::insertNavigationMouse(uint32 fileHash, int type) {
_mouseCursor = new Mouse(_vm, fileHash, type);
- addSprite(_mouseCursor);
+ addEntity(_mouseCursor);
}
void Scene::showMouse(bool visible) {
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 4689d3b..f9e8d49 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -41,20 +41,19 @@ Screen::~Screen() {
}
void Screen::update() {
+ _ticks = _vm->_system->getMillis();
updatePalette();
// TODO: Implement actual code
_vm->_system->copyRectToScreen((const byte*)_backScreen->pixels, _backScreen->pitch, 0, 0, 640, 480);
_vm->_system->updateScreen();
}
-void Screen::wait() {
+uint32 Screen::getNextFrameTime() {
int32 frameDelay = _frameDelay;
if (_smackerDecoder && _smackerDecoder->isVideoLoaded() && !_smackerDecoder->endOfVideo())
frameDelay = _smackerDecoder->getTimeToNextFrame();
int32 waitTicks = frameDelay - (_vm->_system->getMillis() - _ticks);
- if (waitTicks > 0)
- _vm->_system->delayMillis(waitTicks);
- _ticks = _vm->_system->getMillis();
+ return _vm->_system->getMillis() + waitTicks;
}
void Screen::setFps(int fps) {
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 56a2567..e3a2bfb 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -35,7 +35,7 @@ public:
Screen(NeverhoodEngine *vm);
~Screen();
void update();
- void wait();
+ uint32 getNextFrameTime();
void setFps(int fps);
int getFps();
void setPaletteData(byte *paletteData);
Commit: 676c7569f67c8205b701f1b71202e226899ef036
https://github.com/scummvm/scummvm/commit/676c7569f67c8205b701f1b71202e226899ef036
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:07-07:00
Commit Message:
NEVERHOOD: Fix a very stupid bug in Scene::insertMouse433
Changed paths:
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index bec399a..b75515f 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -208,7 +208,7 @@ void Scene::insertMouse433(uint32 fileHash, NRect *mouseRect) {
NRect rect(-1, -1, -1, -1);
if (mouseRect)
rect = *mouseRect;
- _mouseCursor = new Mouse(_vm, 0x0820C408, rect);
+ _mouseCursor = new Mouse(_vm, fileHash, rect);
addEntity(_mouseCursor);
}
Commit: 9858705772f88af82a811979831aa46b107330cd
https://github.com/scummvm/scummvm/commit/9858705772f88af82a811979831aa46b107330cd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:07-07:00
Commit Message:
NEVERHOOD: Graphics related changes/fixes:
- Add BitmapFlags enum
- Merge unpackSpriteRle and unpackSpriteRleRepl
- Implement Y flipping in unpackSpriteRle
- Fix Y flipping in AsScene2804CrystalWaves
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module2800.cpp
engines/neverhood/resource.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index afd01f7..ca22c01 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -358,8 +358,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 1;
- createModule(2900, 1);
+ _vm->gameState().sceneNum = 2;
+ createModule(2800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 84aa3d6..c5b136f 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -207,6 +207,14 @@ int16 TextSurface::getStringWidth(const byte *string, int stringLen) {
// Misc
+enum BitmapFlags {
+ BF_RLE = 1,
+ BF_HAS_DIMENSIONS = 2,
+ BF_HAS_POSITION = 4,
+ BF_HAS_PALETTE = 8,
+ BF_HAS_IMAGE = 16
+};
+
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
uint16 flags;
@@ -215,9 +223,9 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
sprite += 2;
if (rle)
- *rle = flags & 1;
+ *rle = flags & BF_RLE;
- if (flags & 2) {
+ if (flags & BF_HAS_DIMENSIONS) {
if (dimensions) {
dimensions->width = READ_LE_UINT16(sprite);
dimensions->height = READ_LE_UINT16(sprite + 2);
@@ -228,7 +236,7 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
dimensions->height = 1;
}
- if (flags & 4) {
+ if (flags & BF_HAS_POSITION) {
if (position) {
position->x = READ_LE_UINT16(sprite);
position->y = READ_LE_UINT16(sprite + 2);
@@ -239,14 +247,14 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
position->y = 0;
}
- if (flags & 8) {
+ if (flags & BF_HAS_PALETTE) {
if (palette)
*palette = sprite;
sprite += 1024;
} else if (palette)
*palette = NULL;
- if (flags & 0x10) {
+ if (flags & BF_HAS_IMAGE) {
if (pixels)
*pixels = sprite;
} else if (pixels)
@@ -254,17 +262,22 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
}
-void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
+void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY, byte oldColor, byte newColor) {
- // TODO: Flip Y
+ const bool replaceColors = oldColor != newColor;
int16 rows, chunks;
int16 skip, copy;
+ if (flipY) {
+ dest += destPitch * (height - 1);
+ destPitch = -destPitch;
+ }
+
rows = READ_LE_UINT16(source);
chunks = READ_LE_UINT16(source + 2);
source += 4;
-
+
do {
if (chunks == 0) {
dest += rows * destPitch;
@@ -286,49 +299,10 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
source += copy;
}
dest += destPitch;
- }
- }
- rows = READ_LE_UINT16(source);
- chunks = READ_LE_UINT16(source + 2);
- source += 4;
- } while (rows > 0);
-
-}
-
-void unpackSpriteRleRepl(byte *source, int width, int height, byte *dest, int destPitch, byte oldColor, byte newColor, bool flipX, bool flipY) {
-
- // TODO: Flip Y
-
- int16 rows, chunks;
- int16 skip, copy;
-
- rows = READ_LE_UINT16(source);
- chunks = READ_LE_UINT16(source + 2);
- source += 4;
-
- do {
- if (chunks == 0) {
- dest += rows * destPitch;
- } else {
- while (rows-- > 0) {
- uint16 rowChunks = chunks;
- while (rowChunks-- > 0) {
- skip = READ_LE_UINT16(source);
- copy = READ_LE_UINT16(source + 2);
- source += 4;
- if (!flipX) {
- for (int xc = 0; xc < copy; xc++) {
- dest[skip + xc] = source[xc] == oldColor ? newColor : source[xc];
- }
- } else {
- byte *flipDest = dest + width - skip - 1;
- for (int xc = 0; xc < copy; xc++) {
- *flipDest-- = source[xc] == oldColor ? newColor : source[xc];
- }
- }
- source += copy;
- }
- dest += destPitch;
+ if (replaceColors)
+ for (int xc = 0; xc < width; xc++)
+ if (dest[xc] == oldColor)
+ dest[xc] = newColor;
}
}
rows = READ_LE_UINT16(source);
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 57c2250..08357ea 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -160,8 +160,7 @@ protected:
// Misc
void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels);
-void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
-void unpackSpriteRleRepl(byte *source, int width, int height, byte *dest, int destPitch, byte oldColor, byte newColor, bool flipX, bool flipY);
+void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY, byte oldColor = 0, byte newColor = 0);
void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 1a51571..28a0eb8 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -416,6 +416,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene::update);
if (getGlobalVar(V_RING5_PULLED) == 0) {
+ // Display the disabled radio; only possible when the left door is open
insertStaticSprite(0x0001264C, 100);
}
@@ -627,7 +628,7 @@ uint32 Scene2802::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
break;
- case 0x0002: // TODO Implement button up event
+ case 0x0002:
if (_countdown1 == 0)
_countdownType = 0;
else {
@@ -1545,7 +1546,7 @@ AsScene2804CrystalWaves::AsScene2804CrystalWaves(NeverhoodEngine *vm, uint cryst
_y = kAsScene2804CrystalWavesPoints[crystalIndex].y;
createSurface1(0x840C41F0, 1200);
if (crystalIndex & 1)
- setDoDeltaX(1);
+ setDoDeltaY(1);
setVisible(false);
_needRefresh = true;
SetUpdateHandler(&AnimatedSprite::update);
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index e009ff2..aff3528 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -42,11 +42,10 @@ SpriteResource::~SpriteResource() {
void SpriteResource::draw(byte *dest, int destPitch, bool flipX, bool flipY) {
if (_pixels) {
- if (_rle) {
+ if (_rle)
unpackSpriteRle(_pixels, _dimensions.width, _dimensions.height, dest, destPitch, flipX, flipY);
- } else {
+ else
unpackSpriteNormal(_pixels, _dimensions.width, _dimensions.height, dest, destPitch, flipX, flipY);
- }
}
}
@@ -164,7 +163,7 @@ void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX,
_width = frameInfo.rect.width;
_height = frameInfo.rect.height;
if (_replEnabled && _replOldColor != _replNewColor)
- unpackSpriteRleRepl(_currSpriteData, _width, _height, dest, destPitch, _replOldColor, _replNewColor, flipX, flipY);
+ unpackSpriteRle(_currSpriteData, _width, _height, dest, destPitch, flipX, flipY, _replOldColor, _replNewColor);
else
unpackSpriteRle(_currSpriteData, _width, _height, dest, destPitch, flipX, flipY);
}
Commit: 6df8fccf6b90399490543b142bb88976565aae2f
https://github.com/scummvm/scummvm/commit/6df8fccf6b90399490543b142bb88976565aae2f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:07-07:00
Commit Message:
NEVERHOOD: Implement GameModule::createModuleByHash
This is used later when restoring savegames
- Rename V_RING5_PULLED to V_RADIO_ENABLED
- Implement Palette::fillBaseBlack and use it in Scene2803Small
- Fix Scene2802 (show disabled radio if it's not enabled)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.h
engines/neverhood/module1000.cpp
engines/neverhood/module2800.cpp
engines/neverhood/palette.cpp
engines/neverhood/palette.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index ca22c01..da432c5 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -517,6 +517,76 @@ void GameModule::createModule(int moduleNum, int which) {
_childObject->handleUpdate();
}
+void GameModule::createModuleByHash(uint32 nameHash) {
+ switch (nameHash) {
+ case 0x03294419:
+ createModule(1000, -1);
+ break;
+ case 0x0002C818:
+ createModule(1100, -1);
+ break;
+ case 0x00478311:
+ createModule(1200, -1);
+ break;
+ case 0x0061C090:
+ createModule(1300, -1);
+ break;
+ case 0x00AD0012:
+ createModule(1400, -1);
+ break;
+ case 0x00F10114:
+ createModule(1500, -1);
+ break;
+ case 0x01A008D8:
+ createModule(1600, -1);
+ break;
+ case 0x04212331:
+ createModule(1700, -1);
+ break;
+ case 0x04A14718:
+ createModule(1800, -1);
+ break;
+ case 0x04E1C09C:
+ createModule(1900, -1);
+ break;
+ case 0x08250000:
+ createModule(2000, -1);
+ break;
+ case 0x10A10C14:
+ createModule(2100, -1);
+ break;
+ case 0x11391412:
+ createModule(2200, -1);
+ break;
+ case 0x1A214010:
+ createModule(2300, -1);
+ break;
+ case 0x202D1010:
+ createModule(2400, -1);
+ break;
+ case 0x29220120:
+ createModule(2500, -1);
+ break;
+ case 0x40271018:
+ createModule(2600, -1);
+ break;
+ case 0x42212411:
+ createModule(2700, -1);
+ break;
+ case 0x64210814:
+ createModule(2800, -1);
+ break;
+ case 0x81100020:
+ createModule(2900, -1);
+ break;
+ case 0x81293110:
+ createModule(3000, -1);
+ break;
+ default:
+ error("GameModule::createModuleByHash() Unknown module name %08X", nameHash);
+ }
+}
+
void GameModule::updateModule() {
if (!updateChild()) {
switch (_moduleNum) {
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 82e6fa5..94fafc8 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -54,6 +54,7 @@ protected:
int _moduleNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createModule(int moduleNum, int which);
+ void createModuleByHash(uint32 nameHash);
void updateModule();
};
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 52740dc..19a8a85 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -87,7 +87,7 @@ enum {
V_BALLOON_POPPED = 0xAC00C0D0, // Has the balloon with the key been popped?
V_TNT_DUMMY_BUILT = 0x000CF819, // Are all TNT parts on the dummy?
V_TNT_DUMMY_FUSE_LIT = 0x20A0C516,
- V_RING5_PULLED = 0x4DE80AC0,
+ V_RADIO_ENABLED = 0x4DE80AC0,
V_CREATURE_EXPLODED = 0x2A02C07B,
// Match
V_MATCH_STATUS = 0x0112090A,
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 6cae11a..e718904 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1475,21 +1475,21 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_parentModule, 0x1024, 2);
_flag1BE = true;
if (sender == _asRing1) {
- setGlobalVar(V_RING5_PULLED, 0);
+ setGlobalVar(V_RADIO_ENABLED, 0);
playSound(0, 0x665198C0);
} else if (sender == _asRing2) {
- setGlobalVar(V_RING5_PULLED, 0);
+ setGlobalVar(V_RADIO_ENABLED, 0);
playSound(0, 0xE2D389C0);
} else if (sender == _asRing3) {
- setGlobalVar(V_RING5_PULLED, 0);
+ setGlobalVar(V_RADIO_ENABLED, 0);
playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
} else if (sender == _asRing4) {
- setGlobalVar(V_RING5_PULLED, 0);
+ setGlobalVar(V_RADIO_ENABLED, 0);
playSound(0, 0xE0558848);
} else if (sender == _asRing5) {
- setGlobalVar(V_RING5_PULLED, 1);
+ setGlobalVar(V_RADIO_ENABLED, 1);
playSound(0, 0x44014282);
}
break;
@@ -1508,7 +1508,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendEntityMessage(_klayman, 0x1014, _asDoorSpy);
break;
case 0x480F:
- setGlobalVar(V_RING5_PULLED, 0);
+ setGlobalVar(V_RADIO_ENABLED, 0);
playSound(1);
sendMessage(_asDoor, 0x4808, 0);
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
@@ -1800,7 +1800,7 @@ uint32 Scene1005::getTextIndex1() {
textIndex = 12;
else if (!getGlobalVar(0x2050861A))
textIndex = 13;
- else if (!getGlobalVar(V_RING5_PULLED))
+ else if (!getGlobalVar(V_RADIO_ENABLED))
textIndex = 50;
else if (!getGlobalVar(0x89C669AA))
textIndex = 14;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 28a0eb8..a47d9cb 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -34,7 +34,6 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule), _musicResource(NULL) {
_currentMusicFileHash = 0;
- // TODO music stuff
_vm->_soundMan->addMusic(0x64210814, 0xD2FA4D14);
setGlobalVar(0x28D8C940, 1);
@@ -68,19 +67,10 @@ void Module2800::createScene(int sceneNum, int which) {
break;
case 1:
_vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
-
- // TODO!!
-
- _childObject = new Scene2802(_vm, this, which);
-
-#if 0
- _flag = true; // DEBUG!
- if (_flag) {
+ if (getGlobalVar(V_RADIO_ENABLED))
_childObject = new Scene2802(_vm, this, which);
- } else {
+ else
createStaticScene(0x000C6444, 0xC6440008);
- }
-#endif
break;
case 2:
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
@@ -202,7 +192,12 @@ void Module2800::updateScene() {
switch (_vm->gameState().sceneNum) {
case 0:
if (_moduleResult != 2) {
- // TODO music stuff
+ if (_musicResource) {
+ _musicResource->unload();
+ delete _musicResource;
+ _musicResource = NULL;
+ }
+ _currentMusicFileHash = 0;
}
if (_moduleResult == 1) {
createScene(2, 0);
@@ -407,15 +402,13 @@ void Module2800::updateMusic(bool halfVolume) {
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- // TODO Weird palette glitches in the mouse cursor and sprite, check this later
-
// TODO _vm->gameModule()->initScene2801Vars();
_surfaceFlag = true;
SetMessageHandler(&Scene2801::handleMessage);
SetUpdateHandler(&Scene::update);
- if (getGlobalVar(V_RING5_PULLED) == 0) {
+ if (getGlobalVar(V_RADIO_ENABLED) == 0) {
// Display the disabled radio; only possible when the left door is open
insertStaticSprite(0x0001264C, 100);
}
@@ -1357,7 +1350,7 @@ void Scene2803Small::updatePaletteArea(bool instantly) {
_palette->addBasePalette(0xB103B604, 0, 64, 0);
break;
case 3:
- // TODO _palette->sub_47BFB0(0, 64);
+ _palette->fillBaseBlack(0, 64);
break;
default:
_palette->addBasePalette(0x412A423E, 0, 64, 0);
@@ -1369,7 +1362,7 @@ void Scene2803Small::updatePaletteArea(bool instantly) {
_palette->addBasePalette(0x0263D144, 0, 64, 0);
break;
case 3:
- // TODO _palette->sub_47BFB0(0, 64);
+ _palette->fillBaseBlack(0, 64);
break;
default:
_palette->addBasePalette(0x29800A01, 0, 64, 0);
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index c27bd86..16ef31d 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -150,6 +150,17 @@ void Palette::fillBaseWhite(int index, int count) {
}
}
+void Palette::fillBaseBlack(int index, int count) {
+ if (index + count > 256)
+ count = 256 - index;
+ for (int i = 0; i < count; i++) {
+ _basePalette[(i + index) * 4 + 0] = 0;
+ _basePalette[(i + index) * 4 + 1] = 0;
+ _basePalette[(i + index) * 4 + 2] = 0;
+ _basePalette[(i + index) * 4 + 3] = 0;
+ }
+}
+
void Palette::update() {
debug(2, "Palette::update() _status = %d", _status);
if (_status == 1) {
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 27f4816..4b0747b 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -50,6 +50,7 @@ public:
void startFadeToWhite(int counter);
void startFadeToPalette(int counter);
void fillBaseWhite(int index, int count);
+ void fillBaseBlack(int index, int count);
protected:
int _status;
byte *_palette;
Commit: 682d15fce443223b306366ef9b1ad71f94b6cfed
https://github.com/scummvm/scummvm/commit/682d15fce443223b306366ef9b1ad71f94b6cfed
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:07-07:00
Commit Message:
NEVERHOOD: Cleanup and fixes
- Implement GameModule::initScene2801Vars()
- Fix Scene1201::~Scene1201() which does some game logic stuff
- Rename some stuff
- Add more game variable constants
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.h
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
engines/neverhood/module2900.cpp
engines/neverhood/module2900.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index da432c5..1c8a2d9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,29 +276,31 @@ void GameModule::initScene2401Vars() {
}
-void GameModule::initScene2808Vars1() {
-
- // Exit if it's already initialized
- if (getSubVar(VA_IS_PUZZLE_INIT, 0x20479010))
- return;
-
- for (uint i = 0; i < 3; i++)
- setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
-
- setSubVar(VA_IS_PUZZLE_INIT, 0x20479010, 1);
+void GameModule::initScene2801Vars() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x08C80800)) {
+ int currMusicIndex = _vm->_rnd->getRandomNumber(5 - 1) + 3;
+ setGlobalVar(V_GOOD_RADIO_MUSIC_INDEX, 5 * currMusicIndex);
+ setGlobalVar(V_GOOD_RADIO_MUSIC_NAME, kScene2801MusicFileHashes[currMusicIndex]);
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 1);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x08C80800, 1);
+ }
+}
+void GameModule::initScene2808Vars1() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x20479010)) {
+ for (uint i = 0; i < 3; i++)
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x20479010, 1);
+ }
}
void GameModule::initScene2808Vars2() {
-
- // Exit if it's already initialized
- if (getSubVar(VA_IS_PUZZLE_INIT, 0x66059818))
- return;
-
- for (uint i = 0; i < 3; i++)
- setSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
-
- setSubVar(VA_IS_PUZZLE_INIT, 0x66059818, 1);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x66059818)) {
+ for (uint i = 0; i < 3; i++)
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x66059818, 1);
+ }
}
void GameModule::initScene3009Vars() {
@@ -312,8 +314,8 @@ void GameModule::initScene3009Vars() {
}
uint32 GameModule::getScene2802MusicFileHash() {
- uint musicNum = getGlobalVar(0x08CC0828);
- return (musicNum % 5 != 0) ? 0 : kScene2801MusicFileHashes[CLIP<uint>(musicNum / 5, 0, 17)];
+ uint musicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
+ return (musicIndex % 5 != 0) ? 0 : kScene2801MusicFileHashes[CLIP<uint>(musicIndex / 5, 0, 17)];
}
@@ -347,19 +349,21 @@ void GameModule::startup() {
// DEBUG>>>
/*
setGlobalVar(V_SEEN_MUSIC_BOX, 1);
- setGlobalVar(0x0A18CA33, 0);
- setGlobalVar(0x0112090A, 0);
- //setGlobalVar(0x000CF819, 1);
+ setGlobalVar(V_CREATURE_EXPLODED, 0);
+ setGlobalVar(V_MATCH_STATUS, 0);
setGlobalVar(V_PROJECTOR_LOCATION, 2);
*/
//setGlobalVar(V_ENTRANCE_OPEN, 0);
//setGlobalVar(V_DOOR_SPIKES_OPEN, 1);
+ setGlobalVar(V_CREATURE_ANGRY, 1);
+ setGlobalVar(V_RADIO_ENABLED, 1);
+ setGlobalVar(V_TNT_DUMMY_BUILT, 1);
// <<<DEBUG
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 2;
- createModule(2800, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(1200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -503,7 +507,7 @@ void GameModule::createModule(int moduleNum, int which) {
case 2900:
setGlobalVar(V_MODULE_NAME, 0x81100020);
if (which >= 0)
- setGlobalVar(0x0152899A, which);
+ setGlobalVar(V_TELEPORTER_CURR_LOCATION, which);
_childObject = new Module2900(_vm, this, which);
break;
case 3000:
@@ -719,7 +723,7 @@ void GameModule::updateModule() {
createModule(1100, 1);
break;
case 3:
- setSubVar(0x2C145A98, 2, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 2, 1);
createModule(1700, 1);
break;
case 4:
@@ -731,7 +735,7 @@ void GameModule::updateModule() {
break;
}
} else {
- switch (getGlobalVar(0x0152899A)) {
+ switch (getGlobalVar(V_TELEPORTER_CURR_LOCATION)) {
case 0:
createModule(1300, 6);
break;
@@ -753,7 +757,7 @@ void GameModule::updateModule() {
break;
}
}
- setGlobalVar(0x0152899A, 0);
+ setGlobalVar(V_TELEPORTER_CURR_LOCATION, 0);
break;
case 3000:
if (_moduleResult == 1) {
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 94fafc8..275e8d3 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -42,6 +42,7 @@ public:
void initScene1307Vars();
void initScene1405Vars();
void initScene2401Vars();
+ void initScene2801Vars();
void initScene2808Vars1();
void initScene2808Vars2();
void initScene3009Vars();
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 19a8a85..3e32803 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -45,7 +45,6 @@ enum {
V_COLUMN_TEXT_NAME = 0xC8C28808,
V_CLICKED_COLUMN_INDEX = 0x48A68852,
V_CLICKED_COLUMN_ROW = 0x49C40058,
- V_MUSIC_NAME = 0x89A82A15,
// Klayman
V_KLAYMAN_SMALL = 0x1860C990, // Is Klayman small?
V_KLAYMAN_FRAMEINDEX = 0x18288913,
@@ -64,10 +63,12 @@ enum {
V_NOTES_PUZZLE_SOLVED = 0x86615030,
V_TILE_PUZZLE_SOLVED = 0x404290D5,
V_STAIRS_PUZZLE_SOLVED = 0xA9035F60,
+ V_CODE_SYMBOLS_SOLVED = 0x2C531AF8,
V_SPIKES_RETRACTED = 0x18890C91,
V_LARGE_DOOR_NUMBER = 0x9A500914, // Number of the currently "large" door
V_LIGHTS_ON = 0x4D080E54,
V_SHRINK_LIGHTS_ON = 0x190A1D18, // Lights on in the room with the shrinking device
+ V_STAIRS_DOWN_ONCE = 0x2050861A, // Stairs have been down once before
V_STAIRS_DOWN = 0x09221A62,
V_LADDER_DOWN = 0x0018CA22, // Is the ladder in the statue room down?
V_LADDER_DOWN_ACTION = 0x00188211,
@@ -88,7 +89,16 @@ enum {
V_TNT_DUMMY_BUILT = 0x000CF819, // Are all TNT parts on the dummy?
V_TNT_DUMMY_FUSE_LIT = 0x20A0C516,
V_RADIO_ENABLED = 0x4DE80AC0,
- V_CREATURE_EXPLODED = 0x2A02C07B,
+ V_SEEN_CREATURE_EXPLODE_VID = 0x2A02C07B,
+ V_CREATURE_EXPLODED = 0x0A18CA33,
+ V_UNUSED = 0x89C669AA, // Seems to be unused, confirmed by checking the exe for this constant value (still left in atm)
+ // Radio
+ V_RADIO_ROOM_LEFT_DOOR = 0x09880D40,
+ V_RADIO_ROOM_RIGHT_DOOR = 0x08180ABC,
+ V_CURR_RADIO_MUSIC_INDEX = 0x08CC0828,
+ V_GOOD_RADIO_MUSIC_INDEX = 0x88880915,
+ V_GOOD_RADIO_MUSIC_NAME = 0x89A82A15,
+ V_RADIO_MOVE_DISH_VIDEO = 0x28D8C940,
// Match
V_MATCH_STATUS = 0x0112090A,
// Venus fly trap
@@ -111,6 +121,10 @@ enum {
V_PROJECTOR_SLOT = 0x04A10F33, // Projector x slot index
V_PROJECTOR_LOCATION = 0x04A105B3, // Projector scene location
V_PROJECTOR_ACTIVE = 0x12A10DB3, // Is the projecor projecting?
+ // Teleporter
+ V_TELEPORTER_CURR_LOCATION = 0x0152899A,
+ V_TELEPORTER_WHICH = 0x60826830,
+ V_TELEPORTER_DEST_AVAILABLE = 0x2C145A98,
// Inventory
V_HAS_NEEDLE = 0x31C63C51, // Has Klayman the needle?
V_HAS_FINAL_KEY = 0xC0780812, // Has Klayman the key from the diskplayer?
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index e718904..461f873 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1798,11 +1798,11 @@ uint32 Scene1005::getTextIndex1() {
} else if (getGlobalVar(V_BOLT_DOOR_UNLOCKED)) {
if (!getGlobalVar(V_WALL_BROKEN))
textIndex = 12;
- else if (!getGlobalVar(0x2050861A))
+ else if (!getGlobalVar(V_STAIRS_DOWN_ONCE))
textIndex = 13;
else if (!getGlobalVar(V_RADIO_ENABLED))
textIndex = 50;
- else if (!getGlobalVar(0x89C669AA))
+ else if (!getGlobalVar(V_UNUSED))
textIndex = 14;
else if (!getGlobalVar(V_BEEN_SHRINKING_ROOM))
textIndex = 15;
@@ -1812,7 +1812,7 @@ uint32 Scene1005::getTextIndex1() {
textIndex = 17;
} else if (!getGlobalVar(V_FLYTRAP_RING_EATEN)) {
textIndex = 0;
- } else if (getGlobalVar(0x0A18CA33)) {
+ } else if (getGlobalVar(V_CREATURE_EXPLODED)) {
if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))
textIndex = 4;
else if (!getGlobalVar(V_HAS_TEST_TUBE))
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 99d15b9..d106a85 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -60,7 +60,7 @@ void Module1200::createScene(int sceneNum, int which) {
case 2:
_vm->_soundMan->stopMusic(0x62222CAE, 0, 0);
createSmackerScene(0x31890001, true, true, false);
- setGlobalVar(V_CREATURE_EXPLODED, 1);
+ setGlobalVar(V_SEEN_CREATURE_EXPLODE_VID, 1);
break;
}
SetUpdateHandler(&Module1200::updateScene);
@@ -74,7 +74,7 @@ void Module1200::updateScene() {
if (_moduleResult == 1) {
createScene(1, 0);
} else if (_moduleResult == 2) {
- if (getGlobalVar(0x0A18CA33) && !getGlobalVar(V_CREATURE_EXPLODED)) {
+ if (getGlobalVar(V_CREATURE_EXPLODED) && !getGlobalVar(V_SEEN_CREATURE_EXPLODE_VID)) {
createScene(2, -1);
} else {
leaveModule(1);
@@ -714,7 +714,7 @@ void AsScene1201LeftDoor::stCloseDoor() {
}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false), _asMatch(NULL), _asTntMan(NULL),
+ : Scene(vm, parentModule, true), _creatureExploded(false), _asMatch(NULL), _asTntMan(NULL),
_asCreature(NULL), _asTntManRope(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
int16 topY1, topY2, topY3, topY4;
@@ -772,7 +772,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1201>(400, 329);
setMessageList(0x004AEC08);
} else if (which == 2) {
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
insertKlayman<KmScene1201>(374, 333);
setMessageList(0x004AEC08);
} else {
@@ -795,7 +795,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(x1, 0, x2, 480);
_klayman->setRepl(64, 0);
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
setBackground(0x4019A2C4);
setPalette(0x4019A2C4);
_asRightDoor = NULL;
@@ -807,7 +807,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
insertStaticSprite(0x10002ED8, 500);
- if (!getGlobalVar(0x0A18CA33)) {
+ if (!getGlobalVar(V_CREATURE_EXPLODED)) {
_asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
_asTntMan->setClipRect(x1, 0, x2, 480);
_asTntMan->setRepl(64, 0);
@@ -838,7 +838,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex += 3;
}
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
setRectList(0x004AEE58);
} else {
setRectList(0x004AEDC8);
@@ -866,7 +866,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex++;
}
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
setRectList(0x004AEE18);
} else {
setRectList(0x004AED88);
@@ -890,7 +890,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asMatch);
}
- if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(0x0A18CA33) == 0) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_CREATURE_EXPLODED) == 0) {
_asCreature = insertSprite<AsScene1201Creature>(this, _klayman);
_asCreature->setClipRect(x1, 0, x2, 480);
}
@@ -898,6 +898,9 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1201::~Scene1201() {
+ if (_creatureExploded)
+ setGlobalVar(V_CREATURE_EXPLODED, 1);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
void Scene1201::update() {
@@ -911,7 +914,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x07053000) {
- _flag = true;
+ _creatureExploded = true;
sendMessage(_asCreature, 0x2004, 0);
} else if (param.asInteger() == 0x140E5744) {
sendMessage(_asCreature, 0x2005, 0);
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index bc3281c..7d4e224 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -172,7 +172,7 @@ protected:
Sprite *_asRightDoor;
Sprite *_asTape;
Sprite *_asKlaymanHead;
- bool _flag;
+ bool _creatureExploded;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index eb8f4fe..b5489a3 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -917,15 +917,15 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (_asPuzzleBox)
_asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
- if (getGlobalVar(0x4A105B3) == 1) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 1) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_asProjector);
- if (getGlobalVar(0x4A10F33) == 4) {
+ if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B0BD0);
- } else if (getGlobalVar(0x4A10F33) == 0) {
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 22ffaf6..b6df706 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1448,7 +1448,7 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_symbolPosition >= 12) {
if (testVars()) {
playSound(0);
- setGlobalVar(0x2C531AF8, 1);
+ setGlobalVar(V_CODE_SYMBOLS_SOLVED, 1);
_isSolved = true;
} else {
_symbolPosition = 0;
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 7925c46..d90074c 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -105,7 +105,7 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x40A40168, 100);
} else if (getGlobalVar(V_STAIRS_DOWN)) {
insertStaticSprite(0x124404C4, 100);
- setGlobalVar(0x2050861A, 1);
+ setGlobalVar(V_STAIRS_DOWN_ONCE, 1);
} else {
insertStaticSprite(0x02840064, 100);
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 75a6ebe..bd5597d 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -55,7 +55,7 @@ void Module2000::createScene(int sceneNum, int which) {
break;
case 2:
setGlobalVar(V_WORLDS_JOINED, 1);
- setSubVar(0x2C145A98, 1, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 1, 1);
createSmackerScene(0x204B2031, true, true, false);
break;
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 080f815..19bf9be 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -458,8 +458,8 @@ void Module2700::updateScene() {
case 21:
if (!_flag1) {
_vm->_soundMan->stopMusic(0x04020210, 0, 1);
- // TODO _vm->gameModule()->initScene2801Vars();
- _musicFileHash = getGlobalVar(V_MUSIC_NAME);
+ _vm->gameModule()->initScene2801Vars();
+ _musicFileHash = getGlobalVar(V_GOOD_RADIO_MUSIC_NAME);
// TODO? GameState_sub_469C50(&field_52, 0);
// TODO MusicMan_create(); // Why?
_vm->_soundMan->addMusic(0x42212411, _musicFileHash);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index a47d9cb..b6f5694 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -35,7 +35,7 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
_currentMusicFileHash = 0;
_vm->_soundMan->addMusic(0x64210814, 0xD2FA4D14);
- setGlobalVar(0x28D8C940, 1);
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 1);
if (which < 0) {
createScene(_vm->gameState().sceneNum, which);
@@ -402,7 +402,7 @@ void Module2800::updateMusic(bool halfVolume) {
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- // TODO _vm->gameModule()->initScene2801Vars();
+ _vm->gameModule()->initScene2801Vars();
_surfaceFlag = true;
SetMessageHandler(&Scene2801::handleMessage);
@@ -432,7 +432,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B6BB0);
}
- if (getGlobalVar(0x09880D40)) {
+ if (getGlobalVar(V_RADIO_ROOM_LEFT_DOOR)) {
setRectList(0x004B6CE0);
setBackground(0x01400666);
setPalette(0x01400666);
@@ -444,7 +444,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0066201C);
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- } else if (getGlobalVar(0x08180ABC)) {
+ } else if (getGlobalVar(V_RADIO_ROOM_RIGHT_DOOR)) {
setRectList(0x004B6CD0);
setBackground(0x11E00684);
setPalette(0x11E00684);
@@ -507,10 +507,10 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdownType(0), _countdown1(0), _countdown2(0) {
+ : Scene(vm, parentModule, true), _currTuneStatus(0), _countdown1(0), _countdown2(0) {
//DEBUG>>> Disable video
- setGlobalVar(0x28D8C940, 0);
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
//DEBUG<<<
_surfaceFlag = true;
@@ -518,123 +518,127 @@ Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2802::update);
insertMouse435(0x008810A8, 20, 620);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x8284C100, true, true, true));
- _smackerFrameNumber = getGlobalVar(0x08CC0828);
- _smackerPlayer->gotoFrame(_smackerFrameNumber);
+ _currRadioMusicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
+ _smackerPlayer->gotoFrame(_currRadioMusicIndex);
_vm->_soundMan->addSound(0x04360A18, 0x422630C2);
_vm->_soundMan->addSound(0x04360A18, 0x00632252);
_vm->_soundMan->addSound(0x04360A18, 0x00372241);
_vm->_soundMan->setSoundVolume(0x00372241, 60);
- changeCountdownType(0, 0);
+ changeTuneStatus(0, 0);
_vm->_soundMan->playSoundLooping(0x00372241);
}
Scene2802::~Scene2802() {
_vm->_soundMan->deleteSoundGroup(0x04360A18);
- if (_smackerFrameNumber == 0) {
- setGlobalVar(0x09880D40, 1);
- setGlobalVar(0x08180ABC, 0);
- } else if (_smackerFrameNumber == getGlobalVar(0x88880915)) {
- setGlobalVar(0x09880D40, 0);
- setGlobalVar(0x08180ABC, 1);
+ if (_currRadioMusicIndex == 0) {
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 1);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
+ } else if (_currRadioMusicIndex == getGlobalVar(V_GOOD_RADIO_MUSIC_INDEX)) {
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 0);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 1);
} else {
- setGlobalVar(0x09880D40, 0);
- setGlobalVar(0x08180ABC, 0);
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 0);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
}
- setGlobalVar(0x08CC0828, _smackerFrameNumber);
+ setGlobalVar(V_CURR_RADIO_MUSIC_INDEX, _currRadioMusicIndex);
}
void Scene2802::update() {
- int prevCountdownType = _countdownType;
- uint prevSmackerFrameNumber = _smackerFrameNumber;
+ int prevTuneStatus = _currTuneStatus;
+ uint prevRadioMusicIndex = _currRadioMusicIndex;
Scene::update();
if (_countdown1 > 0)
--_countdown1;
- else if (_countdownType == 1)
- _countdownType = 3;
- else if (_countdownType == 4)
- _countdownType = 6;
+ else if (_currTuneStatus == 1)
+ _currTuneStatus = 3;
+ else if (_currTuneStatus == 4)
+ _currTuneStatus = 6;
- switch (_countdownType) {
+ switch (_currTuneStatus) {
case 2:
- if (_smackerFrameNumber < 90)
- incSmackerFrameNumber(+1);
- _countdownType = 0;
+ if (_currRadioMusicIndex < 90)
+ incRadioMusicIndex(+1);
+ _currTuneStatus = 0;
break;
case 3:
if (_countdown2 > 0)
--_countdown2;
- else if (_smackerFrameNumber < 90) {
- incSmackerFrameNumber(+1);
+ else if (_currRadioMusicIndex < 90) {
+ incRadioMusicIndex(+1);
_countdown2 = 1;
} else
- _countdownType = 0;
+ _currTuneStatus = 0;
break;
case 5:
- if (_smackerFrameNumber > 0)
- incSmackerFrameNumber(-1);
- _countdownType = 0;
+ if (_currRadioMusicIndex > 0)
+ incRadioMusicIndex(-1);
+ _currTuneStatus = 0;
break;
case 6:
if (_countdown2 > 0)
--_countdown2;
- else if (_smackerFrameNumber > 0) {
- incSmackerFrameNumber(-1);
+ else if (_currRadioMusicIndex > 0) {
+ incRadioMusicIndex(-1);
_countdown2 = 1;
} else
- _countdownType = 0;
+ _currTuneStatus = 0;
break;
}
- if (prevSmackerFrameNumber != _smackerFrameNumber)
- _smackerPlayer->gotoFrame(_smackerFrameNumber);
+ if (prevRadioMusicIndex != _currRadioMusicIndex)
+ _smackerPlayer->gotoFrame(_currRadioMusicIndex);
- if (prevCountdownType != _countdownType)
- changeCountdownType(prevCountdownType, _countdownType);
+ if (prevTuneStatus != _currTuneStatus)
+ changeTuneStatus(prevTuneStatus, _currTuneStatus);
+
+ //DEBUG>>>
+ debug("_currRadioMusicIndex = %d; V_GOOD_RADIO_MUSIC_INDEX = %d", _currRadioMusicIndex, getGlobalVar(V_GOOD_RADIO_MUSIC_INDEX));
+ //DEBUG<<<
- if (getGlobalVar(0x28D8C940) && prevCountdownType != _countdownType && _smackerFrameNumber != 0) {
- setGlobalVar(0x28D8C940, 0);
+ if (getGlobalVar(V_RADIO_MOVE_DISH_VIDEO) && prevTuneStatus != _currTuneStatus && _currRadioMusicIndex != 0) {
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
leaveScene(1);
}
}
uint32 Scene2802::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- int prevCountdownType = _countdownType;
+ int prevTuneStatus = _currTuneStatus;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
leaveScene(0);
- } else if (_countdownType == 0) {
+ } else if (_currTuneStatus == 0) {
if (param.asPoint().x > 180 && param.asPoint().x < 300 &&
param.asPoint().y > 130 && param.asPoint().y < 310) {
- _countdownType = 4;
+ _currTuneStatus = 4;
} else if (param.asPoint().x > 300 && param.asPoint().x < 400 &&
param.asPoint().y > 130 && param.asPoint().y < 310) {
- _countdownType = 1;
+ _currTuneStatus = 1;
}
- if (_countdownType == 1 || _countdownType == 4) {
+ if (_currTuneStatus == 1 || _currTuneStatus == 4) {
_countdown1 = 8;
- changeCountdownType(0, _countdownType);
+ changeTuneStatus(0, _currTuneStatus);
}
}
break;
case 0x0002:
if (_countdown1 == 0)
- _countdownType = 0;
+ _currTuneStatus = 0;
else {
- if (_countdownType == 1)
- _countdownType = 2;
- else if (_countdownType == 4)
- _countdownType = 5;
+ if (_currTuneStatus == 1)
+ _currTuneStatus = 2;
+ else if (_currTuneStatus == 4)
+ _currTuneStatus = 5;
else
- _countdownType = 0;
+ _currTuneStatus = 0;
_countdown1 = 0;
}
- if (prevCountdownType != _countdownType)
- changeCountdownType(prevCountdownType, _countdownType);
+ if (prevTuneStatus != _currTuneStatus)
+ changeTuneStatus(prevTuneStatus, _currTuneStatus);
break;
case 0x000D:
// DEBUG message
@@ -643,25 +647,25 @@ uint32 Scene2802::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-void Scene2802::incSmackerFrameNumber(int delta) {
- _smackerFrameNumber += delta;
- setGlobalVar(0x08CC0828, _smackerFrameNumber);
+void Scene2802::incRadioMusicIndex(int delta) {
+ _currRadioMusicIndex += delta;
+ setGlobalVar(V_CURR_RADIO_MUSIC_INDEX, _currRadioMusicIndex);
}
-void Scene2802::changeCountdownType(int prevCountdownType, int newCountdownType) {
+void Scene2802::changeTuneStatus(int prevTuneStatus, int newTuneStatus) {
- if (prevCountdownType == 3 || prevCountdownType == 6) {
+ if (prevTuneStatus == 3 || prevTuneStatus == 6) {
_vm->_soundMan->stopSound(0x422630C2);
_vm->_soundMan->stopSound(0x00632252);
}
- if (newCountdownType == 0) {
+ if (newTuneStatus == 0) {
if (_vm->_gameModule->getScene2802MusicFileHash() != 0) {
_vm->_soundMan->stopSound(0x00632252);
}
else
_vm->_soundMan->playSoundLooping(0x00632252);
- } else if (newCountdownType == 3 || newCountdownType == 6) {
+ } else if (newTuneStatus == 3 || newTuneStatus == 6) {
_vm->_soundMan->playSoundLooping(0x422630C2);
_vm->_soundMan->playSoundLooping(0x00632252);
}
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index ca8b058..bdcb1ee 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -62,14 +62,14 @@ public:
virtual ~Scene2802();
protected:
SmackerPlayer *_smackerPlayer;
- uint _smackerFrameNumber;
- int _countdownType;
+ uint _currRadioMusicIndex;
+ int _currTuneStatus;
int _countdown1;
int _countdown2;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void incSmackerFrameNumber(int delta);
- void changeCountdownType(int prevCountdownType, int newCountdownType);
+ void incRadioMusicIndex(int delta);
+ void changeTuneStatus(int prevTuneStatus, int newTuneStatus);
};
class AsScene2803LightCord : public AnimatedSprite {
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 2ebdb09..0a033a8 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -35,7 +35,7 @@ Module2900::Module2900(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
if (which >= 0)
- setGlobalVar(0x60826830, which);
+ setGlobalVar(V_TELEPORTER_WHICH, which);
createScene(0, 0);
@@ -47,7 +47,7 @@ void Module2900::createScene(int sceneNum, int which) {
switch (_sceneNum) {
case 0:
_vm->gameState().sceneNum = 0;
- _childObject = new Scene2901(_vm, this, getGlobalVar(0x60826830));
+ _childObject = new Scene2901(_vm, this, getGlobalVar(V_TELEPORTER_WHICH));
break;
case 1:
_vm->gameState().sceneNum = 0;
@@ -85,8 +85,8 @@ void Module2900::updateScene() {
if (_moduleResult == 0xFFFFFFFF) {
leaveModule(0xFFFFFFFF);
} else {
- _field2C = _moduleResult;
- switch (getGlobalVar(0x60826830)) {
+ _teleporterModuleResult = _moduleResult;
+ switch (getGlobalVar(V_TELEPORTER_WHICH)) {
case 0:
createScene(3, 4);
break;
@@ -117,7 +117,7 @@ void Module2900::updateScene() {
case 4:
case 5:
case 6:
- leaveModule(_field2C);
+ leaveModule(_teleporterModuleResult);
break;
}
}
@@ -391,15 +391,15 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
//DEBUG>>> Enable all locations
for (int i = 0; i < 6; i++)
- setSubVar(0x2C145A98, i, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
//DEBUG<<<
- setSubVar(0x2C145A98, which, 1);
- setSubVar(0x2C145A98, 5, 1);
- setSubVar(0x2C145A98, 4, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, which, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 5, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 4, 1);
if (_currLocationButtonNum == 3)
- setSubVar(0x2C145A98, 2, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 2, 1);
_surfaceFlag = true;
setBackground(kScene2901FileHashes1[_currLocationButtonNum]);
@@ -432,7 +432,7 @@ void Scene2901::update() {
if (_currLocationButtonNum == _selectedButtonNum) {
_ssLocationButtonLights[_currWhirlButtonNum]->hide();
++_currWhirlButtonNum;
- while (!getSubVar(0x2C145A98, _currWhirlButtonNum) || (_currWhirlButtonNum == 2 && _isButton2Broken) || _currLocationButtonNum == _currWhirlButtonNum) {
+ while (!getSubVar(V_TELEPORTER_DEST_AVAILABLE, _currWhirlButtonNum) || (_currWhirlButtonNum == 2 && _isButton2Broken) || _currLocationButtonNum == _currWhirlButtonNum) {
++_currWhirlButtonNum;
if (_currWhirlButtonNum >= 6)
_currWhirlButtonNum = 0;
@@ -474,7 +474,7 @@ uint32 Scene2901::handleMessage(int messageNum, const MessageParam ¶m, Entit
_selectedButtonNum = _currWhirlButtonNum;
_ssLocationButtonLights[_selectedButtonNum]->hide();
_selectedButtonNum = param.asInteger();
- if (!getSubVar(0x2C145A98, _selectedButtonNum))
+ if (!getSubVar(V_TELEPORTER_DEST_AVAILABLE, _selectedButtonNum))
_selectedButtonNum = _currLocationButtonNum;
break;
}
diff --git a/engines/neverhood/module2900.h b/engines/neverhood/module2900.h
index 7d4e1e4..1951439 100644
--- a/engines/neverhood/module2900.h
+++ b/engines/neverhood/module2900.h
@@ -36,7 +36,7 @@ public:
Module2900(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
int _sceneNum;
- int _field2C;
+ int _teleporterModuleResult;
void createScene(int sceneNum, int which);
void updateScene();
void updateMusic(bool halfVolume);
Commit: f5c7070ace26b95a52303ceb51893d2032ad8241
https://github.com/scummvm/scummvm/commit/f5c7070ace26b95a52303ceb51893d2032ad8241
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Add mouse cursor hiding/showing
Changed paths:
engines/neverhood/mouse.cpp
engines/neverhood/mouse.h
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index a1c4a9a..bce6646 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -42,7 +42,7 @@ Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect)
Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
: StaticSprite(vm, 2000), _mouseType(kMouseType435),
- _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {
+ _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2), _visible(true) {
init(fileHash);
if (_x <= _x1) {
@@ -85,6 +85,13 @@ void Mouse::load(uint32 fileHash) {
}
void Mouse::update() {
+ if (_visible && !_surface->getVisible()) {
+ CursorMan.showMouse(false);
+ _visible = false;
+ } else if (!_visible && _surface->getVisible()) {
+ CursorMan.showMouse(true);
+ _visible = true;
+ }
updateCursor();
_frameNum++;
if (_frameNum >= 6)
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index 0b4f6b8..a163a7a 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -51,6 +51,7 @@ protected:
int16 _x1;
int16 _x2;
int _type;
+ bool _visible;
void init(uint32 fileHash);
void update();
void updateCursorNum();
Commit: 2c4f0b70fe4103891f8ffd99e0ea3f8788a90b31
https://github.com/scummvm/scummvm/commit/2c4f0b70fe4103891f8ffd99e0ea3f8788a90b31
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Add Entity::setSoundPan and use it in the DiskplayerScene
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/entity.cpp
engines/neverhood/entity.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 65bbc0d..ac51ea1 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -265,7 +265,7 @@ DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerS
_appearSlot->setVisible(false);
_activeSlot->setVisible(false);
loadSound(0, 0x46210074);
- // TODO sound panning stuff
+ setSoundPan(0, elementIndex * 100 / 19);
} else if (elementIndex != 20) {
_activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes4[_elementIndex], 1100));
_activeSlot->setVisible(false);
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index f66d129..36137a6 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -150,6 +150,10 @@ void Entity::setSoundVolume(uint index, int volume) {
getSoundResource(index)->setVolume(volume);
}
+void Entity::setSoundPan(uint index, int pan) {
+ getSoundResource(index)->setPan(pan);
+}
+
void Entity::deleteSoundResources() {
if (_soundResources) {
for (uint i = 0; i < kMaxSoundResources; ++i)
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 4bcd0c4..0b3e32c 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -111,6 +111,7 @@ protected:
void stopSound(uint index);
bool isSoundPlaying(uint index);
void setSoundVolume(uint index, int volume);
+ void setSoundPan(uint index, int pan);
void deleteSoundResources();
};
Commit: 963b76007650eb3e9d55333120ca6a824759ff98
https://github.com/scummvm/scummvm/commit/963b76007650eb3e9d55333120ca6a824759ff98
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Remove TODOs concerning the original engine's debug code
- Add Scene1202 palette effect
- Add AsScene1405Tile sound panning
- Clean up some old comments
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/palette.cpp
engines/neverhood/palette.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index ac51ea1..d69182b 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -379,7 +379,6 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
addEntity(_diskSmackerPlayer);
addSurface(_diskSmackerPlayer->getSurface());
_diskSmackerPlayer->setDrawPos(154, 86);
- // TODO _diskSmackerPlayer->gotoFrame(0);
_vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder());
_palette->usePalette();
@@ -469,7 +468,6 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
if (!_inputDisabled) {
switch (messageNum) {
case 0x0001:
- // TODO: Debug/Cheat
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
sendMessage(_parentModule, 0x1009, 0);
} else if (!_dropKey &&
@@ -488,7 +486,6 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
}
}
break;
- // case 0x000D: TODO: Debug/Cheat
case 0x2000:
tuneIn();
break;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 3335155..e46ed26 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -476,7 +476,6 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO Debug stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
if (!_flag2 && _backgroundIndex == 0) {
if (_flag1) {
@@ -489,7 +488,6 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
break;
- // TODO Debug stuff
case 0x2001:
showMouse(false);
_backgroundIndex = 24;
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index d106a85..fecb66a 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -1137,7 +1137,8 @@ void Scene1202::update() {
_clickedIndex = 0;
SetMessageHandler(&Scene1202::hmSolved);
setGlobalVar(V_TNT_DUMMY_BUILT, 1);
- doPaletteEffect();
+ _palette->copyToBasePalette(_paletteData);
+ _palette->startFadeToPalette(24);
playSound(3);
_soundFlag = true;
} else if (_clickedIndex >= 0 && _counter == 0) {
@@ -1163,17 +1164,10 @@ uint32 Scene1202::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO: Debug/Cheat stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_soundFlag) {
leaveScene(0);
}
break;
- case 0x000D:
- if (param.asInteger() == 0x14210006) {
- // TODO: Debug/Cheat stuff
- messageResult = 1;
- }
- break;
case 0x2000:
_clickedIndex = (int)param.asInteger();
break;
@@ -1209,8 +1203,4 @@ bool Scene1202::isSolved() {
getSubVar(VA_TNT_POSITIONS, 12) == 12 && getSubVar(VA_TNT_POSITIONS, 15) == 15;
}
-void Scene1202::doPaletteEffect() {
- // TODO
-}
-
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index 7d4e224..a0e9c9f 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -209,7 +209,6 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmSolved(int messageNum, const MessageParam ¶m, Entity *sender);
bool isSolved();
- void doPaletteEffect();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 978eb03..c81cbaa 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1329,7 +1329,6 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO Debug stuff
if (!_isPuzzleSolved) {
if (param.asPoint().x > 20 && param.asPoint().x < 620) {
if (_asCurrKey && !_isInsertingKey) {
@@ -1363,7 +1362,6 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
break;
- // TODO Debug stuff
case 0x2002:
// Check if all keys are in the correct keyholes
if (getSubVar(VA_IS_KEY_INSERTED, 0) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 0) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0) &&
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index b5489a3..82ac01d 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1278,7 +1278,6 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (_puzzleSolvedCountdown == 0) {
- // TODO: Debug/Cheat stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
// Exit scene
leaveScene(0);
@@ -1295,9 +1294,6 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
break;
- case 0x000D:
- // TODO: Debug/Cheat stuff
- break;
case 0x2000:
// The mouse got the cheese (nomnom)
setGlobalVar(V_MOUSE_PUZZLE_SOLVED, 1);
@@ -1542,7 +1538,7 @@ AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, ui
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _tileIndex(tileIndex), _countdown(0), _isShowing(false) {
loadSound(0, 0x05308101);
- // TODO _soundResource.setPan
+ setSoundPan(0, (tileIndex % 8 * 4 + 4) * 25 / 8);
_x = kAsScene1405TileItemPositions[_tileIndex].x;
_y = kAsScene1405TileItemPositions[_tileIndex].y;
createSurface1(0x844B805C, 1100);
@@ -1653,14 +1649,10 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO: Debug/Cheat stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
leaveScene(0);
}
break;
- case 0x000D:
- // TODO: Debug/Cheat stuff
- break;
case 0x2000:
if (_selectFirstTile) {
_firstTileIndex = param.asInteger();
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index a46b8fc..b62ff01 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -106,9 +106,6 @@ void Scene1501::update() {
Scene::update();
- // TODO: Since these countdowns are used a lot, maybe these can be wrapped in a class/struct
- // so the code gets a little cleaner.
-
if (_countdown1 != 0) {
_countdown1--;
if (_countdown1 == 0) {
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index b6df706..568f957 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1064,10 +1064,6 @@ void AsCommonCarConnector::update() {
Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _asCar(NULL), _countdown1(0) {
- /* TODO: Find out which of the message/update handlers are used for
- the upper/lower floors and rename them accordingly.
- */
-
setGlobalVar(V_CAR_DELTA_X, 1);
_surfaceFlag = true;
@@ -1434,11 +1430,9 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO: Debug stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
break;
- // TODO: Debug stuff
case 0x2000:
if (!_isSolved) {
if (_changeCurrentSymbol)
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index d90074c..9db1503 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -390,7 +390,6 @@ void AsScene1907Symbol::fallOff(int newPositionIndex, int fallOffDelay) {
void AsScene1907Symbol::stFallOffHitGround() {
playSound(1);
sendMessage(_parentScene, 0x1022, 1000 + _newPositionIndex);
- // TODO: Meh...
Entity::_priority = 1000 - _newPositionIndex;
_vm->_collisionMan->removeSprite(this);
_vm->_collisionMan->addSprite(this);
@@ -632,13 +631,11 @@ uint32 Scene1907::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO DEBUG stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) &&
!_hasPlugInFailed && _moveDownCountdown == 0 && _moveUpCountdown == 0 && _countdown3 == 0) {
leaveScene(0);
}
break;
- // TODO Debug stuff
case 0x2000:
if (getGlobalVar(V_STAIRS_DOWN)) {
playSound(0);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 20a8559..1b07890 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -967,14 +967,10 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO Debug stuff
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
leaveScene(0);
}
break;
- case 0x000D:
- // TODO Debug stuff
- break;
case 0x2000:
_movingTileIndex = (int16)param.asInteger();
_ssMovingTile = (Sprite*)sender;
@@ -1127,8 +1123,6 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B8320);
- //DEBUG setGlobalVar(V_KEY3_LOCATION, 1);//###//TODO CHECK IF Below...
-
if (getGlobalVar(V_KEY3_LOCATION) == 1) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
_vm->_collisionMan->addSprite(_asKey);
@@ -2391,7 +2385,6 @@ void Scene2208::drawRow(int16 rowIndex) {
_background->getSurface()->copyFrom(_backgroundSurface->getSurface(), 0, y, sourceRect, true);
if (rowIndex < (int)_strings.size()) {
const char *text = _strings[rowIndex];
- // TODO/CHECKME: Use temporary string up to '{' character (see above)
_fontSurface->drawString(_background->getSurface(), 95, y, (const byte*)text);
}
}
@@ -2667,7 +2660,6 @@ Scene2247::~Scene2247() {
uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
- // TODO: Debug stuff
case 0x100D:
if (param.asInteger() == 0x800C6694) {
readClickedColumn();
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index d29330f..c75e85b 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -487,8 +487,6 @@ void Scene2401::update() {
uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
- // case 0x0001: TODO DEBUG
- // case 0x000D: TODO DEBUG
case 0x100D:
if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 0a14fb6..c9bffe5 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -92,7 +92,9 @@ void Module2500::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B01B8, 220);
break;
case 2:
- setGlobalVar(V_WORLDS_JOINED, 1);// TODO DEBUG! Join the tracks.
+ //DEBUG>>>Join the tracks.
+ setGlobalVar(V_WORLDS_JOINED, 1);
+ //DEBUG<<<
_vm->gameState().which = which;
if (getGlobalVar(V_WORLDS_JOINED))
createScene2704(which, 0x004B01E0, 150);
@@ -213,7 +215,6 @@ uint32 Module2500::handleMessage(int messageNum, const MessageParam ¶m, Enti
}
void Module2500::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
- // TODO Move to module class?
_childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 19bf9be..9bac035 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -411,8 +411,6 @@ void Module2700::updateScene() {
createScene(19, 3);
break;
case 21:
- // TODO? GameState_sub_469C50(&field_52, 0);
- // TODO MusicMan_stopAll (if field_52 above = 1)
_vm->_soundMan->deleteMusic(_musicFileHash);
_vm->_soundMan->startMusic(0x04020210, 0, 2);
_vm->_soundMan->deleteSoundGroup(0x42212411);
@@ -460,8 +458,6 @@ void Module2700::updateScene() {
_vm->_soundMan->stopMusic(0x04020210, 0, 1);
_vm->gameModule()->initScene2801Vars();
_musicFileHash = getGlobalVar(V_GOOD_RADIO_MUSIC_NAME);
- // TODO? GameState_sub_469C50(&field_52, 0);
- // TODO MusicMan_create(); // Why?
_vm->_soundMan->addMusic(0x42212411, _musicFileHash);
_vm->_soundMan->startMusic(_musicFileHash, 0, 2/*TODO ??? */);
_vm->_soundMan->addSound(0x42212411, 0x44014282);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index b6f5694..a1a93bd 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -487,7 +487,6 @@ Scene2801::~Scene2801() {
uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
- // TODO: case 0x000D:
case 0x4826:
if (sender == _asTape) {
sendEntityMessage(_klayman, 0x1014, _asTape);
@@ -1862,14 +1861,10 @@ uint32 Scene2804::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO DEBUG
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
leaveScene(0);
}
break;
- case 0x000D:
- // TODO DEBUG
- break;
case 0x2000:
_isWorking = true;
sendMessage(_asCoil, 0x2002, 0);
@@ -2377,53 +2372,23 @@ uint32 AsScene2808TestTube::handleMessage(int messageNum, const MessageParam &pa
void AsScene2808TestTube::fill() {
- if ((int)_fillLevel >= _testTubeSetNum * 3 + 3)
+ if ((int)_fillLevel < _testTubeSetNum * 3 + 3)
return;
- // TODO Remove the two switches
-
if (_testTubeSetNum == 0) {
- switch (_fillLevel) {
- case 0:
- playSound(0);
- break;
- case 1:
- playSound(1);
- break;
- case 2:
- playSound(2);
- break;
- }
+ playSound(_fillLevel);
setVisible(true);
startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices1[_fillLevel], kClass490FrameIndices1[_fillLevel + 1]);
_newStickFrameIndex = kClass490FrameIndices1[_fillLevel + 1];
} else {
- switch (_fillLevel) {
- case 0:
- playSound(3);
- break;
- case 1:
- playSound(4);
- break;
- case 2:
- playSound(5);
- break;
- case 3:
- playSound(6);
- break;
- case 4:
- playSound(7);
- break;
- case 5:
- playSound(8);
- break;
- }
+ playSound(3 + _fillLevel);
setVisible(true);
startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices2[_fillLevel], kClass490FrameIndices2[_fillLevel + 1]);
_newStickFrameIndex = kClass490FrameIndices2[_fillLevel + 1];
}
_ssDispenser->startCountdown(_fillLevel);
_fillLevel++;
+
}
void AsScene2808TestTube::flush() {
@@ -2599,14 +2564,10 @@ uint32 Scene2808::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO DEBUG Stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !isAnyTestTubeFilled()) {
leaveScene(1);
}
break;
- case 0x000D:
- // TODO DEBUG Stuff
- break;
case 0x2000:
if (!_isFlowing)
_asTestTubes[param.asInteger()]->fill();
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 242a00e..6d394a8 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -937,15 +937,11 @@ uint32 Scene3009::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO: Debug stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !getGlobalVar(V_CANNON_RAISED)) {
setGlobalVar(V_CANNON_TARGET_STATUS, 0);
leaveScene(0);
}
break;
- case 0x000D:
- // TODO: Debug stuff
- break;
case 0x2000:
if (!getGlobalVar(V_CANNON_RAISED)) {
if (!getGlobalVar(V_WALL_BROKEN)) {
@@ -1347,7 +1343,6 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- // TODO: Debug stuff
if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && _countdown == 0 && !_checkUnlocked) {
if (!_boltUnlocking[0] && !_boltUnlocking[1] && !_boltUnlocking[2]) {
showMouse(false);
@@ -1365,9 +1360,6 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
break;
- case 0x000D:
- // TODO: Debug stuff
- break;
case 0x2000:
if (!_boltUnlocked[param.asInteger()] && !_checkUnlocked && _countdown == 0) {
_asDeadBolts[param.asInteger()]->unlock(false);
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index bf3de5d..96d33c0 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -140,7 +140,6 @@ void NavigationScene::createMouseCursor() {
}
mouseCursorFileHash = navigationItem.mouseCursorFileHash;
- // TODO: Check the resource...
if (mouseCursorFileHash == 0)
mouseCursorFileHash = 0x63A40028;
diff --git a/engines/neverhood/palette.cpp b/engines/neverhood/palette.cpp
index 16ef31d..d4b9b67 100644
--- a/engines/neverhood/palette.cpp
+++ b/engines/neverhood/palette.cpp
@@ -161,6 +161,10 @@ void Palette::fillBaseBlack(int index, int count) {
}
}
+void Palette::copyToBasePalette(byte *palette) {
+ memcpy(_basePalette, palette, 256 * 4);
+}
+
void Palette::update() {
debug(2, "Palette::update() _status = %d", _status);
if (_status == 1) {
diff --git a/engines/neverhood/palette.h b/engines/neverhood/palette.h
index 4b0747b..c83207c 100644
--- a/engines/neverhood/palette.h
+++ b/engines/neverhood/palette.h
@@ -51,6 +51,7 @@ public:
void startFadeToPalette(int counter);
void fillBaseWhite(int index, int count);
void fillBaseBlack(int index, int count);
+ void copyToBasePalette(byte *palette);
protected:
int _status;
byte *_palette;
Commit: 692edf40c737e88fdfb1b3d5a9515a85207dbafd
https://github.com/scummvm/scummvm/commit/692edf40c737e88fdfb1b3d5a9515a85207dbafd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Try to give the AsCommonCar identifiers better names
- Implement AsCommonCar::updateSound()
- Fix a bug in Scene1608 (the Klaymen animation got stuck when trying to get back into the car)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1c8a2d9..3d19a59 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -361,9 +361,9 @@ void GameModule::startup() {
// <<<DEBUG
#if 1
- _vm->gameState().which = 0;
+ _vm->gameState().which = 1;
_vm->gameState().sceneNum = 0;
- createModule(1200, -1);
+ createModule(2500, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 568f957..ae8fd7f 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -191,23 +191,23 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
_x = x;
_y = y;
- _field100 = 0;
+ _inMainArea = false;
_exitDirection = 0;
_currPointIndex = 0;
- _againDestPtFlag = 0;
+ _hasAgainDestPoint = false;
_stepError = 0;
- _againDestPointFlag = 0;
+ _hasAgainDestPointIndex = false;
_steps = 0;
- _flag10E = 0;
- _moreY = 0;
- _flag10F = 0;
- _flag113 = 0;
- _flag114 = 1;
- _flag11A = 0;
+ _isBraking = false;
+ _yMoveTotalSteps = 0;
+ _isBusy = false;
+ _isIdle = false;
+ _isMoving = true;
+ _rectFlag = false;
_newDeltaXType = -1;
- _field11E = 0;
+ _soundCounter = 0;
_pathPoints = NULL;
- _rectList = NULL;
+ _rectList = NULL; // TODO Check if this is used
startAnimation(0xD4220027, 0, -1);
setDoDeltaX(getGlobalVar(V_CAR_DELTA_X));
@@ -215,7 +215,7 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
}
AsCommonCar::~AsCommonCar() {
- if (_finalizeStateCb == AnimationCallback(&AsCommonCar::sub45D620)) {
+ if (_finalizeStateCb == AnimationCallback(&AsCommonCar::evTurnCarDone)) {
setGlobalVar(V_CAR_DELTA_X, !getGlobalVar(V_CAR_DELTA_X));
}
}
@@ -230,23 +230,23 @@ void AsCommonCar::update() {
_newDeltaXType = -1;
}
AnimatedSprite::update();
- if (_againDestPtFlag && _moreY == 0 && !_flag10F) {
- _againDestPtFlag = 0;
- _againDestPointFlag = 0;
- sendPointMessage(this, 0x2004, _againDestPt);
- } else if (_againDestPointFlag && _moreY == 0 && !_flag10F) {
- _againDestPointFlag = 0;
+ if (_hasAgainDestPoint && _yMoveTotalSteps == 0 && !_isBusy) {
+ _hasAgainDestPoint = false;
+ _hasAgainDestPointIndex = false;
+ sendPointMessage(this, 0x2004, _againDestPoint);
+ } else if (_hasAgainDestPointIndex && _yMoveTotalSteps == 0 && !_isBusy) {
+ _hasAgainDestPointIndex = false;
sendMessage(this, 0x2003, _againDestPointIndex);
}
- sub45CE10();
- sub45E0A0();
+ updateMovement();
+ updateSound();
}
-void AsCommonCar::update45C790() {
- AsCommonCar::update();
+void AsCommonCar::upIdle() {
+ update();
if (++_idleCounter >= _idleCounterMax)
- sub45D050();
- sub45E0A0();
+ stIdleBlink();
+ updateSound();
}
uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -255,10 +255,6 @@ uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Ent
case 0x1019:
SetSpriteUpdate(NULL);
break;
- /* NOTE: Implemented in setPathPoints
- case 0x2000:
- case 0x2001:
- */
case 0x2002:
// Set the current position without moving
_currPointIndex = param.asInteger();
@@ -270,24 +266,24 @@ uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Ent
// Move to a point by its index
{
int newPointIndex = param.asInteger();
- if (_moreY <= 0 && !_flag10F) {
- _someX = pathPoint(newPointIndex).x;
- _someY = pathPoint(newPointIndex).y;
+ if (_yMoveTotalSteps <= 0 && !_isBusy) {
+ _destX = pathPoint(newPointIndex).x;
+ _destY = pathPoint(newPointIndex).y;
if (_currPointIndex < newPointIndex) {
moveToNextPoint();
} else if (_currPointIndex == newPointIndex && _stepError == 0) {
if (_currPointIndex == 0) {
- _moreY = 0;
+ _yMoveTotalSteps = 0;
sendMessage(_parentScene, 0x2005, 0);
} else if (_currPointIndex == (int)_pathPoints->size()) {
- _moreY = 0;
+ _yMoveTotalSteps = 0;
sendMessage(_parentScene, 0x2006, 0);
}
} else {
moveToPrevPoint();
}
} else {
- _againDestPointFlag = 1;
+ _hasAgainDestPointIndex = true;
_againDestPointIndex = newPointIndex;
}
}
@@ -298,25 +294,25 @@ uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Ent
int minMatchIndex = -1;
int minMatchDistance, distance;
NPoint pt = param.asPoint();
- if (_moreY <= 0 && !_flag10F) {
+ if (_yMoveTotalSteps <= 0 && !_isBusy) {
// Check if we're already exiting (or something)
if ((pt.x <= 20 && _exitDirection == 1) ||
(pt.x >= 620 && _exitDirection == 3) ||
(pt.y <= 20 && _exitDirection == 2) ||
(pt.y >= 460 && _exitDirection == 4))
break;
- _someX = pt.x;
- _someY = pt.y;
- minMatchDistance = calcDistance(_someX, _someY, _x, _y) + 1;
+ _destX = pt.x;
+ _destY = pt.y;
+ minMatchDistance = calcDistance(_destX, _destY, _x, _y) + 1;
for (int i = _currPointIndex + 1; i < (int)_pathPoints->size(); i++) {
- distance = calcDistance(_someX, _someY, pathPoint(i).x, pathPoint(i).y);
+ distance = calcDistance(_destX, _destY, pathPoint(i).x, pathPoint(i).y);
if (distance >= minMatchDistance)
break;
minMatchDistance = distance;
minMatchIndex = i;
}
for (int i = _currPointIndex; i >= 0; i--) {
- distance = calcDistance(_someX, _someY, pathPoint(i).x, pathPoint(i).y);
+ distance = calcDistance(_destX, _destY, pathPoint(i).x, pathPoint(i).y);
if (distance >= minMatchDistance)
break;
minMatchDistance = distance;
@@ -336,53 +332,48 @@ uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Ent
}
}
} else {
- _againDestPtFlag = 1;
- _againDestPt = pt;
+ _hasAgainDestPoint = true;
+ _againDestPoint = pt;
}
}
break;
case 0x2007:
- _moreY = param.asInteger();
+ _yMoveTotalSteps = param.asInteger();
_steps = 0;
- _flag10E = 0;
+ _isBraking = false;
SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
_lastDistance = 640;
break;
case 0x2008:
- _moreY = param.asInteger();
+ _yMoveTotalSteps = param.asInteger();
_steps = 0;
- _flag10E = 0;
+ _isBraking = false;
SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
_lastDistance = 640;
break;
case 0x2009:
- sub45CF80();
+ stEnterCar();
break;
case 0x200A:
- sub45CFB0();
+ stLeaveCar();
break;
- /* NOTE: Implemented in setRectList
- case 0x200B:
- case 0x200C:
- */
case 0x200E:
- sub45D180();
+ stTurnCar();
break;
case 0x200F:
- sub45CD00();
+ stCarAtHome();
_newDeltaXType = param.asInteger();
break;
}
return messageResult;
}
-uint32 AsCommonCar::handleMessage45CC30(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonCar::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = AsCommonCar::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (_flag10F && param.asInteger() == 0x025424A2) {
+ if (_isBusy && param.asInteger() == 0x025424A2)
gotoNextState();
- }
break;
case 0x3002:
gotoNextState();
@@ -391,10 +382,10 @@ uint32 AsCommonCar::handleMessage45CC30(int messageNum, const MessageParam ¶
return messageResult;
}
-uint32 AsCommonCar::handleMessage45CCA0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 AsCommonCar::hmLeaveCar(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x2009:
- sub45CF80();
+ stEnterCar();
break;
case 0x3002:
sendMessage(_parentScene, 0x200A, 0);
@@ -404,23 +395,22 @@ uint32 AsCommonCar::handleMessage45CCA0(int messageNum, const MessageParam ¶
return 0;
}
-void AsCommonCar::sub45CD00() {
+void AsCommonCar::stCarAtHome() {
bool doDeltaX = _doDeltaX;
SetSpriteUpdate(NULL);
- _againDestPtFlag = 0;
- _againDestPointFlag = 0;
- _flag10E = 0;
- _flag10F = 0;
- _flag113 = 0;
- _flag114 = 0;
- _flag11A = 0;
+ _hasAgainDestPoint = false;
+ _hasAgainDestPointIndex = false;
+ _isBraking = false;
+ _isBusy = false;
+ _isIdle = false;
+ _isMoving = false;
+ _rectFlag = false;
_rectList = NULL;
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
- NextState(&AsCommonCar::sub45CFE0);
+ NextState(&AsCommonCar::stLeanForwardIdle);
startAnimation(0x35698F78, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
- SetUpdateHandler(&AsCommonCar::update45C790);
- FinalizeState(&AsCommonCar::sub45D040);
+ SetMessageHandler(&AsCommonCar::handleMessage);
+ SetUpdateHandler(&AsCommonCar::upIdle);
+ FinalizeState(&AsCommonCar::evIdleDone);
setDoDeltaX(doDeltaX ? 1 : 0);
_currMoveDirection = 0;
_newMoveDirection = 0;
@@ -429,36 +419,36 @@ void AsCommonCar::sub45CD00() {
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void AsCommonCar::sub45CDC0() {
- if (_value112 == 1) {
+void AsCommonCar::updateTurnMovement() {
+ if (_turnMoveStatus == 1) {
_lastDistance = 640;
- _flag113 = 0;
- _flag10E = 0;
+ _isIdle = false;
+ _isBraking = false;
SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
- } else if (_value112 == 2) {
+ } else if (_turnMoveStatus == 2) {
_lastDistance = 640;
- _flag113 = 0;
- _flag10E = 0;
+ _isIdle = false;
+ _isBraking = false;
SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
}
}
-void AsCommonCar::sub45CE10() {
- if (_flag10E && !_flag113 && !_flag10F) {
+void AsCommonCar::updateMovement() {
+ if (_isBraking && !_isIdle && !_isBusy) {
gotoNextState();
- _flag114 = 0;
- _flag113 = 1;
+ _isMoving = false;
+ _isIdle = true;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45CFE0);
- } else if (!_flag10E && _steps && _flag113) {
+ NextState(&AsCommonCar::stLeanForwardIdle);
+ } else if (!_isBraking && _steps && _isIdle) {
gotoNextState();
- _flag113 = 0;
+ _isIdle = false;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45D100);
+ NextState(&AsCommonCar::stUpdateMoveDirection);
} else {
bool flag = false;
uint index = 0;
@@ -468,103 +458,92 @@ void AsCommonCar::sub45CE10() {
if (_x >= r.x1 && _x <= r.x2 && _y >= r.y1 && _y <= r.y2)
break;
}
- if (index < _rectList->size() && !_flag11A)
+ if (index < _rectList->size() && !_rectFlag)
flag = true;
- _flag11A = index < _rectList->size();
+ _rectFlag = index < _rectList->size();
}
if (flag) {
gotoNextState();
- sub45D0A0();
- } else if (_newMoveDirection != _currMoveDirection && _flag114 && !_flag10F) {
+ stHandleRect();
+ } else if (_newMoveDirection != _currMoveDirection && _isMoving && !_isBusy) {
gotoNextState();
_currMoveDirection = _newMoveDirection;
- sub45D100();
+ stUpdateMoveDirection();
}
}
}
-void AsCommonCar::sub45CF80() {
+void AsCommonCar::stEnterCar() {
startAnimation(0xA86A9538, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45CFE0);
+ NextState(&AsCommonCar::stLeanForwardIdle);
}
-void AsCommonCar::sub45CFB0() {
+void AsCommonCar::stLeaveCar() {
startAnimation(0xA86A9538, -1, -1);
_playBackwards = true;
- SetMessageHandler(&AsCommonCar::handleMessage45CCA0);
+ SetMessageHandler(&AsCommonCar::hmLeaveCar);
SetUpdateHandler(&AsCommonCar::update);
}
-void AsCommonCar::sub45CFE0() {
+void AsCommonCar::stLeanForwardIdle() {
startAnimation(0x35698F78, 0, -1);
SetMessageHandler(&AsCommonCar::handleMessage);
- SetUpdateHandler(&AsCommonCar::update45C790);
- FinalizeState(&AsCommonCar::sub45D040);
- _idleCounter = 0;
+ SetUpdateHandler(&AsCommonCar::upIdle);
+ FinalizeState(&AsCommonCar::evIdleDone);
_currMoveDirection = 0;
_newMoveDirection = 0;
_steps = 0;
+ _idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void AsCommonCar::sub45D040() {
+void AsCommonCar::evIdleDone() {
SetUpdateHandler(&AsCommonCar::update);
}
-void AsCommonCar::sub45D050() {
+void AsCommonCar::stIdleBlink() {
startAnimation(0xB579A77C, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45CFE0);
+ NextState(&AsCommonCar::stLeanForwardIdle);
_idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-void AsCommonCar::sub45D0A0() {
- _flag10F = 1;
+void AsCommonCar::stHandleRect() {
+ _isBusy = true;
gotoNextState();
startAnimation(0x9C220DA4, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- FinalizeState(&AsCommonCar::sub45D0E0);
+ FinalizeState(&AsCommonCar::evHandleRectDone);
}
-void AsCommonCar::sub45D0E0() {
- _flag10F = 0;
+void AsCommonCar::evHandleRectDone() {
+ _isBusy = false;
_newMoveDirection = 0;
- sub45D100();
+ stUpdateMoveDirection();
}
-void AsCommonCar::sub45D100() {
- _flag114 = 1;
+void AsCommonCar::stUpdateMoveDirection() {
+ _isMoving = true;
if (_currMoveDirection == 1) {
startAnimation(0xD4AA03A4, 0, -1);
} else if (_currMoveDirection == 3) {
startAnimation(0xD00A1364, 0, -1);
} else if ((_currMoveDirection == 2 && _doDeltaX) || (_currMoveDirection == 4 && !_doDeltaX)) {
- sub45D180();
+ stTurnCar();
} else {
startAnimation(0xD4220027, 0, -1);
}
setGlobalVar(V_CAR_DELTA_X, _doDeltaX ? 1 : 0);
}
-void AsCommonCar::sub45D180() {
- _flag10F = 1;
- gotoNextState();
- startAnimation(0xF46A0324, 0, -1);
- _value112 = 0;
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
- SetUpdateHandler(&AsCommonCar::update);
- FinalizeState(&AsCommonCar::sub45D620);
- sub45CDC0();
-}
-
void AsCommonCar::moveToNextPoint() {
if (_currPointIndex >= (int)_pathPoints->size() - 1) {
- _moreY = 0;
+ _yMoveTotalSteps = 0;
sendMessage(this, 0x1019, 0);
sendMessage(_parentScene, 0x2006, 0);
} else {
@@ -576,50 +555,75 @@ void AsCommonCar::moveToNextPoint() {
_currMoveDirection = 2;
else if (_currMoveDirection == 2)
_currMoveDirection = 4;
- if (_flag113)
- sub45D390();
+ if (_isIdle)
+ stTurnCarMoveToNextPoint();
else
- sub45D350();
+ stBrakeMoveToNextPoint();
} else {
if (_steps == 0) {
gotoNextState();
- _flag113 = 0;
+ _isIdle = false;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45D100);
+ NextState(&AsCommonCar::stUpdateMoveDirection);
}
- _flag10E = 0;
+ _isBraking = false;
SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
_lastDistance = 640;
}
}
}
-void AsCommonCar::sub45D350() {
+void AsCommonCar::stBrakeMoveToNextPoint() {
gotoNextState();
- _flag10F = 1;
- _flag10E = 1;
+ _isBusy = true;
+ _isBraking = true;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
+ SetUpdateHandler(&AsCommonCar::update);
+ NextState(&AsCommonCar::stTurnCarMoveToNextPoint);
+}
+
+void AsCommonCar::stTurnCar() {
+ // Turn to left/right #1
+ gotoNextState();
+ _isBusy = true;
+ startAnimation(0xF46A0324, 0, -1);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45D390);
+ FinalizeState(&AsCommonCar::evTurnCarDone);
+ _turnMoveStatus = 0;
+ updateTurnMovement();
}
-void AsCommonCar::sub45D390() {
+void AsCommonCar::stTurnCarMoveToNextPoint() {
+ // Turn to left/right #2
gotoNextState();
- _flag10F = 1;
+ _isBusy = true;
startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- FinalizeState(&AsCommonCar::sub45D620);
- _value112 = 1;
- sub45CDC0();
+ FinalizeState(&AsCommonCar::evTurnCarDone);
+ _turnMoveStatus = 1;
+ updateTurnMovement();
+}
+
+void AsCommonCar::stTurnCarMoveToPrevPoint() {
+ // Turn to left/right #3
+ FinalizeState(NULL);
+ _isBusy = true;
+ startAnimation(0xF46A0324, 0, -1);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
+ SetUpdateHandler(&AsCommonCar::update);
+ FinalizeState(&AsCommonCar::evTurnCarDone);
+ _turnMoveStatus = 2;
+ updateTurnMovement();
}
void AsCommonCar::moveToPrevPoint() {
if (_currPointIndex == 0 && _stepError == 0) {
- _moreY = 0;
+ _yMoveTotalSteps = 0;
sendMessage(this, 0x1019, 0);
sendMessage(_parentScene, 0x2005, 0);
} else {
@@ -638,65 +642,54 @@ void AsCommonCar::moveToPrevPoint() {
_currMoveDirection = 4;
else if (_currMoveDirection == 4)
_currMoveDirection = 2;
- if (_flag113)
- sub45D5D0();
+ if (_isIdle)
+ stTurnCarMoveToPrevPoint();
else
- sub45D580();
+ stBrakeMoveToPrevPoint();
} else {
if (_steps == 0) {
gotoNextState();
- _flag113 = 0;
+ _isIdle = false;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45D100);
+ NextState(&AsCommonCar::stUpdateMoveDirection);
}
- _flag10E = 0;
+ _isBraking = false;
SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
_lastDistance = 640;
}
}
}
-void AsCommonCar::sub45D580() {
- _flag10F = 1;
- _flag10E = 1;
+void AsCommonCar::stBrakeMoveToPrevPoint() {
FinalizeState(NULL);
+ _isBusy = true;
+ _isBraking = true;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
- SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::sub45D5D0);
-}
-
-void AsCommonCar::sub45D5D0() {
- _flag10F = 1;
- FinalizeState(NULL);
- startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage45CC30);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
- FinalizeState(&AsCommonCar::sub45D620);
- _value112 = 2;
- sub45CDC0();
+ NextState(&AsCommonCar::stTurnCarMoveToPrevPoint);
}
-void AsCommonCar::sub45D620() {
- _flag10F = 0;
+void AsCommonCar::evTurnCarDone() {
+ _isBusy = false;
_newMoveDirection = 0;
setDoDeltaX(2);
- sub45D100();
+ stUpdateMoveDirection();
}
void AsCommonCar::suMoveToNextPoint() {
int16 newX = _x, newY = _y;
if (_currPointIndex >= (int)_pathPoints->size()) {
- _moreY = 0;
+ _yMoveTotalSteps = 0;
sendMessage(this, 0x1019, 0);
sendMessage(_parentScene, 0x2006, 0);
return;
}
- if (_flag10E) {
+ if (_isBraking) {
if (_steps <= 0) {
sendMessage(this, 0x1019, 0);
return;
@@ -708,7 +701,7 @@ void AsCommonCar::suMoveToNextPoint() {
}
bool firstTime = true;
- _anotherY = _steps;
+ _ySteps = _steps;
int stepsCtr = _steps;
while (stepsCtr > 0) {
@@ -757,7 +750,7 @@ void AsCommonCar::suMoveToNextPoint() {
if (stepsCtr < 0)
stepsCtr = 0;
}
- _anotherY = stepsCtr;
+ _ySteps = stepsCtr;
}
if (stepsCtr + _stepError >= deltaY) {
stepsCtr -= deltaY;
@@ -784,25 +777,25 @@ void AsCommonCar::suMoveToNextPoint() {
firstTime = false;
}
- if (_moreY != 0) {
+ if (_yMoveTotalSteps != 0) {
_x = newX;
_y = newY;
- _moreY -= _anotherY;
- if (_moreY <= 0) {
- _flag10E = 1;
- _moreY = 0;
+ _yMoveTotalSteps -= _ySteps;
+ if (_yMoveTotalSteps <= 0) {
+ _isBraking = true;
+ _yMoveTotalSteps = 0;
}
} else {
- int distance = calcDistance(_someX, _someY, _x, _y);
+ int distance = calcDistance(_destX, _destY, _x, _y);
_x = newX;
_y = newY;
if (newX > 20 && newX < 620 && newY > 20 && newY < 460) {
_exitDirection = 0;
- _field100 = 1;
- } else if (_field100) {
- _someX = pathPoint(_pathPoints->size() - 1).x;
- _someY = pathPoint(_pathPoints->size() - 1).y;
- _field100 = 0;
+ _inMainArea = true;
+ } else if (_inMainArea) {
+ _destX = pathPoint(_pathPoints->size() - 1).x;
+ _destY = pathPoint(_pathPoints->size() - 1).y;
+ _inMainArea = false;
if (_x <= 20)
_exitDirection = 1;
else if (_x >= 620)
@@ -811,19 +804,19 @@ void AsCommonCar::suMoveToNextPoint() {
_exitDirection = 2;
else if (_y >= 460)
_exitDirection = 4;
- if (_exitDirection != 0 && _flag10E) {
- _flag10E = 0;
+ if (_exitDirection != 0 && _isBraking) {
+ _isBraking = false;
_steps = 11;
}
}
if ((distance < 20 && _exitDirection == 0 && _lastDistance < distance) ||
(_exitDirection == 0 && _lastDistance + 20 < distance))
- _flag10E = 1;
+ _isBraking = true;
if (distance < _lastDistance)
_lastDistance = distance;
if (_currPointIndex == (int)_pathPoints->size() - 1) {
- _flag10E = 1;
- _moreY = 0;
+ _isBraking = true;
+ _yMoveTotalSteps = 0;
sendMessage(this, 0x1019, 0);
sendMessage(_parentScene, 0x2006, 0);
}
@@ -835,13 +828,13 @@ void AsCommonCar::suMoveToPrevPoint() {
int16 newX = _x, newY = _y;
if (_currPointIndex == 0 && _stepError == 0) {
- _moreY = 0;
+ _yMoveTotalSteps = 0;
sendMessage(this, 0x1019, 0);
sendMessage(_parentScene, 0x2005, 0);
return;
}
- if (_flag10E) {
+ if (_isBraking) {
if (_steps <= 0) {
sendMessage(this, 0x1019, 0);
return;
@@ -853,7 +846,7 @@ void AsCommonCar::suMoveToPrevPoint() {
}
bool firstTime = true;
- _anotherY = _steps;
+ _ySteps = _steps;
int stepsCtr = _steps;
while (stepsCtr > 0) {
@@ -904,7 +897,7 @@ void AsCommonCar::suMoveToPrevPoint() {
} else {
stepsCtr += 7;
}
- _anotherY = stepsCtr;
+ _ySteps = stepsCtr;
}
if (_stepError == 0)
_stepError = deltaY;
@@ -931,25 +924,25 @@ void AsCommonCar::suMoveToPrevPoint() {
firstTime = false;
}
- if (_moreY != 0) {
+ if (_yMoveTotalSteps != 0) {
_x = newX;
_y = newY;
- _moreY -= _anotherY;
- if (_moreY <= 0) {
- _flag10E = 1;
- _moreY = 0;
+ _yMoveTotalSteps -= _ySteps;
+ if (_yMoveTotalSteps <= 0) {
+ _isBraking = true;
+ _yMoveTotalSteps = 0;
}
} else {
- int distance = calcDistance(_someX, _someY, _x, _y);
+ int distance = calcDistance(_destX, _destY, _x, _y);
_x = newX;
_y = newY;
if (newX > 20 && newX < 620 && newY > 20 && newY < 460) {
_exitDirection = 0;
- _field100 = 1;
- } else if (_field100) {
- _someX = pathPoint(0).x;
- _someY = pathPoint(0).y;
- _field100 = 0;
+ _inMainArea = true;
+ } else if (_inMainArea) {
+ _destX = pathPoint(0).x;
+ _destY = pathPoint(0).y;
+ _inMainArea = false;
if (_x <= 20)
_exitDirection = 1;
else if (_x >= 620)
@@ -958,19 +951,19 @@ void AsCommonCar::suMoveToPrevPoint() {
_exitDirection = 2;
else if (_y >= 460)
_exitDirection = 4;
- if (_exitDirection != 0 && _flag10E) {
- _flag10E = 0;
+ if (_exitDirection != 0 && _isBraking) {
+ _isBraking = false;
_steps = 11;
}
}
if ((distance < 20 && _exitDirection == 0 && _lastDistance < distance) ||
(_exitDirection == 0 && _lastDistance + 20 < distance))
- _flag10E = 1;
+ _isBraking = true;
if (distance < _lastDistance)
_lastDistance = distance;
if (_currPointIndex == 0 && _stepError == 0) {
- _flag10E = 1;
- _moreY = 0;
+ _isBraking = true;
+ _yMoveTotalSteps = 0;
sendMessage(this, 0x1019, 0);
sendMessage(_parentScene, 0x2005, 0);
}
@@ -978,8 +971,26 @@ void AsCommonCar::suMoveToPrevPoint() {
}
-void AsCommonCar::sub45E0A0() {
- // TODO
+void AsCommonCar::updateSound() {
+ int maxSoundCounter = 0;
+ _soundCounter++;
+ if (_steps != 0 && !_isIdle) {
+ if (_currMoveDirection == 1)
+ maxSoundCounter = 18 - _steps;
+ else if (_currMoveDirection == 3) {
+ maxSoundCounter = 5 - _steps;
+ if (maxSoundCounter < 1)
+ maxSoundCounter = 1;
+ } else {
+ maxSoundCounter = 14 - _steps;
+ }
+ } else {
+ maxSoundCounter = 21;
+ }
+ if (_soundCounter >= maxSoundCounter) {
+ sendMessage(_parentScene, 0x200D, 0);
+ _soundCounter = 0;
+ }
}
AsScene1608Door::AsScene1608Door(NeverhoodEngine *vm, Scene *parentScene)
@@ -1261,7 +1272,7 @@ void Scene1608::upGettingOutOfCar() {
addSprite(_klayman);
_klaymanInCar = false;
SetMessageHandler(&Scene1608::hmUpperFloor);
- SetUpdateHandler(&Scene1608::update);
+ SetUpdateHandler(&Scene1608::upUpperFloor);
setRectList(0x004B4810);
_asIdleCarLower->setVisible(true);
_asIdleCarFull->setVisible(true);
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 8c794e0..a2d5464 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -54,55 +54,55 @@ protected:
int _currMoveDirection;
int _exitDirection;
int _currPointIndex;
- NPoint _againDestPt;
- int _againDestPtFlag;
- int _steps;
- int _stepError;
+ bool _hasAgainDestPoint;
+ NPoint _againDestPoint;
+ bool _hasAgainDestPointIndex;
+ int _againDestPointIndex;
+ bool _inMainArea;
+ bool _isBraking;
+ bool _isBusy;
+ bool _isIdle;
+ bool _isMoving;
+ bool _rectFlag;
int _idleCounter;
int _idleCounterMax;
+ int _steps;
+ int _stepError;
int _lastDistance;
- int _field100;
- int _againDestPointFlag;
- int _flag10E;
- int _moreY;
- int _flag10F;
- int _flag113;
- int _flag114;
- int _flag11A;
+ int _yMoveTotalSteps;
+ int _ySteps;
int _newDeltaXType;
- int _field11E;
- int _againDestPointIndex;
- int _value112;
- int _anotherY;
- int16 _someX, _someY;
+ int _soundCounter;
+ int _turnMoveStatus;
+ int16 _destX, _destY;
NPoint pathPoint(uint index) { return (*_pathPoints)[index]; }
void update();
- void update45C790();
+ void upIdle();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage45CC30(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage45CCA0(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub45CD00();
- void sub45CDC0();
- void sub45CE10();
- void sub45CF80();
- void sub45CFB0();
- void sub45CFE0();
- void sub45D040();
- void sub45D050();
- void sub45D0A0();
- void sub45D0E0();
- void sub45D100();
- void sub45D180();
+ uint32 hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
+ uint32 hmLeaveCar(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stCarAtHome();
+ void updateTurnMovement();
+ void updateMovement();
+ void stEnterCar();
+ void stLeaveCar();
+ void stLeanForwardIdle();
+ void evIdleDone();
+ void stIdleBlink();
+ void stHandleRect();
+ void evHandleRectDone();
+ void stUpdateMoveDirection();
+ void stTurnCar();
void moveToNextPoint();
- void sub45D350();
- void sub45D390();
+ void stBrakeMoveToNextPoint();
+ void stTurnCarMoveToNextPoint();
void moveToPrevPoint();
- void sub45D580();
- void sub45D5D0();
- void sub45D620();
+ void stBrakeMoveToPrevPoint();
+ void stTurnCarMoveToPrevPoint();
+ void evTurnCarDone();
void suMoveToNextPoint();
void suMoveToPrevPoint();
- void sub45E0A0();
+ void updateSound();
};
class AsScene1608Door : public AnimatedSprite {
Commit: c09c0b899820d7b0c3fdb5a26b4b6d9d894f68f4
https://github.com/scummvm/scummvm/commit/c09c0b899820d7b0c3fdb5a26b4b6d9d894f68f4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Implement an experimental "render queue" to only draw and update what's actually changed; it works surprisingly well so far and only needs a few more changes here and there
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/neverhood.cpp
engines/neverhood/screen.cpp
engines/neverhood/screen.h
engines/neverhood/smackerplayer.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 3d19a59..a3c88c2 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -358,12 +358,13 @@ void GameModule::startup() {
setGlobalVar(V_CREATURE_ANGRY, 1);
setGlobalVar(V_RADIO_ENABLED, 1);
setGlobalVar(V_TNT_DUMMY_BUILT, 1);
+ setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
// <<<DEBUG
#if 1
- _vm->gameState().which = 1;
- _vm->gameState().sceneNum = 0;
- createModule(2500, -1);
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 3;
+ createModule(1300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index c5b136f..cd2234d 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -28,7 +28,7 @@ namespace Neverhood {
BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height)
: _vm(vm), _priority(priority), _visible(true), _transparent(true),
- _clipRects(NULL), _clipRectsCount(0) {
+ _clipRects(NULL), _clipRectsCount(0), _version(0) {
_drawRect.x = 0;
_drawRect.y = 0;
@@ -54,11 +54,11 @@ BaseSurface::~BaseSurface() {
void BaseSurface::draw() {
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
if (_clipRects && _clipRectsCount) {
- _vm->_screen->drawSurfaceClipRects(_surface, _drawRect, _clipRects, _clipRectsCount, _transparent);
+ _vm->_screen->drawSurfaceClipRects(_surface, _drawRect, _clipRects, _clipRectsCount, _transparent, _version);
} else if (_sysRect.x == 0 && _sysRect.y == 0) {
- _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent);
+ _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent, _version);
} else {
- _vm->_screen->drawUnk(_surface, _drawRect, _sysRect, _clipRect, _transparent);
+ _vm->_screen->drawUnk(_surface, _drawRect, _sysRect, _clipRect, _transparent, _version);
}
}
}
@@ -69,6 +69,7 @@ void BaseSurface::addDirtyRect() {
void BaseSurface::clear() {
_surface->fillRect(Common::Rect(0, 0, _surface->w, _surface->h), 0);
+ ++_version;
}
void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
@@ -76,6 +77,7 @@ void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
spriteResource.getDimensions().height <= _drawRect.height) {
clear();
spriteResource.draw((byte*)_surface->pixels, _surface->pitch, false, false);
+ ++_version;
}
}
@@ -89,6 +91,7 @@ void BaseSurface::drawSpriteResourceEx(SpriteResource &spriteResource, bool flip
if (_surface) {
clear();
spriteResource.draw((byte*)_surface->pixels, _surface->pitch, flipX, flipY);
+ ++_version;
}
}
}
@@ -102,6 +105,7 @@ void BaseSurface::drawAnimResource(AnimResource &animResource, uint frameIndex,
clear();
if (frameIndex < animResource.getFrameCount()) {
animResource.draw(frameIndex, (byte*)_surface->pixels, _surface->pitch, flipX, flipY);
+ ++_version;
}
}
}
@@ -109,6 +113,7 @@ void BaseSurface::drawAnimResource(AnimResource &animResource, uint frameIndex,
void BaseSurface::drawMouseCursorResource(MouseCursorResource &mouseCursorResource, int frameNum) {
if (frameNum < 3) {
mouseCursorResource.draw(frameNum, (byte*)_surface->pixels, _surface->pitch);
+ ++_version;
}
}
@@ -132,6 +137,7 @@ void BaseSurface::copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, N
dest += _surface->pitch;
}
}
+ ++_version;
}
// ShadowSurface
@@ -143,7 +149,7 @@ ShadowSurface::ShadowSurface(NeverhoodEngine *vm, int priority, int16 width, int
void ShadowSurface::draw() {
if (_surface && _visible && _drawRect.width > 0 && _drawRect.height > 0) {
- _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent, _shadowSurface->getSurface());
+ _vm->_screen->drawSurface2(_surface, _drawRect, _clipRect, _transparent, _version, _shadowSurface->getSurface());
}
}
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 08357ea..f27ee62 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -118,6 +118,7 @@ protected:
NRect *_clipRects;
uint _clipRectsCount;
bool _transparent;
+ byte _version;
};
class ShadowSurface : public BaseSurface {
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 5152def..6a06ad6 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -153,12 +153,14 @@ Common::Error NeverhoodEngine::run() {
if (_system->getMillis() >= nextFrameTime) {
_gameModule->handleUpdate();
_gameModule->draw();
+ _screen->update();
nextFrameTime = _screen->getNextFrameTime();
};
_soundMan->update();
_audioResourceMan->update();
- _screen->update();
+ //_screen->update();
+ _system->updateScreen();
_system->delayMillis(10);
debug(0, "---------------------------------------");
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index f9e8d49..a5f7b4d 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -33,9 +33,14 @@ Screen::Screen(NeverhoodEngine *vm)
_backScreen = new Graphics::Surface();
_backScreen->create(640, 480, Graphics::PixelFormat::createFormatCLUT8());
+ _renderQueue = new RenderQueue();
+ _prevRenderQueue = new RenderQueue();
+
}
Screen::~Screen() {
+ delete _renderQueue;
+ delete _prevRenderQueue;
_backScreen->free();
delete _backScreen;
}
@@ -43,9 +48,65 @@ Screen::~Screen() {
void Screen::update() {
_ticks = _vm->_system->getMillis();
updatePalette();
- // TODO: Implement actual code
- _vm->_system->copyRectToScreen((const byte*)_backScreen->pixels, _backScreen->pitch, 0, 0, 640, 480);
- _vm->_system->updateScreen();
+
+ if (_fullRefresh) {
+ // NOTE When playing a fullscreen/doubled Smacker video usually a full screen refresh is needed
+ _vm->_system->copyRectToScreen((const byte*)_backScreen->pixels, _backScreen->pitch, 0, 0, 640, 480);
+ _fullRefresh = false;
+ return;
+ }
+
+ // NOTE This is more or less experimental code for a smart "render queue".
+ // It works well so far but needs some optimizing, e.g. reducing overdraw.
+ // Maybe I'll use my microtiles code from the Toltecs engine.
+ // Also better move this to a separate method or even class.
+
+ Common::Array<Common::Rect> updateRects;
+
+ for (RenderQueue::iterator jt = _prevRenderQueue->begin(); jt != _prevRenderQueue->end(); ++jt)
+ (*jt)._refresh = true;
+
+ for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
+ RenderItem &renderItem = (*it);
+ renderItem._refresh = true;
+ for (RenderQueue::iterator jt = _prevRenderQueue->begin(); jt != _prevRenderQueue->end(); ++jt) {
+ RenderItem &prevRenderItem = (*jt);
+ if (prevRenderItem == renderItem) {
+ prevRenderItem._refresh = false;
+ renderItem._refresh = false;
+ }
+ }
+ }
+
+ for (RenderQueue::iterator jt = _prevRenderQueue->begin(); jt != _prevRenderQueue->end(); ++jt) {
+ RenderItem &prevRenderItem = (*jt);
+ if (prevRenderItem._refresh)
+ updateRects.push_back(Common::Rect(prevRenderItem._destX, prevRenderItem._destY, prevRenderItem._destX + prevRenderItem._width, prevRenderItem._destY + prevRenderItem._height));
+ }
+
+ for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
+ RenderItem &renderItem = (*it);
+ if (renderItem._refresh)
+ updateRects.push_back(Common::Rect(renderItem._destX, renderItem._destY, renderItem._destX + renderItem._width, renderItem._destY + renderItem._height));
+ }
+
+ /*
+ for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
+ debug("## (%d, %d, %d, %d)", (*ri).left, (*ri).top, (*ri).right, (*ri).bottom);
+ */
+
+ for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
+ RenderItem &renderItem = (*it);
+ for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
+ blitRenderItem(renderItem, *ri);
+ }
+
+ SWAP(_renderQueue, _prevRenderQueue);
+ _renderQueue->clear();
+
+ for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
+ _vm->_system->copyRectToScreen((const byte*)_backScreen->getBasePtr((*ri).left, (*ri).top), _backScreen->pitch, (*ri).left, (*ri).top, (*ri).width(), (*ri).height());
+
}
uint32 Screen::getNextFrameTime() {
@@ -99,7 +160,7 @@ void Screen::clear() {
memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
}
-void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent,
+void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version,
const Graphics::Surface *shadowSurface) {
int16 destX, destY;
@@ -133,7 +194,7 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
//debug(2, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
- blit(surface, destX, destY, ddRect, transparent, shadowSurface);
+ queueBlit(surface, destX, destY, ddRect, transparent, version, shadowSurface);
// Useful for debugging
//_backScreen->frameRect(Common::Rect(clipRect.x1, clipRect.y1, clipRect.x2, clipRect.y2), 250);
@@ -142,7 +203,7 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
}
-void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent) {
+void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version) {
int16 destX, destY;
NRect ddRect;
@@ -173,7 +234,7 @@ void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, ND
ddRect.y1 = drawRect.y;
}
- blit(surface, destX, destY, ddRect, transparent);
+ queueBlit(surface, destX, destY, ddRect, transparent, version);
}
@@ -220,7 +281,7 @@ void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &dra
const byte *source = (const byte*)surface->getBasePtr(0, 0);
byte *dest = (byte*)_backScreen->getBasePtr(drawRect.x, drawRect.y);
-
+
for (int16 yc = 0; yc < surface->h; yc++) {
byte *row = dest;
for (int16 xc = 0; xc < surface->w; xc++) {
@@ -231,10 +292,12 @@ void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &dra
dest += _backScreen->pitch;
dest += _backScreen->pitch;
}
+
+ _fullRefresh = true; // See Screen::update
}
-void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent) {
+void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent, byte version) {
int16 x, y;
bool xflag, yflag;
@@ -271,7 +334,7 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
newDrawRect.height = drawRect.height;
}
- drawSurface3(surface, drawRect.x, drawRect.y, newDrawRect, clipRect, transparent);
+ drawSurface3(surface, drawRect.x, drawRect.y, newDrawRect, clipRect, transparent, version);
if (!xflag) {
newDrawRect.x = 0;
@@ -280,7 +343,7 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
newDrawRect.height = sysRect.height - y;
if (drawRect.height < newDrawRect.height)
newDrawRect.height = drawRect.height;
- drawSurface3(surface, sysRect.width + drawRect.x - x, drawRect.y, newDrawRect, clipRect, transparent);
+ drawSurface3(surface, sysRect.width + drawRect.x - x, drawRect.y, newDrawRect, clipRect, transparent, version);
}
if (!yflag) {
@@ -290,7 +353,7 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
newDrawRect.height = y + drawRect.height - sysRect.height;
if (drawRect.width < newDrawRect.width)
newDrawRect.width = drawRect.width;
- drawSurface3(surface, drawRect.x, sysRect.height + drawRect.y - y, newDrawRect, clipRect, transparent);
+ drawSurface3(surface, drawRect.x, sysRect.height + drawRect.y - y, newDrawRect, clipRect, transparent, version);
}
if (!xflag && !yflag) {
@@ -298,15 +361,84 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
newDrawRect.y = 0;
newDrawRect.width = x + drawRect.width - sysRect.width;
newDrawRect.height = y + drawRect.height - sysRect.height;
- drawSurface3(surface, sysRect.width + drawRect.x - x, sysRect.height + drawRect.y - y, newDrawRect, clipRect, transparent);
+ drawSurface3(surface, sysRect.width + drawRect.x - x, sysRect.height + drawRect.y - y, newDrawRect, clipRect, transparent, version);
}
}
-void Screen::drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent) {
+void Screen::drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent, byte version) {
NDrawRect clipDrawRect(0, 0, drawRect.width, drawRect.height);
for (uint i = 0; i < clipRectsCount; i++)
- drawSurface3(surface, drawRect.x, drawRect.y, clipDrawRect, clipRects[i], transparent);
+ drawSurface3(surface, drawRect.x, drawRect.y, clipDrawRect, clipRects[i], transparent, version);
+}
+
+void Screen::queueBlit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent, byte version,
+ const Graphics::Surface *shadowSurface) {
+
+ int width = ddRect.x2 - ddRect.x1;
+ int height = ddRect.y2 - ddRect.y1;
+
+ if (width <= 0 || height <= 0)
+ return;
+
+ RenderItem renderItem;
+ renderItem._surface = surface;
+ renderItem._shadowSurface = shadowSurface;
+ renderItem._destX = destX;
+ renderItem._destY = destY;
+ renderItem._srcX = ddRect.x1;
+ renderItem._srcY = ddRect.y1;
+ renderItem._width = width;
+ renderItem._height = height;
+ renderItem._transparent = transparent;
+ renderItem._version = version;
+ _renderQueue->push_back(renderItem);
+
+}
+
+void Screen::blitRenderItem(const RenderItem &renderItem, const Common::Rect &clipRect) {
+
+ const Graphics::Surface *surface = renderItem._surface;
+ const Graphics::Surface *shadowSurface = renderItem._shadowSurface;
+ const int16 x0 = MAX<int16>(clipRect.left, renderItem._destX);
+ const int16 y0 = MAX<int16>(clipRect.top, renderItem._destY);
+ const int16 x1 = MIN<int16>(clipRect.right, renderItem._destX + renderItem._width);
+ const int16 y1 = MIN<int16>(clipRect.bottom, renderItem._destY + renderItem._height);
+ int16 width = x1 - x0;
+ int16 height = y1 - y0;
+
+ if (width < 0 || height < 0)
+ return;
+
+ const byte *source = (const byte*)surface->getBasePtr(renderItem._srcX + x0 - renderItem._destX, renderItem._srcY + y0 - renderItem._destY);
+ byte *dest = (byte*)_backScreen->getBasePtr(x0, y0);
+
+ if (shadowSurface) {
+ const byte *shadowSource = (const byte*)shadowSurface->getBasePtr(x0, y0);
+ while (height--) {
+ for (int xc = 0; xc < width; xc++)
+ if (source[xc] != 0)
+ dest[xc] = shadowSource[xc];
+ source += surface->pitch;
+ shadowSource += shadowSurface->pitch;
+ dest += _backScreen->pitch;
+ }
+ } else if (!renderItem._transparent) {
+ while (height--) {
+ memcpy(dest, source, width);
+ source += surface->pitch;
+ dest += _backScreen->pitch;
+ }
+ } else {
+ while (height--) {
+ for (int xc = 0; xc < width; xc++)
+ if (source[xc] != 0)
+ dest[xc] = source[xc];
+ source += surface->pitch;
+ dest += _backScreen->pitch;
+ }
+ }
+
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index e3a2bfb..bbf4f5f 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -23,6 +23,7 @@
#ifndef NEVERHOOD_SCREEN_H
#define NEVERHOOD_SCREEN_H
+#include "common/array.h"
#include "graphics/surface.h"
#include "video/smk_decoder.h"
#include "neverhood/neverhood.h"
@@ -30,6 +31,31 @@
namespace Neverhood {
+struct RenderItem {
+ const Graphics::Surface *_surface;
+ const Graphics::Surface *_shadowSurface;
+ int16 _destX, _destY;
+ int16 _srcX, _srcY, _width, _height;
+ bool _transparent;
+ byte _version;
+ bool _refresh;
+ bool operator==(const RenderItem &second) const {
+ return
+ _surface == second._surface &&
+ _shadowSurface == second._shadowSurface &&
+ _destX == second._destX &&
+ _destY == second._destY &&
+ _srcX == second._srcX &&
+ _srcY == second._srcY &&
+ _width == second._width &&
+ _height == second._height &&
+ _transparent == second._transparent &&
+ _version == second._version;
+ }
+};
+
+typedef Common::Array<RenderItem> RenderQueue;
+
class Screen {
public:
Screen(NeverhoodEngine *vm);
@@ -43,16 +69,19 @@ public:
void testPalette(byte *paletteData);
void updatePalette();
void clear();
- void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent,
+ void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version,
const Graphics::Surface *shadowSurface = NULL);
- void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent);
+ void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version);
void drawShadowSurface(const Graphics::Surface *surface, const Graphics::Surface *shadowSurface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect);
void blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent,
const Graphics::Surface *shadowSurface = NULL);
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
- void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent);
- void drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent);
+ void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent, byte version);
+ void drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent, byte version);
void setSmackerDecoder(Video::SmackerDecoder *smackerDecoder) { _smackerDecoder = smackerDecoder; }
+ void queueBlit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent, byte version,
+ const Graphics::Surface *shadowSurface = NULL);
+ void blitRenderItem(const RenderItem &renderItem, const Common::Rect &clipRect);
protected:
NeverhoodEngine *_vm;
Graphics::Surface *_backScreen;
@@ -61,6 +90,9 @@ protected:
int32 _frameDelay;
byte *_paletteData;
bool _paletteChanged;
+ //
+ bool _fullRefresh;
+ RenderQueue *_renderQueue, *_prevRenderQueue;
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index b491bc5..d7a244b 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -36,7 +36,7 @@ SmackerSurface::SmackerSurface(NeverhoodEngine *vm)
void SmackerSurface::draw() {
if (_smackerFrame && _visible && _drawRect.width > 0 && _drawRect.height > 0)
- _vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect, false);
+ _vm->_screen->drawSurface2(_smackerFrame, _drawRect, _clipRect, false, ++_version);
}
void SmackerSurface::setSmackerFrame(const Graphics::Surface *smackerFrame) {
Commit: 4295991d194404b6e2bbbddb1de2f82eae685739
https://github.com/scummvm/scummvm/commit/4295991d194404b6e2bbbddb1de2f82eae685739
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Use hardcoded values as width/height of several sprites (in the original the values were loaded from the entry's extData but since all values are constant anyway it shouldn't matter)
Changed paths:
engines/neverhood/module1100.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index e46ed26..b825ced 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -353,8 +353,7 @@ void SsScene1105SymbolDie::hide() {
AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
- // TODO createSurface3(100, dword_4AF4C0);
- createSurface(100, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(100, 556, 328);
_x = 320;
_y = 240;
SetUpdateHandler(&AnimatedSprite::update);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index c81cbaa..3f606e7 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -581,8 +581,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
- // TODO createSurface3(200, dword_4AF9F8);
- createSurface(200, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(200, 128, 315);
_x = 289;
_y = 390;
SetUpdateHandler(&AnimatedSprite::update);
@@ -1119,8 +1118,7 @@ AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint ind
_x = pt.x;
_y = pt.y;
- // TODO createSurface3(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], fileHashes);
- createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], 640, 480); //TODO: Remeove once the line above is done
+ createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], 190, 148);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1307Key::handleMessage);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 82ac01d..e4e2550 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -137,8 +137,7 @@ void Module1400::updateScene() {
AsScene1401Pipe::AsScene1401Pipe(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100), _countdown1(0), _countdown2(0) {
- // TODO createSurface3(900, dword_4B6768);
- createSurface(900, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(900, 152, 147);
_x = 454;
_y = 217;
SetMessageHandler(&AsScene1401Pipe::handleMessage);
@@ -224,8 +223,7 @@ void AsScene1401Pipe::stSuckInProjector() {
AsScene1401Mouse::AsScene1401Mouse(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100) {
- // TODO createSurface3(100, dword_4B6778);
- createSurface(100, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(100, 71, 41);
_x = 478;
_y = 433;
SetUpdateHandler(&AnimatedSprite::update);
@@ -271,8 +269,7 @@ void AsScene1401Mouse::stSuckedIn() {
AsScene1401Cheese::AsScene1401Cheese(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100) {
- // TODO createSurface3(200, dword_4B6768);
- createSurface(200, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(200, 152, 147);
_x = 427;
_y = 433;
SetUpdateHandler(&AnimatedSprite::update);
@@ -388,8 +385,7 @@ AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sp
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _asPipe(asPipe) {
_asProjectorItem = &kAsCommonProjectorItems[getGlobalVar(V_PROJECTOR_LOCATION)];
- // TODO createSurface3(990, dword_4B26D8);
- createSurface(990, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(990, 101, 182);
startAnimation(0x10E3042B, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsCommonProjector::handleMessage);
@@ -803,8 +799,7 @@ SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHas
AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int which)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
- // TODO createSurface3(900, dword_4B6768);
- createSurface(900, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(900, 152, 147);
SetFilterY(&Sprite::defFilterY);
SetUpdateHandler(&AnimatedSprite::update);
@@ -1105,8 +1100,7 @@ static const struct {
AsScene1407Mouse::AsScene1407Mouse(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _currSectionIndex(0) {
- // TODO createSurface3(100, dword_4B05B0);
- createSurface(100, 640, 480); //TODO: Remeove once the line above is done
+ createSurface(100, 117, 45);
SetUpdateHandler(&AnimatedSprite::update);
_x = 108;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index ae8fd7f..a69b8d0 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -186,8 +186,7 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
SetMessageHandler(&AsCommonCar::handleMessage);
SetSpriteUpdate(NULL);
- // TODO createSurface2(200, dword_4AF4C0);
- createSurface(200, 640, 480); //TODO: Remove once the line above is done
+ createSurface(200, 556, 328);
_x = x;
_y = y;
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 700f0cd..950b64d 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -80,8 +80,7 @@ void Module2100::updateScene() {
AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool flag)
: AnimatedSprite(vm, 1100) {
- // TODO createSurface3(100, dword_4B9018);
- createSurface(100, 640, 480); //TODO: Remove once the line above is done
+ createSurface(100, 328, 347);
_x = 320;
_y = 240;
SetUpdateHandler(&AnimatedSprite::update);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index c75e85b..f791c8e 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -635,7 +635,7 @@ void AsScene2402Door::stDoorClosingFinished() {
AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
: AnimatedSprite(vm, 1100), _klayman(klayman), _countdown1(0), _countdown2(0) {
- createSurface(100, 640, 480); // TODO Use correct size from the two hashes
+ createSurface(100, 127, 90);
SetMessageHandler(&Sprite::handleMessage);
_x = 260;
_y = 210;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 9bac035..9ff0da1 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -523,7 +523,7 @@ AsCommonCarShadow::AsCommonCarShadow(NeverhoodEngine *vm, AnimatedSprite *asCar,
: AnimatedSprite(vm, 1100), _asCar(asCar), _index(index), _animFileHash(0) {
SetUpdateHandler(&AsCommonCarShadow::update);
- createShadowSurface(shadowSurface, 320, 240, 100); // TODO Use actual dimensions from resource
+ createShadowSurface(shadowSurface, 211, 147, 100);
updateShadow();
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index a1a93bd..1b03968 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -675,7 +675,7 @@ AsScene2803LightCord::AsScene2803LightCord(NeverhoodEngine *vm, Scene *parentSce
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
_isPulled(false), _isBusy(false) {
- createSurface(1010, 640, 480); // TODO Use correct size from the two hashes
+ createSurface(1010, 28, 379);
SetUpdateHandler(&AnimatedSprite::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
_x = x;
Commit: a238f57805880b63a753d68abe726d2a6dfad21b
https://github.com/scummvm/scummvm/commit/a238f57805880b63a753d68abe726d2a6dfad21b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:31-07:00
Commit Message:
NEVERHOOD: Remove DirtyBackground which became obsolete after the renderqueue stuff
Changed paths:
engines/neverhood/background.cpp
engines/neverhood/background.h
engines/neverhood/module2800.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/background.cpp b/engines/neverhood/background.cpp
index 03c531f..0a80bd8 100644
--- a/engines/neverhood/background.cpp
+++ b/engines/neverhood/background.cpp
@@ -57,37 +57,4 @@ void Background::load(uint32 fileHash) {
_surface->drawSpriteResource(_spriteResource);
}
-// DirtyBackground
-
-DirtyBackground::DirtyBackground(NeverhoodEngine *vm, int objectPriority)
- : Background(vm, objectPriority) {
- // Empty
-}
-
-DirtyBackground::DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority)
- : Background(vm, objectPriority) {
-
- _spriteResource.load(calcHash(fileName));
- createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _surface->drawSpriteResource(_spriteResource);
-}
-
-DirtyBackground::DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority)
- : Background(vm, objectPriority) {
-
- _spriteResource.load(fileHash);
- createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _surface->drawSpriteResource(_spriteResource);
-}
-
-void DirtyBackground::createSurface(int surfacePriority, int16 width, int16 height) {
-
- // TODO: Later use a DirtySurface once it is implemented
- _surface = new BaseSurface(_vm, surfacePriority, width, height);
- _surface->setTransparent(false);
- _spriteResource.getPosition().x = width;
- _spriteResource.getPosition().y = height;
-
-}
-
} // End of namespace Neverhood
diff --git a/engines/neverhood/background.h b/engines/neverhood/background.h
index d8f624b..ef88be2 100644
--- a/engines/neverhood/background.h
+++ b/engines/neverhood/background.h
@@ -44,15 +44,6 @@ protected:
SpriteResource _spriteResource;
};
-class DirtyBackground : public Background {
-public:
- DirtyBackground(NeverhoodEngine *vm, int objectPriority);
- DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority);
- DirtyBackground(NeverhoodEngine *vm, uint32 fileHash, int objectPriority, int surfacePriority);
- void createSurface(int surfacePriority, int16 width, int16 height);
-
-};
-
} // End of namespace Neverhood
#endif /* NEVERHOOD_BACKGROUND_H */
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 1b03968..140e112 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -845,7 +845,7 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
_surfaceFlag = true;
- _background = new DirtyBackground(_vm, 0);
+ _background = new Background(_vm, 0);
_background->createSurface(0, 640, 480);
addBackground(_background);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index b75515f..c706ecc 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -183,8 +183,8 @@ Background *Scene::addBackground(Background *background) {
return background;
}
-void Scene::setBackground(uint32 fileHash, bool dirtyBackground) {
- _background = addBackground(new DirtyBackground(_vm, fileHash, 0, 0));
+void Scene::setBackground(uint32 fileHash) {
+ _background = addBackground(new Background(_vm, fileHash, 0, 0));
}
void Scene::changeBackground(uint32 fileHash) {
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index a0f7dafd..11c00d9 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -52,7 +52,7 @@ public:
void setSpriteSurfacePriority(Sprite *sprite, int priority);
void deleteSprite(Sprite **sprite);
Background *addBackground(Background *background);
- void setBackground(uint32 fileHash, bool dirtyBackground = true);
+ void setBackground(uint32 fileHash);
void changeBackground(uint32 fileHash);
void setBackgroundY(int16 y) { _background->getSurface()->getDrawRect().y = y; }
int16 getBackgroundY() { return _background->getSurface()->getDrawRect().y; }
Commit: a6e9475a3fd49bab9ff463f87734d27782297cdb
https://github.com/scummvm/scummvm/commit/a6e9475a3fd49bab9ff463f87734d27782297cdb
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Remove Scene::_surfaceFlag which also is obsolete now
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/module3000.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index d69182b..0371903 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -334,8 +334,6 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
int availableDisksCount = 0;
- _surfaceFlag = true;
-
setBackground(0x8A000044);
setPalette(kDiskplayerPaletteFileHashes[paletteIndex]);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 461f873..8e6b56b 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -339,7 +339,6 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1001::handleMessage);
setHitRects(0x004B4860);
- _surfaceFlag = false;
setBackground(0x4086520E);
setPalette(0x4086520E);
insertMouse433(0x6520A400);
@@ -1279,8 +1278,6 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B4138);
- _surfaceFlag = true;
-
setBackground(0x12C23307);
setPalette(0x12C23307);
@@ -1530,8 +1527,6 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
StaticScene::StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
: Scene(vm, parentModule, true) {
- _surfaceFlag = false;
-
SetMessageHandler(&StaticScene::handleMessage);
setBackground(backgroundFileHash);
@@ -1588,8 +1583,6 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
-
SetUpdateHandler(&Scene1004::update);
SetMessageHandler(&Scene1004::handleMessage);
@@ -1687,8 +1680,6 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1005::handleMessage);
- _surfaceFlag = true;
-
if (getGlobalVar(V_ENTRANCE_OPEN)) {
setBackground(0x2800E011);
setPalette(0x2800E011);
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index b825ced..9bd7b88 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -452,7 +452,6 @@ Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene1405Vars();
- _surfaceFlag = true;
SetUpdateHandler(&Scene1105::update);
SetMessageHandler(&Scene1105::handleMessage);
@@ -668,7 +667,6 @@ void Scene1105::update() {
Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, which) {
- _surfaceFlag = true;
SetMessageHandler(&Scene1109::handleMessage);
setBackground(0x8449E02F);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index fecb66a..c0bab71 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -726,8 +726,6 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004AEBD0);
- _surfaceFlag = true;
-
if (!getSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52)) {
setSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52, 1);
for (uint32 index = 0; index < 18; index++) {
@@ -1091,8 +1089,6 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1202::handleMessage);
SetUpdateHandler(&Scene1202::update);
- _surfaceFlag = true;
-
setBackground(0x60210ED5);
setPalette(0x60210ED5);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 3f606e7..f718d1e 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -630,7 +630,6 @@ void AsScene1303Balloon::stPopBalloon() {
Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _surfaceFlag = true;
SetMessageHandler(&Scene1303::handleMessage);
setRectList(0x004AF9E8);
@@ -694,7 +693,6 @@ uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶
Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _surfaceFlag = true;
SetMessageHandler(&Scene1304::handleMessage);
setRectList(0x004B91A8);
@@ -761,7 +759,6 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _surfaceFlag = true;
SetMessageHandler(&Scene1305::handleMessage);
setRectList(0x004B6E98);
@@ -876,7 +873,6 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 4);
- _surfaceFlag = true;
SetMessageHandler(&Scene1306::handleMessage);
setBackground(0x05303114);
@@ -1275,7 +1271,6 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
_keyHoleRects[i].y2 = pt.y + 15;
}
- _surfaceFlag = true;
SetMessageHandler(&Scene1307::handleMessage);
SetUpdateHandler(&Scene1307::update);
@@ -1575,7 +1570,6 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene1307Vars();
- _surfaceFlag = true;
SetMessageHandler(&Scene1308::handleMessage);
setBackground(0x41024202);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index e4e2550..1bb0548 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -647,7 +647,6 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1401::handleMessage);
SetUpdateHandler(&Scene1401::update);
setRectList(0x004B6758);
- _surfaceFlag = true;
setBackground(0x08221FA5);
setPalette(0x08221FA5);
@@ -1243,8 +1242,6 @@ void AsScene1407Mouse::stArriveAtHole() {
Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _puzzleSolvedCountdown(0), _resetButtonCountdown(0) {
- _surfaceFlag = true;
-
SetMessageHandler(&Scene1407::handleMessage);
SetUpdateHandler(&Scene1407::update);
@@ -1307,7 +1304,6 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1403::handleMessage);
setRectList(0x004B1FF8);
- _surfaceFlag = true;
setBackground(0x2110A234);
setPalette(0x2110A234);
@@ -1418,7 +1414,6 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(V_KEY3_LOCATION, 5);
SetMessageHandler(&Scene1404::handleMessage);
- _surfaceFlag = true;
setRectList(0x004B8D80);
@@ -1590,7 +1585,6 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
_vm->gameModule()->initScene1405Vars();
- _surfaceFlag = true;
setBackground(0x0C0C007D);
setPalette(0x0C0C007D);
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index b62ff01..0b55209 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -88,8 +88,6 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
- _surfaceFlag = true;
-
setBackground(backgroundFileHash);
setPalette();
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index a69b8d0..382aedd 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1076,7 +1076,6 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(V_CAR_DELTA_X, 1);
- _surfaceFlag = true;
SetMessageHandler(&Scene1608::hmLowerFloor);
_asKey = insertSprite<AsCommonKey>(this, 1, 1100, 198, 220);
@@ -1396,7 +1395,6 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO _vm->gameModule()->initScene3011Vars();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
- _surfaceFlag = true;
SetMessageHandler(&Scene1609::handleMessage);
SetUpdateHandler(&Scene1609::update);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index adbd853..ae97c15 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -194,8 +194,6 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B69D8);
- _surfaceFlag = true;
-
setBackground(0x03118226);
setPalette(0x03118226);
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 9db1503..c4a0904 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -91,8 +91,6 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
-
setRectList(0x004B34C8);
setBackground(0x01303227);
@@ -559,7 +557,6 @@ Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _currMovingSymbolIndex(0), _pluggedInCount(0),
_moveDownCountdown(0), _moveUpCountdown(0), _countdown3(0), _hasPlugInFailed(false) {
- _surfaceFlag = true;
setBackground(0x20628E05);
setPalette(0x20628E05);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index bd5597d..a97cbaa 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -100,7 +100,6 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
SetMessageHandler(&Scene2001::handleMessage);
setBackground(0xA6417244);
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 950b64d..58f87d9 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -203,7 +203,6 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
SetMessageHandler(&Scene2101::handleMessage);
SetUpdateHandler(&Scene2101::update);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 1b07890..1159c0b 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -508,7 +508,6 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO _vm->gameModule()->initScene2201Vars();
}
- _surfaceFlag = true;
SetMessageHandler(&Scene2201::handleMessage);
SetUpdateHandler(&Scene2201::update);
@@ -892,8 +891,6 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2202::handleMessage);
SetUpdateHandler(&Scene2202::update);
- _surfaceFlag = true;
-
setBackground(0x08100A0C);
setPalette(0x08100A0C);
addEntity(_palette);
@@ -1115,7 +1112,6 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(V_KEY3_LOCATION, 1);
SetMessageHandler(&Scene2203::handleMessage);
- _surfaceFlag = true;
setBackground(0x82C80334);
setPalette(0x82C80334);
@@ -1268,7 +1264,6 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2205::update);
setHitRects(0x004B0620);
- _surfaceFlag = true;
if (getGlobalVar(V_LIGHTS_ON)) {
_isLightOn = true;
@@ -1520,7 +1515,6 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene::update);
SetMessageHandler(&Scene2206::handleMessage);
- _surfaceFlag = true;
if (getGlobalVar(V_LIGHTS_ON)) {
fileHash = 0x41983216;
@@ -2016,7 +2010,6 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2207::handleMessage);
SetUpdateHandler(&Scene2207::update);
- _surfaceFlag = true;
insertKlayman<KmScene2207>(0, 0);
_klayman->setRepl(64, 0);
@@ -2405,7 +2398,6 @@ static const uint32 kScene2242MessageListIds1[] = {
Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _isKlaymanInLight(false) {
- _surfaceFlag = true;
SetMessageHandler(&Scene2242::handleMessage);
SetUpdateHandler(&Scene2242::update);
@@ -2525,7 +2517,6 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
_sceneInfo140 = _vm->_staticData->getSceneInfo140Item(sceneInfo140Id);
- _surfaceFlag = true;
SetMessageHandler(&HallOfRecordsScene::handleMessage);
SetUpdateHandler(&Scene::update);
@@ -2617,7 +2608,6 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
//DEBUG
setGlobalVar(V_LIGHTS_ON, 1);
- _surfaceFlag = true;
SetMessageHandler(&Scene2247::handleMessage);
SetUpdateHandler(&Scene::update);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index f791c8e..94937bf 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -392,7 +392,6 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(V_WATER_RUNNING, 1); //DEBUG! Enables water
setGlobalVar(V_HAS_TEST_TUBE, 1); //DEBUG! Gives the test tube
- _surfaceFlag = true;
SetMessageHandler(&Scene2401::handleMessage);
SetUpdateHandler(&Scene2401::update);
@@ -721,7 +720,6 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
SetMessageHandler(&Scene2402::handleMessage);
SetUpdateHandler(&Scene2402::update);
@@ -825,7 +823,6 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite1, *tempSprite2, *tempSprite3;
- _surfaceFlag = true;
SetMessageHandler(&Scene2403::handleMessage);
setBackground(0x0C05060C);
setPalette(0x0C05060C);
@@ -922,7 +919,6 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 2);
- _surfaceFlag = true;
SetMessageHandler(&Scene2406::handleMessage);
setRectList(0x004B78C8);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index c9bffe5..19779c3 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -227,7 +227,6 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(V_CAR_DELTA_X, 1);
SetUpdateHandler(&Scene2501::update);
- _surfaceFlag = true;
setBackground(0x1B8E8115);
setPalette(0x1B8E8115);
_palette->addPalette(0x00128842, 65, 31, 65);
@@ -551,7 +550,6 @@ Scene2504::Scene2504(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *ssButton;
- _surfaceFlag = true;
setBackground(0x90791B80);
setPalette(0x90791B80);
ssButton = insertSprite<SsScene2504Button>();
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 6eebd40..37e4406 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -306,7 +306,6 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _isBusy(false) {
- _surfaceFlag = true;
setBackground(0x51409A16);
setPalette(0x51409A16);
_asWater = insertSprite<AsScene2609Water>();
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 9ff0da1..870c14c 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -592,8 +592,6 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(0x004B2240);
setGlobalVar(V_CAR_DELTA_X, 1);
- _surfaceFlag = true;
-
setBackground(sceneInfo->bgFilename);
setPalette(sceneInfo->bgFilename);
@@ -705,7 +703,6 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
for (int j = 0; j < 3; j++)
_sceneInfos[i][j] = _vm->_staticData->getSceneInfo2700(kScene2702Infos[i][j]);
- _surfaceFlag = true;
SetMessageHandler(&Scene2702::handleMessage);
SetUpdateHandler(&Scene2702::update);
@@ -875,7 +872,6 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
- _surfaceFlag = true;
SetMessageHandler(&Scene2704::handleMessage);
SetUpdateHandler(&Scene2704::update);
@@ -988,7 +984,6 @@ static const struct { const char *pointListName; int which1, which2; } kSceneInf
Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _newTrackIndex(-1) {
- _surfaceFlag = true;
SetMessageHandler(&Scene2706::handleMessage);
setBackground(0x18808B88);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 140e112..c1e1790 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -404,7 +404,6 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene2801Vars();
- _surfaceFlag = true;
SetMessageHandler(&Scene2801::handleMessage);
SetUpdateHandler(&Scene::update);
@@ -512,7 +511,6 @@ Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
//DEBUG<<<
- _surfaceFlag = true;
SetMessageHandler(&Scene2802::handleMessage);
SetUpdateHandler(&Scene2802::update);
insertMouse435(0x008810A8, 20, 620);
@@ -843,8 +841,6 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x00900849);
- _surfaceFlag = true;
-
_background = new Background(_vm, 0);
_background->createSurface(0, 640, 480);
addBackground(_background);
@@ -1126,7 +1122,6 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
0, 0x286800D4, 0x286806D4, 0x28680AD4
};
- _surfaceFlag = true;
SetMessageHandler(&Scene2803Small::handleMessage);
loadDataResource(0x81120132);
@@ -1818,7 +1813,6 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
initCrystalColors();
- _surfaceFlag = true;
SetMessageHandler(&Scene2804::handleMessage);
SetUpdateHandler(&Scene2804::update);
@@ -1969,7 +1963,6 @@ void Scene2804::initCrystalColors() {
Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _surfaceFlag = true;
SetMessageHandler(&Scene2805::handleMessage);
setBackground(0x08021E04);
@@ -2058,7 +2051,6 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
SetMessageHandler(&Scene2806::handleMessage);
SetUpdateHandler(&Scene2806::update);
@@ -2178,7 +2170,6 @@ void Scene2806::findClosestPoint() {
Scene2807::Scene2807(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _surfaceFlag = true;
SetMessageHandler(&Scene2807::handleMessage);
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 1) {
@@ -2205,7 +2196,6 @@ Scene2807::Scene2807(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x31203460, 100);
}
- _surfaceFlag = true;
setBackground(0x3E049A95);
setPalette(0x3E049A95);
insertMouse435(0x49A913E8, 20, 620);
@@ -2536,7 +2526,6 @@ Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene2808Vars2();
}
- _surfaceFlag = true;
SetMessageHandler(&Scene2808::handleMessage);
SetUpdateHandler(&Scene2808::update);
@@ -2661,7 +2650,6 @@ Scene2809::Scene2809(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
SetMessageHandler(&Scene2809::handleMessage);
SetUpdateHandler(&Scene2809::update);
@@ -2809,7 +2797,6 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _surfaceFlag = true;
SetMessageHandler(&Scene2810::handleMessage);
setBackground(0x26508804);
@@ -3127,7 +3114,6 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 3);
- _surfaceFlag = true;
SetMessageHandler(&Scene2812::handleMessage);
SetUpdateHandler(&Scene2812::update);
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 0a033a8..976cf5d 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -401,7 +401,6 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
if (_currLocationButtonNum == 3)
setSubVar(V_TELEPORTER_DEST_AVAILABLE, 2, 1);
- _surfaceFlag = true;
setBackground(kScene2901FileHashes1[_currLocationButtonNum]);
setPalette(kScene2901FileHashes1[_currLocationButtonNum]);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 6d394a8..c3eb9e4 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -805,7 +805,6 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->gameModule()->initScene3009Vars();
setGlobalVar(V_CANNON_SMACKER_NAME, 0);
- _surfaceFlag = true;
_vm->_screen->clear();
@@ -1293,8 +1292,6 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[1], 1);
setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[2], 1);
- _surfaceFlag = true;
-
setBackground(0x80802626);
setPalette(0x80802626);
@@ -1533,7 +1530,6 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
// TODO _vm->gameModule()->initScene3011Vars();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
- _surfaceFlag = true;
SetMessageHandler(&Scene3011::handleMessage);
SetUpdateHandler(&Scene3011::update);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index c706ecc..ac08c14 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -48,7 +48,6 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_vm->_screen->setSmackerDecoder(NULL);
// TODO g_screen->resetDirtyRects();
_canAcceptInput = true;
- _surfaceFlag = false;
_messageList2 = NULL;
_smackerPlayer = NULL;
_isMessageListBusy = false;
@@ -75,25 +74,11 @@ Scene::~Scene() {
void Scene::draw() {
if (_smackerPlayer) {
- if (_surfaceFlag) {
- // TODO g_screen->resetDirtyRects();
- // TODO g_screen->copyDirtyRects();
- // TODO g_screen->addDirtyRects();
- }
if (_smackerPlayer->getSurface())
_smackerPlayer->getSurface()->draw();
} else {
-#if 0
- if (_surfaceFlag) {
- // TODO g_screen->copyDirtyRects();
- for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
- (*iter)->addDirtyRect();
- // TODO g_screen->addDirtyRects();
- }
-#endif
- for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
+ for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++)
(*iter)->draw();
- }
}
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 11c00d9..c9e27f7 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -160,8 +160,6 @@ protected:
Common::Array<Entity*> _entities;
Common::Array<BaseSurface*> _surfaces;
- bool _surfaceFlag;
-
Klayman *_klayman;
Background *_background;
Palette *_palette;
Commit: c7ad09c6856cc5e3be805866623d94258360fd60
https://github.com/scummvm/scummvm/commit/c7ad09c6856cc5e3be805866623d94258360fd60
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Remove BaseSurface::addDirtyRect() which is obsolete as well
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index cd2234d..b87c447 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -63,10 +63,6 @@ void BaseSurface::draw() {
}
}
-void BaseSurface::addDirtyRect() {
- // TODO
-}
-
void BaseSurface::clear() {
_surface->fillRect(Common::Rect(0, 0, _surface->w, _surface->h), 0);
++_version;
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index f27ee62..3ca3339 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -88,7 +88,6 @@ public:
BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height);
virtual ~BaseSurface();
virtual void draw();
- virtual void addDirtyRect();
void clear();
void drawSpriteResource(SpriteResource &spriteResource);
void drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height);
@@ -118,6 +117,7 @@ protected:
NRect *_clipRects;
uint _clipRectsCount;
bool _transparent;
+ // Version changes each time the pixels are touched in any way
byte _version;
};
Commit: 9b7354dacb343a1618f8329c660fcba170f86ede
https://github.com/scummvm/scummvm/commit/9b7354dacb343a1618f8329c660fcba170f86ede
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Fix mouse cursor visibility by starting out invisible when the Mouse object is created and hiding the cursor when it's destroyed
Changed paths:
engines/neverhood/mouse.cpp
engines/neverhood/mouse.h
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index bce6646..8cd5e60 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -42,7 +42,7 @@ Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect)
Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
: StaticSprite(vm, 2000), _mouseType(kMouseType435),
- _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2), _visible(true) {
+ _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2), _visible(false) {
init(fileHash);
if (_x <= _x1) {
@@ -63,6 +63,10 @@ Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int type)
_mouseCursorResource.setCursorNum(0);
}
+Mouse::~Mouse() {
+ CursorMan.showMouse(false);
+}
+
void Mouse::init(uint32 fileHash) {
_mouseCursorResource.load(fileHash);
_x = _vm->getMouseX();
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index a163a7a..2b0e8b7 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -41,6 +41,7 @@ public:
Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect);
Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2);
Mouse(NeverhoodEngine *vm, uint32 fileHash, int _type);
+ virtual ~Mouse();
void load(uint32 fileHash);
void updateCursor();
protected:
Commit: 533eb5d61d6d3f0b7f229648cf186ba1b54e5388
https://github.com/scummvm/scummvm/commit/533eb5d61d6d3f0b7f229648cf186ba1b54e5388
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Rename puzzle initialization methods and give them better names
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module1100.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index a3c88c2..80e6fbe 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -47,7 +47,7 @@
namespace Neverhood {
-static const uint32 kScene2801MusicFileHashes[] = {
+static const uint32 kRadioMusicFileHashes[] = {
0x82B22000,
0x02B22004,
0x42B22000,
@@ -124,7 +124,7 @@ void GameModule::handleSpaceKey() {
}
}
-void GameModule::initScene1307Vars() {
+void GameModule::initKeySlotsPuzzle() {
// Exit if it's already initialized
if (getSubVar(VA_IS_PUZZLE_INIT, 0x25400B10))
@@ -162,7 +162,7 @@ void GameModule::initScene1307Vars() {
}
-void GameModule::initScene1405Vars() {
+void GameModule::initMemoryPuzzle() {
// TODO: Give better names
@@ -261,33 +261,29 @@ void GameModule::initScene1405Vars() {
}
-void GameModule::initScene2401Vars() {
-
- if (getSubVar(VA_IS_PUZZLE_INIT, 0x40520234))
- return;
-
- setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 0, 3);
- setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 1, 1);
- setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 2, 2);
- setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 3, 0);
- setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 4, 4);
-
- setSubVar(VA_IS_PUZZLE_INIT, 0x40520234, 1);
-
+void GameModule::initWaterPipesPuzzle() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x40520234)) {
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 0, 3);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 1, 1);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 2, 2);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 3, 0);
+ setSubVar(VA_GOOD_WATER_PIPES_LEVEL, 4, 4);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x40520234, 1);
+ }
}
-void GameModule::initScene2801Vars() {
+void GameModule::initRadioPuzzle() {
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x08C80800)) {
int currMusicIndex = _vm->_rnd->getRandomNumber(5 - 1) + 3;
setGlobalVar(V_GOOD_RADIO_MUSIC_INDEX, 5 * currMusicIndex);
- setGlobalVar(V_GOOD_RADIO_MUSIC_NAME, kScene2801MusicFileHashes[currMusicIndex]);
+ setGlobalVar(V_GOOD_RADIO_MUSIC_NAME, kRadioMusicFileHashes[currMusicIndex]);
setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 1);
setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
setSubVar(VA_IS_PUZZLE_INIT, 0x08C80800, 1);
}
}
-void GameModule::initScene2808Vars1() {
+void GameModule::initTestTubes1Puzzle() {
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x20479010)) {
for (uint i = 0; i < 3; i++)
setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
@@ -295,7 +291,7 @@ void GameModule::initScene2808Vars1() {
}
}
-void GameModule::initScene2808Vars2() {
+void GameModule::initTestTubes2Puzzle() {
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x66059818)) {
for (uint i = 0; i < 3; i++)
setSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
@@ -303,7 +299,7 @@ void GameModule::initScene2808Vars2() {
}
}
-void GameModule::initScene3009Vars() {
+void GameModule::initCannonSymbolsPuzzle() {
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x8C9819C2)) {
for (int i = 0; i < 3; i++) {
setSubVar(VA_GOOD_CANNON_SYMBOLS_1, i, _vm->_rnd->getRandomNumber(12 - 1));
@@ -313,9 +309,9 @@ void GameModule::initScene3009Vars() {
}
}
-uint32 GameModule::getScene2802MusicFileHash() {
+uint32 GameModule::getCurrRadioMusicFileHash() {
uint musicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
- return (musicIndex % 5 != 0) ? 0 : kScene2801MusicFileHashes[CLIP<uint>(musicIndex / 5, 0, 17)];
+ return (musicIndex % 5 != 0) ? 0 : kRadioMusicFileHashes[CLIP<uint>(musicIndex / 5, 0, 17)];
}
@@ -324,20 +320,18 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
switch (messageNum) {
case 0x0800:
_someFlag1 = true;
- return messageResult;
+ break;
case 0x1009:
_moduleResult = param.asInteger();
_done = true;
- return messageResult;
+ break;
case 0x100A:
- // Unused resource preloading message
- return messageResult;
+ case 0x1023:
+ // Unused resource preloading messages
+ break;
case 0x101F:
_field2C = true;
- return messageResult;
- case 0x1023:
- // Unused resource preloading message
- return messageResult;
+ break;
}
return messageResult;
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 275e8d3..eb043cb 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -39,14 +39,14 @@ public:
void handleMouseDown(int16 x, int16 y);
void handleMouseUp(int16 x, int16 y);
void handleSpaceKey();
- void initScene1307Vars();
- void initScene1405Vars();
- void initScene2401Vars();
- void initScene2801Vars();
- void initScene2808Vars1();
- void initScene2808Vars2();
- void initScene3009Vars();
- uint32 getScene2802MusicFileHash();
+ void initKeySlotsPuzzle();
+ void initMemoryPuzzle();
+ void initWaterPipesPuzzle();
+ void initRadioPuzzle();
+ void initTestTubes1Puzzle();
+ void initTestTubes2Puzzle();
+ void initCannonSymbolsPuzzle();
+ uint32 getCurrRadioMusicFileHash();
protected:
Entity *_prevChildObject;
bool _someFlag1;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 9bd7b88..6bf6140 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -450,7 +450,7 @@ Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *ssOpenButton;
- _vm->gameModule()->initScene1405Vars();
+ _vm->gameModule()->initMemoryPuzzle();
SetUpdateHandler(&Scene1105::update);
SetMessageHandler(&Scene1105::handleMessage);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index f718d1e..d92cd66 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1258,7 +1258,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- _vm->gameModule()->initScene1307Vars();
+ _vm->gameModule()->initKeySlotsPuzzle();
_dataResource.load(0x22102142);
_keyHolePoints = _dataResource.getPointArray(0xAC849240);
@@ -1568,7 +1568,7 @@ uint32 AsScene1308Mouse::handleMessage(int messageNum, const MessageParam ¶m
Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _flag1(false) {
- _vm->gameModule()->initScene1307Vars();
+ _vm->gameModule()->initKeySlotsPuzzle();
SetMessageHandler(&Scene1308::handleMessage);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 1bb0548..f25efe2 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1584,7 +1584,7 @@ void AsScene1405Tile::hide() {
Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
- _vm->gameModule()->initScene1405Vars();
+ _vm->gameModule()->initMemoryPuzzle();
setBackground(0x0C0C007D);
setPalette(0x0C0C007D);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index ae97c15..7df162c 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -187,7 +187,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
setGlobalVar(V_FELL_DOWN_HOLE, 1);
- _vm->gameModule()->initScene3009Vars();
+ _vm->gameModule()->initCannonSymbolsPuzzle();
SetMessageHandler(&Scene1705::handleMessage);
SetUpdateHandler(&Scene1705::update);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 1159c0b..028c883 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2003,7 +2003,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
//setGlobalVar(V_LIGHTS_ON, 1);
//DEBUG<<<
- _vm->gameModule()->initScene3009Vars();
+ _vm->gameModule()->initCannonSymbolsPuzzle();
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x88460852))
setSubVar(VA_IS_PUZZLE_INIT, 0x88460852, 1);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 94937bf..770a5c3 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -387,7 +387,7 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _flag(false),
_soundToggle(false), _asWaterSpitIndex(0) {
- _vm->gameModule()->initScene2401Vars();
+ _vm->gameModule()->initWaterPipesPuzzle();
setGlobalVar(V_WATER_RUNNING, 1); //DEBUG! Enables water
setGlobalVar(V_HAS_TEST_TUBE, 1); //DEBUG! Gives the test tube
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 870c14c..60cc581 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -83,7 +83,7 @@ static const uint32 kScene2725StaticSprites[] = {
};
Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _soundIndex(0), _flag1(false) {
+ : Module(vm, parentModule), _soundIndex(0), _raidoMusicInitialized(false) {
_vm->_soundMan->addMusic(0x42212411, 0x04020210);
_vm->_soundMan->startMusic(0x04020210, 24, 2);
@@ -454,15 +454,15 @@ void Module2700::updateScene() {
} else {
switch (_vm->gameState().sceneNum) {
case 21:
- if (!_flag1) {
+ if (!_raidoMusicInitialized) {
_vm->_soundMan->stopMusic(0x04020210, 0, 1);
- _vm->gameModule()->initScene2801Vars();
+ _vm->gameModule()->initRadioPuzzle();
_musicFileHash = getGlobalVar(V_GOOD_RADIO_MUSIC_NAME);
_vm->_soundMan->addMusic(0x42212411, _musicFileHash);
_vm->_soundMan->startMusic(_musicFileHash, 0, 2/*TODO ??? */);
_vm->_soundMan->addSound(0x42212411, 0x44014282);
_vm->_soundMan->setSoundParams(0x44014282, true, 120, 360, 72, 0);
- _flag1 = true;
+ _raidoMusicInitialized = true;
}
break;
}
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index d11586e..4973211 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -38,7 +38,7 @@ public:
virtual ~Module2700();
protected:
int _soundIndex;
- bool _flag1;
+ bool _raidoMusicInitialized;
uint32 _scene2711StaticSprites[6];
uint32 _musicFileHash;
void createScene(int sceneNum, int which);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index c1e1790..174e5e0 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -372,7 +372,7 @@ void Module2800::updateScene() {
void Module2800::updateMusic(bool halfVolume) {
- uint32 newMusicFileHash = _vm->_gameModule->getScene2802MusicFileHash();
+ uint32 newMusicFileHash = _vm->_gameModule->getCurrRadioMusicFileHash();
if (!_musicResource)
_musicResource = new MusicResource(_vm);
@@ -402,7 +402,7 @@ void Module2800::updateMusic(bool halfVolume) {
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _vm->gameModule()->initScene2801Vars();
+ _vm->gameModule()->initRadioPuzzle();
SetMessageHandler(&Scene2801::handleMessage);
SetUpdateHandler(&Scene::update);
@@ -657,9 +657,8 @@ void Scene2802::changeTuneStatus(int prevTuneStatus, int newTuneStatus) {
}
if (newTuneStatus == 0) {
- if (_vm->_gameModule->getScene2802MusicFileHash() != 0) {
+ if (_vm->_gameModule->getCurrRadioMusicFileHash() != 0)
_vm->_soundMan->stopSound(0x00632252);
- }
else
_vm->_soundMan->playSoundLooping(0x00632252);
} else if (newTuneStatus == 3 || newTuneStatus == 6) {
@@ -835,7 +834,7 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
};
setGlobalVar(V_BEEN_SHRINKING_ROOM, 1);
- _vm->gameModule()->initScene2808Vars1();
+ _vm->gameModule()->initTestTubes1Puzzle();
SetMessageHandler(&Scene2803::handleMessage);
@@ -2521,9 +2520,9 @@ Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
if (which == 0) {
- _vm->gameModule()->initScene2808Vars1();
+ _vm->gameModule()->initTestTubes1Puzzle();
} else {
- _vm->gameModule()->initScene2808Vars2();
+ _vm->gameModule()->initTestTubes2Puzzle();
}
SetMessageHandler(&Scene2808::handleMessage);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index c3eb9e4..a6bc6eb 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -802,7 +802,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_cannonTargetStatus = getGlobalVar(V_CANNON_TARGET_STATUS);
debug("_cannonTargetStatus = %d", _cannonTargetStatus);
- _vm->gameModule()->initScene3009Vars();
+ _vm->gameModule()->initCannonSymbolsPuzzle();
setGlobalVar(V_CANNON_SMACKER_NAME, 0);
Commit: 126a306c899924cf774dfc0db1111728f9ac366b
https://github.com/scummvm/scummvm/commit/126a306c899924cf774dfc0db1111728f9ac366b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Some cleanup:
- Remove _name field from Entity (wasn't really maintained by me and
became useless)
- Remove obsolete TODOs
- Add STICK_LAST_FRAME constant for better readability
- Remove commented out callbackList TODOs (these were so far never
used with over 90% of the game implemented)
Changed paths:
engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/klayman.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index 36137a6..29524f8 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -52,8 +52,7 @@ Entity *MessageParam::asEntity() const {
#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
Entity::Entity(NeverhoodEngine *vm, int priority)
- : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _soundResources(NULL),
- _name("Entity") {
+ : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _soundResources(NULL) {
}
Entity::~Entity() {
@@ -64,7 +63,6 @@ void Entity::draw() {
}
void Entity::handleUpdate() {
- //debug("Entity(%s).handleUpdate", _name.c_str());
debug(2, "handleUpdate() -> [%s]", _updateHandlerCbName.c_str());
if (_updateHandlerCb)
(this->*_updateHandlerCb)();
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 0b3e32c..89a1a42 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -53,10 +53,8 @@ protected:
uint32 _integer;
NPoint _point;
Entity *_entity;
- // TODO: Other types...
};
MessageParamType _type;
- // TODO: Constructors for the param types...
};
// TODO: Disable heavy debug stuff in release mode
@@ -75,7 +73,6 @@ const uint kMaxSoundResources = 16;
class Entity {
public:
- Common::String _name; // Entity name for debugging purposes
Common::String _updateHandlerCbName;
Common::String _messageHandlerCbName;
Entity(NeverhoodEngine *vm, int priority);
@@ -105,7 +102,6 @@ protected:
int _priority;
SoundResource **_soundResources;
SoundResource *getSoundResource(uint index);
- // TODO Add other sound stuff
void loadSound(uint index, uint32 fileHash);
void playSound(uint index, uint32 fileHash = 0);
void stopSound(uint index);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 8f0a94e..f06ce40 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -62,7 +62,6 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
_flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
_idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
- // TODO DirtySurface
createSurface(surfacePriority, 320, 200);
_x = x;
_y = y;
@@ -475,10 +474,6 @@ void Klayman::gotoNextStateExt() {
AnimationCb cb = _nextStateCb;
_nextStateCb = NULL;
(this->*cb)();
-#if 0 // TODO (So far, with almost all Klayman subclasses implemented, _callbackList and related code seems unused)
- } else if (_callbackList) {
- removeCallbackList();
-#endif
} else {
// Inform the scene that the current Klayman animation sequence has finished
sendMessage(_parentScene, 0x1006, 0);
@@ -2927,7 +2922,6 @@ void Klayman::stFalling() {
SetMessageHandler(&Klayman::hmLowLevelAnimation);
NextState(&Klayman::stFallTouchdown);
sendMessage(_parentScene, 0x2002, 0);
- // TODO _callbackList = NULL; (See comment above)
_attachedSprite = NULL;
sendMessage(_parentScene, 0x8001, 0);
}
@@ -3338,7 +3332,6 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- // TODO: It's not really a point but an x1/x2 pair
if (param.asPoint().y != 0) {
sub41CC40(param.asPoint().y, param.asPoint().x);
} else {
@@ -3575,9 +3568,11 @@ KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
_isSittingInTeleporter = param.asInteger() != 0;
+ messageResult = 1;
break;
case 0x4001:
case 0x4800:
@@ -3629,7 +3624,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
teleporterDisappear(0x3C2E4245);
break;
}
- return 0;
+ return messageResult;
}
// KmScene1201
@@ -3816,6 +3811,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
switch (messageNum) {
case 0x2000:
_isSittingInTeleporter = param.asInteger() != 0;
+ messageResult = 1;
break;
case 0x4001:
case 0x4800:
@@ -4270,9 +4266,11 @@ KmScene1608::KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
switch (messageNum) {
case 0x2032:
_isSittingInTeleporter = param.asInteger() != 0;
+ messageResult = 1;
break;
case 0x4001:
case 0x4800:
@@ -4349,7 +4347,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
startSpecialWalkLeft(param.asInteger());
break;
}
- return 0;
+ return messageResult;
}
// KmScene1705
@@ -4493,9 +4491,11 @@ KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
_isSittingInTeleporter = param.asInteger() != 0;
+ messageResult = 1;
break;
case 0x4001:
case 0x4800:
@@ -4547,7 +4547,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
teleporterDisappear(0x18AB4ED4);
break;
}
- return 0;
+ return messageResult;
}
KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -5758,9 +5758,11 @@ KmScene2805::KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
_isSittingInTeleporter = param.asInteger() != 0;
+ messageResult = 1;
break;
case 0x4001:
case 0x4800:
@@ -5804,7 +5806,7 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
teleporterDisappear(0xD82A4094);
break;
}
- return 0;
+ return messageResult;
}
KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
@@ -5815,7 +5817,6 @@ KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
_surface->setClipRects(clipRects, clipRectsCount);
if (flag) {
- // TODO Maybe? Don't know. Set Klayman clip rects
loadSound(3, 0x58E0C341);
loadSound(4, 0x40A00342);
loadSound(5, 0xD0A1C348);
@@ -5875,7 +5876,6 @@ KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
_surface->setClipRects(clipRects, clipRectsCount);
if (flag) {
- // TODO Maybe? Don't know. Set Klayman clip rects
loadSound(3, 0x58E0C341);
loadSound(4, 0x40A00342);
loadSound(5, 0xD0A1C348);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 8e6b56b..4f8f584 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -200,7 +200,7 @@ AsScene1001Hammer::AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor)
_y = 206;
createSurface(900, 177, 192);
startAnimation(0x022C90D4, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1001Hammer::handleMessage);
}
@@ -218,7 +218,7 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
case 0x2000:
startAnimation(0x022C90D4, 1, -1);
playSound(0, 0xE741020A);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
break;
}
return 0;
@@ -332,8 +332,6 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- _name = "Scene1001";
-
Sprite *tempSprite;
SetMessageHandler(&Scene1001::handleMessage);
@@ -1130,7 +1128,7 @@ AsScene1002OutsideDoorBackground::AsScene1002OutsideDoorBackground(NeverhoodEngi
_y = 240;
if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
startAnimation(0x004A4495, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
setVisible(false);
}
@@ -1177,7 +1175,7 @@ uint32 AsScene1002OutsideDoorBackground::hmAnimation(int messageNum, const Messa
void AsScene1002OutsideDoorBackground::stOpenDoor() {
startAnimation(0x004A4495, 0, -1);
SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
setVisible(true);
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index c0bab71..768e781 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -229,7 +229,7 @@ AsScene1201TntManRope::AsScene1201TntManRope(NeverhoodEngine *vm, bool flag)
_y = -32;
if (flag) {
startAnimation(0x928F0C10, 15, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
startAnimation(0x928F0C10, 0, -1);
_newStickFrameIndex = 0;
@@ -246,7 +246,7 @@ uint32 AsScene1201TntManRope::handleMessage(int messageNum, const MessageParam &
break;
case 0x2006:
startAnimation(0x928F0C10, 1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
break;
}
return messageResult;
@@ -260,10 +260,10 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
_y = 240;
SetUpdateHandler(&AsScene1201RightDoor::update);
SetMessageHandler(&AsScene1201RightDoor::handleMessage);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
if (flag) {
startAnimation(0xD088AC30, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
_countdown = 25;
} else {
stopAnimation();
@@ -293,7 +293,7 @@ uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam &p
void AsScene1201RightDoor::stOpenDoor() {
startAnimation(0xD088AC30, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
setVisible(true);
playSound(0, calcHash("fxDoorOpen20"));
}
@@ -419,7 +419,7 @@ void AsScene1201TntMan::stMoving() {
startAnimation(0x85084190, 0, -1);
SetMessageHandler(&AsScene1201TntMan::handleMessage);
SetSpriteUpdate(&AsScene1201TntMan::suMoving);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
AsScene1201TntManFlame::AsScene1201TntManFlame(NeverhoodEngine *vm, Sprite *asTntMan)
@@ -687,11 +687,11 @@ AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
createSurface(800, 55, 199);
if (_klayman->getX() < 100) {
startAnimation(0x508A111B, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
playSound(0, calcHash("fxDoorOpen03"));
} else {
startAnimation(0x508A111B, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1201LeftDoor::handleMessage);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index d92cd66..945d7a9 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -310,7 +310,7 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
_newStickFrameIndex = 0;
} else {
startAnimation(0x88148150, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
loadSound(0, 0x68895082);
loadSound(1, 0x689BD0C1);
@@ -348,7 +348,7 @@ void AsScene1302Bridge::stRaiseBridge() {
void AsScene1302Bridge::cbLowerBridgeEvent() {
sendMessage(_parentScene, 0x2032, 0);
startAnimation(0x88148150, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
@@ -1210,7 +1210,7 @@ void AsScene1307Key::stInsertKey() {
sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]);
setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]);
SetSpriteUpdate(&AsScene1307Key::suInsertKey);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
void AsScene1307Key::stMoveKey() {
@@ -1237,13 +1237,13 @@ void AsScene1307Key::stMoveKey() {
void AsScene1307Key::stUnlock() {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
startAnimation(fileHashes[1], 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
void AsScene1307Key::stInsert() {
const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
startAnimation(fileHashes[2], 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -1515,7 +1515,7 @@ uint32 AsScene1308LightWallSymbols::handleMessage(int messageNum, const MessageP
void AsScene1308LightWallSymbols::stFadeIn() {
startAnimation(0x80180A10, 0, -1);
setVisible(true);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
void AsScene1308LightWallSymbols::stFadeOut() {
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index f25efe2..cfa1614 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -311,7 +311,7 @@ AsScene1401BackDoor::AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klayman, b
createSurface1(0x04551900, 100);
SetUpdateHandler(&AsScene1401BackDoor::update);
SetMessageHandler(&AsScene1401BackDoor::handleMessage);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
if (isOpen) {
_isOpen = true;
startAnimation(0x04551900, -1,- 1);
@@ -355,7 +355,7 @@ void AsScene1401BackDoor::stOpenDoor() {
_isOpen = true;
setVisible(true);
startAnimation(0x04551900, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
playSound(0, calcHash("fxDoorOpen24"));
}
@@ -820,7 +820,7 @@ AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentSce
// Puzzle box is here
startAnimation(0x20060259, 0, -1);
loadSound(1, 0x61901C29);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
}
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 382aedd..09bb375 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1062,7 +1062,7 @@ AsCommonCarConnector::AsCommonCarConnector(NeverhoodEngine *vm, AsCommonCar *asC
SetUpdateHandler(&AsCommonCarConnector::update);
createSurface1(0x60281C10, 150);
startAnimation(0x60281C10, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
void AsCommonCarConnector::update() {
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index c4a0904..0a02d85 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -205,7 +205,7 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
}
createSurface1(kAsScene1907SymbolFileHashes[_elementIndex], 1000 + _currPositionIndex);
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
_isPluggedIn = false;
_currPositionIndex = positionIndex;
@@ -377,7 +377,7 @@ void AsScene1907Symbol::fallOff(int newPositionIndex, int fallOffDelay) {
_someY = _y;
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, 0);
_playBackwards = true;
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
_currStep = 0;
_yAccel = 1;
SetUpdateHandler(&AsScene1907Symbol::update);
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 58f87d9..879250a 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -87,7 +87,7 @@ AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool flag)
SetMessageHandler(&AsScene2101Door::handleMessage);
if (flag) {
startAnimation(0x0C202B9C, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
setVisible(false);
}
@@ -111,14 +111,14 @@ uint32 AsScene2101Door::handleMessage(int messageNum, const MessageParam ¶m,
void AsScene2101Door::stOpenDoor() {
startAnimation(0x0C202B9C, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
setVisible(true);
playSound(0, calcHash("fxDoorOpen32"));
}
void AsScene2101Door::stCloseDoor() {
startAnimation(0xC222A8D4, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
setVisible(true);
NextState(&AsScene2101Door::stCloseDoorDone);
playSound(0, calcHash("fxDoorClose32"));
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 028c883..d82bf8c 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -426,7 +426,7 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *
if (_doorOpen) {
startAnimation(0xE2CB0412, -1, -1);
_countdown = 48;
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
startAnimation(0xE2CB0412, 0, -1);
_newStickFrameIndex = 0;
@@ -473,7 +473,7 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
void AsScene2201Door::stOpenDoor() {
_doorOpen = true;
startAnimation(0xE2CB0412, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
playSound(0, calcHash("fxDoorOpen33"));
}
@@ -1056,7 +1056,7 @@ AsScene2203Door::AsScene2203Door(NeverhoodEngine *vm, Scene *parentScene, uint d
createSurface1(kAsScene2203DoorFileHashes[_doorIndex], 900);
if (getGlobalVar(V_LARGE_DOOR_NUMBER) == _doorIndex) {
startAnimation(kAsScene2203DoorFileHashes[_doorIndex], -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
startAnimation(kAsScene2203DoorFileHashes[_doorIndex], 0, -1);
_newStickFrameIndex = 0;
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 770a5c3..7cc97f7 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -328,7 +328,7 @@ AsScene2401Door::AsScene2401Door(NeverhoodEngine *vm, bool isOpen)
createSurface1(0x44687810, 100);
_x = 320;
_y = 240;
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
SetUpdateHandler(&AsScene2401Door::update);
SetMessageHandler(&AsScene2401Door::handleMessage);
if (_isOpen) {
@@ -581,7 +581,7 @@ AsScene2402Door::AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool i
createSurface1(0x80495831, 100);
_x = 320;
_y = 240;
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
if (_isOpen) {
startAnimation(0x80495831, -1, -1);
_countdown = 48;
@@ -619,7 +619,7 @@ uint32 AsScene2402Door::handleMessage(int messageNum, const MessageParam ¶m,
_isOpen = true;
setVisible(true);
startAnimation(0x80495831, 0, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
playSound(0, calcHash("fxDoorOpen38"));
break;
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 60cc581..b0983de 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -559,7 +559,7 @@ AsCommonCarConnectorShadow::AsCommonCarConnectorShadow(NeverhoodEngine *vm, Spri
SetUpdateHandler(&AsCommonCarConnectorShadow::update);
createShadowSurface1(shadowSurface, 0x60281C10, 150);
startAnimation(0x60281C10, -1, -1);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
}
void AsCommonCarConnectorShadow::update() {
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 174e5e0..268b2c6 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -3101,7 +3101,7 @@ uint32 AsScene2812TrapDoor::handleMessage(int messageNum, const MessageParam &pa
case 0x2000:
startAnimation(0x805D0029, 0, -1);
playSound(0, 0xEA005F40);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
break;
}
return messageResult;
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index a6bc6eb..7695248 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1227,7 +1227,7 @@ void AsScene3010DeadBolt::unlock(bool skipAnim) {
setVisible(true);
if (skipAnim) {
startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], -1, 0);
- _newStickFrameIndex = -2;
+ _newStickFrameIndex = STICK_LAST_FRAME;
} else {
startAnimation(kAsScene3010DeadBoltFileHashes1[_boltIndex], 0, -1);
SetMessageHandler(&AsScene3010DeadBolt::hmAnimation);
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 66f1178..f81be07 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -30,7 +30,6 @@ Sprite::Sprite(NeverhoodEngine *vm, int objectPriority)
: Entity(vm, objectPriority), _x(0), _y(0), _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL),
_dataResource(vm), _doDeltaX(false), _doDeltaY(false), _needRefresh(false), _flags(0), _surface(NULL) {
- _name = "Sprite";
SetMessageHandler(&Sprite::handleMessage);
}
@@ -119,21 +118,17 @@ void Sprite::setClipRect(NDrawRect& drawRect) {
StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
: Sprite(vm, objectPriority), _spriteResource(vm) {
- _name = "StaticSprite";
-
}
StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
- _name = "StaticSprite";
init(calcHash(filename), surfacePriority, x, y, width, height);
-
}
StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
- _name = "StaticSprite";
+
init(fileHash, surfacePriority, x, y, width, height);
}
@@ -227,13 +222,11 @@ AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, uint32 fileHash, int surface
}
void AnimatedSprite::init() {
- _name = "AnimatedSprite";
_currFrameTicks = 0;
_newAnimFileHash = 0;
_deltaX = 0;
_deltaY = 0;
_nextAnimFileHash = 0;
- // TODO _callbackList = 0;
_plFirstFrameIndex = 0;
_currFrameIndex = 0;
_currStickFrameIndex = -1;
@@ -289,7 +282,7 @@ void AnimatedSprite::updateAnim() {
if (_newAnimFileHash == 0) {
if (_newStickFrameIndex != -1) {
- _currStickFrameIndex = _newStickFrameIndex == -2 ? _animResource.getFrameCount() - 1 : _newStickFrameIndex;
+ _currStickFrameIndex = _newStickFrameIndex == STICK_LAST_FRAME ? _animResource.getFrameCount() - 1 : _newStickFrameIndex;
_newStickFrameIndex = -1;
} else if (_newStickFrameHash != 0) {
_currStickFrameIndex = MAX<int16>(0, _animResource.getFrameIndex(_newStickFrameHash));
@@ -360,7 +353,7 @@ void AnimatedSprite::updateAnim() {
}
if (_newStickFrameIndex != -1) {
- _currStickFrameIndex = _newStickFrameIndex == -2 ? _animResource.getFrameCount() - 1 : _newStickFrameIndex;
+ _currStickFrameIndex = _newStickFrameIndex == STICK_LAST_FRAME ? _animResource.getFrameCount() - 1 : _newStickFrameIndex;
_newStickFrameIndex = -1;
} else if (_newStickFrameHash != 0) {
_currStickFrameIndex = MAX<int16>(0, _animResource.getFrameIndex(_newStickFrameHash));
@@ -428,9 +421,8 @@ void AnimatedSprite::updateFrameInfo() {
_currFrameTicks = frameInfo.counter;
processDelta();
_needRefresh = true;
- if (frameInfo.frameHash != 0) {
+ if (frameInfo.frameHash != 0)
sendMessage(this, 0x100D, frameInfo.frameHash);
- }
}
void AnimatedSprite::createSurface1(uint32 fileHash, int surfacePriority) {
@@ -499,7 +491,6 @@ void AnimatedSprite::gotoState(AnimationCb currStateCb) {
_finalizeStateCb = NULL;
(this->*cb)();
}
- // TODO _callbackList = NULL;
_nextStateCb = NULL;
_currStateCb = currStateCb;
if (_currStateCb)
@@ -517,10 +508,6 @@ void AnimatedSprite::gotoNextState() {
_nextStateCb = NULL;
//debug("Fire _nextStateCb '%s'", _nextStateCbName.c_str());
(this->*_currStateCb)();
-#if 0 // TODO
- } else if (_callbackList) {
- removeCallbackList();
-#endif
} else {
_currStateCb = NULL;
}
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index d34704d..358a37b 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -113,6 +113,8 @@ protected:
#define NextState(callback) _nextStateCb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "NextState(" #callback ")"); _nextStateCbName = #callback
#define FinalizeState(callback) setFinalizeState(static_cast <void (AnimatedSprite::*)()> (callback));
+const int STICK_LAST_FRAME = -2;
+
class AnimatedSprite : public Sprite {
public:
AnimatedSprite(NeverhoodEngine *vm, int objectPriority);
@@ -140,11 +142,6 @@ protected:
int16 _deltaX, _deltaY;
byte _replOldColor, _replNewColor;
bool _playBackwards, _frameChanged;
- /* TODO
- callbackListIndex dw ?
- callbackListCount dw ?
- callbackList dd ?
- */
AnimationCb _finalizeStateCb;
AnimationCb _currStateCb;
AnimationCb _nextStateCb;
Commit: ef8f0215cfa6287c5d45fef54f040276d95de9b2
https://github.com/scummvm/scummvm/commit/ef8f0215cfa6287c5d45fef54f040276d95de9b2
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Add GameVars::dumpVars() for debugging
Changed paths:
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.cpp
engines/neverhood/gamevars.h
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index eb043cb..40834ce 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -20,8 +20,6 @@
*
*/
-// TODO: I couldn't come up with a better name than 'Module' so far
-
#ifndef NEVERHOOD_GAMEMODULE_H
#define NEVERHOOD_GAMEMODULE_H
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index 3e4e604..e56ec1e 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -32,41 +32,32 @@ GameVars::~GameVars() {
}
uint32 GameVars::getGlobalVar(uint32 nameHash) {
- //debug("GameVars::getGlobalVar(%08X)", nameHash);
int16 varIndex = findSubVarIndex(0, nameHash);
return varIndex != -1 ? _vars[varIndex].value : 0;
}
void GameVars::setGlobalVar(uint32 nameHash, uint32 value) {
- //debug("GameVars::setGlobalVar(%08X, %d)", nameHash, value);
_vars[getSubVarIndex(0, nameHash)].value = value;
}
uint32 GameVars::getSubVar(uint32 nameHash, uint32 subNameHash) {
- //debug("GameVars::getSubVar(%08X, %08X)", nameHash, subNameHash);
uint32 value = 0;
int16 varIndex = findSubVarIndex(0, nameHash);
if (varIndex != -1) {
int16 subVarIndex = findSubVarIndex(varIndex, subNameHash);
- if (subVarIndex != -1) {
+ if (subVarIndex != -1)
value = _vars[subVarIndex].value;
- }
}
return value;
}
void GameVars::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) {
- //debug("GameVars::setSubVar(%08X, %08X, %d)", nameHash, subNameHash, value);
int16 varIndex = getSubVarIndex(0, nameHash);
- //debug(" varIndex = %d", varIndex);
int16 subVarIndex = getSubVarIndex(varIndex, subNameHash);
- //debug(" subVarIndex = %d", subVarIndex);
_vars[subVarIndex].value = value;
- //_vars[getSubVarIndex(getSubVarIndex(0, nameHash), subNameHash)].value = value;
}
int16 GameVars::addVar(uint32 nameHash, uint32 value) {
- //debug("GameVars::addVar(%08X, %d)", nameHash, value);
GameVar gameVar;
gameVar.nameHash = nameHash;
gameVar.value = value;
@@ -77,16 +68,13 @@ int16 GameVars::addVar(uint32 nameHash, uint32 value) {
}
int16 GameVars::findSubVarIndex(int16 varIndex, uint32 subNameHash) {
- //debug("GameVars::findSubVarIndex(%d, %08X)", varIndex, subNameHash);
- for (int16 nextIndex = _vars[varIndex].firstIndex; nextIndex != -1; nextIndex = _vars[nextIndex].nextIndex) {
+ for (int16 nextIndex = _vars[varIndex].firstIndex; nextIndex != -1; nextIndex = _vars[nextIndex].nextIndex)
if (_vars[nextIndex].nameHash == subNameHash)
return nextIndex;
- }
return -1;
}
int16 GameVars::addSubVar(int16 varIndex, uint32 subNameHash, uint32 value) {
- //debug("GameVars::addSubVar(%d, %08X, %d)", varIndex, subNameHash, value);
int16 nextIndex = _vars[varIndex].firstIndex;
int16 subVarIndex;
if (nextIndex == -1) {
@@ -102,13 +90,17 @@ int16 GameVars::addSubVar(int16 varIndex, uint32 subNameHash, uint32 value) {
}
int16 GameVars::getSubVarIndex(int16 varIndex, uint32 subNameHash) {
- //debug("GameVars::getSubVarIndex(%d, %08X)", varIndex, subNameHash);
int16 subVarIndex = findSubVarIndex(varIndex, subNameHash);
- if (subVarIndex == -1) {
+ if (subVarIndex == -1)
subVarIndex = addSubVar(varIndex, subNameHash, 0);
- debug("need to create: subVarIndex = %d", subVarIndex);
- }
return subVarIndex;
}
+void GameVars::dumpVars() {
+ for (Common::Array<GameVar>::iterator it = _vars.begin(); it != _vars.end(); ++it) {
+ GameVar gameVar = *it;
+ debug("%08X %08X %3d %3d", gameVar.nameHash, gameVar.value, gameVar.firstIndex, gameVar.nextIndex);
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 3e32803..623e5b5 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -176,6 +176,7 @@ public:
void setGlobalVar(uint32 nameHash, uint32 value);
uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value);
+ void dumpVars();
protected:
Common::Array<GameVar> _vars;
int16 addVar(uint32 nameHash, uint32 value);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 6a06ad6..76c2bc09 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -155,6 +155,7 @@ Common::Error NeverhoodEngine::run() {
_gameModule->draw();
_screen->update();
nextFrameTime = _screen->getNextFrameTime();
+ //_gameVars->dumpVars();
};
_soundMan->update();
Commit: 2e32b32808304a172844d835934e7aae6b8cd76f
https://github.com/scummvm/scummvm/commit/2e32b32808304a172844d835934e7aae6b8cd76f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Start with the MenuModule
Changed paths:
A engines/neverhood/menumodule.cpp
A engines/neverhood/menumodule.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module.mk
engines/neverhood/neverhood.cpp
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 80e6fbe..d87096d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -23,6 +23,7 @@
#include "neverhood/gamemodule.h"
#include "neverhood/graphics.h"
+#include "neverhood/menumodule.h"
#include "neverhood/module1000.h"
#include "neverhood/module1100.h"
#include "neverhood/module1200.h"
@@ -68,8 +69,13 @@ static const uint32 kRadioMusicFileHashes[] = {
0x03322020
};
+enum {
+ MENU_MODULE = 9999
+};
+
GameModule::GameModule(NeverhoodEngine *vm)
- : Module(vm, NULL), _moduleNum(-1) {
+ : Module(vm, NULL), _moduleNum(-1), _prevChildObject(NULL), _prevModuleNum(-1),
+ _mainMenuRequested(false), _gameWasLoaded(false) {
// Other initializations moved to actual engine class
// TODO
@@ -117,6 +123,13 @@ void GameModule::handleMouseUp(int16 x, int16 y) {
}
}
+void GameModule::handleEscapeKey() {
+ if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
+ _mainMenuRequested = true;
+ else
+ sendMessage(_childObject, 0x000C, 0);
+}
+
void GameModule::handleSpaceKey() {
if (_childObject) {
debug(2, "GameModule::handleSpaceKey()");
@@ -418,6 +431,11 @@ void GameModule::startup() {
#endif
}
+void GameModule::checkMainMenu() {
+ if (_mainMenuRequested)
+ openMainMenu();
+}
+
void GameModule::createModule(int moduleNum, int which) {
debug("GameModule::createModule(%d, %d)", moduleNum, which);
_moduleNum = moduleNum;
@@ -771,4 +789,49 @@ void GameModule::updateModule() {
}
}
+void GameModule::openMainMenu() {
+ if (_childObject) {
+ sendMessage(_childObject, 0x101D, 0);
+ _childObject->draw();
+ } else {
+ // If there's no module, create one so there's something to return to
+ createModule(1000, 0);
+ }
+ // TODO Save FPS, Smacker handle, screen offsets, collisition sprites
+ _mainMenuRequested = false;
+ createMenuModule();
+}
+
+void GameModule::createMenuModule() {
+ if (!_prevChildObject) {
+ _prevChildObject = _childObject;
+ _prevModuleNum = _moduleNum;
+ _childObject = new MenuModule(_vm, this, 0);
+ _childObject->handleUpdate();
+ SetUpdateHandler(&GameModule::updateMenuModule);
+ }
+}
+
+void GameModule::updateMenuModule() {
+ if (!updateChild()) {
+ // TODO Restore FPS?
+ _childObject = _prevChildObject;
+ // TODO Restore Smacker handle, screen offsets, collision sprites
+ sendMessage(_childObject, 0x101E, 0); // TODO CHECKME Is this needed?
+ _prevChildObject = NULL;
+ _moduleNum = _prevModuleNum;
+ SetUpdateHandler(&GameModule::updateModule);
+ } else if (_gameWasLoaded) {
+ debug("_gameWasLoaded!");
+ _gameWasLoaded = false;
+ delete _childObject;
+ delete _prevChildObject;
+ _childObject = NULL;
+ _prevChildObject = NULL;
+ _prevModuleNum = 0;
+ // TODO Create module from savegame values...
+ // TODO createModuleByHash(...);
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 40834ce..3f66138 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -33,9 +33,11 @@ public:
GameModule(NeverhoodEngine *vm);
virtual ~GameModule();
void startup();
+ void checkMainMenu();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
void handleMouseUp(int16 x, int16 y);
+ void handleEscapeKey();
void handleSpaceKey();
void initKeySlotsPuzzle();
void initMemoryPuzzle();
@@ -47,6 +49,9 @@ public:
uint32 getCurrRadioMusicFileHash();
protected:
Entity *_prevChildObject;
+ int _prevModuleNum;
+ bool _gameWasLoaded;
+ bool _mainMenuRequested;
bool _someFlag1;
bool _field2C;
uint32 _counter;
@@ -55,6 +60,9 @@ protected:
void createModule(int moduleNum, int which);
void createModuleByHash(uint32 nameHash);
void updateModule();
+ void openMainMenu();
+ void createMenuModule();
+ void updateMenuModule();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
new file mode 100644
index 0000000..372dac1
--- /dev/null
+++ b/engines/neverhood/menumodule.cpp
@@ -0,0 +1,242 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/menumodule.h"
+
+namespace Neverhood {
+
+enum {
+ MAIN_MENU = 0
+};
+
+MenuModule::MenuModule(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
+
+ SetMessageHandler(&MenuModule::handleMessage);
+
+ // TODO Check if the background actually needs to be saved
+ _savedBackground = new Background(_vm, 0);
+ _savedBackground->createSurface(0, 640, 480);
+ // TODO Save current palette
+ // TODO Stop all sounds and music
+
+ _savedPaletteData = _vm->_screen->getPaletteData();
+
+ createScene(MAIN_MENU, -1);
+}
+
+MenuModule::~MenuModule() {
+ _vm->_screen->setPaletteData(_savedPaletteData);
+}
+
+void MenuModule::createScene(int sceneNum, int which) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
+ case MAIN_MENU:
+ _childObject = new MainMenu(_vm, this);
+ break;
+ }
+ SetUpdateHandler(&MenuModule::updateScene);
+ _childObject->handleUpdate();
+}
+
+void MenuModule::updateScene() {
+ if (!updateChild()) {
+ switch (_sceneNum) {
+ case MAIN_MENU:
+ // TODO
+ switch (_moduleResult) {
+ case 0:
+ // 0048A2A5
+ debug("RESTART GAME");
+ break;
+ case 1:
+ debug("LOAD GAME");
+ // TODO createLoadGameMenu();
+ break;
+ case 2:
+ debug("SAVE GAME");
+ // TODO createSaveGameMenu();
+ break;
+ case 3:
+ debug("RESUME GAME");
+ leaveModule(0);
+ break;
+ case 4:
+ debug("QUIT GAME");
+ leaveModule(0);
+ // TODO _gameState->quitGame = true;
+ break;
+ case 5:
+ debug("CREDITS");
+ // TODO createCreditsScene();
+ break;
+ case 6:
+ debug("MAKING OF");
+ // TODO playMakingOf();
+ break;
+ case 7:
+ debug("TOGGLE MUSIC");
+ // TODO Toggle music 0048A367
+ createScene(MAIN_MENU, -1);
+ break;
+ case 8:
+ debug("DELETE GAME");
+ // TODO createDeleteGameMenu();
+ break;
+ default:
+ createScene(MAIN_MENU, -1);
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+uint32 MenuModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ // TODO CHECKME Handles 0x101F, possibly just a debug/cache message which can be ignored?
+ return Module::handleMessage(messageNum, param, sender);;
+}
+
+static const uint32 kMainMenuButtonFileHashes[] = {
+ 0x36C62120,
+ 0x56C62120,
+ 0x96C62120,
+ 0x16C62121,
+ 0x16C62122,
+ 0x16C62124,
+ 0x16C62128,
+ 0x16C62130,
+ 0x16C62100
+};
+
+MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _buttonIndex(buttonIndex), _countdown(0) {
+
+ _spriteResource.load2(kMainMenuButtonFileHashes[_buttonIndex]);
+ createSurface(100, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+
+ // TODO Move to const array
+ switch (_buttonIndex) {
+ case 0:
+ _rect.set(52, 121, 110, 156);
+ break;
+ case 1:
+ _rect.set(52, 192, 109, 222);
+ break;
+ case 2:
+ _rect.set(60, 257, 119, 286);
+ break;
+ case 3:
+ _rect.set(67, 326, 120, 354);
+ break;
+ case 4:
+ _rect.set(70, 389, 128, 416);
+ break;
+ case 5:
+ _rect.set(523, 113, 580, 144);
+ break;
+ case 6:
+ _rect.set(525, 176, 577, 206);
+ break;
+ case 7:
+ _rect.set(527, 384, 580, 412);
+ break;
+ case 8:
+ _rect.set(522, 255, 580, 289);
+ break;
+ }
+
+ setVisible(false);
+ _needRefresh = true;
+
+ SetUpdateHandler(&MainMenuButton::update);
+ SetMessageHandler(&MainMenuButton::handleMessage);
+
+}
+
+void MainMenuButton::update() {
+ StaticSprite::update();
+ if (_countdown != 0 && (--_countdown) == 0) {
+ setVisible(false);
+ sendMessage(_parentScene, 0x2000, _buttonIndex);
+ }
+}
+
+uint32 MainMenuButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ if (_countdown == 0) {
+ setVisible(true);
+ _countdown = 4;
+ }
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
+MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
+ : Scene(vm, parentModule, true) {
+
+ setBackground(0x08C0020C);
+ setPalette(0x08C0020C);
+ insertMouse433(0x00208084);
+
+ insertStaticSprite(0x41137051, 100);
+ insertStaticSprite(0xC10B2015, 100);
+
+ // TODO Only is music is disabled
+ _musicOnButton = insertStaticSprite(0x0C24C0EE, 100);
+
+ for (uint buttonIndex = 0; buttonIndex < 9; ++buttonIndex) {
+ Sprite *mainMenuButton = insertSprite<MainMenuButton>(this, buttonIndex);
+ _vm->_collisionMan->addSprite(mainMenuButton);
+ }
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&MainMenu::handleMessage);
+
+}
+
+uint32 MainMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ leaveScene(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
new file mode 100644
index 0000000..c60698c
--- /dev/null
+++ b/engines/neverhood/menumodule.h
@@ -0,0 +1,71 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// TODO: I couldn't come up with a better name than 'Module' so far
+
+#ifndef NEVERHOOD_MENUMODULE_H
+#define NEVERHOOD_MENUMODULE_H
+
+#include "common/str.h"
+#include "neverhood/neverhood.h"
+#include "neverhood/module.h"
+#include "neverhood/scene.h"
+
+namespace Neverhood {
+
+class MenuModule : public Module {
+public:
+ MenuModule(NeverhoodEngine *vm, Module *parentModule, int which);
+ virtual ~MenuModule();
+protected:
+ int _sceneNum;
+ Common::String _savegameName;
+ Background *_savedBackground;
+ byte *_savedPaletteData;
+ // TODO _savegameList (list of strings?)
+ void createScene(int sceneNum, int which);
+ void updateScene();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class MainMenuButton : public StaticSprite {
+public:
+ MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex);
+protected:
+ Scene *_parentScene;
+ int _countdown;
+ uint _buttonIndex;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class MainMenu : public Scene {
+public:
+ MainMenu(NeverhoodEngine *vm, Module *parentModule);
+protected:
+ Sprite *_musicOnButton;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+} // End of namespace Neverhood
+
+#endif /* NEVERHOOD_MENUMODULE_H */
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 5cd41c8..224dfb5 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -11,6 +11,7 @@ MODULE_OBJS = \
gamevars.o \
graphics.o \
klayman.o \
+ menumodule.o \
module.o \
module1000.o \
module1100.o \
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 76c2bc09..631b050 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -85,12 +85,6 @@ Common::Error NeverhoodEngine::run() {
_res->addArchive("t.blb");
CursorMan.showMouse(true);
- {
- // DEBUG: Dummy cursor
- byte buffer[2*2];
- memset(buffer, 255, 4);
- CursorMan.replaceCursor(buffer, 2, 2, 0, 0, 0);
- }
#if 0
// TODO: This should probably be implemented as debug command later
@@ -119,6 +113,9 @@ Common::Error NeverhoodEngine::run() {
case Common::EVENT_KEYDOWN:
_keyState = event.kbd.keycode;
switch (_keyState) {
+ case Common::KEYCODE_ESCAPE:
+ _gameModule->handleEscapeKey();
+ break;
case Common::KEYCODE_SPACE:
_gameModule->handleSpaceKey();
break;
@@ -151,6 +148,7 @@ Common::Error NeverhoodEngine::run() {
}
if (_system->getMillis() >= nextFrameTime) {
+ _gameModule->checkMainMenu();
_gameModule->handleUpdate();
_gameModule->draw();
_screen->update();
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index a5f7b4d..a2437ba 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -90,11 +90,6 @@ void Screen::update() {
updateRects.push_back(Common::Rect(renderItem._destX, renderItem._destY, renderItem._destX + renderItem._width, renderItem._destY + renderItem._height));
}
- /*
- for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
- debug("## (%d, %d, %d, %d)", (*ri).left, (*ri).top, (*ri).right, (*ri).bottom);
- */
-
for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
RenderItem &renderItem = (*it);
for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index bbf4f5f..69329fd 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -66,6 +66,7 @@ public:
int getFps();
void setPaletteData(byte *paletteData);
void unsetPaletteData(byte *paletteData);
+ byte *getPaletteData() { return _paletteData; }
void testPalette(byte *paletteData);
void updatePalette();
void clear();
Commit: c43253bd6a0a4bdf7e7cecb872bfad86f400e7b5
https://github.com/scummvm/scummvm/commit/c43253bd6a0a4bdf7e7cecb872bfad86f400e7b5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:32-07:00
Commit Message:
NEVERHOOD: Implement CreditsScene
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 372dac1..4ba6d32 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -25,7 +25,8 @@
namespace Neverhood {
enum {
- MAIN_MENU = 0
+ MAIN_MENU = 0,
+ CREDITS_SCENE = 1
};
MenuModule::MenuModule(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -54,6 +55,9 @@ void MenuModule::createScene(int sceneNum, int which) {
case MAIN_MENU:
_childObject = new MainMenu(_vm, this);
break;
+ case CREDITS_SCENE:
+ _childObject = new CreditsScene(_vm, this, true);
+ break;
}
SetUpdateHandler(&MenuModule::updateScene);
_childObject->handleUpdate();
@@ -88,7 +92,7 @@ void MenuModule::updateScene() {
break;
case 5:
debug("CREDITS");
- // TODO createCreditsScene();
+ createScene(CREDITS_SCENE, -1);
break;
case 6:
debug("MAKING OF");
@@ -108,6 +112,9 @@ void MenuModule::updateScene() {
break;
}
break;
+ case CREDITS_SCENE:
+ createScene(MAIN_MENU, -1);
+ break;
default:
break;
}
@@ -238,5 +245,102 @@ uint32 MainMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity
return 0;
}
+static const uint32 kCreditsSceneFileHashes[] = {
+ 0x6081128C,
+ 0x608112BC,
+ 0x608112DC,
+ 0x6081121C,
+ 0x6081139C,
+ 0x6081109C,
+ 0x6081169C,
+ 0x60811A9C,
+ 0x6081029C,
+ 0x0081128C,
+ 0x008112BC,
+ 0x008012BC,
+ 0x008112DC,
+ 0x0081121C,
+ 0x0081139C,
+ 0x0081109C,
+ 0x0081169C,
+ 0x00811A9C,
+ 0x0081029C,
+ 0x0081329C,
+ 0xC08112BC,
+ 0xC08112DC,
+ 0xC081121C,
+ 0xC081139C,
+ 0
+};
+
+CreditsScene::CreditsScene(NeverhoodEngine *vm, Module *parentModule, bool canAbort)
+ : Scene(vm, parentModule, true), _canAbort(canAbort), _screenIndex(0), _ticksDuration(0),
+ _countdown(216) {
+
+ SetUpdateHandler(&CreditsScene::update);
+ SetMessageHandler(&CreditsScene::handleMessage);
+
+ setBackground(0x6081128C);
+ setPalette(0x6081128C);
+
+ _ticksTime = _vm->_system->getMillis() + 202100;
+
+ _musicResource = new MusicResource(_vm);
+ _musicResource->load(0x30812225);
+ _musicResource->play(0);
+
+}
+
+CreditsScene::~CreditsScene() {
+ _musicResource->unload();
+ delete _musicResource;
+}
+
+void CreditsScene::update() {
+ Scene::update();
+ if (_countdown != 0) {
+ if (_screenIndex == 23 && _vm->_system->getMillis() > _ticksTime)
+ leaveScene(0);
+ else if ((--_countdown) == 0) {
+ ++_screenIndex;
+ if (kCreditsSceneFileHashes[_screenIndex] == 0)
+ leaveScene(0);
+ else {
+ _background->load(kCreditsSceneFileHashes[_screenIndex]);
+ _palette->addPalette(kCreditsSceneFileHashes[_screenIndex], 0, 256, 0);
+ if (_screenIndex < 5)
+ _countdown = 192;
+ else if (_screenIndex < 15)
+ _countdown = 144;
+ else if (_screenIndex < 16)
+ _countdown = 216;
+ else if (_screenIndex < 23)
+ _countdown = 144;
+ else
+ _countdown = 1224;
+ }
+ }
+ }
+}
+
+uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0009:
+ leaveScene(0);
+ break;
+ case 0x000B://TODO Implement this message
+ if (param.asInteger() == 27 && _canAbort)
+ leaveScene(0);
+ break;
+ case 0x101D:
+ _ticksDuration = _ticksTime - _vm->_system->getMillis();
+ break;
+ case 0x101E:
+ _ticksTime = _ticksDuration + _vm->_system->getMillis();
+ break;
+ }
+ return 0;
+}
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index c60698c..4805f67 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -66,6 +66,21 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class CreditsScene : public Scene {
+public:
+ CreditsScene(NeverhoodEngine *vm, Module *parentModule, bool canAbort);
+ virtual ~CreditsScene();
+protected:
+ int _screenIndex;
+ int _countdown;
+ MusicResource *_musicResource;
+ uint32 _ticksTime;
+ uint32 _ticksDuration;
+ bool _canAbort;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MENUMODULE_H */
Commit: 5ba8f2e9c8f94f7f72dd32755975258007cbfca6
https://github.com/scummvm/scummvm/commit/5ba8f2e9c8f94f7f72dd32755975258007cbfca6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Add making of video to the main menu
- Clear render queue at each scene initiailization
- Fix mouse cursor visibility (again :)
- Fix SmackerScene screen clearing
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
engines/neverhood/mouse.cpp
engines/neverhood/mouse.h
engines/neverhood/scene.cpp
engines/neverhood/screen.cpp
engines/neverhood/screen.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d87096d..a574fa5 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -109,7 +109,7 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
mousePos.x = x;
mousePos.y = y;
debug(2, "GameModule::handleMouseDown(%d, %d)", x, y);
- sendPointMessage(_childObject, 1, mousePos);
+ sendPointMessage(_childObject, 0x0001, mousePos);
}
}
@@ -119,7 +119,7 @@ void GameModule::handleMouseUp(int16 x, int16 y) {
mousePos.x = x;
mousePos.y = y;
debug(2, "GameModule::handleMouseUp(%d, %d)", x, y);
- sendPointMessage(_childObject, 2, mousePos);
+ sendPointMessage(_childObject, 0x0002, mousePos);
}
}
@@ -133,7 +133,7 @@ void GameModule::handleEscapeKey() {
void GameModule::handleSpaceKey() {
if (_childObject) {
debug(2, "GameModule::handleSpaceKey()");
- sendMessage(_childObject, 9, 0);
+ sendMessage(_childObject, 0x0009, 0);
}
}
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 4ba6d32..9748919 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -26,7 +26,25 @@ namespace Neverhood {
enum {
MAIN_MENU = 0,
- CREDITS_SCENE = 1
+ CREDITS_SCENE = 1,
+ MAKING_OF = 2
+};
+
+static const uint32 kMakingOfSmackerFileHashList[] = {
+ 0x21082409,
+ 0x21082809,
+ 0x21083009,
+ 0x21080009,
+ 0x21086009,
+ 0x2108A009,
+ 0x21092009,
+ 0x210A2009,
+ 0x210C2009,
+ 0x21082411,
+ 0x21082811,
+ 0x21083011,
+ 0x21080011,
+ 0
};
MenuModule::MenuModule(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -58,6 +76,9 @@ void MenuModule::createScene(int sceneNum, int which) {
case CREDITS_SCENE:
_childObject = new CreditsScene(_vm, this, true);
break;
+ case MAKING_OF:
+ createSmackerScene(kMakingOfSmackerFileHashList, false, true, true);
+ break;
}
SetUpdateHandler(&MenuModule::updateScene);
_childObject->handleUpdate();
@@ -88,7 +109,7 @@ void MenuModule::updateScene() {
case 4:
debug("QUIT GAME");
leaveModule(0);
- // TODO _gameState->quitGame = true;
+ _vm->quitGame();
break;
case 5:
debug("CREDITS");
@@ -96,7 +117,7 @@ void MenuModule::updateScene() {
break;
case 6:
debug("MAKING OF");
- // TODO playMakingOf();
+ createScene(MAKING_OF, -1);
break;
case 7:
debug("TOGGLE MUSIC");
@@ -113,6 +134,7 @@ void MenuModule::updateScene() {
}
break;
case CREDITS_SCENE:
+ case MAKING_OF:
createScene(MAIN_MENU, -1);
break;
default:
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 4805f67..77cef44 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -20,8 +20,6 @@
*
*/
-// TODO: I couldn't come up with a better name than 'Module' so far
-
#ifndef NEVERHOOD_MENUMODULE_H
#define NEVERHOOD_MENUMODULE_H
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 8cd5e60..105d170 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -42,7 +42,7 @@ Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect)
Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
: StaticSprite(vm, 2000), _mouseType(kMouseType435),
- _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2), _visible(false) {
+ _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {
init(fileHash);
if (_x <= _x1) {
@@ -81,6 +81,7 @@ void Mouse::init(uint32 fileHash) {
_deltaRect = _drawRect;
processDelta();
_needRefresh = true;
+ CursorMan.showMouse(false);
}
void Mouse::load(uint32 fileHash) {
@@ -89,12 +90,10 @@ void Mouse::load(uint32 fileHash) {
}
void Mouse::update() {
- if (_visible && !_surface->getVisible()) {
+ if (CursorMan.isVisible() && !_surface->getVisible()) {
CursorMan.showMouse(false);
- _visible = false;
- } else if (!_visible && _surface->getVisible()) {
+ } else if (!CursorMan.isVisible() && _surface->getVisible()) {
CursorMan.showMouse(true);
- _visible = true;
}
updateCursor();
_frameNum++;
diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h
index 2b0e8b7..0b927de 100644
--- a/engines/neverhood/mouse.h
+++ b/engines/neverhood/mouse.h
@@ -52,7 +52,6 @@ protected:
int16 _x1;
int16 _x2;
int _type;
- bool _visible;
void init(uint32 fileHash);
void update();
void updateCursorNum();
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index ac08c14..9e49c6b 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -55,6 +55,8 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
SetUpdateHandler(&Scene::update);
SetMessageHandler(&Scene::handleMessage);
+
+ _vm->_screen->clearRenderQueue();
}
Scene::~Scene() {
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index a2437ba..7321ddb 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -153,6 +153,13 @@ void Screen::updatePalette() {
void Screen::clear() {
memset(_backScreen->pixels, 0, _backScreen->pitch * _backScreen->h);
+ _fullRefresh = true;
+ clearRenderQueue();
+}
+
+void Screen::clearRenderQueue() {
+ _renderQueue->clear();
+ _prevRenderQueue->clear();
}
void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version,
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 69329fd..4e7618b 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -70,6 +70,7 @@ public:
void testPalette(byte *paletteData);
void updatePalette();
void clear();
+ void clearRenderQueue();
void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version,
const Graphics::Surface *shadowSurface = NULL);
void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version);
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index d4f65b3..0ed6890 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -37,9 +37,8 @@ SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubl
_canAbort = true;
}
- if (_doubleSurface) {
+ if (!_doubleSurface)
_vm->_screen->clear();
- }
_fileHash[0] = 0;
_fileHash[1] = 0;
Commit: f8ff1cc12f06592890a2c0c791ef4de94b4603e8
https://github.com/scummvm/scummvm/commit/f8ff1cc12f06592890a2c0c791ef4de94b4603e8
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Add CreditsScene to Module1300 and Module1800 (played after the game end and after jumping into the hole...)
Changed paths:
engines/neverhood/module1300.cpp
engines/neverhood/module1800.cpp
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 945d7a9..79eda7f 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -27,6 +27,7 @@
#include "neverhood/module2200.h"
#include "neverhood/gamemodule.h"
#include "neverhood/diskplayerscene.h"
+#include "neverhood/menumodule.h"
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
@@ -45,7 +46,7 @@ static const uint32 kModule1300SoundList[] = {
Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- _vm->_soundMan->addMusic(0x61C090, 0x203197);
+ _vm->_soundMan->addMusic(0x61C090, 0x00203197);
_vm->_soundMan->addSoundList(0x61C090, kModule1300SoundList);
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 50, 600, 20, 150);
_vm->_soundMan->playTwoSounds(0x61C090, 0x48498E46, 0x50399F64, 0);
@@ -113,86 +114,89 @@ void Module1300::createScene(int sceneNum, int which) {
switch (_vm->gameState().sceneNum) {
case 1:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x203197, 0, 2);
+ _vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1302(_vm, this, which);
break;
case 2:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new Scene1303(_vm, this, which);
break;
case 3:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new Scene1304(_vm, this, which);
break;
case 4:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x203197, 0, 2);
+ _vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1305(_vm, this, which);
break;
case 5:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x203197, 0, 2);
+ _vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1306(_vm, this, which);
break;
case 6:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x203197, 0, 2);
+ _vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1307(_vm, this, which);
break;
case 7:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x203197, 0, 2);
+ _vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1308(_vm, this, which);
break;
case 8:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 1);
break;
case 9:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createSmackerScene(0x20082818, true, true, false);
break;
case 10:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createSmackerScene(0x20082828, true, true, false);
break;
case 11:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B27A8, which);
break;
case 12:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B2718, which);
break;
case 13:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B27D8, which);
break;
case 14:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B2808, which);
break;
case 15:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B2838, which);
break;
case 16:
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x203197, 0, 2);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new Scene1317(_vm, this, which);
break;
case 17:
// TODO: Credits scene
+ _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
+ _vm->_soundMan->stopMusic(0x00203197, 0, 2);
+ _childObject = new CreditsScene(_vm, this, false);
break;
}
SetUpdateHandler(&Module1300::updateScene);
@@ -291,7 +295,7 @@ void Module1300::updateScene() {
createScene(17, -1);
break;
case 17:
- // TODO
+ leaveModule(1);
break;
}
}
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index ea6182d..e4b189b 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -22,6 +22,7 @@
#include "neverhood/module1800.h"
#include "neverhood/navigationscene.h"
+#include "neverhood/menumodule.h"
namespace Neverhood {
@@ -91,7 +92,7 @@ void Module1800::createScene(int sceneNum, int which) {
createSmackerScene(0x0168B121, true, true, false);
break;
case 8:
- // TODO _childObject = new CreditsScene(_vm, this, 0);
+ _childObject = new CreditsScene(_vm, this, false);
break;
case 9:
// NOTE: Newly introduced sceneNum 9 (was duplicate 3 with own update handler)
Commit: 8d97f26cef90f5db41c4153b68eff48700f7501d
https://github.com/scummvm/scummvm/commit/8d97f26cef90f5db41c4153b68eff48700f7501d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Fix AsScene2402Door animation
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2400.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index a574fa5..2a7de46 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -366,12 +366,13 @@ void GameModule::startup() {
setGlobalVar(V_RADIO_ENABLED, 1);
setGlobalVar(V_TNT_DUMMY_BUILT, 1);
setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
+ setGlobalVar(V_TV_JOKE_TOLD, 1);
// <<<DEBUG
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 3;
- createModule(1300, -1);
+ _vm->gameState().sceneNum = 1;
+ createModule(2400, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 7cc97f7..a017c11 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -574,16 +574,16 @@ static const uint32 kScene2402FileHashes[] = {
};
AsScene2402Door::AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool isOpen)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isOpen(isOpen) {
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isOpen(isOpen), _countdown(0) {
SetUpdateHandler(&AsScene2402Door::update);
SetMessageHandler(&AsScene2402Door::handleMessage);
createSurface1(0x80495831, 100);
_x = 320;
_y = 240;
- _newStickFrameIndex = STICK_LAST_FRAME;
if (_isOpen) {
startAnimation(0x80495831, -1, -1);
+ _newStickFrameIndex = STICK_LAST_FRAME;
_countdown = 48;
} else {
stopAnimation();
@@ -749,7 +749,7 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x081A60A8, 1100);
_ssDoorFrame = (StaticSprite*)insertStaticSprite(0x406C0AE0, 1100);
_klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 639, tempSprite->getDrawRect().y2());
- _asDoor = insertSprite<AsScene2402Door>(this, which == 1/*CHECKME or != ?*/);
+ _asDoor = insertSprite<AsScene2402Door>(this, which == 0);
insertSprite<AsScene2402TV>(_klayman);
insertStaticSprite(0x3A01A020, 200);
Commit: 54c83924ce072c2d472b4c5c1c5f1748df579257
https://github.com/scummvm/scummvm/commit/54c83924ce072c2d472b4c5c1c5f1748df579257
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Add class NonRepeatingRandomNumbers
- Simplify GameModule::initKeySlotsPuzzle()
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 2a7de46..f5f7e4c 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -138,41 +138,14 @@ void GameModule::handleSpaceKey() {
}
void GameModule::initKeySlotsPuzzle() {
-
- // Exit if it's already initialized
- if (getSubVar(VA_IS_PUZZLE_INIT, 0x25400B10))
- return;
-
- for (uint i = 0; i < 3; i++) {
- bool more;
- do {
- more = false;
- setSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
- if (i > 0) {
- for (uint j = 0; j < i && !more; j++) {
- more = getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, j) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i);
- }
- }
- } while (more);
- }
-
- for (uint i = 0; i < 3; i++) {
- bool more;
- do {
- more = false;
- setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
- if (i > 0) {
- for (uint j = 0; j < i && !more; j++) {
- more = getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i);
- }
- }
- if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i))
- more = true;
- } while (more);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x25400B10)) {
+ NonRepeatingRandomNumbers keySlots(_vm->_rnd, 16);
+ for (uint i = 0; i < 3; i++) {
+ setSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i, keySlots.getNumber());
+ setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, keySlots.getNumber());
+ }
+ setSubVar(VA_IS_PUZZLE_INIT, 0x25400B10, 1);
}
-
- setSubVar(VA_IS_PUZZLE_INIT, 0x25400B10, 1);
-
}
void GameModule::initMemoryPuzzle() {
@@ -371,8 +344,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 1;
- createModule(2400, -1);
+ _vm->gameState().sceneNum = 6;
+ createModule(1300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -835,4 +808,21 @@ void GameModule::updateMenuModule() {
}
}
+NonRepeatingRandomNumbers::NonRepeatingRandomNumbers(Common::RandomSource *rnd, int count)
+ : _rnd(rnd) {
+ for (int i = 0; i < count; i++)
+ _numbers.push_back(i);
+}
+
+int NonRepeatingRandomNumbers::getNumber() {
+ int number;
+ if (!empty()) {
+ uint index = _rnd->getRandomNumber(_numbers.size() - 1);
+ number = _numbers[index];
+ _numbers.remove_at(index);
+ } else
+ number = 0;
+ return number;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 3f66138..6aa711d 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -65,6 +65,16 @@ protected:
void updateMenuModule();
};
+class NonRepeatingRandomNumbers {
+public:
+ NonRepeatingRandomNumbers(Common::RandomSource *rnd, int count);
+ int getNumber();
+ bool empty() const { return _numbers.empty(); }
+protected:
+ Common::RandomSource *_rnd;
+ Common::Array<int> _numbers;
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE_H */
Commit: 5af2de503ecf4e621370bf51a16472e162e543ac
https://github.com/scummvm/scummvm/commit/5af2de503ecf4e621370bf51a16472e162e543ac
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Rewrite GameModule::initMemoryPuzzle() to use NonRepeatingRandomNumbers
- Change NonRepeatingRandomNumbers
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index f5f7e4c..ddbd4d9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -149,102 +149,36 @@ void GameModule::initKeySlotsPuzzle() {
}
void GameModule::initMemoryPuzzle() {
-
- // TODO: Give better names
-
- byte array44[3];
- byte array3C[10];
- byte array30[48];
- uint32 index3 = 48;
- uint32 index2 = 9;
- uint32 index1 = 2;
- uint32 rndIndex;
-
- // Exit if it's already initialized
- if (getSubVar(VA_IS_PUZZLE_INIT, 0xC8606803))
- return;
-
- for (uint32 i = 0; i < 3; i++)
- setSubVar(VA_CURR_DICE_NUMBERS, i, 1);
-
- for (byte i = 0; i < 3; i++)
- array44[i] = i;
-
- for (byte i = 0; i < 10; i++)
- array3C[i] = i;
-
- for (byte i = 0; i < 48; i++)
- array30[i] = i;
-
- rndIndex = _vm->_rnd->getRandomNumber(3 - 1);
-
- setSubVar(VA_DICE_MEMORY_SYMBOLS, array44[rndIndex], 5);
-
- for (byte i = 5; i < 9; i++)
- array3C[i] = array3C[i + 1];
-
- while (rndIndex < 2) {
- array44[rndIndex] = array44[rndIndex + 1];
- rndIndex++;
- }
-
- for (int i = 0; i < 2; i++) {
- uint32 rndIndex1 = _vm->_rnd->getRandomNumber(index2 - 1); // si
- uint32 rndIndex2 = _vm->_rnd->getRandomNumber(index1 - 1); // di
- setSubVar(VA_DICE_MEMORY_SYMBOLS, array44[rndIndex2], array3C[rndIndex1]);
- index2--;
- while (rndIndex1 < index2) {
- array3C[rndIndex1] = array3C[rndIndex1 + 1];
- rndIndex1++;
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0xC8606803)) {
+ NonRepeatingRandomNumbers diceIndices(_vm->_rnd, 3);
+ NonRepeatingRandomNumbers availableTiles(_vm->_rnd, 48);
+ NonRepeatingRandomNumbers tileSymbols(_vm->_rnd, 10);
+ for (uint32 i = 0; i < 3; i++)
+ setSubVar(VA_CURR_DICE_NUMBERS, i, 1);
+ // Set special symbols
+ // Symbol 5 is always one the three special symbols
+ setSubVar(VA_DICE_MEMORY_SYMBOLS, diceIndices.getNumber(), 5);
+ tileSymbols.removeNumber(5);
+ for (int i = 0; i < 2; i++)
+ setSubVar(VA_DICE_MEMORY_SYMBOLS, diceIndices.getNumber(), tileSymbols.getNumber());
+ // Insert special symbols tiles
+ for (uint32 i = 0; i < 3; ++i) {
+ int tileSymbolOccurence = _vm->_rnd->getRandomNumber(4 - 1) * 2 + 2;
+ setSubVar(VA_GOOD_DICE_NUMBERS, i, tileSymbolOccurence);
+ while (tileSymbolOccurence--)
+ setSubVar(VA_TILE_SYMBOLS, availableTiles.getNumber(), getSubVar(VA_DICE_MEMORY_SYMBOLS, i));
}
- index1--;
- while (rndIndex2 < index1) {
- array44[rndIndex2] = array44[rndIndex2 + 1];
- rndIndex2++;
+ // Fill the remaining tiles
+ uint32 tileSymbolIndex = 0;
+ while (!availableTiles.empty()) {
+ setSubVar(VA_TILE_SYMBOLS, availableTiles.getNumber(), tileSymbols[tileSymbolIndex]);
+ setSubVar(VA_TILE_SYMBOLS, availableTiles.getNumber(), tileSymbols[tileSymbolIndex]);
+ tileSymbolIndex++;
+ if (tileSymbolIndex >= tileSymbols.size())
+ tileSymbolIndex = 0;
}
+ setSubVar(VA_IS_PUZZLE_INIT, 0xC8606803, 1);
}
-
- for (uint32 i = 0; i < 3; i++) {
- uint32 rndValue = _vm->_rnd->getRandomNumber(4 - 1) * 2 + 2;
- uint32 index4 = 0;
- setSubVar(VA_GOOD_DICE_NUMBERS, i, rndValue);
- while (index4 < rndValue) {
- uint32 rndIndex3 = _vm->_rnd->getRandomNumber(index3 - 1);
- setSubVar(VA_TILE_SYMBOLS, array30[rndIndex3], getSubVar(VA_DICE_MEMORY_SYMBOLS, i));
- index3--;
- while (rndIndex3 < index3) {
- array30[rndIndex3] = array30[rndIndex3 + 1];
- rndIndex3++;
- }
- index4++;
- }
- }
-
- uint32 index5 = 0;
- while (index3 != 0) {
- uint32 rndIndex4 = _vm->_rnd->getRandomNumber(index3 - 1);
- index1 = array3C[index5];
- setSubVar(VA_TILE_SYMBOLS, array30[rndIndex4], index1);
- index3--;
- while (rndIndex4 < index3) {
- array30[rndIndex4] = array30[rndIndex4 + 1];
- rndIndex4++;
- }
- uint32 rndIndex5 = _vm->_rnd->getRandomNumber(index3 - 1);
- setSubVar(VA_TILE_SYMBOLS, array30[rndIndex5], index1);
- index3--;
- while (rndIndex5 < index3) {
- array30[rndIndex5] = array30[rndIndex5 + 1];
- rndIndex5++;
- }
- index5++;
- if (index5 >= index2)
- index5 = 0;
-
- }
-
- setSubVar(VA_IS_PUZZLE_INIT, 0xC8606803, 1);
-
}
void GameModule::initWaterPipesPuzzle() {
@@ -344,8 +278,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 6;
- createModule(1300, -1);
+ _vm->gameState().sceneNum = 4;
+ createModule(1100, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -811,18 +745,26 @@ void GameModule::updateMenuModule() {
NonRepeatingRandomNumbers::NonRepeatingRandomNumbers(Common::RandomSource *rnd, int count)
: _rnd(rnd) {
for (int i = 0; i < count; i++)
- _numbers.push_back(i);
+ push_back(i);
}
int NonRepeatingRandomNumbers::getNumber() {
int number;
if (!empty()) {
- uint index = _rnd->getRandomNumber(_numbers.size() - 1);
- number = _numbers[index];
- _numbers.remove_at(index);
+ uint index = _rnd->getRandomNumber(size() - 1);
+ number = (*this)[index];
+ remove_at(index);
} else
number = 0;
return number;
}
+void NonRepeatingRandomNumbers::removeNumber(int number) {
+ for (uint i = 0; i < size(); ++i)
+ if ((*this)[i] == number) {
+ remove_at(i);
+ break;
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 6aa711d..8fafe2b 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -65,14 +65,13 @@ protected:
void updateMenuModule();
};
-class NonRepeatingRandomNumbers {
+class NonRepeatingRandomNumbers : public Common::Array<int> {
public:
NonRepeatingRandomNumbers(Common::RandomSource *rnd, int count);
int getNumber();
- bool empty() const { return _numbers.empty(); }
+ void removeNumber(int number);
protected:
Common::RandomSource *_rnd;
- Common::Array<int> _numbers;
};
} // End of namespace Neverhood
Commit: 47994441cd5432df0c75953ea7d998c4b87c5443
https://github.com/scummvm/scummvm/commit/47994441cd5432df0c75953ea7d998c4b87c5443
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Move setting of debug variables to the GameModule
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/navigationscene.cpp
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 0371903..0ffb0b0 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -342,12 +342,6 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_asKey = insertSprite<AsDiskplayerSceneKey>();
- // DEBUG>>>: Give all disks
- for (int i = 0; i < 20; i++) {
- setSubVar(VA_IS_TAPE_INSERTED, i, 1);
- }
- // DEBUG<<<
-
for (int i = 0; i < 20; i++) {
_diskAvailable[i] = 0;
if (getSubVar(VA_IS_TAPE_INSERTED, i))
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index ddbd4d9..38d8b99 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -178,6 +178,21 @@ void GameModule::initMemoryPuzzle() {
tileSymbolIndex = 0;
}
setSubVar(VA_IS_PUZZLE_INIT, 0xC8606803, 1);
+
+ // DEBUG>>>
+ // TODO: Some debug code: Leave two matching tiles open
+ for (int i = 0; i < 48; i++)
+ setSubVar(VA_IS_TILE_MATCH, i, 1);
+ int debugIndex = 0;
+ setSubVar(VA_IS_TILE_MATCH, debugIndex, 0);
+ for (int i = 0; i < 48; i++) {
+ if (i != debugIndex && getSubVar(VA_TILE_SYMBOLS, i) == getSubVar(VA_TILE_SYMBOLS, debugIndex)) {
+ setSubVar(VA_IS_TILE_MATCH, i, 0);
+ break;
+ }
+ }
+ // <<<DEBUG
+
}
}
@@ -274,6 +289,20 @@ void GameModule::startup() {
setGlobalVar(V_TNT_DUMMY_BUILT, 1);
setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
setGlobalVar(V_TV_JOKE_TOLD, 1);
+ // Give all disks
+ for (int i = 0; i < 20; i++)
+ setSubVar(VA_IS_TAPE_INSERTED, i, 1);
+ setSubVar(VA_IS_KEY_INSERTED, 0, 1);
+ setSubVar(VA_IS_KEY_INSERTED, 1, 1);
+ setSubVar(VA_IS_KEY_INSERTED, 2, 1);
+ for (uint32 index = 0; index < 9; index++)
+ setSubVar(VA_CUBE_POSITIONS, index, 7 - index);
+ setGlobalVar(V_WALL_BROKEN, 0);
+ setGlobalVar(V_WORLDS_JOINED, 1);
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
+ // Enable all locations
+ for (int i = 0; i < 6; i++)
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
// <<<DEBUG
#if 1
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 79eda7f..ab63c29 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1254,12 +1254,6 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown(0), _asCurrKey(NULL),
_isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
- //DEBUG>>>
- setSubVar(VA_IS_KEY_INSERTED, 0, 1);
- setSubVar(VA_IS_KEY_INSERTED, 1, 1);
- setSubVar(VA_IS_KEY_INSERTED, 2, 1);
- //DEBUG<<<
-
Sprite *tempSprite;
_vm->gameModule()->initKeySlotsPuzzle();
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index cfa1614..7373172 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1590,20 +1590,6 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x0C0C007D);
insertMouse435(0xC00790C8, 20, 620);
- // DEBUG>>>
- // TODO: Some debug code: Leave two matching tiles open
- for (int i = 0; i < 48; i++)
- setSubVar(VA_IS_TILE_MATCH, i, 1);
- int debugIndex = 0;
- setSubVar(VA_IS_TILE_MATCH, debugIndex, 0);
- for (int i = 0; i < 48; i++) {
- if (i != debugIndex && getSubVar(VA_TILE_SYMBOLS, i) == getSubVar(VA_TILE_SYMBOLS, debugIndex)) {
- setSubVar(VA_IS_TILE_MATCH, i, 0);
- break;
- }
- }
- // <<<DEBUG
-
for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
_tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
_vm->_collisionMan->addSprite(_tiles[tileIndex]);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index d82bf8c..b3798d2 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -896,11 +896,6 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
insertMouse435(0x00A08089, 20, 620);
- //DEBUG>>>
- for (uint32 index = 0; index < 9; index++)
- setSubVar(VA_CUBE_POSITIONS, index, 7 - index);
- //DEBUG<<<
-
for (uint32 index = 0; index < 9; index++) {
int16 value = (int16)getSubVar(VA_CUBE_POSITIONS, index);
if (value >= 0) {
@@ -1999,10 +1994,6 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
- //DEBUG>>>
- //setGlobalVar(V_LIGHTS_ON, 1);
- //DEBUG<<<
-
_vm->gameModule()->initCannonSymbolsPuzzle();
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x88460852))
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index c2cf0df..9b1945a 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -36,10 +36,6 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addSoundList(0x1A214010, kModule2300SoundList);
_vm->_soundMan->setSoundListParams(kModule2300SoundList, true, 50, 600, 10, 150);
- //DEBUG>>>
- setGlobalVar(V_WALL_BROKEN, 0);
- //DEBUG<<<
-
_flag = getGlobalVar(V_WALL_BROKEN) == 0;
if (_flag) {
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 19779c3..f67d1a6 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -92,9 +92,6 @@ void Module2500::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B01B8, 220);
break;
case 2:
- //DEBUG>>>Join the tracks.
- setGlobalVar(V_WORLDS_JOINED, 1);
- //DEBUG<<<
_vm->gameState().which = which;
if (getGlobalVar(V_WORLDS_JOINED))
createScene2704(which, 0x004B01E0, 150);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 268b2c6..8712cc3 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -507,10 +507,6 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _currTuneStatus(0), _countdown1(0), _countdown2(0) {
- //DEBUG>>> Disable video
- setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
- //DEBUG<<<
-
SetMessageHandler(&Scene2802::handleMessage);
SetUpdateHandler(&Scene2802::update);
insertMouse435(0x008810A8, 20, 620);
@@ -2583,7 +2579,7 @@ uint32 Scene2808::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2808::update() {
- // DEBUG>>>: Show correct values
+ // DEBUG>>> Show correct values
debug("---------------");
debug("%03d %03d %03d", getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2));
debug("%03d %03d %03d", _asTestTubes[0]->getFillLevel(), _asTestTubes[1]->getFillLevel(), _asTestTubes[2]->getFillLevel());
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 976cf5d..7dc8a9c 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -389,11 +389,6 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
_isButton2Broken = getGlobalVar(V_ENTRANCE_OPEN) != 0;
- //DEBUG>>> Enable all locations
- for (int i = 0; i < 6; i++)
- setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
- //DEBUG<<<
-
setSubVar(V_TELEPORTER_DEST_AVAILABLE, which, 1);
setSubVar(V_TELEPORTER_DEST_AVAILABLE, 5, 1);
setSubVar(V_TELEPORTER_DEST_AVAILABLE, 4, 1);
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 96d33c0..8e167dd 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -31,13 +31,6 @@ NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint
_navigationList = _vm->_staticData->getNavigationList(navigationListId);
- //DEBUG>>>
- for (NavigationList::iterator it = _navigationList->begin(); it != _navigationList->end(); it++) {
- debug("%08X %08X %08X %08X %d %d %08X", (*it).fileHash, (*it).leftSmackerFileHash, (*it).rightSmackerFileHash,
- (*it).middleSmackerFileHash, (*it).interactive, (*it).middleFlag, (*it).mouseCursorFileHash);
- }
- //DEBUG<<<
-
if (_navigationIndex < 0) {
_navigationIndex = (int)getGlobalVar(V_NAVIGATION_INDEX);
if (_navigationIndex >= (int)_navigationList->size())
Commit: eb054471e0814768571c550a4d268e73e1ea6b65
https://github.com/scummvm/scummvm/commit/eb054471e0814768571c550a4d268e73e1ea6b65
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Fix _drawRects in AsScene1002Door and SsCommonPressButton
Changed paths:
engines/neverhood/module1000.cpp
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 4f8f584..6a81918 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -618,10 +618,10 @@ AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
_y = 239;
}
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_needRefresh = true;
@@ -771,10 +771,10 @@ SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene
_spriteResource.load2(fileHash1);
createSurface(surfacePriority, 40, 40);
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
@@ -791,20 +791,20 @@ void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHashes[1] = fileHash2;
if (_status == 2) {
_spriteResource.load2(fileHash2);
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
StaticSprite::update();
} else {
_spriteResource.load2(fileHash1);
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -817,10 +817,10 @@ void SsCommonPressButton::update() {
if (_status == 1) {
_status = 2;
_spriteResource.load2(_fileHashes[1]);
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -829,10 +829,10 @@ void SsCommonPressButton::update() {
} else if (_status == 2) {
_status = 3;
_spriteResource.load2(_fileHashes[0]);
- _surface->getDrawRect().x = 0;
- _surface->getDrawRect().y = 0;
- _surface->getDrawRect().width = _spriteResource.getDimensions().width;
- _surface->getDrawRect().height = _spriteResource.getDimensions().height;
+ _drawRect.x = 0;
+ _drawRect.y = 0;
+ _drawRect.width = _spriteResource.getDimensions().width;
+ _drawRect.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
Commit: 9ba7a7f1a143e20eefdc47555840d4175103986b
https://github.com/scummvm/scummvm/commit/9ba7a7f1a143e20eefdc47555840d4175103986b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Rename stuff in Sprite:
- processDelta() to updateBounds()
- getRect() to getCollisionBounds()
- _drawRect to _drawOffset
- _rect to _collisionBounds
- _deltaRect to _collisionBoundsOffset
Changed paths:
engines/neverhood/collisionman.cpp
engines/neverhood/diskplayerscene.cpp
engines/neverhood/klayman.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1100.h
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/module3000.cpp
engines/neverhood/mouse.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index bacf18b..973c0fe 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -94,7 +94,7 @@ void CollisionMan::clearSprites() {
void CollisionMan::checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam) {
for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
Sprite *collSprite = *iter;
- if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getRect())) {
+ if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getCollisionBounds())) {
sprite->sendMessage(collSprite, messageNum, messageParam);
}
}
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 0ffb0b0..e9813e6 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -198,14 +198,14 @@ DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene
_spriteResource.load2(0x24A4A664);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect = _drawRect;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
+ _collisionBoundsOffset = _drawOffset;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- processDelta();
+ updateBounds();
_needRefresh = true;
StaticSprite::update();
_surface->setVisible(false);
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index f06ce40..9e9f136 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -707,7 +707,7 @@ void Klayman::suAction() {
_x = _destX;
}
- processDelta();
+ updateBounds();
}
@@ -753,7 +753,7 @@ void Klayman::suSneaking() {
}
}
}
- processDelta();
+ updateBounds();
}
}
@@ -932,7 +932,7 @@ void Klayman::suWalkingTestExit() {
}
}
}
- processDelta();
+ updateBounds();
}
}
@@ -1409,7 +1409,7 @@ void Klayman::suLargeStep() {
_y = xdiff < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
}
}
- processDelta();
+ updateBounds();
}
}
@@ -2175,7 +2175,7 @@ void Klayman::suJumpToGrab() {
updateDeltaXY();
if (_y >= _destY) {
_y = _destY;
- processDelta();
+ updateBounds();
gotoNextStateExt();
}
}
@@ -2856,7 +2856,7 @@ void Klayman::suFallDown() {
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
- processDelta();
+ updateBounds();
sendMessage(this, 0x1019, 0);
}
_vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
@@ -3016,7 +3016,7 @@ void Klayman::suFallSkipJump() {
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
- processDelta();
+ updateBounds();
sendMessage(this, 0x1019, 0);
}
}
@@ -3222,7 +3222,7 @@ void Klayman::stContSpitIntoPipe() {
void Klayman::suRidePlatform() {
_x = _attachedSprite->getX() - 20;
_y = _attachedSprite->getY() + 46;
- processDelta();
+ updateBounds();
}
void Klayman::stRidePlatform() {
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 9748919..e22a668 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -166,41 +166,41 @@ MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint but
_spriteResource.load2(kMainMenuButtonFileHashes[_buttonIndex]);
createSurface(100, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
// TODO Move to const array
switch (_buttonIndex) {
case 0:
- _rect.set(52, 121, 110, 156);
+ _collisionBounds.set(52, 121, 110, 156);
break;
case 1:
- _rect.set(52, 192, 109, 222);
+ _collisionBounds.set(52, 192, 109, 222);
break;
case 2:
- _rect.set(60, 257, 119, 286);
+ _collisionBounds.set(60, 257, 119, 286);
break;
case 3:
- _rect.set(67, 326, 120, 354);
+ _collisionBounds.set(67, 326, 120, 354);
break;
case 4:
- _rect.set(70, 389, 128, 416);
+ _collisionBounds.set(70, 389, 128, 416);
break;
case 5:
- _rect.set(523, 113, 580, 144);
+ _collisionBounds.set(523, 113, 580, 144);
break;
case 6:
- _rect.set(525, 176, 577, 206);
+ _collisionBounds.set(525, 176, 577, 206);
break;
case 7:
- _rect.set(527, 384, 580, 412);
+ _collisionBounds.set(527, 384, 580, 412);
break;
case 8:
- _rect.set(522, 255, 580, 289);
+ _collisionBounds.set(522, 255, 580, 289);
break;
}
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 6a81918..72cf0ed 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -618,10 +618,10 @@ AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
_y = 239;
}
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_needRefresh = true;
@@ -771,10 +771,10 @@ SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene
_spriteResource.load2(fileHash1);
createSurface(surfacePriority, 40, 40);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
@@ -791,20 +791,20 @@ void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHashes[1] = fileHash2;
if (_status == 2) {
_spriteResource.load2(fileHash2);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
StaticSprite::update();
} else {
_spriteResource.load2(fileHash1);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -817,10 +817,10 @@ void SsCommonPressButton::update() {
if (_status == 1) {
_status = 2;
_spriteResource.load2(_fileHashes[1]);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -829,10 +829,10 @@ void SsCommonPressButton::update() {
} else if (_status == 2) {
_status = 3;
_spriteResource.load2(_fileHashes[0]);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 6bf6140..e746be7 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -267,10 +267,10 @@ static const uint32 kSsScene1105SymbolDieFileHashes[] = {
0x10098414
};
-SsScene1105Button::SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &rect)
+SsScene1105Button::SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &collisionBounds)
: StaticSprite(vm, fileHash, 200), _parentScene(parentScene), _countdown(0) {
- _rect = rect;
+ _collisionBounds = collisionBounds;
SetMessageHandler(&SsScene1105Button::handleMessage);
SetUpdateHandler(&SsScene1105Button::update);
setVisible(false);
@@ -306,8 +306,8 @@ SsScene1105Symbol::SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16
_x = x;
_y = y;
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
StaticSprite::update();
}
@@ -339,8 +339,8 @@ uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam &p
void SsScene1105SymbolDie::loadSymbolSprite() {
load(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], true, false);
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
StaticSprite::update();
}
@@ -406,13 +406,13 @@ SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentS
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect = _drawRect;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
+ _collisionBoundsOffset = _drawOffset;
_needRefresh = true;
- processDelta();
+ updateBounds();
setVisible(false);
loadSound(0, 0x44045140);
SetUpdateHandler(&SsScene1105OpenButton::update);
diff --git a/engines/neverhood/module1100.h b/engines/neverhood/module1100.h
index 98d1ae6..126d149 100644
--- a/engines/neverhood/module1100.h
+++ b/engines/neverhood/module1100.h
@@ -43,7 +43,7 @@ protected:
class SsScene1105Button : public StaticSprite {
public:
- SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &rect);
+ SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &collisionBounds);
protected:
Scene *_parentScene;
int _countdown;
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 768e781..bf4f1df 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -172,18 +172,18 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
_spriteResource.load2(kScene1201TntFileHashList1[elemIndex]);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
} else {
_spriteResource.load2(kScene1201TntFileHashList2[elemIndex]);
_x = x;
_y = y;
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -_spriteResource.getDimensions().height;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -_spriteResource.getDimensions().height;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
}
createSurface(50, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index ab63c29..b623af0 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1165,7 +1165,7 @@ void AsScene1307Key::suRemoveKey() {
if (_pointIndex < kAsScene1307KeyPointsCount) {
_x += kAsScene1307KeyPoints[_pointIndex].x;
_y += kAsScene1307KeyPoints[_pointIndex].y;
- processDelta();
+ updateBounds();
_pointIndex++;
} else {
SetSpriteUpdate(NULL);
@@ -1176,7 +1176,7 @@ void AsScene1307Key::suInsertKey() {
if (_pointIndex < kAsScene1307KeyPointsCount) {
_x -= kAsScene1307KeyPoints[kAsScene1307KeyPointsCount - _pointIndex - 1].x;
_y -= kAsScene1307KeyPoints[kAsScene1307KeyPointsCount - _pointIndex - 1].y;
- processDelta();
+ updateBounds();
_pointIndex++;
if (_pointIndex == 7)
playSound(0);
@@ -1191,7 +1191,7 @@ void AsScene1307Key::suMoveKey() {
_frameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
_x = _prevX + (_deltaX * _frameIndex) / kAsScene1307KeyDivValue;
_y = _prevY + (_deltaY * _frameIndex) / kAsScene1307KeyDivValue;
- processDelta();
+ updateBounds();
_pointIndex++;
} else {
NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 7373172..cedb283 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -252,7 +252,7 @@ uint32 AsScene1401Mouse::handleMessage(int messageNum, const MessageParam ¶m
void AsScene1401Mouse::suSuckedIn() {
AnimatedSprite::updateDeltaXY();
- if (_rect.y1 <= 150) {
+ if (_collisionBounds.y1 <= 150) {
playSound(0, 0x0E32247F);
stopAnimation();
SetSpriteUpdate(NULL);
@@ -289,7 +289,7 @@ uint32 AsScene1401Cheese::handleMessage(int messageNum, const MessageParam ¶
void AsScene1401Cheese::suSuckedIn() {
AnimatedSprite::updateDeltaXY();
- if (_rect.y1 <= 150) {
+ if (_collisionBounds.y1 <= 150) {
playSound(0, 0x18020439);
stopAnimation();
SetSpriteUpdate(NULL);
@@ -522,7 +522,7 @@ void AsCommonProjector::suMoving() {
setGlobalVar(V_PROJECTOR_SLOT, 0);
}
}
- Sprite::processDelta();
+ Sprite::updateBounds();
}
void AsCommonProjector::moveProjector() {
@@ -558,7 +558,7 @@ void AsCommonProjector::moveProjector() {
void AsCommonProjector::stSuckedIn() {
AnimatedSprite::updateDeltaXY();
- if (_rect.y1 <= 150) {
+ if (_collisionBounds.y1 <= 150) {
sendMessage(_asPipe, 0x483A, 0);
stopAnimation();
SetMessageHandler(&Sprite::handleMessage);
@@ -691,12 +691,12 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_SLOT) == 6) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
- _klayman->processDelta();
+ _klayman->updateBounds();
setMessageList(0x004B6670);
} else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
- _klayman->processDelta();
+ _klayman->updateBounds();
setMessageList(0x004B6670);
}
_asProjector->setClipRect(_sprite3->getDrawRect().x, _sprite2->getDrawRect().y, 640, 480);
@@ -917,12 +917,12 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
- _klayman->processDelta();
+ _klayman->updateBounds();
setMessageList(0x004B0BD0);
} else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
- _klayman->processDelta();
+ _klayman->updateBounds();
setMessageList(0x004B0BD0);
}
_asProjector->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x, _ssBridgePart3->getDrawRect().y2());
@@ -1118,7 +1118,7 @@ void AsScene1407Mouse::suWalkTo() {
sendMessage(this, 0x1019, 0);
} else {
_x += xdelta;
- processDelta();
+ updateBounds();
}
}
@@ -1339,7 +1339,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
- _klayman->processDelta();
+ _klayman->updateBounds();
setMessageList(0x004B1F70);
}
_asProjector->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
@@ -1457,7 +1457,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
- _klayman->processDelta();
+ _klayman->updateBounds();
setMessageList(0x004B8CB8);
}
_asProjector->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 7df162c..f6dea96 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -157,12 +157,12 @@ SsScene1705Tape::SsScene1705Tape(NeverhoodEngine *vm, Scene *parentScene, uint32
setVisible(false);
SetMessageHandler(NULL);
}
- _deltaRect = _drawRect;
- _deltaRect.x -= 4;
- _deltaRect.y -= 8;
- _deltaRect.width += 8;
- _deltaRect.height += 16;
- Sprite::processDelta();
+ _collisionBoundsOffset = _drawOffset;
+ _collisionBoundsOffset.x -= 4;
+ _collisionBoundsOffset.y -= 8;
+ _collisionBoundsOffset.width += 8;
+ _collisionBoundsOffset.height += 16;
+ Sprite::updateBounds();
}
uint32 SsScene1705Tape::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 0a02d85..fb98c2e 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -219,8 +219,8 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
_newStickFrameIndex = 0;
}
- _deltaRect.set(0, 0, 80, 80);
- Sprite::processDelta();
+ _collisionBoundsOffset.set(0, 0, 80, 80);
+ Sprite::updateBounds();
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1907Symbol::handleMessage);
@@ -413,7 +413,7 @@ void AsScene1907Symbol::cbFallOffHitGroundEvent() {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteUpdate(NULL);
- processDelta();
+ updateBounds();
playSound(2);
}
@@ -458,11 +458,11 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907
_spriteResource.load2(0x64516424);
createSurface(1400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
setVisible(false);
- _drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _deltaRect = _drawRect;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _collisionBoundsOffset = _drawOffset;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- processDelta();
+ updateBounds();
_needRefresh = true;
loadSound(0, 0x44061000);
SetUpdateHandler(&SsScene1907UpDownButton::update);
@@ -500,13 +500,13 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam
void SsScene1907UpDownButton::setToUpPosition() {
_y = _spriteResource.getPosition().y;
- Sprite::processDelta();
+ Sprite::updateBounds();
StaticSprite::update();
}
void SsScene1907UpDownButton::setToDownPosition() {
_y = _spriteResource.getPosition().y + 174;
- Sprite::processDelta();
+ Sprite::updateBounds();
StaticSprite::update();
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index b3798d2..b746d51 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -490,10 +490,10 @@ SsScene2201PuzzleCube::SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positio
_spriteResource.load2(kSsScene2201PuzzleCubeFileHashes[cubeIndex]);
createSurface(100, 16, 16);
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -(_spriteResource.getDimensions().height / 2);
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = kSsScene2201PuzzleCubePoints[positionIndex].x;
_y = kSsScene2201PuzzleCubePoints[positionIndex].y;
_needRefresh = true;
@@ -683,14 +683,14 @@ SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentS
} else {
createSurface(500, 128, 128);
}
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -(_spriteResource.getDimensions().height / 2);
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect = _drawRect;
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
+ _collisionBoundsOffset = _drawOffset;
_x = kSsScene2202PuzzleTilePoints[_tileIndex].x;
_y = kSsScene2202PuzzleTilePoints[_tileIndex].y;
- processDelta();
+ updateBounds();
_needRefresh = true;
StaticSprite::update();
loadSound(0, 0x40958621);
@@ -750,7 +750,7 @@ void SsScene2202PuzzleTile::suMoveTileX() {
stopMoving();
}
- processDelta();
+ updateBounds();
}
@@ -785,17 +785,17 @@ void SsScene2202PuzzleTile::suMoveTileY() {
stopMoving();
}
- processDelta();
+ updateBounds();
}
void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
_spriteResource.load2(kSsScene2202PuzzleTileFileHashes1[_value]);
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -(_spriteResource.getDimensions().height / 2);
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_needRefresh = true;
setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1);
@@ -873,10 +873,10 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
void SsScene2202PuzzleTile::stopMoving() {
_spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
- _drawRect.x = -(_spriteResource.getDimensions().width / 2);
- _drawRect.y = -(_spriteResource.getDimensions().height / 2);
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
+ _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_needRefresh = true;
SetSpriteUpdate(NULL);
_isMoving = false;
@@ -1225,10 +1225,10 @@ SsScene2205DoorFrame::SsScene2205DoorFrame(NeverhoodEngine *vm)
SetMessageHandler(&SsScene2205DoorFrame::handleMessage);
_spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
createSurface(1100, 45, 206);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -1240,10 +1240,10 @@ uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x2000:
_spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -1483,8 +1483,8 @@ SsScene2206TestTube::SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene
} else {
SetMessageHandler(&SsScene2206TestTube::handleMessage);
}
- _deltaRect = _drawRect;
- processDelta();
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
}
uint32 SsScene2206TestTube::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1749,7 +1749,7 @@ void AsScene2207Elevator::update() {
void AsScene2207Elevator::suSetPosition() {
_x = (*_pointArray)[_pointIndex].x;
_y = (*_pointArray)[_pointIndex].y - 60;
- processDelta();
+ updateBounds();
}
uint32 AsScene2207Elevator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index f67d1a6..bb9e10b 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -487,14 +487,14 @@ SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm)
_spriteResource.load2(0x070220D9);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _deltaRect = _drawRect;
- processDelta();
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
_needRefresh = true;
setVisible(false);
loadSound(0, 0x4600204C);
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 37e4406..7008a90 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -213,11 +213,11 @@ SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
if (!getGlobalVar(V_WATER_RUNNING))
setVisible(false);
- _drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _deltaRect = _drawRect;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _collisionBoundsOffset = _drawOffset;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- processDelta();
+ updateBounds();
_needRefresh = true;
loadSound(0, 0x10267160);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index b0983de..c5524fa 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -514,7 +514,7 @@ SsCommonTrackShadowBackground::SsCommonTrackShadowBackground(NeverhoodEngine *vm
createSurface(0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_needRefresh = true;
StaticSprite::update();
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 8712cc3..7c895e9 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -1226,7 +1226,7 @@ uint32 Scene2803Small::handleMessage(int messageNum, const MessageParam ¶m,
NPoint pt = _dataResource.getPoint(0x0D84A1AD);
_klayman->setX(pt.x);
_klayman->setY(pt.y);
- _klayman->processDelta();
+ _klayman->updateBounds();
klaymanFloor();
_klayman->setClipRect(517, 401, 536, 480);
setMessageList(0x004B6198);
@@ -1240,7 +1240,7 @@ uint32 Scene2803Small::handleMessage(int messageNum, const MessageParam ¶m,
_klayman->setClipRect(0, 0, 560, 315);
_klayman->setX(560);
_klayman->setY(315);
- _klayman->processDelta();
+ _klayman->updateBounds();
klaymanSlope();
setMessageList(0x004B61A0);
} else if (param.asInteger() == 0x002CAA68) {
@@ -1373,14 +1373,14 @@ SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *paren
else
_spriteResource.load2(0x11814A21);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _deltaRect = _drawRect;
- processDelta();
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
setVisible(false);
_needRefresh = true;
SetUpdateHandler(&SsScene2804RedButton::update);
@@ -1416,10 +1416,10 @@ SsScene2804LightCoil::SsScene2804LightCoil(NeverhoodEngine *vm)
_spriteResource.load2(0x8889B008);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1450,10 +1450,10 @@ SsScene2804LightTarget::SsScene2804LightTarget(NeverhoodEngine *vm)
_spriteResource.load2(0x06092132);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1484,10 +1484,10 @@ SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm)
_spriteResource.load2(0x211003A0);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1507,10 +1507,10 @@ SsScene2804BeamCoilBody::SsScene2804BeamCoilBody(NeverhoodEngine *vm)
_spriteResource.load2(0x9A816000);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1656,14 +1656,14 @@ SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene280
_spriteResource.load2(kSsScene2804CrystalButtonFileHashes2[crystalIndex]);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _deltaRect = _drawRect;
- processDelta();
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
setVisible(false);
loadSound(0, 0x44045140);
_needRefresh = true;
@@ -2262,14 +2262,14 @@ SsScene2808Dispenser::SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentSce
_spriteResource.load2(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex]);
createSurface(1500, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _deltaRect = _drawRect;
- processDelta();
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
SetUpdateHandler(&SsScene2808Dispenser::update);
SetMessageHandler(&SsScene2808Dispenser::handleMessage);
setVisible(false);
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 7dc8a9c..7abab12 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -256,16 +256,16 @@ SsScene2901LocationButton::SsScene2901LocationButton(NeverhoodEngine *vm, Scene
_spriteResource.load2(kSsScene2901LocationButtonFileHashes[which * 6 + index]);
createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _rect.x1 = kSsScene2901LocationButtonPoints[_index].x - 25;
- _rect.y1 = kSsScene2901LocationButtonPoints[_index].y - 25;
- _rect.x2 = kSsScene2901LocationButtonPoints[_index].x + 25;
- _rect.y2 = kSsScene2901LocationButtonPoints[_index].y + 25;
+ _collisionBounds.x1 = kSsScene2901LocationButtonPoints[_index].x - 25;
+ _collisionBounds.y1 = kSsScene2901LocationButtonPoints[_index].y - 25;
+ _collisionBounds.x2 = kSsScene2901LocationButtonPoints[_index].x + 25;
+ _collisionBounds.y2 = kSsScene2901LocationButtonPoints[_index].y + 25;
setVisible(false);
_needRefresh = true;
loadSound(0, 0x440430C0);
@@ -301,10 +301,10 @@ SsScene2901LocationButtonLight::SsScene2901LocationButtonLight(NeverhoodEngine *
_spriteResource.load2(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index]);
createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -328,10 +328,10 @@ SsScene2901BrokenButton::SsScene2901BrokenButton(NeverhoodEngine *vm, int which)
_spriteResource.load2(kSsScene2901BrokenButtonFileHashes[which]);
createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -343,16 +343,16 @@ SsScene2901BigButton::SsScene2901BigButton(NeverhoodEngine *vm, Scene *parentSce
_spriteResource.load2(kSsScene2901BigButtonFileHashes[which]);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _rect.x1 = 62;
- _rect.y1 = 94;
- _rect.x2 = 322;
- _rect.y2 = 350;
+ _collisionBounds.x1 = 62;
+ _collisionBounds.y1 = 94;
+ _collisionBounds.x2 = 322;
+ _collisionBounds.y2 = 350;
setVisible(false);
_needRefresh = true;
loadSound(0, 0xF3D420C8);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 7695248..8005c62 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -475,16 +475,16 @@ SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Sc
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect.x = 0;
- _deltaRect.y = 0;
- _deltaRect.width = _spriteResource.getDimensions().width;
- _deltaRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
+ _collisionBoundsOffset.x = 0;
+ _collisionBoundsOffset.y = 0;
+ _collisionBoundsOffset.width = _spriteResource.getDimensions().width;
+ _collisionBoundsOffset.height = _spriteResource.getDimensions().height;
setVisible(false);
- processDelta();
+ updateBounds();
_needRefresh = true;
SetUpdateHandler(&SsScene3009FireCannonButton::update);
SetMessageHandler(&SsScene3009FireCannonButton::handleMessage);
@@ -521,10 +521,10 @@ SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index)
createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
_needRefresh = true;
if (getGlobalVar(V_ROBOT_HIT)) {
hide();
@@ -573,10 +573,10 @@ SsScene3009TargetLine::SsScene3009TargetLine(NeverhoodEngine *vm, int index)
createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
setVisible(false);
_needRefresh = true;
}
@@ -595,12 +595,12 @@ SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSy
createSurface(1200, 33, 31);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = 33;
- _drawRect.height = 31;
- _deltaRect = _drawRect;
- processDelta();
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = 33;
+ _drawOffset.height = 31;
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
_needRefresh = true;
SetUpdateHandler(&SsScene3009SymbolArrow::update);
SetMessageHandler(&SsScene3009SymbolArrow::handleMessage);
@@ -617,10 +617,10 @@ void SsScene3009SymbolArrow::update() {
if (_countdown != 0 && (--_countdown == 0)) {
_spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]);
_needRefresh = true;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
}
}
@@ -632,10 +632,10 @@ uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam
_countdown = 2;
_spriteResource.load2(kSsScene3009SymbolArrowFileHashes1[_index]);
_needRefresh = true;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
playSound(0);
sendMessage(_asSymbol, 0x2005, _incrDecr);
}
@@ -1155,12 +1155,12 @@ void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) {
_spriteResource.load(fileHash);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect = _drawRect;
- processDelta();
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
_needRefresh = true;
StaticSprite::update();
}
@@ -1430,13 +1430,13 @@ SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bo
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
- _deltaRect = _drawRect;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
+ _collisionBoundsOffset = _drawOffset;
setVisible(false);
- processDelta();
+ updateBounds();
_needRefresh = true;
SetUpdateHandler(&SsScene3011Button::update);
SetMessageHandler(&SsScene3011Button::handleMessage);
diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp
index 105d170..632f56f 100644
--- a/engines/neverhood/mouse.cpp
+++ b/engines/neverhood/mouse.cpp
@@ -74,12 +74,12 @@ void Mouse::init(uint32 fileHash) {
createSurface(2000, 32, 32);
SetUpdateHandler(&Mouse::update);
SetMessageHandler(&Mouse::handleMessage);
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = 32;
- _drawRect.height = 32;
- _deltaRect = _drawRect;
- processDelta();
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = 32;
+ _drawOffset.height = 32;
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
_needRefresh = true;
CursorMan.showMouse(false);
}
@@ -155,7 +155,7 @@ uint32 Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
_x = param.asPoint().x;
_y = param.asPoint().y;
updateCursorNum();
- processDelta();
+ updateBounds();
break;
}
return messageResult;
@@ -167,24 +167,24 @@ void Mouse::updateCursor() {
return;
if (_doDeltaX) {
- _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
+ _surface->getDrawRect().x = filterX(_x - _drawOffset.width - _drawOffset.x + 1);
} else {
- _surface->getDrawRect().x = filterX(_x + _drawRect.x);
+ _surface->getDrawRect().x = filterX(_x + _drawOffset.x);
}
if (_doDeltaY) {
- _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
+ _surface->getDrawRect().y = filterY(_y - _drawOffset.height - _drawOffset.y + 1);
} else {
- _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ _surface->getDrawRect().y = filterY(_y + _drawOffset.y);
}
if (_needRefresh) {
_needRefresh = false;
- _drawRect = _mouseCursorResource.getRect();
+ _drawOffset = _mouseCursorResource.getRect();
_surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
Graphics::Surface *cursorSurface = _surface->getSurface();
CursorMan.replaceCursor((const byte*)cursorSurface->pixels,
- cursorSurface->w, cursorSurface->h, -_drawRect.x, -_drawRect.y, 0);
+ cursorSurface->w, cursorSurface->h, -_drawOffset.x, -_drawOffset.y, 0);
}
}
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index f81be07..fb45b8a 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -38,20 +38,20 @@ Sprite::~Sprite() {
delete _surface;
}
-void Sprite::processDelta() {
+void Sprite::updateBounds() {
if (_doDeltaX) {
- _rect.x1 = _x - _deltaRect.x - _deltaRect.width + 1;
- _rect.x2 = _x - _deltaRect.x;
+ _collisionBounds.x1 = _x - _collisionBoundsOffset.x - _collisionBoundsOffset.width + 1;
+ _collisionBounds.x2 = _x - _collisionBoundsOffset.x;
} else {
- _rect.x1 = _x + _deltaRect.x;
- _rect.x2 = _x + _deltaRect.x + _deltaRect.width - 1;
+ _collisionBounds.x1 = _x + _collisionBoundsOffset.x;
+ _collisionBounds.x2 = _x + _collisionBoundsOffset.x + _collisionBoundsOffset.width - 1;
}
if (_doDeltaY) {
- _rect.y1 = _y - _deltaRect.y - _deltaRect.height + 1;
- _rect.y2 = _y - _deltaRect.y;
+ _collisionBounds.y1 = _y - _collisionBoundsOffset.y - _collisionBoundsOffset.height + 1;
+ _collisionBounds.y2 = _y - _collisionBoundsOffset.y;
} else {
- _rect.y1 = _y + _deltaRect.y;
- _rect.y2 = _y + _deltaRect.y + _deltaRect.height - 1;
+ _collisionBounds.y1 = _y + _collisionBoundsOffset.y;
+ _collisionBounds.y2 = _y + _collisionBoundsOffset.y + _collisionBoundsOffset.height - 1;
}
}
@@ -66,11 +66,11 @@ void Sprite::setDoDeltaY(int type) {
}
bool Sprite::isPointInside(int16 x, int16 y) {
- return x >= _rect.x1 && x <= _rect.x2 && y >= _rect.y1 && y <= _rect.y2;
+ return x >= _collisionBounds.x1 && x <= _collisionBounds.x2 && y >= _collisionBounds.y1 && y <= _collisionBounds.y2;
}
bool Sprite::checkCollision(NRect &rect) {
- return (_rect.x1 < rect.x2) && (rect.x1 < _rect.x2) && (_rect.y1 < rect.y2) && (rect.y1 < _rect.y2);
+ return (_collisionBounds.x1 < rect.x2) && (rect.x1 < _collisionBounds.x2) && (_collisionBounds.y1 < rect.y2) && (rect.y1 < _collisionBounds.y2);
}
uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -147,10 +147,10 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y,
_x = x == kDefPosition ? _spriteResource.getPosition().x : x;
_y = y == kDefPosition ? _spriteResource.getPosition().y : y;
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = width;
- _drawRect.height = height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = width;
+ _drawOffset.height = height;
_needRefresh = true;
@@ -164,19 +164,19 @@ void StaticSprite::update() {
return;
if (_doDeltaX) {
- _surface->getDrawRect().x = filterX(_x - _drawRect.x - _drawRect.width + 1);
+ _surface->getDrawRect().x = filterX(_x - _drawOffset.x - _drawOffset.width + 1);
} else {
- _surface->getDrawRect().x = filterX(_x + _drawRect.x);
+ _surface->getDrawRect().x = filterX(_x + _drawOffset.x);
}
if (_doDeltaY) {
- _surface->getDrawRect().y = filterY(_y - _drawRect.y - _drawRect.height + 1);
+ _surface->getDrawRect().y = filterY(_y - _drawOffset.y - _drawOffset.height + 1);
} else {
- _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ _surface->getDrawRect().y = filterY(_y + _drawOffset.y);
}
if (_needRefresh) {
- _surface->drawSpriteResourceEx(_spriteResource, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
+ _surface->drawSpriteResourceEx(_spriteResource, _doDeltaX, _doDeltaY, _drawOffset.width, _drawOffset.height);
_needRefresh = false;
}
@@ -187,10 +187,10 @@ void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
_spriteResource.load2(fileHash);
if (dimensions) {
- _drawRect.x = 0;
- _drawRect.y = 0;
- _drawRect.width = _spriteResource.getDimensions().width;
- _drawRect.height = _spriteResource.getDimensions().height;
+ _drawOffset.x = 0;
+ _drawOffset.y = 0;
+ _drawOffset.width = _spriteResource.getDimensions().width;
+ _drawOffset.height = _spriteResource.getDimensions().height;
}
if (position) {
@@ -261,7 +261,7 @@ void AnimatedSprite::updateDeltaXY() {
}
_deltaX = 0;
_deltaY = 0;
- processDelta();
+ updateBounds();
}
void AnimatedSprite::setRepl(byte oldColor, byte newColor) {
@@ -370,19 +370,19 @@ void AnimatedSprite::updatePosition() {
return;
if (_doDeltaX) {
- _surface->getDrawRect().x = filterX(_x - _drawRect.x - _drawRect.width + 1);
+ _surface->getDrawRect().x = filterX(_x - _drawOffset.x - _drawOffset.width + 1);
} else {
- _surface->getDrawRect().x = filterX(_x + _drawRect.x);
+ _surface->getDrawRect().x = filterX(_x + _drawOffset.x);
}
if (_doDeltaY) {
- _surface->getDrawRect().y = filterY(_y - _drawRect.y - _drawRect.height + 1);
+ _surface->getDrawRect().y = filterY(_y - _drawOffset.y - _drawOffset.height + 1);
} else {
- _surface->getDrawRect().y = filterY(_y + _drawRect.y);
+ _surface->getDrawRect().y = filterY(_y + _drawOffset.y);
}
if (_needRefresh) {
- _surface->drawAnimResource(_animResource, _currFrameIndex, _doDeltaX, _doDeltaY, _drawRect.width, _drawRect.height);
+ _surface->drawAnimResource(_animResource, _currFrameIndex, _doDeltaX, _doDeltaY, _drawOffset.width, _drawOffset.height);
_needRefresh = false;
}
@@ -414,12 +414,12 @@ void AnimatedSprite::updateFrameInfo() {
debug(8, "AnimatedSprite::updateFrameInfo()");
const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_currFrameIndex);
_frameChanged = true;
- _drawRect = frameInfo.rect;
+ _drawOffset = frameInfo.rect;
_deltaX = frameInfo.deltaX;
_deltaY = frameInfo.deltaY;
- _deltaRect = frameInfo.deltaRect;
+ _collisionBoundsOffset = frameInfo.deltaRect;
_currFrameTicks = frameInfo.counter;
- processDelta();
+ updateBounds();
_needRefresh = true;
if (frameInfo.frameHash != 0)
sendMessage(this, 0x100D, frameInfo.frameHash);
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 358a37b..7e07f3a 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -42,7 +42,7 @@ public:
~Sprite();
void init() {}
BaseSurface *getSurface() { return _surface; }
- void processDelta();
+ void updateBounds();
void setDoDeltaX(int type);
void setDoDeltaY(int type);
bool isPointInside(int16 x, int16 y);
@@ -54,7 +54,7 @@ public:
uint16 getFlags() const { return _flags; }
bool isDoDeltaX() const { return _doDeltaX; }
bool isDoDeltaY() const { return _doDeltaY; }
- NRect& getRect() { return _rect; }
+ NRect& getCollisionBounds() { return _collisionBounds; }
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void loadDataResource(uint32 fileHash);
int16 defFilterY(int16 y);
@@ -75,13 +75,10 @@ protected:
int16 _x, _y;
bool _doDeltaX, _doDeltaY;
bool _needRefresh;
- //0000002B field_2B db ?
- //0000002C field2C dd ? // unused
- NDrawRect _drawRect;
- NDrawRect _deltaRect;
- NRect _rect;
+ NDrawRect _drawOffset;
+ NRect _collisionBounds;
+ NDrawRect _collisionBoundsOffset;
uint16 _flags;
- //0000004A field4A dw ? // seems to be unused except in ctor
DataResource _dataResource;
void createSurface(int surfacePriority, int16 width, int16 height);
void handleSpriteUpdate() {
Commit: f24a6769c2bf376def72274d6ed94c786ca03766
https://github.com/scummvm/scummvm/commit/f24a6769c2bf376def72274d6ed94c786ca03766
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:33-07:00
Commit Message:
NEVERHOOD: Make use of NDrawRect::set
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index e9813e6..75755dd 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -198,10 +198,7 @@ DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene
_spriteResource.load2(0x24A4A664);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_collisionBoundsOffset = _drawOffset;
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index e22a668..2e7f85d 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -166,10 +166,7 @@ MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint but
_spriteResource.load2(kMainMenuButtonFileHashes[_buttonIndex]);
createSurface(100, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 72cf0ed..ff26d17 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -618,10 +618,7 @@ AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
_y = 239;
}
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_needRefresh = true;
@@ -771,10 +768,7 @@ SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene
_spriteResource.load2(fileHash1);
createSurface(surfacePriority, 40, 40);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
@@ -791,20 +785,14 @@ void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHashes[1] = fileHash2;
if (_status == 2) {
_spriteResource.load2(fileHash2);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
StaticSprite::update();
} else {
_spriteResource.load2(fileHash1);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -817,10 +805,7 @@ void SsCommonPressButton::update() {
if (_status == 1) {
_status = 2;
_spriteResource.load2(_fileHashes[1]);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -829,10 +814,7 @@ void SsCommonPressButton::update() {
} else if (_status == 2) {
_status = 3;
_spriteResource.load2(_fileHashes[0]);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index e746be7..d21e3af 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -306,8 +306,8 @@ SsScene1105Symbol::SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16
_x = x;
_y = y;
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
StaticSprite::update();
}
@@ -406,10 +406,7 @@ SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentS
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_collisionBoundsOffset = _drawOffset;
_needRefresh = true;
updateBounds();
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index bf4f1df..5237588 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -172,18 +172,13 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
_spriteResource.load2(kScene1201TntFileHashList1[elemIndex]);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
} else {
_spriteResource.load2(kScene1201TntFileHashList2[elemIndex]);
_x = x;
_y = y;
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -_spriteResource.getDimensions().height;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -_spriteResource.getDimensions().height,
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
}
createSurface(50, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index b746d51..06cdc10 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -490,10 +490,8 @@ SsScene2201PuzzleCube::SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positio
_spriteResource.load2(kSsScene2201PuzzleCubeFileHashes[cubeIndex]);
createSurface(100, 16, 16);
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = kSsScene2201PuzzleCubePoints[positionIndex].x;
_y = kSsScene2201PuzzleCubePoints[positionIndex].y;
_needRefresh = true;
@@ -683,10 +681,8 @@ SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentS
} else {
createSurface(500, 128, 128);
}
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_collisionBoundsOffset = _drawOffset;
_x = kSsScene2202PuzzleTilePoints[_tileIndex].x;
_y = kSsScene2202PuzzleTilePoints[_tileIndex].y;
@@ -792,10 +788,8 @@ void SsScene2202PuzzleTile::suMoveTileY() {
void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
_spriteResource.load2(kSsScene2202PuzzleTileFileHashes1[_value]);
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_needRefresh = true;
setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1);
@@ -873,10 +867,8 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
void SsScene2202PuzzleTile::stopMoving() {
_spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_needRefresh = true;
SetSpriteUpdate(NULL);
_isMoving = false;
@@ -1225,10 +1217,7 @@ SsScene2205DoorFrame::SsScene2205DoorFrame(NeverhoodEngine *vm)
SetMessageHandler(&SsScene2205DoorFrame::handleMessage);
_spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
createSurface(1100, 45, 206);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -1240,10 +1229,7 @@ uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x2000:
_spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index bb9e10b..8345a8c 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -487,10 +487,7 @@ SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm)
_spriteResource.load2(0x070220D9);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_collisionBoundsOffset = _drawOffset;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 7c895e9..53ae40c 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -1373,10 +1373,7 @@ SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *paren
else
_spriteResource.load2(0x11814A21);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_collisionBoundsOffset = _drawOffset;
@@ -1416,10 +1413,7 @@ SsScene2804LightCoil::SsScene2804LightCoil(NeverhoodEngine *vm)
_spriteResource.load2(0x8889B008);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1450,10 +1444,7 @@ SsScene2804LightTarget::SsScene2804LightTarget(NeverhoodEngine *vm)
_spriteResource.load2(0x06092132);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1484,10 +1475,7 @@ SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm)
_spriteResource.load2(0x211003A0);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1507,10 +1495,7 @@ SsScene2804BeamCoilBody::SsScene2804BeamCoilBody(NeverhoodEngine *vm)
_spriteResource.load2(0x9A816000);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -1656,10 +1641,7 @@ SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene280
_spriteResource.load2(kSsScene2804CrystalButtonFileHashes2[crystalIndex]);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_collisionBoundsOffset = _drawOffset;
@@ -2262,10 +2244,7 @@ SsScene2808Dispenser::SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentSce
_spriteResource.load2(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex]);
createSurface(1500, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_collisionBoundsOffset = _drawOffset;
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 7abab12..ae74b14 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -256,10 +256,7 @@ SsScene2901LocationButton::SsScene2901LocationButton(NeverhoodEngine *vm, Scene
_spriteResource.load2(kSsScene2901LocationButtonFileHashes[which * 6 + index]);
createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_collisionBounds.x1 = kSsScene2901LocationButtonPoints[_index].x - 25;
@@ -301,10 +298,7 @@ SsScene2901LocationButtonLight::SsScene2901LocationButtonLight(NeverhoodEngine *
_spriteResource.load2(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index]);
createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
setVisible(false);
@@ -328,10 +322,7 @@ SsScene2901BrokenButton::SsScene2901BrokenButton(NeverhoodEngine *vm, int which)
_spriteResource.load2(kSsScene2901BrokenButtonFileHashes[which]);
createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
_needRefresh = true;
@@ -343,16 +334,10 @@ SsScene2901BigButton::SsScene2901BigButton(NeverhoodEngine *vm, Scene *parentSce
_spriteResource.load2(kSsScene2901BigButtonFileHashes[which]);
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _collisionBounds.x1 = 62;
- _collisionBounds.y1 = 94;
- _collisionBounds.x2 = 322;
- _collisionBounds.y2 = 350;
+ _collisionBounds.set(62, 94, 322, 350);
setVisible(false);
_needRefresh = true;
loadSound(0, 0xF3D420C8);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 8005c62..cb4faaf 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -475,14 +475,8 @@ SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Sc
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
- _collisionBoundsOffset.x = 0;
- _collisionBoundsOffset.y = 0;
- _collisionBoundsOffset.width = _spriteResource.getDimensions().width;
- _collisionBoundsOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ _collisionBoundsOffset = _drawOffset;
setVisible(false);
updateBounds();
_needRefresh = true;
@@ -521,10 +515,7 @@ SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index)
createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_needRefresh = true;
if (getGlobalVar(V_ROBOT_HIT)) {
hide();
@@ -573,10 +564,7 @@ SsScene3009TargetLine::SsScene3009TargetLine(NeverhoodEngine *vm, int index)
createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
setVisible(false);
_needRefresh = true;
}
@@ -595,10 +583,7 @@ SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSy
createSurface(1200, 33, 31);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = 33;
- _drawOffset.height = 31;
+ _drawOffset.set(0, 0, 33, 31);
_collisionBoundsOffset = _drawOffset;
updateBounds();
_needRefresh = true;
@@ -617,10 +602,7 @@ void SsScene3009SymbolArrow::update() {
if (_countdown != 0 && (--_countdown == 0)) {
_spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]);
_needRefresh = true;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
}
}
@@ -632,10 +614,7 @@ uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam
_countdown = 2;
_spriteResource.load2(kSsScene3009SymbolArrowFileHashes1[_index]);
_needRefresh = true;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
playSound(0);
sendMessage(_asSymbol, 0x2005, _incrDecr);
}
@@ -1155,10 +1134,7 @@ void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) {
_spriteResource.load(fileHash);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_collisionBoundsOffset = _drawOffset;
updateBounds();
_needRefresh = true;
@@ -1430,10 +1406,7 @@ SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bo
createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = _spriteResource.getPosition().x;
_y = _spriteResource.getPosition().y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_collisionBoundsOffset = _drawOffset;
setVisible(false);
updateBounds();
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index fb45b8a..0696aa6 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -147,10 +147,7 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y,
_x = x == kDefPosition ? _spriteResource.getPosition().x : x;
_y = y == kDefPosition ? _spriteResource.getPosition().y : y;
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = width;
- _drawOffset.height = height;
+ _drawOffset.set(0, 0, width, height);
_needRefresh = true;
@@ -187,10 +184,7 @@ void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
_spriteResource.load2(fileHash);
if (dimensions) {
- _drawOffset.x = 0;
- _drawOffset.y = 0;
- _drawOffset.width = _spriteResource.getDimensions().width;
- _drawOffset.height = _spriteResource.getDimensions().height;
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
}
if (position) {
Commit: bf1371c9d49845d3aadab2b235208bf601ab3987
https://github.com/scummvm/scummvm/commit/bf1371c9d49845d3aadab2b235208bf601ab3987
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Rename and clean up fields in AnimFrameInfo
Changed paths:
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 631b050..1a738c1 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -251,15 +251,15 @@ void NeverhoodEngine::dumpAllResources() {
anim.load(entry.archiveEntry->fileHash);
for (uint frameIndex = 0; frameIndex < anim.getFrameCount(); frameIndex++) {
const AnimFrameInfo &frameInfo = anim.getFrameInfo(frameIndex);
- int16 width = (frameInfo.rect.width + 3) & 0xFFFC;
- byte *pixels = new byte[width * frameInfo.rect.height];
- memset(pixels, 0, width * frameInfo.rect.height);
+ int16 width = (frameInfo.drawOffset.width + 3) & 0xFFFC;
+ byte *pixels = new byte[width * frameInfo.drawOffset.height];
+ memset(pixels, 0, width * frameInfo.drawOffset.height);
anim.draw(frameIndex, pixels, width, false, false);
Common::String filename =
frameInfo.frameHash != 0
? Common::String::format("%08X_%03d_%08X.tga", entry.archiveEntry->fileHash, frameIndex, frameInfo.frameHash)
: Common::String::format("%08X_%03d.tga", entry.archiveEntry->fileHash, frameIndex);
- writeTga(filename.c_str(), pixels, vgaPalette, width, frameInfo.rect.height);
+ writeTga(filename.c_str(), pixels, vgaPalette, width, frameInfo.drawOffset.height);
delete[] pixels;
}
}
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index aff3528..1246472 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -160,8 +160,8 @@ AnimResource::~AnimResource() {
void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX, bool flipY) {
const AnimFrameInfo frameInfo = _frames[frameIndex];
_currSpriteData = _spriteData + frameInfo.spriteDataOffs;
- _width = frameInfo.rect.width;
- _height = frameInfo.rect.height;
+ _width = frameInfo.drawOffset.width;
+ _height = frameInfo.drawOffset.height;
if (_replEnabled && _replOldColor != _replNewColor)
unpackSpriteRle(_currSpriteData, _width, _height, dest, destPitch, flipX, flipY, _replOldColor, _replNewColor);
else
@@ -235,24 +235,23 @@ bool AnimResource::load(uint32 fileHash) {
AnimFrameInfo frameInfo;
frameInfo.frameHash = READ_LE_UINT32(frameList);
frameInfo.counter = READ_LE_UINT16(frameList + 4);
- frameInfo.rect.x = READ_LE_UINT16(frameList + 6);
- frameInfo.rect.y = READ_LE_UINT16(frameList + 8);
- frameInfo.rect.width = READ_LE_UINT16(frameList + 10);
- frameInfo.rect.height = READ_LE_UINT16(frameList + 12);
+ frameInfo.drawOffset.x = READ_LE_UINT16(frameList + 6);
+ frameInfo.drawOffset.y = READ_LE_UINT16(frameList + 8);
+ frameInfo.drawOffset.width = READ_LE_UINT16(frameList + 10);
+ frameInfo.drawOffset.height = READ_LE_UINT16(frameList + 12);
frameInfo.deltaX = READ_LE_UINT16(frameList + 14);
frameInfo.deltaY = READ_LE_UINT16(frameList + 16);
- frameInfo.deltaRect.x = READ_LE_UINT16(frameList + 18);
- frameInfo.deltaRect.y = READ_LE_UINT16(frameList + 20);
- frameInfo.deltaRect.width = READ_LE_UINT16(frameList + 22);
- frameInfo.deltaRect.height = READ_LE_UINT16(frameList + 24);
- frameInfo.field_1A = READ_LE_UINT16(frameList + 26);
+ frameInfo.collisionBoundsOffset.x = READ_LE_UINT16(frameList + 18);
+ frameInfo.collisionBoundsOffset.y = READ_LE_UINT16(frameList + 20);
+ frameInfo.collisionBoundsOffset.width = READ_LE_UINT16(frameList + 22);
+ frameInfo.collisionBoundsOffset.height = READ_LE_UINT16(frameList + 24);
frameInfo.spriteDataOffs = READ_LE_UINT32(frameList + 28);
- debug(8, "frameHash = %08X; counter = %d; rect = (%d,%d,%d,%d); deltaX = %d; deltaY = %d; deltaRect = (%d,%d,%d,%d); field_1A = %04X; spriteDataOffs = %08X",
+ debug(8, "frameHash = %08X; counter = %d; rect = (%d,%d,%d,%d); deltaX = %d; deltaY = %d; collisionBoundsOffset = (%d,%d,%d,%d); spriteDataOffs = %08X",
frameInfo.frameHash, frameInfo.counter,
- frameInfo.rect.x, frameInfo.rect.y, frameInfo.rect.width, frameInfo.rect.height,
+ frameInfo.drawOffset.x, frameInfo.drawOffset.y, frameInfo.drawOffset.width, frameInfo.drawOffset.height,
frameInfo.deltaX, frameInfo.deltaY,
- frameInfo.deltaRect.x, frameInfo.deltaRect.y, frameInfo.deltaRect.width, frameInfo.deltaRect.height,
- frameInfo.field_1A, frameInfo.spriteDataOffs);
+ frameInfo.collisionBoundsOffset.x, frameInfo.collisionBoundsOffset.y, frameInfo.collisionBoundsOffset.width, frameInfo.collisionBoundsOffset.height,
+ frameInfo.spriteDataOffs);
frameList += 32;
_frames.push_back(frameInfo);
}
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index b49ee88..50a49e3 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -68,10 +68,9 @@ protected:
struct AnimFrameInfo {
uint32 frameHash;
int16 counter;
- NDrawRect rect;
+ NDrawRect drawOffset;
int16 deltaX, deltaY;
- NDrawRect deltaRect;
- uint16 field_1A;
+ NDrawRect collisionBoundsOffset;
uint32 spriteDataOffs;
};
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 0696aa6..40b651e 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -408,10 +408,10 @@ void AnimatedSprite::updateFrameInfo() {
debug(8, "AnimatedSprite::updateFrameInfo()");
const AnimFrameInfo &frameInfo = _animResource.getFrameInfo(_currFrameIndex);
_frameChanged = true;
- _drawOffset = frameInfo.rect;
+ _drawOffset = frameInfo.drawOffset;
_deltaX = frameInfo.deltaX;
_deltaY = frameInfo.deltaY;
- _collisionBoundsOffset = frameInfo.deltaRect;
+ _collisionBoundsOffset = frameInfo.collisionBoundsOffset;
_currFrameTicks = frameInfo.counter;
updateBounds();
_needRefresh = true;
Commit: 1589e4fe7d01e668ee5d5d02684e073df1242ad4
https://github.com/scummvm/scummvm/commit/1589e4fe7d01e668ee5d5d02684e073df1242ad4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Add new method StaticSprite::loadSprite and use it instead of setting stuff "manually"
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/module3000.cpp
engines/neverhood/sprite.cpp
engines/neverhood/sprite.h
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 75755dd..572074b 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -165,7 +165,7 @@ AsDiskplayerSceneKey::AsDiskplayerSceneKey(NeverhoodEngine *vm)
_newStickFrameIndex = 0;
_needRefresh = true;
updatePosition();
- _surface->setVisible(false);
+ setVisible(false);
}
uint32 AsDiskplayerSceneKey::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -183,29 +183,21 @@ void AsDiskplayerSceneKey::stDropKey() {
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsDiskplayerSceneKey::handleMessage);
NextState(&AsDiskplayerSceneKey::stDropKeyDone);
- _surface->setVisible(true);
+ setVisible(true);
}
void AsDiskplayerSceneKey::stDropKeyDone() {
stopAnimation();
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&Sprite::handleMessage);
- _surface->setVisible(false);
+ setVisible(false);
}
DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene)
: StaticSprite(vm, 1400), _diskplayerScene(diskplayerScene), _isPlaying(false) {
- _spriteResource.load2(0x24A4A664);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- updateBounds();
- _needRefresh = true;
- StaticSprite::update();
- _surface->setVisible(false);
+ loadSprite(0x24A4A664, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
+ setVisible(false);
loadSound(0, 0x44043000);
loadSound(1, 0x44045000);
SetMessageHandler(&DiskplayerPlayButton::handleMessage);
@@ -225,7 +217,7 @@ uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam &p
press();
}
}
- StaticSprite::update();
+ updatePosition();
messageResult = 1;
break;
}
@@ -234,8 +226,8 @@ uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam &p
void DiskplayerPlayButton::press() {
if (!_isPlaying) {
- _surface->setVisible(true);
- StaticSprite::update();
+ setVisible(true);
+ updatePosition();
playSound(0);
_isPlaying = true;
}
@@ -243,8 +235,8 @@ void DiskplayerPlayButton::press() {
void DiskplayerPlayButton::release() {
if (_isPlaying) {
- _surface->setVisible(false);
- StaticSprite::update();
+ setVisible(false);
+ updatePosition();
playSound(1);
_isPlaying = false;
}
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 38d8b99..f9e734d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -307,8 +307,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 4;
- createModule(1100, -1);
+ _vm->gameState().sceneNum = 2;
+ createModule(2800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 2e7f85d..fdde1a2 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -163,12 +163,7 @@ static const uint32 kMainMenuButtonFileHashes[] = {
MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex)
: StaticSprite(vm, 900), _parentScene(parentScene), _buttonIndex(buttonIndex), _countdown(0) {
- _spriteResource.load2(kMainMenuButtonFileHashes[_buttonIndex]);
- createSurface(100, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
-
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(kMainMenuButtonFileHashes[_buttonIndex], kSLFDefDrawOffset | kSLFDefPosition, 100);
// TODO Move to const array
switch (_buttonIndex) {
@@ -202,15 +197,12 @@ MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint but
}
setVisible(false);
- _needRefresh = true;
-
SetUpdateHandler(&MainMenuButton::update);
SetMessageHandler(&MainMenuButton::handleMessage);
-
}
void MainMenuButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown) == 0) {
setVisible(false);
sendMessage(_parentScene, 0x2000, _buttonIndex);
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index ff26d17..ac6830e 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -606,32 +606,16 @@ uint32 AsScene1002Ring::hmRingReleased(int messageNum, const MessageParam ¶m
AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
: StaticSprite(vm, 1200) {
- _spriteResource.load2(0x1052370F);
- createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(0x1052370F, kSLFDefDrawOffset | kSLFSetPosition, 800, 526, getGlobalVar(V_FLYTRAP_RING_DOOR) ? 49 : 239);
setClipRect(clipRect);
-
- _x = 526;
-
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
- _y = 49;
- } else {
- _y = 239;
- }
-
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
-
- _needRefresh = true;
-
SetUpdateHandler(&AsScene1002Door::update);
SetMessageHandler(&AsScene1002Door::handleMessage);
SetSpriteUpdate(NULL);
- StaticSprite::update();
-
}
void AsScene1002Door::update() {
handleSpriteUpdate();
- StaticSprite::update();
+ updatePosition();
}
uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -761,42 +745,22 @@ SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene
: StaticSprite(vm, 1100), _parentScene(parentScene), _status(0) {
_soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
-
_fileHashes[0] = fileHash1;
_fileHashes[1] = fileHash2;
-
- _spriteResource.load2(fileHash1);
createSurface(surfacePriority, 40, 40);
-
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
-
+ loadSprite(fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
setVisible(false);
- _needRefresh = true;
-
SetUpdateHandler(&SsCommonPressButton::update);
SetMessageHandler(&SsCommonPressButton::handleMessage);
-
}
void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHashes[0] = fileHash1;
_fileHashes[1] = fileHash2;
if (_status == 2) {
- _spriteResource.load2(fileHash2);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(fileHash2, kSLFDefDrawOffset | kSLFDefPosition);
} else {
- _spriteResource.load2(fileHash1);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
}
}
@@ -804,21 +768,11 @@ void SsCommonPressButton::update() {
if (_countdown != 0 && (--_countdown) == 0) {
if (_status == 1) {
_status = 2;
- _spriteResource.load2(_fileHashes[1]);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(_fileHashes[1], kSLFDefDrawOffset | kSLFDefPosition);
_countdown = 4;
} else if (_status == 2) {
_status = 3;
- _spriteResource.load2(_fileHashes[0]);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(_fileHashes[0], kSLFDefDrawOffset | kSLFDefPosition);
_countdown = 4;
} else if (_status == 3) {
_status = 0;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index d21e3af..afcd698 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -302,19 +302,15 @@ uint32 SsScene1105Button::handleMessage(int messageNum, const MessageParam ¶
}
SsScene1105Symbol::SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16 x, int16 y)
- : StaticSprite(vm, fileHash, 200) {
+ : StaticSprite(vm, 0) {
- _x = x;
- _y = y;
- _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
- _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- StaticSprite::update();
+ loadSprite(fileHash, kSLFCenteredDrawOffset | kSLFSetPosition, 200, x, y);
}
void SsScene1105Symbol::hide() {
setVisible(false);
_needRefresh = true;
- StaticSprite::update();
+ updatePosition();
}
SsScene1105SymbolDie::SsScene1105SymbolDie(NeverhoodEngine *vm, uint index, int16 x, int16 y)
@@ -338,16 +334,13 @@ uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam &p
}
void SsScene1105SymbolDie::loadSymbolSprite() {
- load(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], true, false);
- _drawOffset.x = -(_spriteResource.getDimensions().width / 2);
- _drawOffset.y = -(_spriteResource.getDimensions().height / 2);
- StaticSprite::update();
+ loadSprite(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], kSLFCenteredDrawOffset);
}
void SsScene1105SymbolDie::hide() {
setVisible(false);
_needRefresh = true;
- StaticSprite::update();
+ updatePosition();
}
AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene)
@@ -402,14 +395,7 @@ void AsScene1105TeddyBear::hide() {
SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene)
: StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _flag1(false) {
- _spriteResource.load2(0x8228A46C);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
- _needRefresh = true;
- updateBounds();
+ loadSprite(0x8228A46C, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
loadSound(0, 0x44045140);
SetUpdateHandler(&SsScene1105OpenButton::update);
@@ -417,7 +403,7 @@ SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentS
}
void SsScene1105OpenButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown == 0)) {
setVisible(false);
sendMessage(_parentScene, 0x2001, 0);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 5237588..e6442a0 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -169,22 +169,11 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi
int16 x = kScene1201PointArray[pointIndex].x;
int16 y = kScene1201PointArray[pointIndex].y;
if (x < 300) {
- _spriteResource.load2(kScene1201TntFileHashList1[elemIndex]);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(kScene1201TntFileHashList1[elemIndex], kSLFDefDrawOffset | kSLFDefPosition, 50);
} else {
- _spriteResource.load2(kScene1201TntFileHashList2[elemIndex]);
- _x = x;
- _y = y;
- _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -_spriteResource.getDimensions().height,
- _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
-
+ loadSprite(kScene1201TntFileHashList2[elemIndex], kSLFCenteredDrawOffset | kSLFSetPosition, 50, x, y);
}
- createSurface(50, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
setClipRect(0, 0, 640, clipY2);
- _needRefresh = true;
- StaticSprite::update();
}
AsScene1201Tape::AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash)
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index b623af0..409e554 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -370,7 +370,7 @@ SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
void SsScene1302Fence::update() {
handleSpriteUpdate();
- StaticSprite::update();
+ updatePosition();
}
uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1533,7 +1533,7 @@ SsScene1308Number::SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int i
setVisible(false);
_x = _spriteResource.getPosition().x + index * 20;
- StaticSprite::update();
+ updatePosition();
}
AsScene1308Mouse::AsScene1308Mouse(NeverhoodEngine *vm)
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index cedb283..0693417 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -791,7 +791,7 @@ SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHas
: StaticSprite(vm, fileHash, surfacePriority) {
SetFilterY(&Sprite::defFilterY);
- SetUpdateHandler(&StaticSprite::update);
+ SetUpdateHandler(&StaticSprite::updatePosition);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index f6dea96..df64e19 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -145,7 +145,7 @@ SsScene1705WallSymbol::SsScene1705WallSymbol(NeverhoodEngine *vm, uint32 fileHas
_x = _spriteResource.getPosition().x + symbolIndex * 30;
_y = _spriteResource.getPosition().y + 160;
- StaticSprite::update();
+ updatePosition();
}
SsScene1705Tape::SsScene1705Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 tapeIndex, int surfacePriority, int16 x, int16 y, uint32 fileHash)
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index fb98c2e..da02243 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -455,15 +455,8 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907
: StaticSprite(vm, 1400), _parentScene(parentScene), _asScene1907Symbol(asScene1907Symbol),
_countdown1(0) {
- _spriteResource.load2(0x64516424);
- createSurface(1400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(0x64516424, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 1400);
setVisible(false);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- updateBounds();
- _needRefresh = true;
loadSound(0, 0x44061000);
SetUpdateHandler(&SsScene1907UpDownButton::update);
SetMessageHandler(&SsScene1907UpDownButton::handleMessage);
@@ -476,7 +469,7 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907
}
void SsScene1907UpDownButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
setVisible(false);
sendMessage(_parentScene, 0x2000, 0);
@@ -490,7 +483,7 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam
if (_countdown1 == 0 && !_asScene1907Symbol->isMoving() && getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
setVisible(true);
_countdown1 = 4;
- StaticSprite::update();
+ updatePosition();
playSound(0);
}
messageResult = 1;
@@ -500,14 +493,14 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam
void SsScene1907UpDownButton::setToUpPosition() {
_y = _spriteResource.getPosition().y;
- Sprite::updateBounds();
- StaticSprite::update();
+ updateBounds();
+ updatePosition();
}
void SsScene1907UpDownButton::setToDownPosition() {
_y = _spriteResource.getPosition().y + 174;
- Sprite::updateBounds();
- StaticSprite::update();
+ updateBounds();
+ updatePosition();
}
AsScene1907WaterHint::AsScene1907WaterHint(NeverhoodEngine *vm)
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 879250a..cbd11b6 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -165,8 +165,7 @@ SsCommonFloorButton::SsCommonFloorButton(NeverhoodEngine *vm, Scene *parentScene
_soundFileHash = 0x44141000;
createSurface(1010, 61, 30);
if (_fileHash1) {
- load(_fileHash1, true, true);
- StaticSprite::update();
+ loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
} else
setVisible(false);
}
@@ -175,8 +174,7 @@ void SsCommonFloorButton::update() {
if (_countdown != 0 && (--_countdown == 0)) {
sendMessage(_parentScene, 0x1022, 1010);
if (_fileHash1) {
- load(_fileHash1, true, true);
- StaticSprite::update();
+ loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
} else
setVisible(false);
}
@@ -189,8 +187,7 @@ uint32 SsCommonFloorButton::handleMessage(int messageNum, const MessageParam &pa
sendMessage(_parentScene, 0x480B, 0);
setVisible(true);
sendMessage(_parentScene, 0x1022, 990);
- load(_fileHash2, true, true);
- StaticSprite::update();
+ loadSprite(_fileHash2, kSLFDefDrawOffset | kSLFDefPosition);
_countdown = 16;
playSound(0, _soundFileHash);
break;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 06cdc10..102704a 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -488,13 +488,9 @@ void AsScene2201Door::stCloseDoor() {
SsScene2201PuzzleCube::SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positionIndex, uint32 cubeIndex)
: StaticSprite(vm, 900) {
- _spriteResource.load2(kSsScene2201PuzzleCubeFileHashes[cubeIndex]);
createSurface(100, 16, 16);
- _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
- _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = kSsScene2201PuzzleCubePoints[positionIndex].x;
- _y = kSsScene2201PuzzleCubePoints[positionIndex].y;
- _needRefresh = true;
+ loadSprite(kSsScene2201PuzzleCubeFileHashes[cubeIndex], kSLFCenteredDrawOffset | kSLFSetPosition, 0,
+ kSsScene2201PuzzleCubePoints[positionIndex].x, kSsScene2201PuzzleCubePoints[positionIndex].y);
}
Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -670,32 +666,26 @@ static const uint32 kSsScene2202PuzzleTileFileHashes2[] = {
SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value)
: StaticSprite(vm, 900), _parentScene(parentScene), _value(value), _tileIndex(tileIndex), _isMoving(false) {
-
+
+ int surfacePriority;
+
SetUpdateHandler(&SsScene2202PuzzleTile::update);
SetMessageHandler(&SsScene2202PuzzleTile::handleMessage);
- _spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
- if (_tileIndex >= 0 && _tileIndex <= 2) {
- createSurface(100, 128, 128);
- } else if (_tileIndex >= 3 && _tileIndex <= 5) {
- createSurface(300, 128, 128);
- } else {
- createSurface(500, 128, 128);
- }
- _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
- _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
- _x = kSsScene2202PuzzleTilePoints[_tileIndex].x;
- _y = kSsScene2202PuzzleTilePoints[_tileIndex].y;
- updateBounds();
- _needRefresh = true;
- StaticSprite::update();
+ if (_tileIndex >= 0 && _tileIndex <= 2)
+ surfacePriority = 100;
+ else if (_tileIndex >= 3 && _tileIndex <= 5)
+ surfacePriority = 300;
+ else
+ surfacePriority = 500;
+ loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0,
+ kSsScene2202PuzzleTilePoints[_tileIndex].x, kSsScene2202PuzzleTilePoints[_tileIndex].y);
loadSound(0, 0x40958621);
loadSound(1, 0x51108241);
}
void SsScene2202PuzzleTile::update() {
handleSpriteUpdate();
- StaticSprite::update();
+ updatePosition();
}
uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -787,10 +777,7 @@ void SsScene2202PuzzleTile::suMoveTileY() {
void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
- _spriteResource.load2(kSsScene2202PuzzleTileFileHashes1[_value]);
- _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
- _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _needRefresh = true;
+ loadSprite(kSsScene2202PuzzleTileFileHashes1[_value], kSLFCenteredDrawOffset);
setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1);
setSubVar(VA_CUBE_POSITIONS, newTileIndex, (uint32)_value);
@@ -866,10 +853,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
void SsScene2202PuzzleTile::stopMoving() {
- _spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]);
- _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
- _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _needRefresh = true;
+ loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset);
SetSpriteUpdate(NULL);
_isMoving = false;
sendMessage(_parentScene, 0x2002, _tileIndex);
@@ -1215,25 +1199,16 @@ SsScene2205DoorFrame::SsScene2205DoorFrame(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
SetMessageHandler(&SsScene2205DoorFrame::handleMessage);
- _spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
createSurface(1100, 45, 206);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0, kSLFDefDrawOffset | kSLFDefPosition);
}
uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
- _spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0, kSLFDefDrawOffset | kSLFDefPosition);
+ break;
}
return messageResult;
}
@@ -1388,7 +1363,7 @@ AsScene2206DoorSpikes::AsScene2206DoorSpikes(NeverhoodEngine *vm, uint32 fileHas
void AsScene2206DoorSpikes::update() {
handleSpriteUpdate();
- StaticSprite::update();
+ updatePosition();
}
uint32 AsScene2206DoorSpikes::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1440,7 +1415,7 @@ AsScene2206Platform::AsScene2206Platform(NeverhoodEngine *vm, uint32 fileHash)
void AsScene2206Platform::update() {
handleSpriteUpdate();
- StaticSprite::update();
+ updatePosition();
}
uint32 AsScene2206Platform::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1974,7 +1949,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
_x = 330;
_y = 246 + index * 50;
- StaticSprite::update();
+ updatePosition();
}
Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index a017c11..ccc47d0 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -763,8 +763,7 @@ void Scene2402::update() {
if (_countdown != 0 && (--_countdown) == 0) {
if (_pipeStatus >= 10) {
sendMessage(_asDoor, 0x4808, 0);
- _ssDoorFrame->load(0x00B415E0, true, true);
- _ssDoorFrame->update();
+ _ssDoorFrame->loadSprite(0x00B415E0, kSLFDefDrawOffset | kSLFDefPosition);
} else if (_pipeStatus >= 5) {
_countdown = 8;
playPipeSound(kScene2402FileHashes[getSubVar(VA_CURR_WATER_PIPES_LEVEL, _pipeStatus - 5)]);
@@ -791,8 +790,7 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2001:
- _ssDoorFrame->load(0x406C0AE0, true, true);
- _ssDoorFrame->update();
+ _ssDoorFrame->loadSprite(0x406C0AE0, kSLFDefDrawOffset | kSLFDefPosition);
break;
case 0x480B:
if (sender == _ssButton) {
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 8345a8c..de6e19e 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -485,14 +485,7 @@ void Scene2501::updateKlaymanCliprect() {
SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm)
: StaticSprite(vm, 1400), _countdown(0), _isSoundPlaying(false) {
- _spriteResource.load2(0x070220D9);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _collisionBoundsOffset = _drawOffset;
- updateBounds();
- _needRefresh = true;
+ loadSprite(0x070220D9, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
loadSound(0, 0x4600204C);
loadSound(1, 0x408C0034);
@@ -503,7 +496,7 @@ SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm)
}
void SsScene2504Button::update() {
- StaticSprite::update();
+ updatePosition();
if (_isSoundPlaying && !isSoundPlaying(0) && !isSoundPlaying(1)) {
playSound(3);
setVisible(false);
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 7008a90..d1b95be 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -208,30 +208,19 @@ void Module2600::updateScene() {
SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
: StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) {
- _spriteResource.load2(0x825A6923);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(0x825A6923, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
if (!getGlobalVar(V_WATER_RUNNING))
setVisible(false);
-
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- updateBounds();
- _needRefresh = true;
-
loadSound(0, 0x10267160);
loadSound(1, 0x7027FD64);
loadSound(2, 0x44043000);
loadSound(3, 0x44045000);
-
SetUpdateHandler(&SsScene2609Button::update);
SetMessageHandler(&SsScene2609Button::handleMessage);
-
}
void SsScene2609Button::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown == 0)) {
if (getGlobalVar(V_WATER_RUNNING)) {
setGlobalVar(V_WATER_RUNNING, 0);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index c5524fa..1e02e64 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -510,13 +510,7 @@ static const NPoint kCarShadowOffsets[] = {
SsCommonTrackShadowBackground::SsCommonTrackShadowBackground(NeverhoodEngine *vm, uint32 fileHash)
: StaticSprite(vm, 0) {
- _spriteResource.load2(fileHash);
- createSurface(0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(fileHash, kSLFDefDrawOffset | kSLFDefPosition, 0);
}
AsCommonCarShadow::AsCommonCarShadow(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index)
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 53ae40c..c42e033 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -407,10 +407,9 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2801::handleMessage);
SetUpdateHandler(&Scene::update);
- if (getGlobalVar(V_RADIO_ENABLED) == 0) {
- // Display the disabled radio; only possible when the left door is open
+ // Display the disabled radio; only possible when the left door is open
+ if (!getGlobalVar(V_RADIO_ENABLED))
insertStaticSprite(0x0001264C, 100);
- }
if (which < 0) {
insertKlayman<KmScene2801>(194, 430);
@@ -1013,34 +1012,24 @@ void Scene2803::changeBackground() {
_background->load(0x412A423E);
_palette->addPalette(0x412A423E, 0, 256, 0);
_palette->addBasePalette(0x412A423E, 0, 256, 0);
- _sprite3->load(0xA40EF2FB, false, false);
- _sprite3->update();
- _sprite4->load(0x0C03AA23, false, false);
- _sprite4->update();
- _sprite5->load(0x2A822E2E, false, false);
- _sprite5->update();
- _sprite6->load(0x2603A202, false, false);
- _sprite6->update();
- _sprite7->load(0x24320220, false, false);
- _sprite7->update();
+ _sprite3->loadSprite(0xA40EF2FB);
+ _sprite4->loadSprite(0x0C03AA23);
+ _sprite5->loadSprite(0x2A822E2E);
+ _sprite6->loadSprite(0x2603A202);
+ _sprite7->loadSprite(0x24320220);
_mouseCursor->load(0xA423A41A);
_mouseCursor->updateCursor();
- _sprite8->load(0x3C42022F, false, false);
- _sprite8->update();
- _sprite9->load(0x341A0237, false, false);
- _sprite9->update();
+ _sprite8->loadSprite(0x3C42022F);
+ _sprite9->loadSprite(0x341A0237);
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
- _asTestTubeOne->load(0x66121222, false, false);
- _asTestTubeOne->update();
+ _asTestTubeOne->loadSprite(0x66121222);
} else
sendMessage(_asTestTubeOne, 0x2000, 0);
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
- _asTestTubeTwo->load(0x64330236, false, false);
- _asTestTubeTwo->update();
+ _asTestTubeTwo->loadSprite(0x64330236);
}
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
- _asTestTubeThree->load(0x2E4A22A2, false, false);
- _asTestTubeThree->update();
+ _asTestTubeThree->loadSprite(0x2E4A22A2);
}
_sprite10->setVisible(true);
} else {
@@ -1048,34 +1037,24 @@ void Scene2803::changeBackground() {
_background->load(0x29800A01);
_palette->addPalette(0x29800A01, 0, 256, 0);
_palette->addBasePalette(0x29800A01, 0, 256, 0);
- _sprite3->load(0x234340A0, false, false);
- _sprite3->update();
- _sprite4->load(0x16202200, false, false);
- _sprite4->update();
- _sprite5->load(0x1030169A, false, false);
- _sprite5->update();
- _sprite6->load(0x1600A6A8, false, false);
- _sprite6->update();
- _sprite7->load(0xD0802EA0, false, false);
- _sprite7->update();
+ _sprite3->loadSprite(0x234340A0);
+ _sprite4->loadSprite(0x16202200);
+ _sprite5->loadSprite(0x1030169A);
+ _sprite6->loadSprite(0x1600A6A8);
+ _sprite7->loadSprite(0xD0802EA0);
_mouseCursor->load(0x00A05290);
_mouseCursor->updateCursor();
- _sprite8->load(0x108012C1, false, false);
- _sprite8->update();
- _sprite9->load(0x708072E0, false, false);
- _sprite9->update();
+ _sprite8->loadSprite(0x108012C1);
+ _sprite9->loadSprite(0x708072E0);
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
- _asTestTubeOne->load(0x50C027A8, false, false);
- _asTestTubeOne->update();
+ _asTestTubeOne->loadSprite(0x50C027A8);
} else
sendMessage(_asTestTubeOne, 0x2000, 1);
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
- _asTestTubeTwo->load(0xD48077A0, false, false);
- _asTestTubeTwo->update();
+ _asTestTubeTwo->loadSprite(0xD48077A0);
}
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
- _asTestTubeThree->load(0x30022689, false, false);
- _asTestTubeThree->update();
+ _asTestTubeThree->loadSprite(0x30022689);
}
_sprite10->setVisible(false);
}
@@ -1368,25 +1347,15 @@ void Scene2803Small::updatePaletteArea(bool instantly) {
SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene)
: StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene) {
- if (getGlobalVar(V_SHRINK_LIGHTS_ON))
- _spriteResource.load2(0x51A10202);
- else
- _spriteResource.load2(0x11814A21);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _collisionBoundsOffset = _drawOffset;
- updateBounds();
+ loadSprite(getGlobalVar(V_SHRINK_LIGHTS_ON) ? 0x51A10202 : 0x11814A21, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
- _needRefresh = true;
SetUpdateHandler(&SsScene2804RedButton::update);
SetMessageHandler(&SsScene2804RedButton::handleMessage);
loadSound(0, 0x44241240);
}
void SsScene2804RedButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown) == 0) {
setVisible(false);
}
@@ -1411,14 +1380,8 @@ uint32 SsScene2804RedButton::handleMessage(int messageNum, const MessageParam &p
SsScene2804LightCoil::SsScene2804LightCoil(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
- _spriteResource.load2(0x8889B008);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(0x8889B008, kSLFDefDrawOffset | kSLFDefPosition, 400);
setVisible(false);
- _needRefresh = true;
- StaticSprite::update();
SetMessageHandler(&SsScene2804LightCoil::handleMessage);
}
@@ -1427,12 +1390,12 @@ uint32 SsScene2804LightCoil::handleMessage(int messageNum, const MessageParam &p
switch (messageNum) {
case 0x2002:
setVisible(true);
- StaticSprite::update();
+ updatePosition();
messageResult = 1;
break;
case 0x2003:
setVisible(false);
- StaticSprite::update();
+ updatePosition();
messageResult = 1;
break;
}
@@ -1442,14 +1405,8 @@ uint32 SsScene2804LightCoil::handleMessage(int messageNum, const MessageParam &p
SsScene2804LightTarget::SsScene2804LightTarget(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
- _spriteResource.load2(0x06092132);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(0x06092132, kSLFDefDrawOffset | kSLFDefPosition, 400);
setVisible(false);
- _needRefresh = true;
- StaticSprite::update();
SetMessageHandler(&SsScene2804LightTarget::handleMessage);
}
@@ -1458,12 +1415,12 @@ uint32 SsScene2804LightTarget::handleMessage(int messageNum, const MessageParam
switch (messageNum) {
case 0x2004:
setVisible(true);
- StaticSprite::update();
+ updatePosition();
messageResult = 1;
break;
case 0x2005:
setVisible(false);
- StaticSprite::update();
+ updatePosition();
messageResult = 1;
break;
}
@@ -1473,34 +1430,22 @@ uint32 SsScene2804LightTarget::handleMessage(int messageNum, const MessageParam
SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
- _spriteResource.load2(0x211003A0);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(0x211003A0, kSLFDefDrawOffset | kSLFDefPosition, 400);
setVisible(false);
- _needRefresh = true;
- StaticSprite::update();
loadSound(0, 0xCB36BA54);
}
void SsScene2804Flash::show() {
setVisible(true);
- StaticSprite::update();
+ updatePosition();
playSound(0);
}
SsScene2804BeamCoilBody::SsScene2804BeamCoilBody(NeverhoodEngine *vm)
: StaticSprite(vm, 900) {
- _spriteResource.load2(0x9A816000);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(0x9A816000, kSLFDefDrawOffset | kSLFDefPosition, 400);
setVisible(false);
- _needRefresh = true;
- StaticSprite::update();
}
AsScene2804CrystalWaves::AsScene2804CrystalWaves(NeverhoodEngine *vm, uint crystalIndex)
@@ -1635,26 +1580,16 @@ SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene280
0x5008292B
};
- if (getGlobalVar(V_SHRINK_LIGHTS_ON))
- _spriteResource.load2(kSsScene2804CrystalButtonFileHashes1[crystalIndex]);
- else
- _spriteResource.load2(kSsScene2804CrystalButtonFileHashes2[crystalIndex]);
-
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _collisionBoundsOffset = _drawOffset;
- updateBounds();
+ loadSprite(getGlobalVar(V_SHRINK_LIGHTS_ON) ? kSsScene2804CrystalButtonFileHashes1[crystalIndex] : kSsScene2804CrystalButtonFileHashes2[crystalIndex],
+ kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
loadSound(0, 0x44045140);
- _needRefresh = true;
SetUpdateHandler(&SsScene2804CrystalButton::update);
SetMessageHandler(&SsScene2804CrystalButton::handleMessage);
}
void SsScene2804CrystalButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown) == 0) {
setVisible(false);
}
@@ -1721,7 +1656,7 @@ uint32 AsScene2804BeamCoil::handleMessage(int messageNum, const MessageParam &pa
void AsScene2804BeamCoil::show() {
_ssBeamCoilBody->setVisible(true);
- // TODO _ssBeamCoilBody->update(); -> show()
+ // TODO _ssBeamCoilBody->updatePosition(); -> show()
setVisible(true);
startAnimation(0x00494891, 0, -1);
playSound(0);
@@ -1734,7 +1669,7 @@ void AsScene2804BeamCoil::hide() {
SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
setVisible(false);
_ssBeamCoilBody->setVisible(false);
- // TODO _ssBeamCoilBody->update(); -> hide()
+ // TODO _ssBeamCoilBody->updatePosition(); -> hide()
_vm->_soundMan->stopSound(0xEF56B094);
}
@@ -2242,22 +2177,14 @@ SsScene2808Dispenser::SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentSce
: StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _testTubeSetNum(testTubeSetNum),
_testTubeIndex(testTubeIndex) {
- _spriteResource.load2(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex]);
- createSurface(1500, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _collisionBoundsOffset = _drawOffset;
- updateBounds();
+ loadSprite(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex], kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 1500);
+ setVisible(false);
SetUpdateHandler(&SsScene2808Dispenser::update);
SetMessageHandler(&SsScene2808Dispenser::handleMessage);
- setVisible(false);
- _needRefresh = true;
- StaticSprite::update();
}
void SsScene2808Dispenser::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown) == 0) {
setVisible(false);
}
@@ -2276,7 +2203,7 @@ uint32 SsScene2808Dispenser::handleMessage(int messageNum, const MessageParam &p
void SsScene2808Dispenser::startCountdown(int index) {
setVisible(true);
- StaticSprite::update();
+ updatePosition();
if (_testTubeSetNum == 0) {
_countdown = kClass428Countdowns1[index];
} else {
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index ae74b14..4b8f28e 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -254,24 +254,18 @@ static const uint32 kSsScene2901BigButtonFileHashes[] = {
SsScene2901LocationButton::SsScene2901LocationButton(NeverhoodEngine *vm, Scene *parentScene, int which, uint index)
: StaticSprite(vm, 900), _parentScene(parentScene), _index(index), _countdown1(0) {
- _spriteResource.load2(kSsScene2901LocationButtonFileHashes[which * 6 + index]);
- createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _collisionBounds.x1 = kSsScene2901LocationButtonPoints[_index].x - 25;
- _collisionBounds.y1 = kSsScene2901LocationButtonPoints[_index].y - 25;
- _collisionBounds.x2 = kSsScene2901LocationButtonPoints[_index].x + 25;
- _collisionBounds.y2 = kSsScene2901LocationButtonPoints[_index].y + 25;
+ const NPoint &pt = kSsScene2901LocationButtonPoints[_index];
+
+ loadSprite(kSsScene2901LocationButtonFileHashes[which * 6 + index], kSLFDefDrawOffset | kSLFDefPosition, 800);
+ _collisionBounds.set(pt.x - 25, pt.y - 25, pt.x + 25, pt.y + 25);
setVisible(false);
- _needRefresh = true;
loadSound(0, 0x440430C0);
SetUpdateHandler(&SsScene2901LocationButton::update);
SetMessageHandler(&SsScene2901LocationButton::handleMessage);
}
void SsScene2901LocationButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown1 != 0 && (--_countdown1) == 0) {
setVisible(false);
}
@@ -296,57 +290,41 @@ uint32 SsScene2901LocationButton::handleMessage(int messageNum, const MessagePar
SsScene2901LocationButtonLight::SsScene2901LocationButtonLight(NeverhoodEngine *vm, int which, uint index)
: StaticSprite(vm, 900), _index(index) {
- _spriteResource.load2(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index]);
- createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index], kSLFDefDrawOffset | kSLFDefPosition, 900);
setVisible(false);
- _needRefresh = true;
loadSound(0, kSsScene2901LocationButtonLightFileHashes2[_index]);
}
void SsScene2901LocationButtonLight::show() {
playSound(0);
setVisible(true);
- StaticSprite::update();
+ updatePosition();
}
void SsScene2901LocationButtonLight::hide() {
setVisible(false);
- StaticSprite::update();
+ updatePosition();
}
SsScene2901BrokenButton::SsScene2901BrokenButton(NeverhoodEngine *vm, int which)
: StaticSprite(vm, 900) {
- _spriteResource.load2(kSsScene2901BrokenButtonFileHashes[which]);
- createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(kSsScene2901BrokenButtonFileHashes[which], kSLFDefDrawOffset | kSLFDefPosition, 900);
}
SsScene2901BigButton::SsScene2901BigButton(NeverhoodEngine *vm, Scene *parentScene, int which)
: StaticSprite(vm, 900), _parentScene(parentScene), _which(which), _countdown1(0) {
-
- _spriteResource.load2(kSsScene2901BigButtonFileHashes[which]);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+
+ loadSprite(kSsScene2901BigButtonFileHashes[which], kSLFDefDrawOffset | kSLFDefPosition, 400);
_collisionBounds.set(62, 94, 322, 350);
setVisible(false);
- _needRefresh = true;
loadSound(0, 0xF3D420C8);
SetUpdateHandler(&SsScene2901BigButton::update);
SetMessageHandler(&SsScene2901BigButton::handleMessage);
}
void SsScene2901BigButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown1 != 0 && (--_countdown1) == 0) {
setVisible(false);
sendMessage(_parentScene, 0x2000, 0);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index cb4faaf..713d72d 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -471,22 +471,15 @@ static const uint32 kSsScene3009SymbolArrowFileHashes2[] = {
SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene)
: StaticSprite(vm, 1400), _parentScene(parentScene), _isClicked(false) {
- _spriteResource.load2(0x120B24B0);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
+ loadSprite(0x120B24B0, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
- updateBounds();
- _needRefresh = true;
SetUpdateHandler(&SsScene3009FireCannonButton::update);
SetMessageHandler(&SsScene3009FireCannonButton::handleMessage);
loadSound(0, 0x3901B44F);
}
void SsScene3009FireCannonButton::update() {
- StaticSprite::update();
+ updatePosition();
if (_isClicked && !isSoundPlaying(0)) {
sendMessage(_parentScene, 0x2000, 0);
setVisible(false);
@@ -511,17 +504,11 @@ uint32 SsScene3009FireCannonButton::handleMessage(int messageNum, const MessageP
SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index)
: StaticSprite(vm, 1400), _blinkCountdown(0) {
- _spriteResource.load2(kSsScene3009SymbolEdgesFileHashes[index]);
- createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _needRefresh = true;
- if (getGlobalVar(V_ROBOT_HIT)) {
+ loadSprite(kSsScene3009SymbolEdgesFileHashes[index], kSLFDefDrawOffset | kSLFDefPosition, 600);
+ if (getGlobalVar(V_ROBOT_HIT))
hide();
- } else {
+ else
startBlinking();
- }
SetUpdateHandler(&SsScene3009SymbolEdges::update);
}
@@ -532,7 +519,7 @@ void SsScene3009SymbolEdges::update() {
} else {
setVisible(false);
}
- StaticSprite::update();
+ updatePosition();
_blinkCountdown = 3;
_blinkToggle = !_blinkToggle;
}
@@ -540,19 +527,19 @@ void SsScene3009SymbolEdges::update() {
void SsScene3009SymbolEdges::show() {
setVisible(true);
- StaticSprite::update();
+ updatePosition();
_blinkCountdown = 0;
}
void SsScene3009SymbolEdges::hide() {
setVisible(false);
- StaticSprite::update();
+ updatePosition();
_blinkCountdown = 0;
}
void SsScene3009SymbolEdges::startBlinking() {
setVisible(true);
- StaticSprite::update();
+ updatePosition();
_blinkCountdown = 3;
_blinkToggle = true;
}
@@ -560,18 +547,13 @@ void SsScene3009SymbolEdges::startBlinking() {
SsScene3009TargetLine::SsScene3009TargetLine(NeverhoodEngine *vm, int index)
: StaticSprite(vm, 1400) {
- _spriteResource.load2(kSsScene3009TargetLineFileHashes[index]);
- createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(kSsScene3009TargetLineFileHashes[index], kSLFDefDrawOffset | kSLFDefPosition, 600);
setVisible(false);
- _needRefresh = true;
}
void SsScene3009TargetLine::show() {
setVisible(true);
- StaticSprite::update();
+ updatePosition();
}
SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSymbol, int index)
@@ -579,14 +561,13 @@ SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSy
_incrDecr = _index % 2;
- _spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]);
createSurface(1200, 33, 31);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
+ loadSprite(kSsScene3009SymbolArrowFileHashes2[_index], kSLFDefPosition);
_drawOffset.set(0, 0, 33, 31);
_collisionBoundsOffset = _drawOffset;
updateBounds();
_needRefresh = true;
+
SetUpdateHandler(&SsScene3009SymbolArrow::update);
SetMessageHandler(&SsScene3009SymbolArrow::handleMessage);
loadSound(0, 0x2C852206);
@@ -598,11 +579,9 @@ void SsScene3009SymbolArrow::hide() {
}
void SsScene3009SymbolArrow::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown == 0)) {
- _spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]);
- _needRefresh = true;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(kSsScene3009SymbolArrowFileHashes2[_index], kSLFDefDrawOffset);
}
}
@@ -612,9 +591,7 @@ uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam
case 0x1011:
if (_enabled && _countdown == 0) {
_countdown = 2;
- _spriteResource.load2(kSsScene3009SymbolArrowFileHashes1[_index]);
- _needRefresh = true;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ loadSprite(kSsScene3009SymbolArrowFileHashes1[_index], kSLFDefDrawOffset);
playSound(0);
sendMessage(_asSymbol, 0x2005, _incrDecr);
}
@@ -1063,22 +1040,13 @@ static const uint32 kAsScene3010DeadBoltFileHashes1[] = {
SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene *parentScene, int buttonIndex, int initCountdown, bool initDisabled)
: StaticSprite(vm, 900), _parentScene(parentScene), _buttonLocked(false), _countdown1(0), _countdown2(0), _buttonIndex(buttonIndex) {
- NDimensions dimensions1, dimensions2;
-
_buttonEnabled = getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[_buttonIndex]) != 0;
- _spriteResource.load2(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]);
- dimensions1 = _spriteResource.getDimensions();
- _spriteResource.load2(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
- dimensions2 = _spriteResource.getDimensions();
- createSurface(400,
- MAX(dimensions1.width, dimensions2.width),
- MAX(dimensions1.height, dimensions2.height));
+ createSurface(400, 88, 95);
setSprite(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]);
- if (initDisabled) {
+ if (initDisabled)
disableButton();
- } else if (_buttonEnabled) {
+ else if (_buttonEnabled)
_countdown1 = initCountdown * 12 + 1;
- }
loadSound(0, 0xF4217243);
loadSound(1, 0x44049000);
loadSound(2, 0x6408107E);
@@ -1116,7 +1084,7 @@ uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessagePar
sendMessage(_parentScene, 0x2002, _buttonIndex);
}
_needRefresh = true;
- StaticSprite::update();
+ updatePosition();
}
messageResult = 1;
break;
@@ -1131,14 +1099,7 @@ void SsScene3010DeadBoltButton::disableButton() {
}
void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) {
- _spriteResource.load(fileHash);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
- updateBounds();
- _needRefresh = true;
- StaticSprite::update();
+ loadSprite(fileHash, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset);
}
void SsScene3010DeadBoltButton::setCountdown(int count) {
@@ -1397,26 +1358,15 @@ static const uint32 kAsScene3011SymbolFileHashes[] = {
SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bool flag)
: StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) {
- if (flag) {
- _spriteResource.load2(0x11282020);
- } else {
- _spriteResource.load2(0x994D0433);
- }
- loadSound(0, 0x44061000);
- createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- _collisionBoundsOffset = _drawOffset;
+ loadSprite(flag ? 0x11282020 : 0x994D0433, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
- updateBounds();
- _needRefresh = true;
+ loadSound(0, 0x44061000);
SetUpdateHandler(&SsScene3011Button::update);
SetMessageHandler(&SsScene3011Button::handleMessage);
}
void SsScene3011Button::update() {
- StaticSprite::update();
+ updatePosition();
if (_countdown != 0 && (--_countdown == 0)) {
setVisible(false);
}
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 40b651e..d034783 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -120,42 +120,43 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
}
-StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
+StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y)
: Sprite(vm, 0), _spriteResource(vm) {
- init(calcHash(filename), surfacePriority, x, y, width, height);
-}
-
-StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
- : Sprite(vm, 0), _spriteResource(vm) {
-
- init(fileHash, surfacePriority, x, y, width, height);
-}
-
-void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) {
-
_spriteResource.load2(fileHash);
-
- if (width == 0)
- width = _spriteResource.getDimensions().width;
-
- if (height == 0)
- height = _spriteResource.getDimensions().height;
-
- createSurface(surfacePriority, width, height);
-
+ createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = x == kDefPosition ? _spriteResource.getPosition().x : x;
_y = y == kDefPosition ? _spriteResource.getPosition().y : y;
-
- _drawOffset.set(0, 0, width, height);
-
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_needRefresh = true;
+ updatePosition();
+}
- update();
-
+void StaticSprite::loadSprite(uint32 fileHash, uint flags, int surfacePriority, int16 x, int16 y) {
+ _spriteResource.load2(fileHash);
+ if (!_surface)
+ createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ if (flags & kSLFDefDrawOffset)
+ _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ else if (flags & kSLFCenteredDrawOffset)
+ _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2),
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ if (flags & kSLFDefPosition) {
+ _x = _spriteResource.getPosition().x;
+ _y = _spriteResource.getPosition().y;
+ } else if (flags & kSLFSetPosition) {
+ _x = x;
+ _y = y;
+ }
+ if (flags & kSLFDefCollisionBoundsOffset) {
+ _collisionBoundsOffset = _drawOffset;
+ updateBounds();
+ }
+ _needRefresh = true;
+ updatePosition();
}
-void StaticSprite::update() {
+void StaticSprite::updatePosition() {
if (!_surface)
return;
@@ -179,23 +180,6 @@ void StaticSprite::update() {
}
-void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) {
-
- _spriteResource.load2(fileHash);
-
- if (dimensions) {
- _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
- }
-
- if (position) {
- _x = _spriteResource.getPosition().x;
- _y = _spriteResource.getPosition().y;
- }
-
- _needRefresh = true;
-
-}
-
// AnimatedSprite
AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, int objectPriority)
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 7e07f3a..80da176 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -93,16 +93,22 @@ protected:
}
};
+enum {
+ kSLFDefDrawOffset = 1 << 0,
+ kSLFCenteredDrawOffset = 1 << 1,
+ kSLFDefPosition = 1 << 2,
+ kSLFSetPosition = 1 << 3,
+ kSLFDefCollisionBoundsOffset = 1 << 4
+};
+
class StaticSprite : public Sprite {
public:
StaticSprite(NeverhoodEngine *vm, int objectPriority);
- StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
- StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
- void load(uint32 fileHash, bool dimensions, bool position);
- void update();
+ StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition);
+ void loadSprite(uint32 fileHash, uint flags = 0, int surfacePriority = 0, int16 x = kDefPosition, int16 y = kDefPosition);
+ void updatePosition();
protected:
SpriteResource _spriteResource;
- void init(uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
};
#define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback)
Commit: 4d7610f69d3395e319c56b822197ea6f6c87be96
https://github.com/scummvm/scummvm/commit/4d7610f69d3395e319c56b822197ea6f6c87be96
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1000:
- Rename stuff
- Remove superfluous braces
- Add a comment to the "which" code in each scene
- Use a seperate _sceneNum instead of _vm->gameState().sceneNum
- Remove code related to unused resource preloading and debug messages
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module3000.cpp
engines/neverhood/module3000.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index f9e734d..350dd76 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -289,9 +289,11 @@ void GameModule::startup() {
setGlobalVar(V_TNT_DUMMY_BUILT, 1);
setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
setGlobalVar(V_TV_JOKE_TOLD, 1);
+ /*
// Give all disks
for (int i = 0; i < 20; i++)
setSubVar(VA_IS_TAPE_INSERTED, i, 1);
+ */
setSubVar(VA_IS_KEY_INSERTED, 0, 1);
setSubVar(VA_IS_KEY_INSERTED, 1, 1);
setSubVar(VA_IS_KEY_INSERTED, 2, 1);
@@ -306,9 +308,16 @@ void GameModule::startup() {
// <<<DEBUG
#if 1
- _vm->gameState().which = 0;
- _vm->gameState().sceneNum = 2;
- createModule(2800, -1);
+ /*
+ //DEBUG>>>
+ createScene(_vm->gameState().sceneNum, _vm->gameState().which);
+ return;
+ //DEBUG<<<
+ */
+
+ _vm->gameState().which = 1;
+ _vm->gameState().sceneNum = 3;
+ createModule(1000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index ac6830e..c7c3fb2 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -50,25 +50,30 @@ Module1000::~Module1000() {
void Module1000::createScene(int sceneNum, int which) {
debug("Module1000::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_vm->_soundMan->startMusic(0x061880C6, 0, 0);
_childObject = new Scene1001(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->startMusic(0x061880C6, 0, 0);
_childObject = new Scene1002(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->startMusic(0x061880C6, 0, 0);
createStaticScene(0xC084110C, 0x41108C00);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_vm->_soundMan->stopMusic(0x061880C6, 0, 2);
_childObject = new Scene1004(_vm, this, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->stopMusic(0x061880C6, 0, 0);
_vm->_soundMan->startMusic(_musicFileHash, 0, 0);
_childObject = new Scene1005(_vm, this, which);
@@ -80,7 +85,7 @@ void Module1000::createScene(int sceneNum, int which) {
void Module1000::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (_moduleResult == 2)
createScene(2, 0);
@@ -209,11 +214,10 @@ uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x00352100) {
+ if (param.asInteger() == 0x00352100)
sendMessage(_asDoor, 0x2000, 0);
- } else if (param.asInteger() == 0x0A1A0109) {
+ else if (param.asInteger() == 0x0A1A0109)
playSound(0, 0x66410886);
- }
break;
case 0x2000:
startAnimation(0x022C90D4, 1, -1);
@@ -240,9 +244,8 @@ uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x0E0A1410) {
+ if (param.asInteger() == 0x0E0A1410)
playSound(0, 0x60803F10);
- }
break;
case 0x2001:
startAnimation(0xC68C2299, 0, -1);
@@ -273,11 +276,10 @@ uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x00C0C444) {
+ if (param.asInteger() == 0x00C0C444)
sendMessage(_parentScene, 0x480F, 0);
- } else if (param.asInteger() == 0xC41A02C0) {
+ else if (param.asInteger() == 0xC41A02C0)
playSound(0, 0x40581882);
- }
break;
case 0x1011:
sendMessage(_parentScene, 0x4826, 0);
@@ -311,9 +313,8 @@ SsCommonButtonSprite::SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentSce
}
void SsCommonButtonSprite::update() {
- if (_countdown != 0 && (--_countdown) == 0) {
+ if (_countdown != 0 && (--_countdown) == 0)
setVisible(false);
- }
}
uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -330,7 +331,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
}
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule, true), _asDoor(NULL), _asWindow(NULL) {
Sprite *tempSprite;
@@ -342,14 +343,17 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x6520A400);
if (which < 0) {
+ // Restoring game
setRectList(0x004B49F0);
insertKlayman<KmScene1001>(200, 433);
setMessageList(0x004B4888);
} else if (which == 1) {
+ // Klaymen entering from the right
setRectList(0x004B49F0);
insertKlayman<KmScene1001>(640, 433);
setMessageList(0x004B4898);
} else if (which == 2) {
+ // Klaymen returning from looking through the window
setRectList(0x004B49F0);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1001>(390, 433);
@@ -359,6 +363,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
}
setMessageList(0x004B4970);
} else {
+ // Klaymen sleeping
setRectList(0x004B4A00);
insertKlayman<KmScene1001>(200, 433);
setMessageList(0x004B4890);
@@ -368,11 +373,9 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
- if (getGlobalVar(V_DOOR_BUSTED) == 0) {
+ if (!getGlobalVar(V_DOOR_BUSTED)) {
_asDoor = insertSprite<AsScene1001Door>();
_asDoor->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
- } else {
- _asDoor = NULL;
}
_asLever = insertSprite<AsScene1001Lever>(this, 150, 433, 1);
@@ -382,12 +385,10 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
- if (getGlobalVar(V_WINDOW_OPEN) == 0) {
+ if (!getGlobalVar(V_WINDOW_OPEN)) {
tempSprite = insertStaticSprite(0x8C066150, 200);
_asWindow = insertSprite<AsScene1001Window>();
_asWindow->setClipRect(tempSprite->getDrawRect());
- } else {
- _asWindow = NULL;
}
_asHammer = insertSprite<AsScene1001Hammer>(_asDoor);
@@ -399,21 +400,9 @@ Scene1001::~Scene1001() {
}
uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug("Scene1001::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x == 0 && getGlobalVar(V_DEBUG)) {
- leaveScene(0);
- }
- break;
- case 0x000D:
- if (param.asInteger() == 0x188B2105) {
- leaveScene(0);
- messageResult = 1;
- }
- break;
case 0x100D:
if (param.asInteger() == 0x00342624) {
sendEntityMessage(_klayman, 0x1014, _asLever);
@@ -440,14 +429,10 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
setRectList(0x004B49F0);
break;
case 0x480B:
- if (_asWindow) {
- sendMessage(_asWindow, 0x2001, 0);
- }
+ sendMessage(_asWindow, 0x2001, 0);
break;
case 0x480F:
- if (_asHammer) {
- sendMessage(_asHammer, 0x2000, 0);
- }
+ sendMessage(_asHammer, 0x2000, 0);
break;
}
return messageResult;
@@ -455,14 +440,14 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1002
-AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _flag1(flag1) {
+AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool isSpecial, int16 x, int16 y, int16 clipY1, bool isRingLow)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isSpecial(isSpecial) {
SetUpdateHandler(&AsScene1002Ring::update);
- if (flag1) {
+ if (_isSpecial) {
createSurface(990, 68, 314);
- if (flag2) {
+ if (isRingLow) {
startAnimation(0x04103090, 0, -1);
SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
} else {
@@ -485,8 +470,8 @@ AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool f
}
void AsScene1002Ring::update() {
- AnimatedSprite::updateAnim();
- AnimatedSprite::updatePosition();
+ updateAnim();
+ updatePosition();
}
uint32 AsScene1002Ring::hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -496,11 +481,7 @@ uint32 AsScene1002Ring::hmRingIdle(int messageNum, const MessageParam ¶m, En
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
sendMessage(_parentScene, 0x4806, 0);
SetMessageHandler(&AsScene1002Ring::hmRingPulled1);
- if (_flag1) {
- startAnimation(0x87502558, 0, -1);
- } else {
- startAnimation(0x80DD4010, 0, -1);
- }
+ startAnimation(_isSpecial ? 0x87502558 : 0x80DD4010, 0, -1);
break;
case 0x480F:
setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
@@ -522,13 +503,8 @@ uint32 AsScene1002Ring::hmRingPulled1(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- if (_flag1) {
- startAnimation(0x78D0A812, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
- } else {
- startAnimation(0xB85D2A10, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
- }
+ startAnimation(_isSpecial ? 0x78D0A812 : 0xB85D2A10, 0, -1);
+ SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
break;
case 0x4807:
sendMessage(_parentScene, 0x4807, 0);
@@ -586,9 +562,8 @@ uint32 AsScene1002Ring::hmRingReleased(int messageNum, const MessageParam ¶m
uint32 messageResult = hmRingIdle(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x05410F72) {
+ if (param.asInteger() == 0x05410F72)
playSound(0, 0x21EE40A9);
- }
break;
case 0x3002:
startAnimation(0xA85C4011, 0, -1);
@@ -684,25 +659,24 @@ uint32 AsScene1002BoxingGloveHitEffect::handleMessage(int messageNum, const Mess
AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *asScene1002BoxingGloveHitEffect)
: AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(asScene1002BoxingGloveHitEffect) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
- SetSpriteUpdate(&AsScene1002DoorSpy::suDoorSpy);
createSurface(800, 136, 147);
setClipRect(clipRect);
suDoorSpy();
loadSound(0, 0xC0C40298);
startAnimation(0x586C1D48, 0, 0);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
+ SetSpriteUpdate(&AsScene1002DoorSpy::suDoorSpy);
}
uint32 AsScene1002DoorSpy::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0xA61CA1C2) {
+ if (param.asInteger() == 0xA61CA1C2)
sendMessage(_asBoxingGloveHitEffect, 0x2004, 0);
- } else if (param.asInteger() == 0x14CE0620) {
+ else if (param.asInteger() == 0x14CE0620)
playSound(0);
- }
break;
case 0x2003:
stDoorSpyBoxingGlove();
@@ -757,11 +731,7 @@ SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene
void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
_fileHashes[0] = fileHash1;
_fileHashes[1] = fileHash2;
- if (_status == 2) {
- loadSprite(fileHash2, kSLFDefDrawOffset | kSLFDefPosition);
- } else {
- loadSprite(fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
- }
+ loadSprite(_status == 2 ? fileHash2 : fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
}
void SsCommonPressButton::update() {
@@ -795,16 +765,11 @@ uint32 SsCommonPressButton::handleMessage(int messageNum, const MessageParam &pa
return messageResult;
}
-AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool flag)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _flag(flag), _countdown(0) {
+AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool isSecond)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _isSecond(isSecond), _countdown(0) {
createSurface(995, 175, 195);
-
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-
- if (!_flag) {
+ if (!_isSecond) {
if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
setDoDeltaX(1);
_x = 366;
@@ -824,23 +789,23 @@ AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *par
stIdle();
}
}
-
_flags = 4;
+ SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
+ SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
void AsScene1002VenusFlyTrap::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
gotoNextState();
- }
AnimatedSprite::update();
}
void AsScene1002VenusFlyTrap::upIdle() {
- if (_countdown == 0 && _klayman->getX() - 20 > _x) {
+ if (_countdown == 0 && _klayman->getX() - 20 > _x)
setDoDeltaX(1);
- } else if (_klayman->getX() + 20 < _x) {
+ else if (_klayman->getX() + 20 < _x)
setDoDeltaX(0);
- }
update();
}
@@ -848,14 +813,13 @@ uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x000890C4) {
+ if (param.asInteger() == 0x000890C4)
playSound(0, 0xC21190D8);
- } else if (param.asInteger() == 0x522200A0) {
+ else if (param.asInteger() == 0x522200A0)
playSound(0, 0x931080C8);
- }
break;
case 0x1011:
- if (_flag) {
+ if (_isSecond) {
if (_x >= 154 && _x <= 346) {
sendMessage(_parentScene, 0x2000, 0);
messageResult = 1;
@@ -869,22 +833,20 @@ uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam
break;
case 0x480B:
setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
- if (!_flag) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
+ if (!_isSecond) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR))
stRelease();
- } else {
+ else
stWalk();
- }
} else {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE) || getGlobalVar(V_FLYTRAP_RING_FENCE)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE) || getGlobalVar(V_FLYTRAP_RING_FENCE))
stRelease();
- } else {
+ else
stWalk();
- }
}
break;
case 0x480C:
- if (_flag) {
+ if (_isSecond) {
if (_x >= 154 && _x <= 346)
messageResult = 1;
else
@@ -897,9 +859,8 @@ uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam
}
break;
case 0x480E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
stGrabRing();
- }
break;
case 0x4810:
swallowKlayman();
@@ -928,25 +889,19 @@ uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessagePara
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x000890C4) {
+ if (param.asInteger() == 0x000890C4)
playSound(0, 0xC21190D8);
- } else if (param.asInteger() == 0x41881801) {
- if (_flag) {
- if (_x > 330) {
+ else if (param.asInteger() == 0x41881801) {
+ if (_isSecond) {
+ if (_x > 330)
sendMessage(_klayman, 0x4811, 2);
- } else if (_x > 265) {
- // FIXME: This check is the same as the one below.
- // Perhaps the third parameter should be 1 here?
+ else
sendMessage(_klayman, 0x4811, 0);
- } else {
- sendMessage(_klayman, 0x4811, 0);
- }
} else {
sendMessage(_klayman, 0x4811, 0);
}
- } else if (param.asInteger() == 0x522200A0) {
+ } else if (param.asInteger() == 0x522200A0)
playSound(0, 0x931080C8);
- }
break;
case 0x3002:
gotoNextState();
@@ -1010,17 +965,17 @@ void AsScene1002VenusFlyTrap::stIdle() {
startAnimation(0xC8204250, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::upIdle);
SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
- if (_flag) {
- if (_x >= 154 && _x <= 346) {
+ if (_isSecond) {
+ if (_x >= 154 && _x <= 346)
setGlobalVar(V_FLYTRAP_POSITION_2, (_x - 186) / 32);
- } else {
+ else {
NextState(&AsScene1002VenusFlyTrap::stWalkBack);
_countdown = 12;
}
} else {
- if (_x >= 174 && _x <= 430) {
+ if (_x >= 174 && _x <= 430)
setGlobalVar(V_FLYTRAP_POSITION_1, (_x - 174) / 32);
- } else {
+ else {
NextState(&AsScene1002VenusFlyTrap::stWalkBack);
_countdown = 12;
}
@@ -1043,11 +998,10 @@ void AsScene1002VenusFlyTrap::stSpitOutKlayman() {
void AsScene1002VenusFlyTrap::swallowKlayman() {
if (_x - 15 < _klayman->getX() && _x + 15 > _klayman->getX()) {
- if (_flag) {
+ if (_isSecond)
setDoDeltaX(_x > 265 && _x < 330 ? 1 : 0);
- } else {
+ else
setDoDeltaX(_x > 320 ? 1 : 0);
- }
sendMessage(_klayman, 0x2001, 0);
startAnimation(0x8C2C80D4, 0, -1);
SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
@@ -1065,20 +1019,18 @@ AsScene1002OutsideDoorBackground::AsScene1002OutsideDoorBackground(NeverhoodEngi
if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
startAnimation(0x004A4495, -1, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
- } else {
+ } else
setVisible(false);
- }
SetUpdateHandler(&AsScene1002OutsideDoorBackground::update);
SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
}
void AsScene1002OutsideDoorBackground::update() {
if (_countdown != 0 && (--_countdown == 0)) {
- if (_isDoorClosed) {
+ if (_isDoorClosed)
stCloseDoor();
- } else {
+ else
stOpenDoor();
- }
}
AnimatedSprite::update();
}
@@ -1110,17 +1062,17 @@ uint32 AsScene1002OutsideDoorBackground::hmAnimation(int messageNum, const Messa
void AsScene1002OutsideDoorBackground::stOpenDoor() {
startAnimation(0x004A4495, 0, -1);
- SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
_newStickFrameIndex = STICK_LAST_FRAME;
setVisible(true);
+ SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
}
void AsScene1002OutsideDoorBackground::stCloseDoor() {
startAnimation(0x004A4495, -1, -1);
_playBackwards = true;
+ setVisible(true);
SetMessageHandler(&AsScene1002OutsideDoorBackground::hmAnimation);
NextState(&AsScene1002OutsideDoorBackground::stDoorClosed);
- setVisible(true);
}
void AsScene1002OutsideDoorBackground::stDoorClosed() {
@@ -1132,9 +1084,9 @@ AsScene1002KlaymanLadderHands::AsScene1002KlaymanLadderHands(NeverhoodEngine *vm
: AnimatedSprite(vm, 1200), _klayman(klayman) {
createSurface(1200, 40, 163);
+ setVisible(false);
SetUpdateHandler(&AsScene1002KlaymanLadderHands::update);
SetMessageHandler(&Sprite::handleMessage);
- setVisible(false);
}
void AsScene1002KlaymanLadderHands::update() {
@@ -1152,9 +1104,8 @@ void AsScene1002KlaymanLadderHands::update() {
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
- } else {
+ } else
setVisible(false);
- }
AnimatedSprite::update();
}
@@ -1162,10 +1113,10 @@ AsScene1002KlaymanPeekHand::AsScene1002KlaymanPeekHand(NeverhoodEngine *vm, Scen
: AnimatedSprite(vm, 1200), _parentScene(parentScene), _klayman(klayman),
_isClipRectSaved(false) {
- SetUpdateHandler(&AsScene1002KlaymanPeekHand::update);
- SetMessageHandler(&AsScene1002KlaymanPeekHand::handleMessage);
createSurface(1000, 33, 41);
setVisible(false);
+ SetUpdateHandler(&AsScene1002KlaymanPeekHand::update);
+ SetMessageHandler(&AsScene1002KlaymanPeekHand::handleMessage);
}
void AsScene1002KlaymanPeekHand::update() {
@@ -1176,9 +1127,8 @@ void AsScene1002KlaymanPeekHand::update() {
_x = _klayman->getX();
_y = _klayman->getY();
setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0);
- } else {
+ } else
setVisible(false);
- }
AnimatedSprite::update();
}
@@ -1202,7 +1152,7 @@ uint32 AsScene1002KlaymanPeekHand::handleMessage(int messageNum, const MessagePa
}
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag1B4(false), _flag1BE(false) {
+ : Scene(vm, parentModule, true), _isKlaymanFloor(false), _isClimbingLadder(false) {
NRect tempClipRect;
Sprite *tempSprite;
@@ -1211,12 +1161,9 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1002::handleMessage);
setHitRects(0x004B4138);
-
setBackground(0x12C23307);
setPalette(0x12C23307);
- _flag = false;
-
insertStaticSprite(0x06149428, 1100);
insertStaticSprite(0x312C8774, 1100);
@@ -1228,7 +1175,9 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_class599 = insertStaticSprite(0x316C4BB4, 1015);
if (which < 0) {
- if (_vm->_gameState.field2 == 0) {
+ // Restoring game
+ if (_vm->_gameState.which == 0) {
+ // Klaymen on top
insertKlayman<KmScene1002>(90, 226);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4270);
@@ -1236,6 +1185,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asKlaymanLadderHands->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
+ // Klaymen on the floor
insertKlayman<KmScene1002>(379, 435);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4270);
@@ -1243,21 +1193,24 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene1002>(650, 435);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4478);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
- _vm->_gameState.field2 = 1;
+ _vm->_gameState.which = 1;
} else if (which == 2) {
+ // Klaymen coming up the ladder
insertKlayman<KmScene1002>(68, 645);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4298);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
- _vm->_gameState.field2 = 1;
+ _vm->_gameState.which = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
+ // Klaymen entering from the left, peeking
insertKlayman<KmScene1002>(90, 226);
_asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
setMessageList(0x004B4470);
@@ -1266,7 +1219,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asKlaymanPeekHand = insertSprite<AsScene1002KlaymanPeekHand>(this, _klayman);
_asKlaymanPeekHand->setClipRect(_klayman->getClipRect());
_klayman->setRepl(64, 0);
- _vm->_gameState.field2 = 0;
+ _vm->_gameState.which = 0;
}
insertMouse433(0x23303124);
@@ -1277,7 +1230,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asRing1 = insertSprite<AsScene1002Ring>(this, false, 258, 191, _class599->getDrawRect().y, false);
_asRing2 = insertSprite<AsScene1002Ring>(this, false, 297, 189, _class599->getDrawRect().y, false);
- _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_DOOR) != 0);
+ _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_DOOR));
_asRing4 = insertSprite<AsScene1002Ring>(this, false, 334, 191, _class599->getDrawRect().y, false);
_asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _class599->getDrawRect().y, false);
@@ -1304,56 +1257,32 @@ Scene1002::~Scene1002() {
void Scene1002::update() {
Scene::update();
- if (!_flag1B4 && _klayman->getY() > 230) {
+ if (!_isKlaymanFloor && _klayman->getY() > 230) {
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_asKlaymanLadderHands->setClipRect(_klayman->getClipRect());
deleteSprite(&_ssLadderArchPart3);
_klayman->clearRepl();
- _flag1B4 = true;
- _vm->_gameState.field2 = 1;
- }
-
- if (_flag1BE && _klayman->getY() > 422) {
- sendMessage(_parentModule, 0x1024, 1);
- _flag1BE = false;
+ _isKlaymanFloor = true;
+ _vm->_gameState.which = 1;
}
-
}
uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
- case 0x0001:
- // Debug stuff (original)
- if (param.asPoint().x == 0 && getGlobalVar(V_DEBUG)) {
- setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
- setGlobalVar(V_FLYTRAP_POSITION_1, 3);
- leaveScene(1);
- }
- break;
- case 0x000D:
- // Debug stuff (original)
- if (param.asInteger() == 0x48848178) {
- setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
- setGlobalVar(V_FLYTRAP_POSITION_1, 3);
- leaveScene(1);
- }
- messageResult = 1;
- break;
case 0x100D:
if (param.asInteger() == 0xE6EE60E1) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
+ if (getGlobalVar(V_FLYTRAP_RING_DOOR))
setMessageList(0x004B4428);
- } else {
+ else
setMessageList(0x004B4448);
- }
messageResult = 1;
- } else if (param.asInteger() == 0x4A845A00) {
+ } else if (param.asInteger() == 0x4A845A00)
sendEntityMessage(_klayman, 0x1014, _asRing1);
- } else if (param.asInteger() == 0x43807801) {
+ else if (param.asInteger() == 0x43807801)
sendEntityMessage(_klayman, 0x1014, _asRing2);
- } else if (param.asInteger() == 0x46C26A01) {
+ else if (param.asInteger() == 0x46C26A01) {
if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
setMessageList(0x004B44B8);
} else {
@@ -1366,19 +1295,18 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
messageResult = 1;
- } else if (param.asInteger() == 0x468C7B11) {
+ } else if (param.asInteger() == 0x468C7B11)
sendEntityMessage(_klayman, 0x1014, _asRing4);
- } else if (param.asInteger() == 0x42845B19) {
+ else if (param.asInteger() == 0x42845B19)
sendEntityMessage(_klayman, 0x1014, _asRing5);
- } else if (param.asInteger() == 0xC0A07458) {
+ else if (param.asInteger() == 0xC0A07458)
sendEntityMessage(_klayman, 0x1014, _ssPressButton);
- }
break;
case 0x1024:
sendMessage(_parentModule, 0x1024, param.asInteger());
break;
case 0x2000:
- if (_flag) {
+ if (_isClimbingLadder) {
setMessageList2(0x004B43D0);
} else {
if (_klayman->getY() > 420) {
@@ -1395,16 +1323,14 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
_messageList = NULL;
break;
case 0x2005:
- _flag = true;
+ _isClimbingLadder = true;
setRectList(0x004B4418);
break;
case 0x2006:
- _flag = false;
+ _isClimbingLadder = false;
setRectList(0x004B43A0);
break;
case 0x4806:
- sendMessage(_parentModule, 0x1024, 2);
- _flag1BE = true;
if (sender == _asRing1) {
setGlobalVar(V_RADIO_ENABLED, 0);
playSound(0, 0x665198C0);
@@ -1487,18 +1413,17 @@ AsScene1004TrashCan::AsScene1004TrashCan(NeverhoodEngine *vm)
_x = 330;
_y = 327;
createSurface(800, 56, 50);
+ setVisible(false);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1004TrashCan::handleMessage);
- setVisible(false);
}
uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x225A8587) {
+ if (param.asInteger() == 0x225A8587)
playSound(0, 0x109AFC4C);
- }
break;
case 0x2002:
startAnimation(0xEB312C11, 0, -1);
@@ -1534,14 +1459,17 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x03001504);
if (which < 0) {
+ // Restoring game
setRectList(0x004B7C70);
insertKlayman<KmScene1004>(330, 327);
setMessageList(0x004B7C18);
} else if (which == 1) {
+ // Klaymen returning from reading a note
setRectList(0x004B7C70);
insertKlayman<KmScene1004>(330, 327);
setMessageList(0x004B7C08);
} else {
+ // Klaymen coming down the ladder
loadDataResource(0x01900A04);
insertKlayman<KmScene1004>(_dataResource.getPoint(0x80052A29).x, 27);
setMessageList(0x004B7BF0);
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index f63d1f0..6f73326 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -36,6 +36,7 @@ public:
Module1000(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1000();
protected:
+ int _sceneNum;
uint32 _musicFileHash;
void createScene(int sceneNum, int which);
void updateScene();
@@ -114,10 +115,10 @@ protected:
class AsScene1002Ring : public AnimatedSprite {
public:
- AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool flag1, int16 x, int16 y, int16 clipY1, bool flag2);
+ AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool isSpecial, int16 x, int16 y, int16 clipY1, bool isRingLow);
protected:
Scene *_parentScene;
- bool _flag1;
+ bool _isSpecial;
void update();
uint32 hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmRingPulled1(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -164,22 +165,22 @@ public:
void setFileHashes(uint32 fileHash1, uint32 fileHash2);
protected:
Scene *_parentScene;
- int _countdown;
+ uint32 _soundFileHash;
uint32 _fileHashes[2];
int _status;
- uint32 _soundFileHash;
+ int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene1002VenusFlyTrap : public AnimatedSprite {
public:
- AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool flag);
+ AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool isSecond);
protected:
Scene *_parentScene;
Sprite *_klayman;
int _countdown;
- bool _flag;
+ bool _isSecond;
void update();
void upIdle();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -253,9 +254,8 @@ protected:
Sprite *_asKlaymanPeekHand;
Sprite *_asOutsideDoorBackground;
Sprite *_ssPressButton;
- bool _flag1B4;
- bool _flag1BE;
- bool _flag;
+ bool _isKlaymanFloor;
+ bool _isClimbingLadder;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 713d72d..9c2d896 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -47,9 +47,9 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
_vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
- _flag = getGlobalVar(V_WALL_BROKEN) != 0;
+ _isWallBroken = getGlobalVar(V_WALL_BROKEN) != 0;
- if (_flag) {
+ if (_isWallBroken) {
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
_vm->_soundMan->playSoundLooping(0x90F0D1C3);
}
@@ -89,7 +89,7 @@ void Module3000::createScene(int sceneNum, int which) {
break;
case 2:
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
- if (_flag) {
+ if (_isWallBroken) {
_soundVolume = 90;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 90);
}
@@ -193,7 +193,7 @@ void Module3000::updateScene() {
break;
case 2:
_vm->_soundMan->playTwoSounds(0x81293110, 0x41861371, 0x43A2507F, 0);
- if (_flag) {
+ if (_isWallBroken) {
_soundVolume = 0;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
}
@@ -238,7 +238,7 @@ void Module3000::updateScene() {
createScene(8, -1);
break;
case 8:
- _flag = getGlobalVar(V_WALL_BROKEN); // CHECKME
+ _isWallBroken = getGlobalVar(V_WALL_BROKEN) != 0;
if (_moduleResult != 1) {
_vm->_soundMan->setSoundListParams(kModule3000SoundList, true, 0, 0, 0, 0);
createScene(4, 1);
@@ -299,7 +299,7 @@ void Module3000::updateScene() {
} else if (frameNumber == 10) {
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
}
- if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (_isWallBroken && _soundVolume < 90 && frameNumber % 2) {
if (frameNumber == 0)
_soundVolume = 40;
else
@@ -313,7 +313,7 @@ void Module3000::updateScene() {
if (navigationScene()->isWalkingForward()) {
uint32 frameNumber = navigationScene()->getFrameNumber();
int navigationIndex = navigationScene()->getNavigationIndex();
- if (_flag && _soundVolume > 1 && frameNumber % 2) {
+ if (_isWallBroken && _soundVolume > 1 && frameNumber % 2) {
_soundVolume--;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
@@ -338,7 +338,7 @@ void Module3000::updateScene() {
if (frameNumber == 40) {
_vm->_soundMan->playTwoSounds(0x81293110, 0x40030A51, 0xC862CA15, 0);
}
- if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (_isWallBroken && _soundVolume < 90 && frameNumber % 2) {
if (frameNumber == 0)
_soundVolume = 40;
else
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 945ca7e..0fd1a1e 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -36,7 +36,7 @@ public:
virtual ~Module3000();
protected:
int _soundVolume;
- bool _flag;
+ bool _isWallBroken;
void createScene(int sceneNum, int which);
void updateScene();
};
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 1a738c1..9141de0 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -66,7 +66,7 @@ Common::Error NeverhoodEngine::run() {
_mouseY = 0;
_gameState.sceneNum = 0;
- _gameState.field2 = 0;
+ _gameState.which = 0;
_staticData = new StaticData();
_staticData->load("neverhood.dat");
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 2aa84e5..ba6b9f7 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -53,7 +53,6 @@ struct NPoint;
struct GameState {
int sceneNum;
int which;
- int field2;
};
class NeverhoodEngine : public ::Engine {
Commit: f744e60e0ef6bb959f9adb9f7a1d1dcc1eba2b09
https://github.com/scummvm/scummvm/commit/f744e60e0ef6bb959f9adb9f7a1d1dcc1eba2b09
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1100:
- Rename stuff
- Remove superfluous braces
- Add a comment to the "which" code in each scene
- Use a seperate _sceneNum instead of _vm->gameState().sceneNum
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1100.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 350dd76..fe73258 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -315,9 +315,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 1;
- _vm->gameState().sceneNum = 3;
- createModule(1000, -1);
+ _vm->gameState().which = 3;
+ _vm->gameState().sceneNum = 8;
+ createModule(1100, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index afcd698..6dcc5f9 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -65,17 +65,20 @@ void Module1100::createScene(int sceneNum, int which) {
static const uint32 kSmackerFileHashList06[] = {0x10880805, 0x1088081D, 0};
static const uint32 kSmackerFileHashList07[] = {0x00290321, 0x01881000, 0};
debug("Module1100::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
+ _sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_countdown = 65;
createNavigationScene(0x004B8430, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_countdown = 50;
createNavigationScene(0x004B8460, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
if (getGlobalVar(V_ROBOT_TARGET)) {
createNavigationScene(0x004B84F0, which);
} else {
@@ -83,6 +86,7 @@ void Module1100::createScene(int sceneNum, int which) {
}
break;
case 3:
+ _vm->gameState().sceneNum = 3;
if (getGlobalVar(V_ROBOT_TARGET)) {
createNavigationScene(0x004B8580, which);
} else {
@@ -90,26 +94,32 @@ void Module1100::createScene(int sceneNum, int which) {
}
break;
case 4:
- _childObject = new Scene1105(_vm, this, which);
+ _vm->gameState().sceneNum = 4;
+ _childObject = new Scene1105(_vm, this);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
if (getGlobalVar(V_ROBOT_TARGET))
createSmackerScene(0x04180001, true, false, false);
else
createSmackerScene(0x04180007, true, false, false);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->_soundMan->deleteSoundGroup(0x0002C818);
createSmackerScene(kSmackerFileHashList06, true, true, false);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_vm->_soundMan->setSoundParams(0x74E01054, false, 0, 0, 0, 0);
createSmackerScene(kSmackerFileHashList07, true, true, false);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_childObject = new Scene1109(_vm, this, which);
break;
case 1002:
+ _vm->gameState().sceneNum = 2;
_countdown = 40;
_vm->_soundMan->setTwoSoundsPlayFlag(true);
createSmackerScene(0x00012211, true, true, false);
@@ -121,65 +131,58 @@ void Module1100::createScene(int sceneNum, int which) {
void Module1100::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
_countdown = 0;
_vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
_vm->_soundMan->setSoundVolume(0x48498E46, 65);
_vm->_soundMan->setSoundVolume(0x50399F64, 65);
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(1, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(8, 0);
- }
break;
case 1:
_vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
if (getGlobalVar(V_ROBOT_HIT)) {
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(6, -1);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(0, 1);
- }
} else {
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(2, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(0, 1);
- }
}
break;
case 2:
_vm->_soundMan->setSoundParams(0x74E01054, false, 0, 0, 0, 0);
- if (_navigationAreaType == 3) {
+ if (_navigationAreaType == 3)
createScene(7, -1);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(3, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(1002, -1);
- }
break;
case 3:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(4, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(2, 3);
- }
break;
case 4:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(3, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(5, -1);
- }
break;
case 5:
_vm->_soundMan->setTwoSoundsPlayFlag(false);
- if (getGlobalVar(V_ROBOT_TARGET)) {
+ if (getGlobalVar(V_ROBOT_TARGET))
createScene(3, 0);
- } else {
+ else
createScene(4, 0);
- }
break;
case 6:
_vm->_soundMan->setTwoSoundsPlayFlag(false);
@@ -190,11 +193,10 @@ void Module1100::updateScene() {
createScene(2, 2);
break;
case 8:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(0, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
leaveModule(0);
- }
break;
case 1002:
_vm->_soundMan->setTwoSoundsPlayFlag(false);
@@ -213,9 +215,8 @@ void Module1100::updateScene() {
}
break;
case 1:
- if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0)) {
+ if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0))
_vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
- }
break;
case 2:
_vm->_soundMan->setSoundParams(0x74E01054, !navigationScene()->isWalkingForward(), 0, 0, 0, 0);
@@ -313,14 +314,14 @@ void SsScene1105Symbol::hide() {
updatePosition();
}
-SsScene1105SymbolDie::SsScene1105SymbolDie(NeverhoodEngine *vm, uint index, int16 x, int16 y)
- : StaticSprite(vm, 1100), _index(index) {
+SsScene1105SymbolDie::SsScene1105SymbolDie(NeverhoodEngine *vm, uint dieIndex, int16 x, int16 y)
+ : StaticSprite(vm, 1100), _dieIndex(dieIndex) {
- SetMessageHandler(&SsScene1105SymbolDie::handleMessage);
_x = x;
_y = y;
createSurface(200, 50, 50);
loadSymbolSprite();
+ SetMessageHandler(&SsScene1105SymbolDie::handleMessage);
}
uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -334,7 +335,7 @@ uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam &p
}
void SsScene1105SymbolDie::loadSymbolSprite() {
- loadSprite(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], kSLFCenteredDrawOffset);
+ loadSprite(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _dieIndex)], kSLFCenteredDrawOffset);
}
void SsScene1105SymbolDie::hide() {
@@ -393,7 +394,7 @@ void AsScene1105TeddyBear::hide() {
}
SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _flag1(false) {
+ : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _isClicked(false) {
loadSprite(0x8228A46C, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
setVisible(false);
@@ -415,10 +416,10 @@ uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam &
Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (_countdown == 0 && !_flag1) {
+ if (_countdown == 0 && !_isClicked) {
playSound(0);
setVisible(true);
- _flag1 = true;
+ _isClicked = true;
_countdown = 4;
}
messageResult = 1;
@@ -427,9 +428,9 @@ uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam &
return messageResult;
}
-Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _flag1(false), _flag2(false), _flag3(false),
- _flag4(false), _flag5(false), _backgroundIndex(0) {
+Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule)
+ : Scene(vm, parentModule, true), _countdown(0), _isPanelOpen(false), _isActionButtonClicked(false), _doMoveTeddy(false),
+ _isClosePanelDone(false), _leaveResult(0), _backgroundIndex(0) {
Sprite *ssOpenButton;
@@ -458,14 +459,14 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- if (!_flag2 && _backgroundIndex == 0) {
- if (_flag1) {
- _flag1 = false;
+ if (!_isActionButtonClicked && _backgroundIndex == 0) {
+ if (_isPanelOpen) {
+ _isPanelOpen = false;
_backgroundIndex = 15;
SetUpdateHandler(&Scene1105::upClosePanel);
} else
- _flag1 = true;
- _flag5 = false;
+ _isPanelOpen = true;
+ _leaveResult = 0;
}
}
break;
@@ -476,7 +477,7 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x2003:
_backgroundIndex = 24;
- _flag5 = true;
+ _leaveResult = 1;
SetUpdateHandler(&Scene1105::upClosePanel);
break;
case 0x4807:
@@ -486,19 +487,19 @@ uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entit
getSubVar(VA_GOOD_DICE_NUMBERS, 2) == getSubVar(VA_CURR_DICE_NUMBERS, 2)) {
setGlobalVar(V_ROBOT_TARGET, 1);
playSound(2);
- _flag3 = true;
+ _doMoveTeddy = true;
} else {
sendMessage(_asTeddyBear, 0x2002, 0);
}
showMouse(false);
- _flag2 = true;
+ _isActionButtonClicked = true;
}
break;
case 0x4826:
- if (_flag1) {
+ if (_isPanelOpen) {
if (sender == _ssActionButton) {
sendMessage(_ssActionButton, 0x480B, 0);
- _flag1 = false;
+ _isPanelOpen = false;
} else if (!getGlobalVar(V_ROBOT_TARGET)) {
if (sender == _ssSymbol1UpButton) {
if (getSubVar(VA_CURR_DICE_NUMBERS, 0) < 9) {
@@ -568,7 +569,7 @@ void Scene1105::createObjects() {
_ssActionButton = insertSprite<SsScene1105Button>(this, 0x8248AD35, NRect(280, 170, 354, 245));
_vm->_collisionMan->addSprite(_ssActionButton);
- _flag1 = true;
+ _isPanelOpen = true;
_asTeddyBear->show();
@@ -587,9 +588,8 @@ void Scene1105::upOpenPanel() {
changeBackground(backgroundFileHash);
_palette->addPalette(backgroundFileHash, 0, 256, 0);
}
- if (_backgroundIndex == 10) {
+ if (_backgroundIndex == 10)
playSound(0);
- }
if (_backgroundIndex == 0) {
SetUpdateHandler(&Scene1105::update);
_countdown = 2;
@@ -621,7 +621,7 @@ void Scene1105::upClosePanel() {
}
if (_backgroundIndex == 0) {
SetUpdateHandler(&Scene1105::update);
- _flag4 = true;
+ _isClosePanelDone = true;
}
}
}
@@ -635,15 +635,13 @@ void Scene1105::update() {
getSubVar(VA_GOOD_DICE_NUMBERS, 2), getSubVar(VA_CURR_DICE_NUMBERS, 2));
Scene::update();
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
createObjects();
- }
- if (_flag4 && !isSoundPlaying(1)) {
- leaveScene(_flag5);
- }
- if (_flag3 && !isSoundPlaying(2)) {
+ if (_isClosePanelDone && !isSoundPlaying(1))
+ leaveScene(_leaveResult);
+ if (_doMoveTeddy && !isSoundPlaying(2)) {
sendMessage(_asTeddyBear, 0x2002, 0);
- _flag3 = false;
+ _doMoveTeddy = false;
}
}
@@ -659,25 +657,30 @@ Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x600CEF01, 1100);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1109>(140, 436);
setMessageList(0x004B6260);
sendMessage(this, 0x2000, 0);
} else if (which == 1) {
+ // Klaymen teleporting in
insertKlayman<KmScene1109>(450, 436);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6268, false);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
+ // Klaymen teleporting out
insertKlayman<KmScene1109>(450, 436);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6318, false);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
+ // Klaymen returning from teleporter console
insertKlayman<KmScene1109>(450, 436);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6278, false);
sendMessage(this, 0x2000, 1);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene1109>(0, 436);
setMessageList(0x004B6258);
sendMessage(this, 0x2000, 0);
diff --git a/engines/neverhood/module1100.h b/engines/neverhood/module1100.h
index 126d149..e3fb7cb 100644
--- a/engines/neverhood/module1100.h
+++ b/engines/neverhood/module1100.h
@@ -36,6 +36,7 @@ public:
Module1100(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1100();
protected:
+ int _sceneNum;
int _countdown;
void createScene(int sceneNum, int which);
void updateScene();
@@ -59,10 +60,10 @@ public:
class SsScene1105SymbolDie : public StaticSprite {
public:
- SsScene1105SymbolDie(NeverhoodEngine *vm, uint index, int16 x, int16 y);
+ SsScene1105SymbolDie(NeverhoodEngine *vm, uint dieIndex, int16 x, int16 y);
void hide();
protected:
- uint _index;
+ uint _dieIndex;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void loadSymbolSprite();
};
@@ -83,22 +84,22 @@ public:
protected:
Scene *_parentScene;
int _countdown;
- bool _flag1;
+ bool _isClicked;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class Scene1105 : public Scene {
public:
- Scene1105(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1105(NeverhoodEngine *vm, Module *parentModule);
protected:
int _countdown;
int _backgroundIndex;
- bool _flag1;
- bool _flag2;
- bool _flag3;
- bool _flag4;
- bool _flag5;
+ bool _isPanelOpen;
+ bool _isActionButtonClicked;
+ bool _doMoveTeddy;
+ bool _isClosePanelDone;
+ int _leaveResult;
AsScene1105TeddyBear *_asTeddyBear;
SsScene1105Symbol *_ssSymbols[3];
SsScene1105SymbolDie *_ssSymbolDice[3];
Commit: 097f1f27bbb5c00f0cad7216161b2064a73ebd2b
https://github.com/scummvm/scummvm/commit/097f1f27bbb5c00f0cad7216161b2064a73ebd2b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1200 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index fe73258..d6da2af 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -284,9 +284,9 @@ void GameModule::startup() {
*/
//setGlobalVar(V_ENTRANCE_OPEN, 0);
//setGlobalVar(V_DOOR_SPIKES_OPEN, 1);
- setGlobalVar(V_CREATURE_ANGRY, 1);
+ //setGlobalVar(V_CREATURE_ANGRY, 1);
setGlobalVar(V_RADIO_ENABLED, 1);
- setGlobalVar(V_TNT_DUMMY_BUILT, 1);
+ //setGlobalVar(V_TNT_DUMMY_BUILT, 1);
setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
setGlobalVar(V_TV_JOKE_TOLD, 1);
/*
@@ -316,8 +316,8 @@ void GameModule::startup() {
*/
_vm->gameState().which = 3;
- _vm->gameState().sceneNum = 8;
- createModule(1100, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(1200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index e6442a0..98ec012 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -29,15 +29,12 @@ Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Module1200::handleMessage);
- debug("Module1200: which = %d", which);
-
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(0, 2);
- } else {
+ else
createScene(0, 0);
- }
_vm->_soundMan->addMusic(0x00478311, 0x62222CAE);
_vm->_soundMan->startMusic(0x62222CAE, 0, 0);
@@ -49,15 +46,18 @@ Module1200::~Module1200() {
void Module1200::createScene(int sceneNum, int which) {
debug("Module1200::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene1201(_vm, this, which);
break;
case 1:
- _childObject = new Scene1202(_vm, this, which);
+ _vm->gameState().sceneNum = 1;
+ _childObject = new Scene1202(_vm, this);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->stopMusic(0x62222CAE, 0, 0);
createSmackerScene(0x31890001, true, true, false);
setGlobalVar(V_SEEN_CREATURE_EXPLODE_VID, 1);
@@ -69,19 +69,17 @@ void Module1200::createScene(int sceneNum, int which) {
void Module1200::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(1, 0);
- } else if (_moduleResult == 2) {
- if (getGlobalVar(V_CREATURE_EXPLODED) && !getGlobalVar(V_SEEN_CREATURE_EXPLODE_VID)) {
+ else if (_moduleResult == 2) {
+ if (getGlobalVar(V_CREATURE_EXPLODED) && !getGlobalVar(V_SEEN_CREATURE_EXPLODE_VID))
createScene(2, -1);
- } else {
+ else
leaveModule(1);
- }
- } else {
+ } else
leaveModule(0);
- }
break;
case 1:
createScene(0, 1);
@@ -101,78 +99,41 @@ static const uint32 kScene1201InitArray[] = {
};
static const NPoint kScene1201PointArray[] = {
- {218, 193},
- {410, 225},
- {368, 277},
- {194, 227},
- {366, 174},
- {458, 224},
- {242, 228},
- {512, 228},
- {458, 277},
- {217, 233},
- {458, 173},
- {410, 276},
- {203, 280},
- {371, 226},
- {508, 279},
- {230, 273},
- {410, 171},
- {493, 174}
+ {218, 193}, {410, 225}, {368, 277},
+ {194, 227}, {366, 174}, {458, 224},
+ {242, 228}, {512, 228}, {458, 277},
+ {217, 233}, {458, 173}, {410, 276},
+ {203, 280}, {371, 226}, {508, 279},
+ {230, 273}, {410, 171}, {493, 174}
};
static const uint32 kScene1201TntFileHashList1[] = {
- 0x2098212D,
- 0x1600437E,
- 0x1600437E,
- 0x00A840E3,
- 0x1A1830F6,
- 0x1A1830F6,
- 0x00212062,
- 0x384010B6,
- 0x384010B6,
- 0x07A01080,
- 0xD80C2837,
- 0xD80C2837,
- 0x03A22092,
- 0xD8802CB6,
- 0xD8802CB6,
- 0x03A93831,
- 0xDA460476,
- 0xDA460476
+ 0x2098212D, 0x1600437E, 0x1600437E,
+ 0x00A840E3, 0x1A1830F6, 0x1A1830F6,
+ 0x00212062, 0x384010B6, 0x384010B6,
+ 0x07A01080, 0xD80C2837, 0xD80C2837,
+ 0x03A22092, 0xD8802CB6, 0xD8802CB6,
+ 0x03A93831, 0xDA460476, 0xDA460476
};
static const uint32 kScene1201TntFileHashList2[] = {
- 0x3040C676,
- 0x10914448,
- 0x10914448,
- 0x3448A066,
- 0x1288C049,
- 0x1288C049,
- 0x78C0E026,
- 0x3098D05A,
- 0x3098D05A,
- 0x304890E6,
- 0x1284E048,
- 0x1284E048,
- 0xB140A1E6,
- 0x5088A068,
- 0x5088A068,
- 0x74C4C866,
- 0x3192C059,
- 0x3192C059
+ 0x3040C676, 0x10914448, 0x10914448,
+ 0x3448A066, 0x1288C049, 0x1288C049,
+ 0x78C0E026, 0x3098D05A, 0x3098D05A,
+ 0x304890E6, 0x1284E048, 0x1284E048,
+ 0xB140A1E6, 0x5088A068, 0x5088A068,
+ 0x74C4C866, 0x3192C059, 0x3192C059
};
SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2)
- : StaticSprite(vm, 900), _field7A(-1) {
+ : StaticSprite(vm, 900) {
int16 x = kScene1201PointArray[pointIndex].x;
int16 y = kScene1201PointArray[pointIndex].y;
- if (x < 300) {
+ if (x < 300)
loadSprite(kScene1201TntFileHashList1[elemIndex], kSLFDefDrawOffset | kSLFDefPosition, 50);
- } else {
+ else
loadSprite(kScene1201TntFileHashList2[elemIndex], kSLFCenteredDrawOffset | kSLFSetPosition, 50, x, y);
- }
setClipRect(0, 0, 640, clipY2);
}
@@ -203,7 +164,7 @@ uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m,
return messageResult;
}
-AsScene1201TntManRope::AsScene1201TntManRope(NeverhoodEngine *vm, bool flag)
+AsScene1201TntManRope::AsScene1201TntManRope(NeverhoodEngine *vm, bool isDummyHanging)
: AnimatedSprite(vm, 1200) {
SetUpdateHandler(&AnimatedSprite::update);
@@ -211,7 +172,7 @@ AsScene1201TntManRope::AsScene1201TntManRope(NeverhoodEngine *vm, bool flag)
createSurface(10, 34, 149);
_x = 202;
_y = -32;
- if (flag) {
+ if (isDummyHanging) {
startAnimation(0x928F0C10, 15, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
} else {
@@ -224,9 +185,8 @@ uint32 AsScene1201TntManRope::handleMessage(int messageNum, const MessageParam &
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x02060018) {
+ if (param.asInteger() == 0x02060018)
playSound(0, 0x47900E06);
- }
break;
case 0x2006:
startAnimation(0x928F0C10, 1, -1);
@@ -236,7 +196,7 @@ uint32 AsScene1201TntManRope::handleMessage(int messageNum, const MessageParam &
return messageResult;
}
-AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag)
+AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen)
: AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) {
createSurface1(0xD088AC30, 100);
@@ -245,7 +205,7 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
SetUpdateHandler(&AsScene1201RightDoor::update);
SetMessageHandler(&AsScene1201RightDoor::handleMessage);
_newStickFrameIndex = STICK_LAST_FRAME;
- if (flag) {
+ if (isOpen) {
startAnimation(0xD088AC30, -1, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
_countdown = 25;
@@ -256,9 +216,8 @@ AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman,
}
void AsScene1201RightDoor::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
stCloseDoor();
- }
AnimatedSprite::update();
}
@@ -348,11 +307,10 @@ uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x092870C0) {
+ if (param.asInteger() == 0x092870C0)
sendMessage(_asTntManRope, 0x2006, 0);
- } else if (param.asInteger() == 0x11CA0144) {
+ else if (param.asInteger() == 0x11CA0144)
playSound(0, 0x51800A04);
- }
break;
case 0x1011:
sendMessage(_parentScene, 0x2002, 0);
@@ -479,9 +437,8 @@ uint32 AsScene1201Match::hmOnDoorFrameAboutToMove(int messageNum, const MessageP
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x86668011) {
+ if (param.asInteger() == 0x86668011)
playSound(0);
- }
break;
}
return messageResult;
@@ -571,13 +528,12 @@ AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene
}
void AsScene1201Creature::update() {
- bool oldFlag = _klaymanTooClose;
+ bool oldKlaymanTooClose = _klaymanTooClose;
_klaymanTooClose = _klayman->getX() >= 385;
- if (_klaymanTooClose != oldFlag)
+ if (_klaymanTooClose != oldKlaymanTooClose)
stWaiting();
- if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
gotoNextState();
- }
updateAnim();
handleSpriteUpdate();
updatePosition();
@@ -587,9 +543,8 @@ uint32 AsScene1201Creature::hmWaiting(int messageNum, const MessageParam ¶m,
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x02060018) {
+ if (param.asInteger() == 0x02060018)
playSound(0, 0xCD298116);
- }
break;
case 0x2004:
GotoState(&AsScene1201Creature::stStartReachForTntDummy);
@@ -632,7 +587,7 @@ void AsScene1201Creature::stWaiting() {
startAnimation(0x08081513, 0, -1);
SetMessageHandler(&AsScene1201Creature::hmWaiting);
NextState(&AsScene1201Creature::stPincerSnap);
- _countdown1 = 36;
+ _countdown = 36;
}
void AsScene1201Creature::stPincerSnap() {
@@ -647,20 +602,20 @@ void AsScene1201Creature::stStartReachForTntDummy() {
startAnimation(0x08081513, 0, -1);
SetMessageHandler(&AsScene1201Creature::hmWaiting);
NextState(&AsScene1201Creature::stReachForTntDummy);
- _countdown1 = 48;
+ _countdown = 48;
}
void AsScene1201Creature::stReachForTntDummy() {
startAnimation(0x5A201453, 0, -1);
SetMessageHandler(&AsScene1201Creature::hmWaiting);
- _countdown1 = 0;
+ _countdown = 0;
}
void AsScene1201Creature::stPincerSnapKlayman() {
startAnimation(0xCA287133, 0, -1);
SetMessageHandler(&AsScene1201Creature::hmPincerSnapKlayman);
NextState(&AsScene1201Creature::stWaiting);
- _countdown1 = 0;
+ _countdown = 0;
}
AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
@@ -712,9 +667,8 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (!getSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52)) {
setSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52, 1);
- for (uint32 index = 0; index < 18; index++) {
+ for (uint32 index = 0; index < 18; index++)
setSubVar(VA_TNT_POSITIONS, index, kScene1201InitArray[index]);
- }
}
insertMouse433(0x9A2C0409);
@@ -748,12 +702,15 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asKlaymanHead = insertSprite<AsScene1201KlaymanHead>();
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1201>(364, 333);
setMessageList(0x004AEC08);
} else if (which == 3) {
+ // Klaymen standing after the weasel exploded
insertKlayman<KmScene1201>(400, 329);
setMessageList(0x004AEC08);
} else if (which == 2) {
+ // Klaymen entering from the right
if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
insertKlayman<KmScene1201>(374, 333);
setMessageList(0x004AEC08);
@@ -762,6 +719,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AEC20);
}
} else if (which == 1) {
+ // Klaymen returning from the TNT console
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1201>(364, 333);
_klayman->setDoDeltaX(1);
@@ -770,6 +728,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
}
setMessageList(0x004AEC30);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene1201>(0, 336);
setMessageList(0x004AEC10);
}
@@ -848,11 +807,10 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex++;
}
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED))
setRectList(0x004AEE18);
- } else {
+ else
setRectList(0x004AED88);
- }
}
@@ -861,9 +819,8 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asLeftDoor = insertSprite<AsScene1201LeftDoor>(_klayman);
_asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
- if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_MATCH_STATUS) == 0) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_MATCH_STATUS) == 0)
setGlobalVar(V_MATCH_STATUS, 1);
- }
_asMatch = NULL;
@@ -898,23 +855,22 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (param.asInteger() == 0x07053000) {
_creatureExploded = true;
sendMessage(_asCreature, 0x2004, 0);
- } else if (param.asInteger() == 0x140E5744) {
+ } else if (param.asInteger() == 0x140E5744)
sendMessage(_asCreature, 0x2005, 0);
- } else if (param.asInteger() == 0x40253C40) {
+ else if (param.asInteger() == 0x40253C40) {
_canAcceptInput = false;
sendMessage(_asCreature, 0x2006, 0);
} else if (param.asInteger() == 0x090EB048) {
- if (_klayman->getX() < 572) {
+ if (_klayman->getX() < 572)
setMessageList2(0x004AEC90);
- } else {
+ else
setMessageList2(0x004AEC20);
- }
}
break;
case 0x2001:
- if (getGlobalVar(V_MATCH_STATUS) == 0) {
+ if (getGlobalVar(V_MATCH_STATUS) == 0)
setMessageList2(0x004AECB0);
- } else {
+ else {
sendEntityMessage(_klayman, 0x1014, _asMatch);
setMessageList2(0x004AECC0);
}
@@ -927,11 +883,10 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else if (getGlobalVar(V_MATCH_STATUS) == 3) {
// Light the TNT dummy if we have the match
sendEntityMessage(_klayman, 0x1014, _asTntMan);
- if (_klayman->getX() > _asTntMan->getX()) {
+ if (_klayman->getX() > _asTntMan->getX())
setMessageList(0x004AECD0);
- } else {
+ else
setMessageList(0x004AECE0);
- }
}
break;
case 0x4814:
@@ -960,45 +915,21 @@ static const uint32 kScene1202Table[] = {
};
static const NPoint kScene1202Points[] = {
- {203, 140},
- {316, 212},
- {277, 264},
- {176, 196},
- {275, 159},
- {366, 212},
- {230, 195},
- {412, 212},
- {368, 263},
- {204, 192},
- {365, 164},
- {316, 262},
- {191, 255},
- {280, 213},
- {406, 266},
- {214, 254},
- {316, 158},
- {402, 161}
+ {203, 140}, {316, 212}, {277, 264},
+ {176, 196}, {275, 159}, {366, 212},
+ {230, 195}, {412, 212}, {368, 263},
+ {204, 192}, {365, 164}, {316, 262},
+ {191, 255}, {280, 213}, {406, 266},
+ {214, 254}, {316, 158}, {402, 161}
};
static const uint32 kScene1202FileHashes[] = {
- 0x1AC00B8,
- 0x1AC14B8,
- 0x1AC14B8,
- 0x1AC30B8,
- 0x1AC14B8,
- 0x1AC14B8,
- 0x1AC00B8,
- 0x1AC14B8,
- 0x1AC14B8,
- 0x1AC90B8,
- 0x1AC18B8,
- 0x1AC18B8,
- 0x1AC30B8,
- 0x1AC14B8,
- 0x1AC14B8,
- 0x1AC50B8,
- 0x1AC14B8,
- 0x1AC14B8
+ 0x1AC00B8, 0x1AC14B8, 0x1AC14B8,
+ 0x1AC30B8, 0x1AC14B8, 0x1AC14B8,
+ 0x1AC00B8, 0x1AC14B8, 0x1AC14B8,
+ 0x1AC90B8, 0x1AC18B8, 0x1AC18B8,
+ 0x1AC30B8, 0x1AC14B8, 0x1AC14B8,
+ 0x1AC50B8, 0x1AC14B8, 0x1AC14B8
};
AsScene1202TntItem::AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int itemIndex)
@@ -1056,9 +987,9 @@ void AsScene1202TntItem::stChangePositionFadeIn() {
_x = kScene1202Points[_newPosition].x;
_y = kScene1202Points[_newPosition].y;
startAnimation(kScene1202FileHashes[_itemIndex], 6, -1);
+ _playBackwards = true;
SetMessageHandler(&AsScene1202TntItem::hmChangePosition);
NextState(&AsScene1202TntItem::stChangePositionDone);
- _playBackwards = true;
}
void AsScene1202TntItem::stChangePositionDone() {
@@ -1066,15 +997,14 @@ void AsScene1202TntItem::stChangePositionDone() {
stShowIdle();
}
-Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _paletteResource(vm),
- _flag(true), _soundFlag(false), _counter(0), _clickedIndex(-1) {
+ _soundToggle(true), _isPuzzleSolved(false), _counter(0), _clickedIndex(-1) {
SetMessageHandler(&Scene1202::handleMessage);
SetUpdateHandler(&Scene1202::update);
setBackground(0x60210ED5);
-
setPalette(0x60210ED5);
addEntity(_palette);
@@ -1083,16 +1013,15 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x10ED160A, 20, 620);
- for (int i = 0; i < 18; i++) {
- _asTntItems[i] = insertSprite<AsScene1202TntItem>(this, i);
- _vm->_collisionMan->addSprite(_asTntItems[i]);
+ for (int tntIndex = 0; tntIndex < 18; tntIndex++) {
+ _asTntItems[tntIndex] = insertSprite<AsScene1202TntItem>(this, tntIndex);
+ _vm->_collisionMan->addSprite(_asTntItems[tntIndex]);
}
insertStaticSprite(0x8E8419C1, 1100);
- if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
+ if (getGlobalVar(V_TNT_DUMMY_BUILT))
SetMessageHandler(&Scene1202::hmSolved);
- }
playSound(0, 0x40106542);
loadSound(1, 0x40005446);
@@ -1102,15 +1031,13 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1202::~Scene1202() {
- if (isSolved()) {
+ if (isSolved())
setGlobalVar(V_TNT_DUMMY_BUILT, 1);
- }
}
void Scene1202::update() {
Scene::update();
- if (_soundFlag) {
- debug("CHECK SOLVED");
+ if (_isPuzzleSolved) {
if (!isSoundPlaying(3))
leaveScene(0);
} else if (_counter == 0 && isSolved()) {
@@ -1120,7 +1047,7 @@ void Scene1202::update() {
_palette->copyToBasePalette(_paletteData);
_palette->startFadeToPalette(24);
playSound(3);
- _soundFlag = true;
+ _isPuzzleSolved = true;
} else if (_clickedIndex >= 0 && _counter == 0) {
int destIndex = kScene1202Table[_clickedIndex];
sendMessage(_asTntItems[_clickedIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, destIndex));
@@ -1130,12 +1057,8 @@ void Scene1202::update() {
setSubVar(VA_TNT_POSITIONS, _clickedIndex, temp);
_counter = 2;
_clickedIndex = -1;
- if (_flag) {
- playSound(1);
- } else {
- playSound(2);
- }
- _flag = !_flag;
+ playSound(_soundToggle ? 1 : 2);
+ _soundToggle = !_soundToggle;
}
}
@@ -1144,9 +1067,8 @@ uint32 Scene1202::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_soundFlag) {
+ if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_isPuzzleSolved)
leaveScene(0);
- }
break;
case 0x2000:
_clickedIndex = (int)param.asInteger();
@@ -1162,21 +1084,14 @@ uint32 Scene1202::hmSolved(int messageNum, const MessageParam ¶m, Entity *se
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
- }
break;
}
return 0;
}
bool Scene1202::isSolved() {
-
- debug("isSolved() %d %d %d %d %d %d",
- getSubVar(VA_TNT_POSITIONS, 0), getSubVar(VA_TNT_POSITIONS, 3),
- getSubVar(VA_TNT_POSITIONS, 6), getSubVar(VA_TNT_POSITIONS, 9),
- getSubVar(VA_TNT_POSITIONS, 12), getSubVar(VA_TNT_POSITIONS, 15));
-
return
getSubVar(VA_TNT_POSITIONS, 0) == 0 && getSubVar(VA_TNT_POSITIONS, 3) == 3 &&
getSubVar(VA_TNT_POSITIONS, 6) == 6 && getSubVar(VA_TNT_POSITIONS, 9) == 9 &&
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index a0e9c9f..1fe607d 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -36,6 +36,7 @@ public:
Module1200(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1200();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
@@ -53,14 +54,14 @@ protected:
class AsScene1201TntManRope : public AnimatedSprite {
public:
- AsScene1201TntManRope(NeverhoodEngine *vm, bool flag);
+ AsScene1201TntManRope(NeverhoodEngine *vm, bool isDummyHanging);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class AsScene1201RightDoor : public AnimatedSprite {
public:
- AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool flag);
+ AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen);
protected:
Sprite *_klayman;
int _countdown;
@@ -129,7 +130,7 @@ public:
protected:
Scene *_parentScene;
Sprite *_klayman;
- int _countdown1;
+ int _countdown;
bool _klaymanTooClose;
void update();
uint32 hmWaiting(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -156,7 +157,6 @@ public:
SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2);
protected:
uint32 _elemIndex;
- int16 _field7A;
};
class Scene1201 : public Scene {
@@ -195,7 +195,7 @@ protected:
class Scene1202 : public Scene {
public:
- Scene1202(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1202(NeverhoodEngine *vm, Module *parentModule);
virtual ~Scene1202();
protected:
PaletteResource _paletteResource;
@@ -203,8 +203,8 @@ protected:
int _counter;
int _clickedIndex;
byte _paletteData[1024];
- bool _soundFlag;
- bool _flag;
+ bool _isPuzzleSolved;
+ bool _soundToggle;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmSolved(int messageNum, const MessageParam ¶m, Entity *sender);
Commit: ee7d47cb187cbfcc4374acc6161fe6ab0d46598d
https://github.com/scummvm/scummvm/commit/ee7d47cb187cbfcc4374acc6161fe6ab0d46598d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1300 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d6da2af..0eeee2e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -305,6 +305,8 @@ void GameModule::startup() {
// Enable all locations
for (int i = 0; i < 6; i++)
setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
+ //setGlobalVar(V_PROJECTOR_LOCATION, 4);
+ setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
// <<<DEBUG
#if 1
@@ -315,9 +317,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 3;
- _vm->gameState().sceneNum = 0;
- createModule(1200, -1);
+ _vm->gameState().which = 5;
+ _vm->gameState().sceneNum = 6;
+ createModule(1300, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 409e554..feebd78 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -110,90 +110,106 @@ Module1300::~Module1300() {
void Module1300::createScene(int sceneNum, int which) {
debug("Module1300::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
+ _sceneNum = sceneNum;
switch (_vm->gameState().sceneNum) {
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1302(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new Scene1303(_vm, this, which);
+ _childObject = new Scene1303(_vm, this);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new Scene1304(_vm, this, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1305(_vm, this, which);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1306(_vm, this, which);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x00203197, 0, 2);
- _childObject = new Scene1307(_vm, this, which);
+ _childObject = new Scene1307(_vm, this);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x00203197, 0, 2);
_childObject = new Scene1308(_vm, this, which);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 1);
break;
case 9:
+ _vm->gameState().sceneNum = 9;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createSmackerScene(0x20082818, true, true, false);
break;
case 10:
+ _vm->gameState().sceneNum = 10;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createSmackerScene(0x20082828, true, true, false);
break;
case 11:
+ _vm->gameState().sceneNum = 11;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B27A8, which);
break;
case 12:
+ _vm->gameState().sceneNum = 12;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B2718, which);
break;
case 13:
+ _vm->gameState().sceneNum = 13;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B27D8, which);
break;
case 14:
+ _vm->gameState().sceneNum = 14;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B2808, which);
break;
case 15:
+ _vm->gameState().sceneNum = 15;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
createNavigationScene(0x004B2838, which);
break;
case 16:
+ _vm->gameState().sceneNum = 16;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new Scene1317(_vm, this, which);
+ _childObject = new Scene1317(_vm, this);
break;
case 17:
- // TODO: Credits scene
+ _vm->gameState().sceneNum = 17;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->stopMusic(0x00203197, 0, 2);
_childObject = new CreditsScene(_vm, this, false);
@@ -205,13 +221,12 @@ void Module1300::createScene(int sceneNum, int which) {
void Module1300::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 1:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(4, 0);
- } else {
+ else
createScene(7, 1);
- }
break;
case 2:
createScene(5, 3);
@@ -223,27 +238,25 @@ void Module1300::updateScene() {
createScene(16, -1);
break;
case 5:
- if (_moduleResult == 2) {
+ if (_moduleResult == 2)
createScene(8, 0);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(2, 0);
- } else if (_moduleResult == 0) {
+ else if (_moduleResult == 0)
leaveModule(0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(10, -1);
- }
break;
case 6:
createScene(7, 2);
break;
case 7:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(13, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(1, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(6, 0);
- }
break;
case 8:
createScene(5, 2);
@@ -271,25 +284,22 @@ void Module1300::updateScene() {
createScene(13, 1);
break;
case 13:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(12, 2);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(7, 0);
- }
break;
case 14:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(12, 3);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(9, -1);
- }
break;
case 15:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(12, 4);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(3, 0);
- }
break;
case 16:
createScene(17, -1);
@@ -307,8 +317,6 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
_x = 320;
_y = 240;
createSurface1(0x88148150, 500);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1302Bridge::handleMessage);
if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
startAnimation(0x88148150, 0, -1);
_newStickFrameIndex = 0;
@@ -318,6 +326,8 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
}
loadSound(0, 0x68895082);
loadSound(1, 0x689BD0C1);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1302Bridge::handleMessage);
}
uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -338,8 +348,8 @@ uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶
void AsScene1302Bridge::stLowerBridge() {
startAnimation(0x88148150, 0, -1);
- NextState(&AsScene1302Bridge::cbLowerBridgeEvent);
playSound(1);
+ NextState(&AsScene1302Bridge::cbLowerBridgeEvent);
}
void AsScene1302Bridge::stRaiseBridge() {
@@ -358,14 +368,14 @@ void AsScene1302Bridge::cbLowerBridgeEvent() {
SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
: StaticSprite(vm, 0x11122122, 200) {
- SetUpdateHandler(&SsScene1302Fence::update);
- SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteUpdate(NULL);
_firstY = _y;
if (getGlobalVar(V_FLYTRAP_RING_FENCE))
_y += 152;
loadSound(0, 0x7A00400C);
loadSound(1, 0x78184098);
+ SetUpdateHandler(&SsScene1302Fence::update);
+ SetMessageHandler(&SsScene1302Fence::handleMessage);
+ SetSpriteUpdate(NULL);
}
void SsScene1302Fence::update() {
@@ -378,13 +388,13 @@ uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m
switch (messageNum) {
case 0x4808:
playSound(0);
- SetSpriteUpdate(&SsScene1302Fence::suMoveDown);
SetMessageHandler(NULL);
+ SetSpriteUpdate(&SsScene1302Fence::suMoveDown);
break;
case 0x4809:
playSound(1);
- SetSpriteUpdate(&SsScene1302Fence::suMoveUp);
SetMessageHandler(NULL);
+ SetSpriteUpdate(&SsScene1302Fence::suMoveUp);
break;
}
return messageResult;
@@ -412,9 +422,9 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
SetMessageHandler(&Scene1302::handleMessage);
+
setHitRects(0x004B0858);
setRectList(0x004B0A38);
-
setBackground(0x420643C4);
setPalette(0x420643C4);
insertMouse433(0x643C0428);
@@ -424,21 +434,21 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2 = insertStaticSprite(0x70430830, 1200);
_sprite2->setVisible(false);
_sprite3 = insertStaticSprite(0x16E01E20, 1100);
-
_asRing1 = insertSprite<AsScene1002Ring>(this, false, 218, 122, _class595->getDrawRect().y, false);
_asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_BRIDGE));
_asRing3 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false);
_asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_FENCE));
_asRing5 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false);
-
_asBridge = insertSprite<AsScene1302Bridge>(this);
_ssFence = insertSprite<SsScene1302Fence>();
_ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1002>(380, 364);
setMessageList(0x004B0868);
} else {
+ // Klaymen entering from back
insertKlayman<KmScene1002>(293, 330);
setMessageList(0x004B0870);
}
@@ -457,87 +467,77 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x4A845A00) {
+ if (param.asInteger() == 0x4A845A00)
sendEntityMessage(_klayman, 0x1014, _asRing1);
- } else if (param.asInteger() == 0x43807801) {
+ else if (param.asInteger() == 0x43807801) {
if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
sendEntityMessage(_klayman, 0x1014, _asRing2);
- if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) {
+ if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32)
setMessageList(0x004B0940);
- } else {
+ else
setMessageList(0x004B0938);
- }
- } else {
+ } else
setMessageList(0x004B0950);
- }
messageResult = 1;
- } else if (param.asInteger() == 0x46C26A01) {
+ } else if (param.asInteger() == 0x46C26A01)
sendEntityMessage(_klayman, 0x1014, _asRing3);
- } else if (param.asInteger() == 0x468C7B11) {
+ else if (param.asInteger() == 0x468C7B11) {
if (!getGlobalVar(V_FLYTRAP_RING_FENCE)) {
sendEntityMessage(_klayman, 0x1014, _asRing4);
- if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) {
+ if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32)
setMessageList(0x004B0940);
- } else {
+ else
setMessageList(0x004B0938);
- }
- } else {
+ } else
setMessageList(0x004B0950);
- }
messageResult = 1;
- } else if (param.asInteger() == 0x42845B19) {
+ } else if (param.asInteger() == 0x42845B19)
sendEntityMessage(_klayman, 0x1014, _asRing5);
- } else if (param.asInteger() == 0x430A6060) {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
+ else if (param.asInteger() == 0x430A6060) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE))
setMessageList2(0x004B0910);
- } else {
+ else
cancelMessageList();
- }
} else if (param.asInteger() == 0x012E2070) {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE))
setMessageList2(0x004B0968);
- } else {
+ else
cancelMessageList();
- }
} else if (param.asInteger() == 0x11C40840) {
- if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342) {
+ if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342)
setMessageList(0x004B0878);
- } else {
+ else
setMessageList(0x004B0978);
- }
}
break;
case 0x2000:
if (_klayman->getY() > 360) {
sendEntityMessage(_klayman, 0x1014, _asVenusFlyTrap);
setMessageList2(0x004B08F0);
- } else {
+ } else
setMessageList2(0x004B0920);
- }
break;
case 0x2002:
- if (_klayman->getX() > 545) {
+ if (_klayman->getX() > 545)
leaveScene(1);
- }
break;
case 0x2032:
_sprite2->setVisible(true);
break;
case 0x4806:
sendMessage(_parentModule, 0x1024, 2);
- if (sender == _asRing1) {
+ if (sender == _asRing1)
playSound(0, 0x665198C0);
- } else if (sender == _asRing2) {
+ else if (sender == _asRing2) {
sendMessage(_asBridge, 0x4808, 0);
setGlobalVar(V_FLYTRAP_RING_BRIDGE, 1);
- } else if (sender == _asRing3) {
+ } else if (sender == _asRing3)
playSound(0, 0xE2D389C0);
- } else if (sender == _asRing4) {
+ else if (sender == _asRing4) {
sendMessage(_ssFence, 0x4808, 0);
setGlobalVar(V_FLYTRAP_RING_FENCE, 1);
- } else if (sender == _asRing5) {
+ } else if (sender == _asRing5)
playSound(0, 0x40428A09);
- }
break;
case 0x4807:
if (sender == _asRing2) {
@@ -548,11 +548,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_ssFence, 0x4809, 0);
setGlobalVar(V_FLYTRAP_RING_FENCE, 0);
} else if (sender == _asVenusFlyTrap) {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
+ if (getGlobalVar(V_FLYTRAP_RING_BRIDGE))
sendMessage(_asRing2, 0x4807, 0);
- } else {
+ else
sendMessage(_asRing4, 0x4807, 0);
- }
}
break;
case 0x480F:
@@ -588,10 +587,10 @@ AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
createSurface(200, 128, 315);
_x = 289;
_y = 390;
+ startAnimation(0x800278D2, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1303Balloon::handleMessage);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- startAnimation(0x800278D2, 0, -1);
}
uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -612,15 +611,14 @@ uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam &p
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x020B0003) {
+ if (param.asInteger() == 0x020B0003)
playSound(0, 0x742B0055);
- }
break;
case 0x3002:
playSound(0, 0x470007EE);
stopAnimation();
- SetMessageHandler(NULL);
setVisible(false);
+ SetMessageHandler(NULL);
break;
}
return messageResult;
@@ -631,12 +629,12 @@ void AsScene1303Balloon::stPopBalloon() {
SetMessageHandler(&AsScene1303Balloon::hmBalloonPopped);
}
-Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true) {
SetMessageHandler(&Scene1303::handleMessage);
+
setRectList(0x004AF9E8);
-
setBackground(0x01581A9C);
setPalette(0x01581A9C);
insertMouse433(0x81A9801D);
@@ -663,9 +661,8 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asBalloon, 0x2000, 0);
break;
case 0x4826:
- if (sender == _asBalloon && getGlobalVar(V_HAS_NEEDLE)) {
+ if (sender == _asBalloon && getGlobalVar(V_HAS_NEEDLE))
setMessageList(0x004AF9B8);
- }
break;
}
return 0;
@@ -695,11 +692,11 @@ uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶
}
Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule, true), _asNeedle(NULL) {
SetMessageHandler(&Scene1304::handleMessage);
- setRectList(0x004B91A8);
+ setRectList(0x004B91A8);
setBackground(0x062C0214);
setPalette(0x062C0214);
insertMouse433(0xC021006A);
@@ -709,14 +706,11 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asKey);
} else {
_asKey = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
- // TODO _asKey->setUpdateDeltaXY();
}
if (!getGlobalVar(V_HAS_NEEDLE)) {
_asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347);
_vm->_collisionMan->addSprite(_asNeedle);
- } else {
- _asNeedle = NULL;
}
_sprite1 = insertStaticSprite(0x0562E621, 1100);
@@ -724,9 +718,11 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x090AF033, 1100);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1304>(217, 347);
setMessageList(0x004B90E8);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene1304>(100, 347);
setMessageList(0x004B90F0);
}
@@ -740,11 +736,10 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x415634A4) {
- if (getGlobalVar(V_BALLOON_POPPED)) {
+ if (getGlobalVar(V_BALLOON_POPPED))
cancelMessageList();
- } else {
+ else
setMessageList(0x004B9158);
- }
}
break;
case 0x4826:
@@ -764,16 +759,18 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
SetMessageHandler(&Scene1305::handleMessage);
- setRectList(0x004B6E98);
+ setRectList(0x004B6E98);
setBackground(0x28801B64);
setPalette(0x28801B64);
insertMouse433(0x01B60280);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1305>(212, 441);
setMessageList(0x004B6E40);
} else {
+ // Klaymen enters falling
insertKlayman<KmScene1305>(212, 441);
setMessageList(0x004B6E48);
}
@@ -793,16 +790,15 @@ AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene
createSurface1(0x043B0270, 100);
startAnimation(0x043B0270, 0, -1);
_newStickFrameIndex = 0;
- SetMessageHandler(&AsScene1306Elevator::handleMessage);
loadSound(0, 0x1C100E83);
loadSound(1, 0x1C08CEC5);
loadSound(2, 0x5D011E87);
+ SetMessageHandler(&AsScene1306Elevator::handleMessage);
}
void AsScene1306Elevator::update() {
- if (_isUp && _countdown != 0 && (--_countdown == 0)) {
+ if (_isUp && _countdown != 0 && (--_countdown == 0))
stGoingDown();
- }
AnimatedSprite::update();
if (_currFrameIndex == 7) {
playSound(1);
@@ -812,9 +808,8 @@ void AsScene1306Elevator::update() {
void AsScene1306Elevator::upGoingDown() {
AnimatedSprite::update();
- if (_currFrameIndex == 5) {
+ if (_currFrameIndex == 5)
_asElevatorDoor->setVisible(true);
- }
}
uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -839,36 +834,36 @@ uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam &pa
void AsScene1306Elevator::stGoingUp() {
setVisible(true);
_isDown = false;
- SetUpdateHandler(&AsScene1306Elevator::update);
startAnimation(0x043B0270, 0, -1);
- NextState(&AsScene1306Elevator::cbGoingUpEvent);
playSound(0);
+ SetUpdateHandler(&AsScene1306Elevator::update);
+ NextState(&AsScene1306Elevator::cbGoingUpEvent);
}
void AsScene1306Elevator::cbGoingUpEvent() {
- SetUpdateHandler(&AsScene1306Elevator::update);
sendMessage(_parentScene, 0x4808, 0);
_isUp = true;
_countdown = 144;
stopAnimation();
setVisible(false);
+ SetUpdateHandler(&AsScene1306Elevator::update);
}
void AsScene1306Elevator::stGoingDown() {
- SetUpdateHandler(&AsScene1306Elevator::upGoingDown);
_isUp = false;
setVisible(true);
startAnimation(0x043B0270, -1, -1);
_playBackwards = true;
- NextState(&AsScene1306Elevator::cbGoingDownEvent);
playSound(1);
+ SetUpdateHandler(&AsScene1306Elevator::upGoingDown);
+ NextState(&AsScene1306Elevator::cbGoingDownEvent);
}
void AsScene1306Elevator::cbGoingDownEvent() {
_isDown = true;
sendMessage(_parentScene, 0x4809, 0);
- SetUpdateHandler(&AsScene1306Elevator::update);
stopAnimation();
+ SetUpdateHandler(&AsScene1306Elevator::update);
}
Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -889,31 +884,29 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
}
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
-
_asTape = insertSprite<AsScene1201Tape>(this, 19, 1100, 359, 445, 0x9148A011);
-
_asElevatorDoor = insertSprite<AnimatedSprite>(0x043B0270, 90, 320, 240);
_asElevatorDoor->startAnimation(0x043B0270, 6, -1);
_asElevatorDoor->setNewHashListIndex(6);
-
_asElevator = insertSprite<AsScene1306Elevator>(this, _asElevatorDoor);
-
_sprite1 = insertStaticSprite(0x036A1EE0, 80);
-
insertStaticSprite(0x00042313, 1100);
if (which < 0) {
+ // Resoring game
insertKlayman<KmScene1306>(380, 440);
setMessageList(0x004AFAD0);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 1) {
+ // Klaymen teleporting in
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 2) {
+ // Klaymen returning from diskplayer
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1306>(515, 440);
_klayman->setDoDeltaX(1);
@@ -924,23 +917,27 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 3) {
+ // Klaymen returning from window
insertKlayman<KmScene1306>(534, 440);
setMessageList(0x004AFC30);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 4) {
+ // Klaymen teleporting out
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 5) {
+ // Klaymen returning from teleporter
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else {
+ // Klaymen coming up in elevator
insertKlayman<KmScene1306>(286, 408);
setSurfacePriority(_asElevator->getSurface(), 1100);
setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
@@ -961,14 +958,13 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x402064D8) {
+ if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x01C66840) {
- if (sendMessage(_asElevator, 0x2001, 0) != 0) {
+ else if (param.asInteger() == 0x01C66840) {
+ if (sendMessage(_asElevator, 0x2001, 0) != 0)
setMessageList(0x004AFBD8);
- } else {
+ else
setMessageList(0x004AFAE0);
- }
} else if (param.asInteger() == 0x8E646E00) {
setMessageList(0x004AFAD8);
clearRectList();
@@ -985,9 +981,8 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480B:
- if (sender == _ssButton) {
+ if (sender == _ssButton)
sendMessage(_asElevator, 0x4808, 0);
- }
break;
case 0x4826:
if (sender == _asKey) {
@@ -1045,21 +1040,15 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
}
static const uint32 kAsScene1307KeyResourceList1[] = {
- 0x0438069C,
- 0x45B0023C,
- 0x05700217
+ 0x0438069C, 0x45B0023C, 0x05700217
};
static const uint32 kAsScene1307KeyResourceList2[] = {
- 0x04441334,
- 0x061433F0,
- 0x06019390
+ 0x04441334, 0x061433F0, 0x06019390
};
static const uint32 kAsScene1307KeyResourceList3[] = {
- 0x11A80030,
- 0x178812B1,
- 0x1488121C
+ 0x11A80030, 0x178812B1, 0x1488121C
};
static const uint32 *kAsScene1307KeyResourceLists[] = {
@@ -1069,27 +1058,16 @@ static const uint32 *kAsScene1307KeyResourceLists[] = {
};
static const int kAsScene1307KeySurfacePriorities[] = {
- 700,
- 500,
- 300,
- 100
+ 700, 500, 300, 100
};
const uint kAsScene1307KeyPointsCount = 12;
static const NPoint kAsScene1307KeyPoints[] = {
- {-2, 0},
- {-5, 0},
- { 5, 0},
- {12, 0},
- {17, 0},
- {25, 0},
- {16, -2},
- {10, -6},
- { 0, -7},
- {-7, -3},
- {-3, 4},
- { 2, 2}
+ {-2, 0}, {-5, 0}, { 5, 0},
+ {12, 0}, {17, 0}, {25, 0},
+ {16, -2}, {10, -6}, { 0, -7},
+ {-7, -3}, {-3, 4}, { 2, 2}
};
const uint kAsScene1307KeyFrameIndicesCount = 20;
@@ -1100,36 +1078,29 @@ static const int16 kAsScene1307KeyFrameIndices[] = {
};
const int kAsScene1307KeyDivValue = 200;
-
const int16 kAsScene1307KeyXDelta = 70;
const int16 kAsScene1307KeyYDelta = -12;
-AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index), _clipRects(clipRects),
+AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint keyIndex, NRect *clipRects)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _keyIndex(keyIndex), _clipRects(clipRects),
_isClickable(true) {
NPoint pt;
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
_dataResource.load(0x22102142);
_pointList = _dataResource.getPointArray(0xAC849240);
-
- pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
+ pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)];
_x = pt.x;
_y = pt.y;
-
- createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], 190, 148);
-
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1307Key::handleMessage);
-
+ createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4], 190, 148);
startAnimation(fileHashes[0], 0, -1);
-
loadSound(0, 0xDC4A1280);
loadSound(1, 0xCC021233);
loadSound(2, 0xC4C23844);
loadSound(3, 0xC4523208);
-
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1307Key::handleMessage);
}
uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1146,7 +1117,7 @@ uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m,
_isClickable = param.asInteger() != 0;
break;
case 0x2001:
- setSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index, param.asInteger());
+ setSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex, param.asInteger());
stMoveKey();
break;
case 0x2003:
@@ -1194,7 +1165,7 @@ void AsScene1307Key::suMoveKey() {
updateBounds();
_pointIndex++;
} else {
- NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
+ NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)];
_x = pt.x + kAsScene1307KeyXDelta;
_y = pt.y + kAsScene1307KeyYDelta;
stInsertKey();
@@ -1202,23 +1173,23 @@ void AsScene1307Key::suMoveKey() {
}
void AsScene1307Key::stRemoveKey() {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
_pointIndex = 0;
- SetSpriteUpdate(&AsScene1307Key::suRemoveKey);
startAnimation(fileHashes[0], 0, -1);
playSound(1);
+ SetSpriteUpdate(&AsScene1307Key::suRemoveKey);
}
void AsScene1307Key::stInsertKey() {
_pointIndex = 0;
- sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]);
- setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]);
- SetSpriteUpdate(&AsScene1307Key::suInsertKey);
+ sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4]);
+ setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4]);
_newStickFrameIndex = STICK_LAST_FRAME;
+ SetSpriteUpdate(&AsScene1307Key::suInsertKey);
}
void AsScene1307Key::stMoveKey() {
- NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)];
+ NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)];
int16 newX = pt.x + kAsScene1307KeyXDelta;
int16 newY = pt.y + kAsScene1307KeyYDelta;
sendMessage(_parentScene, 0x1022, 1000);
@@ -1228,29 +1199,29 @@ void AsScene1307Key::stMoveKey() {
if (newX == _x && newY == _y) {
stInsertKey();
} else {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
_pointIndex = 0;
_frameIndex = 0;
_deltaX = newX - _x;
_deltaY = newY - _y;
- SetSpriteUpdate(&AsScene1307Key::suMoveKey);
startAnimation(fileHashes[0], 0, -1);
+ SetSpriteUpdate(&AsScene1307Key::suMoveKey);
}
}
void AsScene1307Key::stUnlock() {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
startAnimation(fileHashes[1], 0, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
}
void AsScene1307Key::stInsert() {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index];
+ const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
startAnimation(fileHashes[2], 0, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
}
-Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _countdown(0), _asCurrKey(NULL),
_isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
@@ -1279,13 +1250,10 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x00A3621C, 800);
_clipRects[0].set(tempSprite->getDrawRect().x, 0, 640, 480);
-
tempSprite = insertStaticSprite(0x00A3641C, 600);
_clipRects[1].set(tempSprite->getDrawRect().x, 0, 640, 480);
-
tempSprite = insertStaticSprite(0x00A3681C, 400);
_clipRects[2].set(tempSprite->getDrawRect().x, 0, 640, 480);
-
tempSprite = insertStaticSprite(0x00A3701C, 200);
_clipRects[3].set(tempSprite->getDrawRect().x, 0, 640, 480);
@@ -1304,11 +1272,10 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1307::update() {
Scene::update();
- if (_countdown && (--_countdown == 0)) {
+ if (_countdown && (--_countdown == 0))
_doLeaveScene = true;
- } else if (_countdown == 20) {
+ else if (_countdown == 20)
_palette->startFadeToWhite(40);
- }
if (_doLeaveScene && !isSoundPlaying(0)) {
leaveScene(1);
setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
@@ -1348,9 +1315,8 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
}
}
- } else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey) {
+ } else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey)
leaveScene(0);
- }
}
break;
case 0x2002:
@@ -1386,30 +1352,20 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
static const uint32 kScene1308NumberFileHashes[] = {
- 0x08006320,
- 0x10006320,
- 0x20006320,
- 0x40006320,
- 0x80006320,
- 0x00006321,
- 0x00006322,
- 0x00006324,
- 0x00006328,
- 0x08306320,
- 0x10306320,
- 0x20306320,
- 0x40306320,
- 0x80306320,
- 0x00306321,
+ 0x08006320, 0x10006320, 0x20006320,
+ 0x40006320, 0x80006320, 0x00006321,
+ 0x00006322, 0x00006324, 0x00006328,
+ 0x08306320, 0x10306320, 0x20306320,
+ 0x40306320, 0x80306320, 0x00306321,
0x00306322
};
AsScene1308JaggyDoor::AsScene1308JaggyDoor(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _parentScene(parentScene) {
- SetMessageHandler(&AsScene1308JaggyDoor::handleMessage);
setVisible(false);
stopAnimation();
+ SetMessageHandler(&AsScene1308JaggyDoor::handleMessage);
}
uint32 AsScene1308JaggyDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1431,8 +1387,8 @@ uint32 AsScene1308JaggyDoor::handleMessage(int messageNum, const MessageParam &p
void AsScene1308JaggyDoor::stOpenDoor() {
startAnimation(0xBA0AE050, 0, -1);
setVisible(true);
- NextState(&AsScene1308JaggyDoor::stOpenDoorDone);
playSound(0, calcHash("fxDoorOpen38"));
+ NextState(&AsScene1308JaggyDoor::stOpenDoorDone);
}
void AsScene1308JaggyDoor::stOpenDoorDone() {
@@ -1445,8 +1401,8 @@ void AsScene1308JaggyDoor::stCloseDoor() {
startAnimation(0xBA0AE050, -1, -1);
_playBackwards = true;
setVisible(true);
- NextState(&AsScene1308JaggyDoor::stCloseDoorDone);
playSound(0, calcHash("fxDoorClose38"));
+ NextState(&AsScene1308JaggyDoor::stCloseDoorDone);
}
void AsScene1308JaggyDoor::stCloseDoorDone() {
@@ -1457,9 +1413,9 @@ void AsScene1308JaggyDoor::stCloseDoorDone() {
AsScene1308KeyboardDoor::AsScene1308KeyboardDoor(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _parentScene(parentScene) {
+ playSound(0, 0x51456049);
SetMessageHandler(&AsScene1308KeyboardDoor::handleMessage);
NextState(&AsScene1308KeyboardDoor::stFallingKeys);
- playSound(0, 0x51456049);
}
uint32 AsScene1308KeyboardDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1474,9 +1430,9 @@ uint32 AsScene1308KeyboardDoor::handleMessage(int messageNum, const MessageParam
void AsScene1308KeyboardDoor::stFallingKeys() {
startAnimation(0x6238B191, 0, -1);
- NextState(&AsScene1308KeyboardDoor::stFallingKeysDone);
_x = 580;
_y = 383;
+ NextState(&AsScene1308KeyboardDoor::stFallingKeysDone);
}
void AsScene1308KeyboardDoor::stFallingKeysDone() {
@@ -1488,10 +1444,10 @@ void AsScene1308KeyboardDoor::stFallingKeysDone() {
AsScene1308LightWallSymbols::AsScene1308LightWallSymbols(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 0x80180A10, 100, 320, 240), _parentScene(parentScene) {
- SetMessageHandler(&AsScene1308LightWallSymbols::handleMessage);
setVisible(false);
stopAnimation();
Entity::_priority = 1200;
+ SetMessageHandler(&AsScene1308LightWallSymbols::handleMessage);
}
uint32 AsScene1308LightWallSymbols::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1539,32 +1495,31 @@ SsScene1308Number::SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int i
AsScene1308Mouse::AsScene1308Mouse(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1100) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1308Mouse::handleMessage);
_x = 286;
_y = 429;
createSurface1(0xA282C472, 100);
startAnimation(0xA282C472, 0, -1);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene1308Mouse::handleMessage);
}
uint32 AsScene1308Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x66382026) {
+ if (param.asInteger() == 0x66382026)
playSound(0, 0x0CD84468);
- } else if (param.asInteger() == 0x6E28061C) {
+ else if (param.asInteger() == 0x6E28061C)
playSound(0, 0x78C8402C);
- } else if (param.asInteger() == 0x462F0410) {
+ else if (param.asInteger() == 0x462F0410)
playSound(0, 0x60984E28);
- }
break;
}
return messageResult;
}
Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag1(false) {
+ : Scene(vm, parentModule, true), _isProjecting(false), _asProjector(NULL) {
_vm->gameModule()->initKeySlotsPuzzle();
@@ -1585,16 +1540,15 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x0A042060, 1100);
_asJaggyDoor = insertSprite<AsScene1308JaggyDoor>(this);
_asLightWallSymbols = insertSprite<AsScene1308LightWallSymbols>(this);
-
_ssNumber1 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 1)], 0);
_ssNumber2 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0)], 1);
_ssNumber3 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 2)], 2);
-
_sprite2 = insertStaticSprite(0x40043120, 995);
_sprite3 = insertStaticSprite(0x43003100, 995);
_sprite4 = NULL;
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1308>(380, 440);
setMessageList(0x004B57C0);
if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
@@ -1605,6 +1559,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene1308>(640, 440);
setMessageList(0x004B57C8);
if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
@@ -1615,6 +1570,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 2) {
+ // Klaymen returning from keyslots panel
insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
@@ -1626,6 +1582,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene1308>(41, 440);
setMessageList(0x004B57D0);
sendMessage(_asJaggyDoor, 0x4808, 0);
@@ -1639,19 +1596,16 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
}
}
- if (_sprite4) {
+ if (_sprite4)
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite4->getDrawRect().x2(), 480);
- } else {
+ else
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
- }
if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_asProjector);
_asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_asProjector->setRepl(64, 0);
- } else {
- _asProjector = NULL;
}
}
@@ -1662,15 +1616,14 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x88C11390) {
setRectList(0x004B59A0);
- _flag1 = true;
+ _isProjecting = true;
} else if (param.asInteger() == 0x08821382) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
- if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED))
setRectList(0x004B5990);
- } else {
+ else
setRectList(0x004B5980);
- }
- _flag1 = false;
+ _isProjecting = false;
} else if (param.asInteger() == 0x4AC68808) {
clearRectList();
sendMessage(_asJaggyDoor, 0x4809, 0);
@@ -1687,11 +1640,10 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x2000:
- if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
+ if (getGlobalVar(V_KEYDOOR_UNLOCKED))
setRectList(0x004B5990);
- } else {
+ else
setRectList(0x004B5980);
- }
setMessageList(0x004B57E8, false);
_sprite1->setVisible(true);
_klayman->setVisible(true);
@@ -1719,23 +1671,22 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _asProjector) {
- if (_flag1) {
+ if (_isProjecting)
setMessageList2(0x004B5868);
- } else {
+ else {
if (param.asInteger() == 1) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B5848);
} else if (sendMessage(_asProjector, 0x480C, _klayman->getX() <= _asProjector->getX() ? 0 : 1) != 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B5830);
- } else {
+ } else
setMessageList2(0x004B5800);
- }
}
} else if (sender == _asTape) {
- if (_flag1) {
+ if (_isProjecting)
setMessageList2(0x004B5868);
- } else if (_messageListStatus != 2) {
+ else if (_messageListStatus != 2) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList2(0x004B58E0);
}
@@ -1745,7 +1696,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true) {
SetMessageHandler(&Scene1317::handleMessage);
@@ -1817,16 +1768,6 @@ uint32 Scene1317::hmChooseKing(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-uint32 Scene1317::hmNoDecisionYet(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- stChooseKing();
- break;
- }
- return messageResult;
-}
-
uint32 Scene1317::hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -1837,16 +1778,6 @@ uint32 Scene1317::hmHoborgAsKing(int messageNum, const MessageParam ¶m, Enti
return messageResult;
}
-uint32 Scene1317::hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- leaveScene(0);
- break;
- }
- return messageResult;
-}
-
uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -1859,45 +1790,45 @@ uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *
void Scene1317::stChooseKing() {
showMouse(true);
- SetMessageHandler(&Scene1317::hmChooseKing);
- SetUpdateHandler(&Scene1317::upChooseKing);
_smackerFileHash = 0x10982841;
_keepLastSmackerFrame = true;
_decisionCountdown = 450;
_klaymanBlinks = false;
_klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15;
+ SetMessageHandler(&Scene1317::hmChooseKing);
+ SetUpdateHandler(&Scene1317::upChooseKing);
}
void Scene1317::stNoDecisionYet() {
showMouse(false);
- SetMessageHandler(&Scene1317::hmNoDecisionYet);
- SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x20982841;
_keepLastSmackerFrame = false;
+ SetMessageHandler(&Scene1317::handleMessage);
+ SetUpdateHandler(&Scene1317::update);
}
void Scene1317::stHoborgAsKing() {
showMouse(false);
- SetMessageHandler(&Scene1317::hmHoborgAsKing);
- SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x40982841;
_keepLastSmackerFrame = false;
+ SetMessageHandler(&Scene1317::hmHoborgAsKing);
+ SetUpdateHandler(&Scene1317::update);
}
void Scene1317::stKlaymanAsKing() {
showMouse(false);
- SetMessageHandler(&Scene1317::hmKlaymanAsKing);
- SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x80982841;
_keepLastSmackerFrame = false;
+ SetMessageHandler(&Scene1317::hmEndMovie);
+ SetUpdateHandler(&Scene1317::update);
}
void Scene1317::stEndMovie() {
showMouse(false);
- SetMessageHandler(&Scene1317::hmEndMovie);
- SetUpdateHandler(&Scene1317::update);
_smackerFileHash = 0x40800711;
_keepLastSmackerFrame = false;
+ SetMessageHandler(&Scene1317::hmEndMovie);
+ SetUpdateHandler(&Scene1317::update);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
index e01daf1..ebbd031 100644
--- a/engines/neverhood/module1300.h
+++ b/engines/neverhood/module1300.h
@@ -37,6 +37,7 @@ public:
Module1300(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1300();
protected:
+ int _sceneNum;
uint32 _musicFileHash;
void createScene(int sceneNum, int which);
void updateScene();
@@ -95,7 +96,7 @@ protected:
class Scene1303 : public Scene {
public:
- Scene1303(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1303(NeverhoodEngine *vm, Module *parentModule);
protected:
Sprite *_sprite1;
Sprite *_asBalloon;
@@ -162,13 +163,13 @@ protected:
class AsScene1307Key : public AnimatedSprite {
public:
- AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects);
+ AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint keyIndex, NRect *clipRects);
protected:
Scene *_parentScene;
NPointArray *_pointList;
uint _pointIndex;
int _frameIndex;
- uint _index;
+ uint _keyIndex;
NRect *_clipRects;
bool _isClickable;
int16 _prevX, _prevY;
@@ -186,7 +187,7 @@ protected:
class Scene1307 : public Scene {
public:
- Scene1307(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1307(NeverhoodEngine *vm, Module *parentModule);
protected:
NPointArray *_keyHolePoints;
NRect _keyHoleRects[16];
@@ -262,13 +263,13 @@ protected:
Sprite *_sprite3;
Sprite *_sprite4;
Sprite *_sprite5;
- bool _flag1;
+ bool _isProjecting;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
class Scene1317 : public Scene {
public:
- Scene1317(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1317(NeverhoodEngine *vm, Module *parentModule);
protected:
SmackerPlayer *_smackerPlayer;
bool _klaymanBlinks;
@@ -280,9 +281,7 @@ protected:
void upChooseKing();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmChooseKing(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmNoDecisionYet(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender);
void stChooseKing();
void stNoDecisionYet();
Commit: af37a2200e01e0ac40a7eb4646dbc8a1a82b6b1b
https://github.com/scummvm/scummvm/commit/af37a2200e01e0ac40a7eb4646dbc8a1a82b6b1b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1400 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 0eeee2e..732cff7 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -317,9 +317,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 5;
- _vm->gameState().sceneNum = 6;
- createModule(1300, -1);
+ _vm->gameState().which = 2;
+ _vm->gameState().sceneNum = 3;
+ createModule(1400, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 0693417..2494941 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -35,11 +35,10 @@ Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addMusic(0x00AD0012, 0x06333232);
_vm->_soundMan->addMusic(0x00AD0012, 0x624A220E);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else {
+ else
createScene(0, 0);
- }
}
@@ -49,37 +48,44 @@ Module1400::~Module1400() {
void Module1400::createScene(int sceneNum, int which) {
debug("Module1400::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_vm->_soundMan->startMusic(0x06333232, 0, 2);
_childObject = new Scene1401(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->stopMusic(0x06333232, 0, 2);
_vm->_soundMan->stopMusic(0x624A220E, 0, 2);
_childObject = new Scene1402(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->stopMusic(0x06333232, 0, 2);
_vm->_soundMan->startMusic(0x624A220E, 0, 2);
_childObject = new Scene1403(_vm, this, which);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_vm->_soundMan->startMusic(0x06333232, 0, 2);
_childObject = new Scene1404(_vm, this, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->startMusic(0x06333232, 0, 2);
- _childObject = new Scene1405(_vm, this, which);
+ _childObject = new Scene1405(_vm, this);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
_vm->_soundMan->stopMusic(0x06333232, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 2);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->_soundMan->stopMusic(0x06333232, 0, 2);
- _childObject = new Scene1407(_vm, this, which);
+ _childObject = new Scene1407(_vm, this);
break;
}
SetUpdateHandler(&Module1400::updateScene);
@@ -88,36 +94,33 @@ void Module1400::createScene(int sceneNum, int which) {
void Module1400::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(1, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(3, 0);
- } else {
+ else
leaveModule(0);
- }
break;
case 1:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(2, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(6, -1);
- } else {
+ else
createScene(0, 1);
- }
break;
case 2:
createScene(1, 1);
break;
case 3:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(4, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(5, -1);
- } else {
+ else
createScene(0, 2);
- }
break;
case 4:
createScene(3, 1);
@@ -140,9 +143,9 @@ AsScene1401Pipe::AsScene1401Pipe(NeverhoodEngine *vm)
createSurface(900, 152, 147);
_x = 454;
_y = 217;
- SetMessageHandler(&AsScene1401Pipe::handleMessage);
- SetUpdateHandler(&AsScene1401Pipe::update);
startAnimation(0x4C210500, 0, -1);
+ SetUpdateHandler(&AsScene1401Pipe::update);
+ SetMessageHandler(&AsScene1401Pipe::handleMessage);
}
AsScene1401Pipe::~AsScene1401Pipe() {
@@ -151,9 +154,8 @@ AsScene1401Pipe::~AsScene1401Pipe() {
void AsScene1401Pipe::update() {
AnimatedSprite::update();
- if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_countdown1 != 0 && (--_countdown1 == 0))
stDoneSucking();
- }
if (_countdown2 != 0 && (--_countdown2 == 0)) {
_vm->_soundMan->addSound(0x01104C08, 0x4A116437);
_vm->_soundMan->playSoundLooping(0x4A116437);
@@ -162,18 +164,16 @@ void AsScene1401Pipe::update() {
void AsScene1401Pipe::upSuckInProjector() {
AnimatedSprite::update();
- if (_countdown1 != 0) {
+ if (_countdown1 != 0)
_countdown1--;
- }
}
uint32 AsScene1401Pipe::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x0A8A1490) {
+ if (param.asInteger() == 0x0A8A1490)
playSound(1, 0x6AB6666F);
- }
break;
case 0x2000:
_countdown1 = 70;
@@ -191,11 +191,10 @@ uint32 AsScene1401Pipe::hmSuckInProjector(int messageNum, const MessageParam &pa
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
- if (_countdown1 != 0) {
+ if (_countdown1 != 0)
stStartSucking();
- } else {
+ else
stDoneSucking();
- }
SetMessageHandler(&AsScene1401Pipe::handleMessage);
SetUpdateHandler(&AsScene1401Pipe::update);
break;
@@ -216,8 +215,8 @@ void AsScene1401Pipe::stDoneSucking() {
void AsScene1401Pipe::stSuckInProjector() {
startAnimation(0x6C210810, 0, -1);
- SetMessageHandler(&AsScene1401Pipe::hmSuckInProjector);
SetUpdateHandler(&AsScene1401Pipe::upSuckInProjector);
+ SetMessageHandler(&AsScene1401Pipe::hmSuckInProjector);
}
AsScene1401Mouse::AsScene1401Mouse(NeverhoodEngine *vm)
@@ -226,22 +225,21 @@ AsScene1401Mouse::AsScene1401Mouse(NeverhoodEngine *vm)
createSurface(100, 71, 41);
_x = 478;
_y = 433;
+ startAnimation(0xA282C472, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1401Mouse::handleMessage);
- startAnimation(0xA282C472, 0, -1);
}
uint32 AsScene1401Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x66382026) {
+ if (param.asInteger() == 0x66382026)
playSound(0, 0x0CD84468);
- } else if (param.asInteger() == 0x6E28061C) {
+ else if (param.asInteger() == 0x6E28061C)
playSound(0, 0x78C8402C);
- } else if (param.asInteger() == 0x462F0410) {
+ else if (param.asInteger() == 0x462F0410)
playSound(0, 0x60984E28);
- }
break;
case 0x4839:
stSuckedIn();
@@ -255,9 +253,9 @@ void AsScene1401Mouse::suSuckedIn() {
if (_collisionBounds.y1 <= 150) {
playSound(0, 0x0E32247F);
stopAnimation();
- SetSpriteUpdate(NULL);
- SetMessageHandler(NULL);
setVisible(false);
+ SetMessageHandler(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -272,9 +270,9 @@ AsScene1401Cheese::AsScene1401Cheese(NeverhoodEngine *vm)
createSurface(200, 152, 147);
_x = 427;
_y = 433;
+ startAnimation(0x461A1490, 0, -1);
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1401Cheese::handleMessage);
- startAnimation(0x461A1490, 0, -1);
}
uint32 AsScene1401Cheese::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -292,9 +290,9 @@ void AsScene1401Cheese::suSuckedIn() {
if (_collisionBounds.y1 <= 150) {
playSound(0, 0x18020439);
stopAnimation();
- SetSpriteUpdate(NULL);
- SetMessageHandler(NULL);
setVisible(false);
+ SetMessageHandler(NULL);
+ SetSpriteUpdate(NULL);
}
}
@@ -304,29 +302,26 @@ void AsScene1401Cheese::stSuckedIn() {
}
AsScene1401BackDoor::AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen)
- : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) {
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0), _isOpen(isOpen) {
_x = 320;
_y = 240;
createSurface1(0x04551900, 100);
- SetUpdateHandler(&AsScene1401BackDoor::update);
- SetMessageHandler(&AsScene1401BackDoor::handleMessage);
- _newStickFrameIndex = STICK_LAST_FRAME;
if (isOpen) {
- _isOpen = true;
- startAnimation(0x04551900, -1,- 1);
+ startAnimation(0x04551900, -1, -1);
_countdown = 48;
} else {
- _isOpen = false;
stopAnimation();
setVisible(false);
}
+ _newStickFrameIndex = STICK_LAST_FRAME;
+ SetUpdateHandler(&AsScene1401BackDoor::update);
+ SetMessageHandler(&AsScene1401BackDoor::handleMessage);
}
void AsScene1401BackDoor::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
stCloseDoor();
- }
AnimatedSprite::update();
}
@@ -411,29 +406,25 @@ uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶
break;
case 0x4807:
setGlobalVar(V_PROJECTOR_SLOT, (_x - _asProjectorItem->point.x) / 108);
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->lockSlotIndex) {
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->lockSlotIndex)
stStartLockedInSlot();
- } else {
+ else
stIdle();
- }
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount) {
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount)
incGlobalVar(V_PROJECTOR_SLOT, 1);
- }
- } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0) {
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0)
incGlobalVar(V_PROJECTOR_SLOT, -1);
- }
stMoving();
break;
case 0x480C:
// Check if the projector can be moved
- if (param.asInteger() != 1) {
+ if (param.asInteger() != 1)
messageResult = (int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount ? 1 : 0;
- } else {
+ else
messageResult = getGlobalVar(V_PROJECTOR_SLOT) > 0 ? 1 : 0;
- }
break;
case 0x482A:
sendMessage(_parentScene, 0x1022, 990);
@@ -455,9 +446,8 @@ uint32 AsCommonProjector::hmLockedInSlot(int messageNum, const MessageParam &par
if (param.asPoint().x - _x >= 17 && param.asPoint().x - _x <= 56 &&
param.asPoint().y - _y >= -120 && param.asPoint().y - _y <= -82) {
sendMessage(_parentScene, 0x4826, 1);
- } else {
+ } else
sendMessage(_parentScene, 0x4826, 0);
- }
messageResult = 1;
break;
case 0x4807:
@@ -466,21 +456,18 @@ uint32 AsCommonProjector::hmLockedInSlot(int messageNum, const MessageParam &par
break;
case 0x480B:
if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount) {
+ if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount)
incGlobalVar(V_PROJECTOR_SLOT, 1);
- }
- } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0) {
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0)
incGlobalVar(V_PROJECTOR_SLOT, -1);
- }
stTurnToFront();
break;
case 0x480C:
// Check if the projector can be moved
- if (param.asInteger() != 1) {
+ if (param.asInteger() != 1)
messageResult = (int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount ? 1 : 0;
- } else {
+ else
messageResult = getGlobalVar(V_PROJECTOR_SLOT) > 0 ? 1 : 0;
- }
break;
case 0x480F:
stStartProjecting();
@@ -547,9 +534,9 @@ void AsCommonProjector::moveProjector() {
}
}
- if (_lockedInSlot && !nowLockedInSlot) {
+ if (_lockedInSlot && !nowLockedInSlot)
_lockedInSlot = false;
- } else if (!_lockedInSlot && nowLockedInSlot) {
+ else if (!_lockedInSlot && nowLockedInSlot) {
playSound(1, 0x5440E474);
_lockedInSlot = true;
}
@@ -561,82 +548,82 @@ void AsCommonProjector::stSuckedIn() {
if (_collisionBounds.y1 <= 150) {
sendMessage(_asPipe, 0x483A, 0);
stopAnimation();
+ setVisible(false);
SetMessageHandler(&Sprite::handleMessage);
SetSpriteUpdate(NULL);
- setVisible(false);
}
}
void AsCommonProjector::stIdle() {
- SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::handleMessage);
startAnimation(0x10E3042B, 0, -1);
+ SetMessageHandler(&AsCommonProjector::handleMessage);
+ SetSpriteUpdate(NULL);
}
void AsCommonProjector::stMoving() {
_beforeMoveX = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
startAnimation(0x14A10137, 0, -1);
- SetSpriteUpdate(&AsCommonProjector::suMoving);
- SetMessageHandler(&AsCommonProjector::handleMessage);
playSound(1, 0xEC008474);
+ SetMessageHandler(&AsCommonProjector::handleMessage);
+ SetSpriteUpdate(&AsCommonProjector::suMoving);
}
void AsCommonProjector::stStartLockedInSlot() {
- SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
startAnimation(0x80C32213, 0, -1);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
+ SetSpriteUpdate(NULL);
NextState(&AsCommonProjector::stStayLockedInSlot);
}
void AsCommonProjector::stStayLockedInSlot() {
- SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
startAnimation(0xD23B207F, 0, -1);
+ SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
+ SetSpriteUpdate(NULL);
}
void AsCommonProjector::stStartProjecting() {
startAnimation(0x50A80517, 0, -1);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
- SetSpriteUpdate(NULL);
- NextState(&AsCommonProjector::stLockedInSlot);
setGlobalVar(V_PROJECTOR_ACTIVE, 1);
playSound(0, 0xCC4A8456);
_vm->_soundMan->addSound(0x05331081, 0xCE428854);
_vm->_soundMan->playSoundLooping(0xCE428854);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&AsCommonProjector::stLockedInSlot);
}
void AsCommonProjector::stLockedInSlot() {
sendMessage(_parentScene, 0x480F, 0);
startAnimation(0xD833207F, 0, -1);
- SetSpriteUpdate(NULL);
SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
+ SetSpriteUpdate(NULL);
}
void AsCommonProjector::stStopProjecting() {
startAnimation(0x50A94417, 0, -1);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
- NextState(&AsCommonProjector::stStayLockedInSlot);
setGlobalVar(V_PROJECTOR_ACTIVE, 0);
playSound(0, 0xCC4A8456);
_vm->_soundMan->deleteSound(0xCE428854);
+ SetMessageHandler(&AsCommonProjector::hmAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&AsCommonProjector::stStayLockedInSlot);
}
void AsCommonProjector::stTurnToFront() {
_beforeMoveX = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
startAnimation(0x22CB4A33, 0, -1);
- SetSpriteUpdate(&AsCommonProjector::suMoving);
SetMessageHandler(&AsCommonProjector::hmAnimation);
+ SetSpriteUpdate(&AsCommonProjector::suMoving);
NextState(&AsCommonProjector::stMoving);
}
void AsCommonProjector::stStartSuckedIn() {
setGlobalVar(V_PROJECTOR_LOCATION, 4);
setGlobalVar(V_PROJECTOR_SLOT, 0);
- SetSpriteUpdate(&AsCommonProjector::stSuckedIn);
- SetMessageHandler(&Sprite::handleMessage);
startAnimation(0x708D4712, 0, -1);
playSound(2);
+ SetMessageHandler(&Sprite::handleMessage);
+ SetSpriteUpdate(&AsCommonProjector::stSuckedIn);
}
Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
@@ -646,8 +633,8 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1401::handleMessage);
SetUpdateHandler(&Scene1401::update);
- setRectList(0x004B6758);
+ setRectList(0x004B6758);
setBackground(0x08221FA5);
setPalette(0x08221FA5);
insertMouse433(0x21FA108A);
@@ -668,18 +655,22 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2->setVisible(false);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1401>(380, 447);
setMessageList(0x004B65C8);
_sprite1->setVisible(false);
} else if (which == 1) {
+ // Klaymen entering from the left
insertKlayman<KmScene1401>(0, 447);
setMessageList(0x004B65D0);
_sprite1->setVisible(false);
} else if (which == 2) {
+ // Klaymen entering from the right
insertKlayman<KmScene1401>(660, 447);
setMessageList(0x004B65D8);
_sprite1->setVisible(false);
} else {
+ // Klaymen entering from the back
insertKlayman<KmScene1401>(290, 413);
setMessageList(0x004B65E8);
_sprite1->setVisible(false);
@@ -704,11 +695,10 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480);
- if (which == 0 && _asProjector) {
+ if (which == 0 && _asProjector)
sendMessage(_asProjector, 0x482B, 0);
- }
- _asBackDoor = insertSprite<AsScene1401BackDoor>(_klayman, which == 1);
+ _asBackDoor = insertSprite<AsScene1401BackDoor>(_klayman, which == 0);
}
@@ -717,33 +707,30 @@ void Scene1401::update() {
if (_asProjector && !_projectorBorderFlag && _asProjector->getY() < 360) {
_sprite2->setVisible(true);
_projectorBorderFlag = true;
- } else {
+ } else
_sprite2->setVisible(false);
- }
}
uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x02144CB1) {
+ if (param.asInteger() == 0x02144CB1)
sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
- } else if (param.asInteger() == 0x402064D8) {
+ else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x01C66840) {
- if (sendMessage(_asBackDoor, 0x2001, 0) != 0) {
+ else if (param.asInteger() == 0x01C66840) {
+ if (sendMessage(_asBackDoor, 0x2001, 0) != 0)
setMessageList(0x004B6690);
- } else {
+ else
setMessageList(0x004B66B0);
- }
}
break;
case 0x1019:
- if (param.asInteger() != 0) {
+ if (param.asInteger() != 0)
leaveScene(2);
- } else {
+ else
leaveScene(1);
- }
break;
case 0x480B:
if (sender == _ssFloorButton) {
@@ -755,31 +742,27 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504)
sendMessage(_asProjector , 0x4839, 0);
- } else if (sender == _ssButton) {
+ } else if (sender == _ssButton)
sendMessage(_ssButton, 0x4808, 0);
- }
break;
case 0x4826:
if (sender == _asProjector) {
if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B6658);
- } else {
+ } else
setMessageList2(0x004B65F0);
- }
}
break;
case 0x482A:
_sprite1->setVisible(true);
- if (_asProjector) {
+ if (_asProjector)
sendMessage(_asProjector, 0x482B, 0);
- }
break;
case 0x482B:
_sprite1->setVisible(false);
- if (_asProjector) {
+ if (_asProjector)
sendMessage(_asProjector, 0x482A, 0);
- }
break;
}
return 0;
@@ -792,10 +775,9 @@ SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHas
SetFilterY(&Sprite::defFilterY);
SetUpdateHandler(&StaticSprite::updatePosition);
-
}
-AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int which)
+AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int status)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
createSurface(900, 152, 147);
@@ -805,20 +787,20 @@ AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentSce
SetMessageHandler(&AsScene1402PuzzleBox::handleMessage);
_x = 279;
_y = 270;
- if (which == 2) {
+ if (status == 2) {
// Puzzle box after the puzzle was solved
startAnimation(0x20060259, 0, -1);
- NextState(&AsScene1402PuzzleBox::stMoveDownSolvedDone);
playSound(0, 0x419014AC);
loadSound(1, 0x61901C29);
- } else if (which == 1) {
+ NextState(&AsScene1402PuzzleBox::stMoveDownSolvedDone);
+ } else if (status == 1) {
// Puzzle box appears
startAnimation(0x210A0213, 0, -1);
- NextState(&AsScene1402PuzzleBox::stMoveUpDone);
playSound(0, 0x41809C6C);
+ NextState(&AsScene1402PuzzleBox::stMoveUpDone);
} else {
// Puzzle box is here
- startAnimation(0x20060259, 0, -1);
+ startAnimation(0x20060259, -1, -1);
loadSound(1, 0x61901C29);
_newStickFrameIndex = STICK_LAST_FRAME;
}
@@ -879,15 +861,17 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B0C98);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
- if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
+ if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED))
_asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
- }
} else if (which == 1) {
+ // Klaymen entering from the left
insertKlayman<KmScene1402>(42, 391);
setMessageList(0x004B0B50);
} else if (which == 2) {
+ // Klaymen returning from the puzzle box
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
@@ -896,10 +880,10 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
clearRectList();
showMouse(false);
startShaking();
- } else {
+ } else
_asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
- }
} else {
+ // Klaymen entering from the right
insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
@@ -952,9 +936,9 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x00F43389) {
- if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
+ if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED))
leaveScene(0);
- } else {
+ else {
clearRectList();
_klayman->setVisible(false);
showMouse(false);
@@ -964,11 +948,10 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x1019:
- if (param.asInteger()) {
+ if (param.asInteger())
leaveScene(0);
- } else {
+ else
leaveScene(1);
- }
break;
case 0x2000:
stopShaking();
@@ -987,9 +970,8 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sendMessage(_asProjector, 0x408C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B0BB8);
- } else {
+ } else
setMessageList2(0x004B0B68);
- }
}
}
return 0;
@@ -1100,11 +1082,10 @@ AsScene1407Mouse::AsScene1407Mouse(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _currSectionIndex(0) {
createSurface(100, 117, 45);
-
- SetUpdateHandler(&AnimatedSprite::update);
_x = 108;
_y = 106;
stIdleLookAtGoodHole();
+ SetUpdateHandler(&AnimatedSprite::update);
}
void AsScene1407Mouse::suWalkTo() {
@@ -1114,9 +1095,9 @@ void AsScene1407Mouse::suWalkTo() {
else if (xdelta < -_deltaX)
xdelta = -_deltaX;
_deltaX = 0;
- if (_walkDestX == _x) {
+ if (_walkDestX == _x)
sendMessage(this, 0x1019, 0);
- } else {
+ else {
_x += xdelta;
updateBounds();
}
@@ -1149,13 +1130,12 @@ uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m
_walkDestX = kScene1407MouseHoles[holeIndex].x;
stWalkToHole();
} else {
- if (mouseX < kScene1407MouseSections[_currSectionIndex].x1) {
+ if (mouseX < kScene1407MouseSections[_currSectionIndex].x1)
_walkDestX = kScene1407MouseSections[_currSectionIndex].x1;
- } else if (mouseX > kScene1407MouseSections[_currSectionIndex].x2) {
+ else if (mouseX > kScene1407MouseSections[_currSectionIndex].x2)
_walkDestX = kScene1407MouseSections[_currSectionIndex].x2;
- } else {
+ else
_walkDestX = mouseX;
- }
stWalkToDest();
}
}
@@ -1169,14 +1149,12 @@ uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m
// Find the nearest hole and go through it, and exit at the first hole
int16 distance = 640;
int matchIndex = 50;
- for (int index = 0; index < 50; index++) {
- if (kScene1407MouseHoles[index].sectionIndex == _currSectionIndex) {
- if (ABS(kScene1407MouseHoles[index].x - _x) < distance) {
- matchIndex = index;
- distance = ABS(kScene1407MouseHoles[index].x - _x);
- }
+ for (int index = 0; index < 50; index++)
+ if (kScene1407MouseHoles[index].sectionIndex == _currSectionIndex &&
+ ABS(kScene1407MouseHoles[index].x - _x) < distance) {
+ matchIndex = index;
+ distance = ABS(kScene1407MouseHoles[index].x - _x);
}
- }
if (matchIndex < 50) {
_nextHoleIndex = 0;
_walkDestX = kScene1407MouseHoles[matchIndex].x;
@@ -1191,16 +1169,16 @@ uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m
void AsScene1407Mouse::stIdleLookAtGoodHole() {
setDoDeltaX(kScene1407MouseHoles[kScene1407MouseSections[_currSectionIndex].goodHoleIndex].x < _x ? 1 : 0);
startAnimation(0x72215194, 0, -1);
- SetSpriteUpdate(NULL);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
+ SetSpriteUpdate(NULL);
}
void AsScene1407Mouse::stWalkToDest() {
if (_walkDestX != _x) {
setDoDeltaX(_walkDestX < _x ? 1 : 0);
startAnimation(0x22291510, 0, -1);
- SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
+ SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
NextState(&AsScene1407Mouse::stIdleLookAtGoodHole);
}
}
@@ -1208,19 +1186,19 @@ void AsScene1407Mouse::stWalkToDest() {
void AsScene1407Mouse::stWalkToHole() {
setDoDeltaX(_walkDestX < _x ? 1 : 0);
startAnimation(0x22291510, 0, -1);
- SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
SetMessageHandler(&AsScene1407Mouse::handleMessage);
+ SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
NextState(&AsScene1407Mouse::stGoThroughHole);
}
void AsScene1407Mouse::stGoThroughHole() {
startAnimation(0x72215194, 0, -1);
- SetSpriteUpdate(NULL);
- SetMessageHandler(NULL);
- SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
- NextState(&AsScene1407Mouse::stArriveAtHole);
setVisible(false);
_countdown = 12;
+ SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
+ SetMessageHandler(NULL);
+ SetSpriteUpdate(NULL);
+ NextState(&AsScene1407Mouse::stArriveAtHole);
}
void AsScene1407Mouse::stArriveAtHole() {
@@ -1239,7 +1217,7 @@ void AsScene1407Mouse::stArriveAtHole() {
}
}
-Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _puzzleSolvedCountdown(0), _resetButtonCountdown(0) {
SetMessageHandler(&Scene1407::handleMessage);
@@ -1257,11 +1235,10 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1407::update() {
Scene::update();
- if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0)) {
+ if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0))
leaveScene(1);
- } else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0)) {
+ else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0))
_ssResetButton->setVisible(false);
- }
}
uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1299,35 +1276,32 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1403
Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asProjector(NULL), _flag(false) {
+ : Scene(vm, parentModule, true), _asProjector(NULL), _isProjecting(false) {
SetMessageHandler(&Scene1403::handleMessage);
setRectList(0x004B1FF8);
-
setBackground(0x2110A234);
setPalette(0x2110A234);
insertMouse433(0x0A230219);
- _class401_1 = insertStaticSprite(0x01102A33, 100);
- _class401_1->setVisible(false);
-
- _class401_2 = insertStaticSprite(0x04442520, 995);
-
- _class401_3 = insertStaticSprite(0x08742271, 995);
-
+ _sprite1 = insertStaticSprite(0x01102A33, 100);
+ _sprite1->setVisible(false);
+ _sprite2 = insertStaticSprite(0x04442520, 995);
+ _sprite3 = insertStaticSprite(0x08742271, 995);
_asTape1 = insertSprite<AsScene1201Tape>(this, 12, 1100, 201, 468, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape1);
_asTape1->setRepl(64, 0);
-
_asTape2 = insertSprite<AsScene1201Tape>(this, 16, 1100, 498, 468, 0x9048A093);
_vm->_collisionMan->addSprite(_asTape2);
_asTape2->setRepl(64, 0);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1402>(380, 463);
setMessageList(0x004B1F18);
} else {
+ // Klaymen entering from the right
insertKlayman<KmScene1402>(640, 463);
setMessageList(0x004B1F20);
}
@@ -1342,7 +1316,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->updateBounds();
setMessageList(0x004B1F70);
}
- _asProjector->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
+ _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_asProjector->setRepl(64, 0);
}
@@ -1354,11 +1328,11 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
case 0x100D:
if (param.asInteger() == 0x88C11390) {
setRectList(0x004B2008);
- _flag = true;
+ _isProjecting = true;
} else if (param.asInteger() == 0x08821382) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setRectList(0x004B1FF8);
- _flag = false;
+ _isProjecting = false;
}
break;
case 0x1019:
@@ -1366,36 +1340,34 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x1022:
if (sender == _asProjector) {
- if (param.asInteger() >= 1000) {
- setSurfacePriority(_class401_3->getSurface(), 1100);
- } else {
- setSurfacePriority(_class401_3->getSurface(), 995);
- }
+ if (param.asInteger() >= 1000)
+ setSurfacePriority(_sprite3->getSurface(), 1100);
+ else
+ setSurfacePriority(_sprite3->getSurface(), 995);
}
break;
case 0x4807:
- _class401_1->setVisible(false);
+ _sprite1->setVisible(false);
break;
case 0x480F:
- _class401_1->setVisible(true);
+ _sprite1->setVisible(true);
break;
case 0x4826:
if (sender == _asProjector) {
- if (_flag) {
+ if (_isProjecting)
setMessageList2(0x004B1FA8);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B1F88);
} else if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B1F58);
- } else {
+ } else
setMessageList2(0x004B1F28);
- }
} else if (sender == _asTape1 || sender == _asTape2) {
- if (_flag) {
+ if (_isProjecting)
setMessageList2(0x004B1FA8);
- } else if (_messageListStatus != 2) {
+ else if (_messageListStatus != 2) {
sendEntityMessage(_klayman, 0x1014, sender);
setMessageList2(0x004B1FB8);
}
@@ -1416,7 +1388,6 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1404::handleMessage);
setRectList(0x004B8D80);
-
setBackground(0xAC0B006F);
setPalette(0xAC0B006F);
_palette->addPalette(0x00801510, 0, 65, 0);
@@ -1428,17 +1399,19 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
}
_sprite1 = insertStaticSprite(0x1900A1F8, 1100);
-
_asTape = insertSprite<AsScene1201Tape>(this, 14, 1100, 281, 411, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C28);
} else if (which == 1) {
+ // Klaymen returning from the tiles puzzle
insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C30);
} else if (which == 2) {
+ // Klaymen returning from the diskplayer
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1404>(347, 406);
_klayman->setDoDeltaX(1);
@@ -1447,6 +1420,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
}
setMessageList(0x004B8D28);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene1404>(30, 406);
setMessageList(0x004B8C38);
}
@@ -1476,11 +1450,10 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x410650C2) {
- if (_asProjector && _asProjector->getX() == 220) {
+ if (_asProjector && _asProjector->getX() == 220)
setMessageList(0x004B8C40);
- } else {
+ else
setMessageList(0x004B8CE8);
- }
}
break;
case 0x1019:
@@ -1491,9 +1464,8 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
setMessageList2(0x004B8CA0);
- } else {
+ } else
setMessageList2(0x004B8C40);
- }
} else if (sender == _asTape && _messageListStatus != 2) {
sendEntityMessage(_klayman, 0x1014, _asTape);
setMessageList(0x004B8CD0);
@@ -1534,21 +1506,17 @@ AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, ui
setVisible(false);
if (getSubVar(VA_IS_TILE_MATCH, _tileIndex))
_countdown = _vm->_rnd->getRandomNumber(36 - 1) + 1;
- SetUpdateHandler(&AsScene1405Tile::update);
- SetMessageHandler(&AsScene1405Tile::handleMessage);
-
- debug("getSubVar(VA_TILE_SYMBOLS, _tileIndex) = %d", getSubVar(VA_TILE_SYMBOLS, _tileIndex));
-
startAnimation(0x844B805C, getSubVar(VA_TILE_SYMBOLS, _tileIndex), -1);
_newStickFrameIndex = (int16)getSubVar(VA_TILE_SYMBOLS, _tileIndex);
+ SetUpdateHandler(&AsScene1405Tile::update);
+ SetMessageHandler(&AsScene1405Tile::handleMessage);
}
void AsScene1405Tile::update() {
updateAnim();
updatePosition();
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_countdown != 0 && (--_countdown == 0))
show();
- }
}
uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1581,11 +1549,14 @@ void AsScene1405Tile::hide() {
}
}
-Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
_vm->gameModule()->initMemoryPuzzle();
+ SetUpdateHandler(&Scene1405::update);
+ SetMessageHandler(&Scene1405::handleMessage);
+
setBackground(0x0C0C007D);
setPalette(0x0C0C007D);
insertMouse435(0xC00790C8, 20, 620);
@@ -1596,12 +1567,8 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
if (getSubVar(VA_IS_TILE_MATCH, tileIndex))
_tilesLeft--;
}
-
- loadSound(0, 0x68E25540);
-
- SetMessageHandler(&Scene1405::handleMessage);
- SetUpdateHandler(&Scene1405::update);
+ loadSound(0, 0x68E25540);
}
void Scene1405::update() {
@@ -1623,9 +1590,8 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
- }
break;
case 0x2000:
if (_selectFirstTile) {
@@ -1639,12 +1605,10 @@ uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entit
setSubVar(VA_IS_TILE_MATCH, _firstTileIndex, 1);
setSubVar(VA_IS_TILE_MATCH, _secondTileIndex, 1);
_tilesLeft -= 2;
- if (_tilesLeft == 0) {
+ if (_tilesLeft == 0)
playSound(0);
- }
- } else {
+ } else
_countdown = 10;
- }
}
}
break;
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 8f5a4c9..ada3c66 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -35,6 +35,7 @@ public:
Module1400(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1400();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
@@ -154,7 +155,7 @@ public:
class AsScene1402PuzzleBox : public AnimatedSprite {
public:
- AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int which);
+ AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int status);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -202,7 +203,7 @@ protected:
class Scene1407 : public Scene {
public:
- Scene1407(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1407(NeverhoodEngine *vm, Module *parentModule);
protected:
Sprite *_asMouse;
Sprite *_ssResetButton;
@@ -218,13 +219,13 @@ class Scene1403 : public Scene {
public:
Scene1403(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- Sprite *_class401_1;
- Sprite *_class401_2;
- Sprite *_class401_3;
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+ Sprite *_sprite3;
AsScene1201Tape *_asTape1;
AsScene1201Tape *_asTape2;
AsCommonProjector *_asProjector;
- bool _flag;
+ bool _isProjecting;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -262,7 +263,7 @@ protected:
class Scene1405 : public Scene {
public:
- Scene1405(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1405(NeverhoodEngine *vm, Module *parentModule);
int getCountdown() const { return _countdown; }
protected:
bool _selectFirstTile;
Commit: f51140490d971ffa4cbd2095489085573ae795e1
https://github.com/scummvm/scummvm/commit/f51140490d971ffa4cbd2095489085573ae795e1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1500 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1500.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 732cff7..b9ad01e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -319,7 +319,7 @@ void GameModule::startup() {
_vm->gameState().which = 2;
_vm->gameState().sceneNum = 3;
- createModule(1400, -1);
+ createModule(1500, 0);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -411,7 +411,7 @@ void GameModule::createModule(int moduleNum, int which) {
case 1500:
_someFlag1 = false;
setGlobalVar(V_MODULE_NAME, 0x00F10114);
- _childObject = new Module1500(_vm, this, which, true);
+ _childObject = new Module1500(_vm, this, which);
break;
case 1600:
setGlobalVar(V_MODULE_NAME, 0x01A008D8);
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 0b55209..98c55bc 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -24,32 +24,35 @@
namespace Neverhood {
-Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag)
- : Module(vm, parentModule), _flag(flag) {
+Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Module(vm, parentModule) {
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else {
+ else
createScene(3, -1);
- }
}
void Module1500::createScene(int sceneNum, int which) {
debug("Module1500::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_childObject = new Scene1501(_vm, this, 0x30050A0A, 0x58B45E58, 110, 48);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
sendMessage(_parentModule, 0x0800, 0);
createSmackerScene(0x001A0005, true, true, true);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
break;
}
@@ -59,16 +62,12 @@ void Module1500::createScene(int sceneNum, int which) {
void Module1500::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
createScene(1, -1);
break;
case 1:
- if (_flag) {
- createScene(2, -1);
- } else {
- leaveModule(0);
- }
+ createScene(2, -1);
break;
case 3:
createScene(0, -1);
@@ -83,13 +82,12 @@ void Module1500::updateScene() {
// Scene1501
Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
- : Scene(vm, parentModule, true), _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
+ : Scene(vm, parentModule, true), _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _skip(false) {
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
setBackground(backgroundFileHash);
-
setPalette();
addEntity(_palette);
_palette->addBasePalette(backgroundFileHash, 0, 256, 0);
@@ -101,9 +99,7 @@ Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroun
}
void Scene1501::update() {
-
Scene::update();
-
if (_countdown1 != 0) {
_countdown1--;
if (_countdown1 == 0) {
@@ -118,7 +114,7 @@ void Scene1501::update() {
if (_countdown3 != 0)
_countdown3--;
- if (_countdown3 == 0 && _flag && _countdown1 == 0) {
+ if (_countdown3 == 0 && _skip && _countdown1 == 0) {
_countdown1 = 12;
_palette->startFadeToBlack(11);
}
@@ -129,7 +125,7 @@ uint32 Scene1501::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0009:
- _flag = true;
+ _skip = true;
break;
}
return messageResult;
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index c562a24..c17cb45 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -34,9 +34,9 @@ namespace Neverhood {
class Module1500 : public Module {
public:
- Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag);
+ Module1500(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
- bool _flag;
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
@@ -48,7 +48,7 @@ protected:
int _countdown1;
int _countdown2;
int _countdown3;
- bool _flag;
+ bool _skip;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: e2b696b8918b50722a8804e2e3e9f16bfc3a643a
https://github.com/scummvm/scummvm/commit/e2b696b8918b50722a8804e2e3e9f16bfc3a643a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:34-07:00
Commit Message:
NEVERHOOD: Clean up Module1600 (like the ones before)
- Remove AsScene1608Door because the corresponding animation resource didn't exist!
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index b9ad01e..77869fd 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -318,8 +318,8 @@ void GameModule::startup() {
*/
_vm->gameState().which = 2;
- _vm->gameState().sceneNum = 3;
- createModule(1500, 0);
+ _vm->gameState().sceneNum = 7;
+ createModule(1600, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 09bb375..c14e2b3 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -39,19 +39,18 @@ static const uint32 kModule1600SoundList[] = {
Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(4, 1);
- } else if (which == 2) {
+ else if (which == 2)
createScene(5, 0);
- } else if (which == 3) {
+ else if (which == 3)
createScene(6, 1);
- } else if (which == 4) {
+ else if (which == 4)
createScene(1, 0);
- } else {
+ else
createScene(0, 0);
- }
_vm->_soundMan->addSoundList(0x1A008D8, kModule1600SoundList);
_vm->_soundMan->setSoundListParams(kModule1600SoundList, true, 50, 600, 5, 150);
@@ -65,43 +64,52 @@ Module1600::~Module1600() {
void Module1600::createScene(int sceneNum, int which) {
debug("Module1600::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
createNavigationScene(0x004B39D0, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
createNavigationScene(0x004B3A30, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
createNavigationScene(0x004B3A60, which);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
createNavigationScene(0x004B3A90, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
createNavigationScene(0x004B3B20, which);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
createNavigationScene(0x004B3B50, which);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
createNavigationScene(0x004B3B80, which);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_childObject = new Scene1608(_vm, this, which);
break;
case 8:
- _childObject = new Scene1609(_vm, this, which);
+ _vm->gameState().sceneNum = 8;
+ _childObject = new Scene1609(_vm, this);
break;
case 1001:
- if (getGlobalVar(V_TALK_COUNTING_INDEX) == 1) {
+ _vm->gameState().sceneNum = 1;
+ if (getGlobalVar(V_TALK_COUNTING_INDEX) == 1)
createSmackerScene(0x80050200, true, true, false);
- } else if (getGlobalVar(V_TALK_COUNTING_INDEX) == 2) {
+ else if (getGlobalVar(V_TALK_COUNTING_INDEX) == 2)
createSmackerScene(0x80090200, true, true, false);
- } else {
+ else
createSmackerScene(0x80000200, true, true, false);
- }
if (getGlobalVar(V_TALK_COUNTING_INDEX) >= 2)
setGlobalVar(V_TALK_COUNTING_INDEX, 0);
else
@@ -114,7 +122,7 @@ void Module1600::createScene(int sceneNum, int which) {
void Module1600::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (_moduleResult == 0)
createScene(2, 0);
@@ -182,10 +190,6 @@ void Module1600::updateScene() {
AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: AnimatedSprite(vm, 1000), _parentScene(parentScene) {
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::handleMessage);
- SetSpriteUpdate(NULL);
-
createSurface(200, 556, 328);
_x = x;
_y = y;
@@ -211,12 +215,14 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
startAnimation(0xD4220027, 0, -1);
setDoDeltaX(getGlobalVar(V_CAR_DELTA_X));
+ SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::handleMessage);
+ SetSpriteUpdate(NULL);
}
AsCommonCar::~AsCommonCar() {
- if (_finalizeStateCb == AnimationCallback(&AsCommonCar::evTurnCarDone)) {
+ if (_finalizeStateCb == AnimationCallback(&AsCommonCar::evTurnCarDone))
setGlobalVar(V_CAR_DELTA_X, !getGlobalVar(V_CAR_DELTA_X));
- }
}
void AsCommonCar::setPathPoints(NPointArray *pathPoints) {
@@ -318,17 +324,15 @@ uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Ent
minMatchIndex = i;
}
if (minMatchIndex == -1) {
- if (_currPointIndex == 0) {
+ if (_currPointIndex == 0)
moveToPrevPoint();
- } else {
+ else
SetSpriteUpdate(NULL);
- }
} else {
- if (minMatchIndex > _currPointIndex) {
+ if (minMatchIndex > _currPointIndex)
moveToNextPoint();
- } else {
+ else
moveToPrevPoint();
- }
}
} else {
_hasAgainDestPoint = true;
@@ -340,15 +344,15 @@ uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Ent
_yMoveTotalSteps = param.asInteger();
_steps = 0;
_isBraking = false;
- SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
_lastDistance = 640;
+ SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
break;
case 0x2008:
_yMoveTotalSteps = param.asInteger();
_steps = 0;
_isBraking = false;
- SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
_lastDistance = 640;
+ SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
break;
case 0x2009:
stEnterCar();
@@ -407,15 +411,15 @@ void AsCommonCar::stCarAtHome() {
_rectList = NULL;
NextState(&AsCommonCar::stLeanForwardIdle);
startAnimation(0x35698F78, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage);
- SetUpdateHandler(&AsCommonCar::upIdle);
- FinalizeState(&AsCommonCar::evIdleDone);
setDoDeltaX(doDeltaX ? 1 : 0);
_currMoveDirection = 0;
_newMoveDirection = 0;
_steps = 0;
_idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ SetUpdateHandler(&AsCommonCar::upIdle);
+ SetMessageHandler(&AsCommonCar::handleMessage);
+ FinalizeState(&AsCommonCar::evIdleDone);
}
void AsCommonCar::updateTurnMovement() {
@@ -438,18 +442,18 @@ void AsCommonCar::updateMovement() {
_isMoving = false;
_isIdle = true;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
NextState(&AsCommonCar::stLeanForwardIdle);
} else if (!_isBraking && _steps && _isIdle) {
gotoNextState();
_isIdle = false;
startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
NextState(&AsCommonCar::stUpdateMoveDirection);
} else {
- bool flag = false;
+ bool inRect = false;
uint index = 0;
if (_rectList && _rectList->size() > 0) {
while (index < _rectList->size()) {
@@ -458,10 +462,10 @@ void AsCommonCar::updateMovement() {
break;
}
if (index < _rectList->size() && !_rectFlag)
- flag = true;
+ inRect = true;
_rectFlag = index < _rectList->size();
}
- if (flag) {
+ if (inRect) {
gotoNextState();
stHandleRect();
} else if (_newMoveDirection != _currMoveDirection && _isMoving && !_isBusy) {
@@ -474,28 +478,28 @@ void AsCommonCar::updateMovement() {
void AsCommonCar::stEnterCar() {
startAnimation(0xA86A9538, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
NextState(&AsCommonCar::stLeanForwardIdle);
}
void AsCommonCar::stLeaveCar() {
startAnimation(0xA86A9538, -1, -1);
_playBackwards = true;
- SetMessageHandler(&AsCommonCar::hmLeaveCar);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmLeaveCar);
}
void AsCommonCar::stLeanForwardIdle() {
startAnimation(0x35698F78, 0, -1);
- SetMessageHandler(&AsCommonCar::handleMessage);
- SetUpdateHandler(&AsCommonCar::upIdle);
- FinalizeState(&AsCommonCar::evIdleDone);
_currMoveDirection = 0;
_newMoveDirection = 0;
_steps = 0;
_idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ SetUpdateHandler(&AsCommonCar::upIdle);
+ SetMessageHandler(&AsCommonCar::handleMessage);
+ FinalizeState(&AsCommonCar::evIdleDone);
}
void AsCommonCar::evIdleDone() {
@@ -504,19 +508,19 @@ void AsCommonCar::evIdleDone() {
void AsCommonCar::stIdleBlink() {
startAnimation(0xB579A77C, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::stLeanForwardIdle);
_idleCounter = 0;
_idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
+ NextState(&AsCommonCar::stLeanForwardIdle);
}
void AsCommonCar::stHandleRect() {
_isBusy = true;
gotoNextState();
startAnimation(0x9C220DA4, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
FinalizeState(&AsCommonCar::evHandleRectDone);
}
@@ -528,15 +532,14 @@ void AsCommonCar::evHandleRectDone() {
void AsCommonCar::stUpdateMoveDirection() {
_isMoving = true;
- if (_currMoveDirection == 1) {
+ if (_currMoveDirection == 1)
startAnimation(0xD4AA03A4, 0, -1);
- } else if (_currMoveDirection == 3) {
+ else if (_currMoveDirection == 3)
startAnimation(0xD00A1364, 0, -1);
- } else if ((_currMoveDirection == 2 && _doDeltaX) || (_currMoveDirection == 4 && !_doDeltaX)) {
+ else if ((_currMoveDirection == 2 && _doDeltaX) || (_currMoveDirection == 4 && !_doDeltaX))
stTurnCar();
- } else {
+ else
startAnimation(0xD4220027, 0, -1);
- }
setGlobalVar(V_CAR_DELTA_X, _doDeltaX ? 1 : 0);
}
@@ -579,8 +582,8 @@ void AsCommonCar::stBrakeMoveToNextPoint() {
_isBusy = true;
_isBraking = true;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
NextState(&AsCommonCar::stTurnCarMoveToNextPoint);
}
@@ -589,8 +592,8 @@ void AsCommonCar::stTurnCar() {
gotoNextState();
_isBusy = true;
startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
FinalizeState(&AsCommonCar::evTurnCarDone);
_turnMoveStatus = 0;
updateTurnMovement();
@@ -601,8 +604,8 @@ void AsCommonCar::stTurnCarMoveToNextPoint() {
gotoNextState();
_isBusy = true;
startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
FinalizeState(&AsCommonCar::evTurnCarDone);
_turnMoveStatus = 1;
updateTurnMovement();
@@ -613,8 +616,8 @@ void AsCommonCar::stTurnCarMoveToPrevPoint() {
FinalizeState(NULL);
_isBusy = true;
startAnimation(0xF46A0324, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
FinalizeState(&AsCommonCar::evTurnCarDone);
_turnMoveStatus = 2;
updateTurnMovement();
@@ -666,8 +669,8 @@ void AsCommonCar::stBrakeMoveToPrevPoint() {
_isBusy = true;
_isBraking = true;
startAnimation(0x192ADD30, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
SetUpdateHandler(&AsCommonCar::update);
+ SetMessageHandler(&AsCommonCar::hmAnimation);
NextState(&AsCommonCar::stTurnCarMoveToPrevPoint);
}
@@ -692,12 +695,10 @@ void AsCommonCar::suMoveToNextPoint() {
if (_steps <= 0) {
sendMessage(this, 0x1019, 0);
return;
- } else {
+ } else
_steps--;
- }
- } else if (_steps < 11) {
+ } else if (_steps < 11)
_steps++;
- }
bool firstTime = true;
_ySteps = _steps;
@@ -742,9 +743,9 @@ void AsCommonCar::suMoveToNextPoint() {
if (pt1.y < pt2.y)
_newMoveDirection = 1;
if (firstTime) {
- if (pt1.y >= pt2.y) {
+ if (pt1.y >= pt2.y)
stepsCtr += 7;
- } else {
+ else {
stepsCtr -= 4;
if (stepsCtr < 0)
stepsCtr = 0;
@@ -837,12 +838,10 @@ void AsCommonCar::suMoveToPrevPoint() {
if (_steps <= 0) {
sendMessage(this, 0x1019, 0);
return;
- } else {
+ } else
_steps--;
- }
- } else if (_steps < 11) {
+ } else if (_steps < 11)
_steps++;
- }
bool firstTime = true;
_ySteps = _steps;
@@ -980,67 +979,16 @@ void AsCommonCar::updateSound() {
maxSoundCounter = 5 - _steps;
if (maxSoundCounter < 1)
maxSoundCounter = 1;
- } else {
+ } else
maxSoundCounter = 14 - _steps;
- }
- } else {
+ } else
maxSoundCounter = 21;
- }
if (_soundCounter >= maxSoundCounter) {
sendMessage(_parentScene, 0x200D, 0);
_soundCounter = 0;
}
}
-AsScene1608Door::AsScene1608Door(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0x08C80144, 900, 320, 240), _parentScene(parentScene) {
-
- setVisible(false);
- SetMessageHandler(&AsScene1608Door::handleMessage);
- stopAnimation();
-}
-
-uint32 AsScene1608Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- case 0x4808:
- stOpenDoor();
- break;
- case 0x4809:
- stCloseDoor();
- break;
- }
- return messageResult;
-}
-
-void AsScene1608Door::stOpenDoor() {
- startAnimation(0x08C80144, 0, -1);
- setVisible(true);
- NextState(&AsScene1608Door::stOpenDoorDone);
- playSound(0, calcHash("fxDoorOpen23"));
-}
-
-void AsScene1608Door::stOpenDoorDone() {
- sendMessage(_parentScene, 0x2033, 0);
- stopAnimation();
- setVisible(false);
-}
-
-void AsScene1608Door::stCloseDoor() {
- startAnimation(0x08C80144, -1, -1);
- setVisible(true);
- NextState(&AsScene1608Door::stCloseDoorDone);
- playSound(0, calcHash("fxDoorClose23"));
-}
-
-void AsScene1608Door::stCloseDoorDone() {
- sendMessage(_parentScene, 0x2034, 0);
- stopAnimation();
-}
-
AsCommonIdleCarLower::AsCommonIdleCarLower(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
@@ -1059,10 +1007,10 @@ AsCommonIdleCarFull::AsCommonIdleCarFull(NeverhoodEngine *vm, int16 x, int16 y)
AsCommonCarConnector::AsCommonCarConnector(NeverhoodEngine *vm, AsCommonCar *asCar)
: AnimatedSprite(vm, 1100), _asCar(asCar) {
- SetUpdateHandler(&AsCommonCarConnector::update);
createSurface1(0x60281C10, 150);
startAnimation(0x60281C10, -1, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
+ SetUpdateHandler(&AsCommonCarConnector::update);
}
void AsCommonCarConnector::update() {
@@ -1082,14 +1030,16 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asKey);
if (which < 0) {
+ // Restoring game
if (_vm->gameState().which == 1)
+ // Klaymen is in the car
which = 1;
else {
+ // Klaymen is standing around
setRectList(0x004B47D0);
insertKlayman<KmScene1608>(380, 438);
_kmScene1608 = _klayman;
_klaymanInCar = false;
- _asDoor = insertSprite<AsScene1608Door>(this);
_sprite1 = insertStaticSprite(0x7D0404E8, 1100);
setMessageList(0x004B46A8);
setBackground(0x10080E01);
@@ -1102,6 +1052,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x4B18F868, 1200);
}
} else if (which == 0) {
+ // Klaymen entering from the left
_vm->gameState().which = 0;
setRectList(0x004B47D0);
insertKlayman<KmScene1608>(0, 438);
@@ -1114,12 +1065,11 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
insertMouse433(0x80E05108);
_sprite1 = insertStaticSprite(0x7D0404E8, 1100);
- _asDoor = insertSprite<AsScene1608Door>(this);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
SetUpdateHandler(&Scene1608::upLowerFloor);
- sendMessage(_asDoor, 0x4808, 0);
insertStaticSprite(0x4B18F868, 1200);
} else if (which == 2) {
+ // Klaymen returning from looking through the upper window
_vm->gameState().which = 1;
_dataResource.load(0x003C0492);
_roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
@@ -1135,28 +1085,26 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene1608>(373, 220);
_klayman->setDoDeltaX(1);
- } else {
+ } else
insertKlayman<KmScene1608>(283, 220);
- }
_kmScene1608 = _klayman;
setMessageList(0x004B47A8);
SetMessageHandler(&Scene1608::hmUpperFloor);
SetUpdateHandler(&Scene1608::upUpperFloor);
- // NOTE: Setting the point array was handled by messages 0x2000 (array) and 0x2001 (count) in the original
_asCar->setPathPoints(_roomPathPoints);
sendMessage(_asCar, 0x2002, _roomPathPoints->size() - 1);
_sprite3 = insertStaticSprite(0xB47026B0, 1100);
- _rect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _rect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _rect2 = _rect1;
- _rect2.y2 = 215;
- _klayman->setClipRect(_rect1);
- _asCar->setClipRect(_rect1);
- _asIdleCarLower->setClipRect(_rect1);
- _asIdleCarFull->setClipRect(_rect1);
+ _clipRect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _clipRect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _clipRect2 = _clipRect1;
+ _clipRect2.y2 = 215;
+ _klayman->setClipRect(_clipRect1);
+ _asCar->setClipRect(_clipRect1);
+ _asIdleCarLower->setClipRect(_clipRect1);
+ _asIdleCarFull->setClipRect(_clipRect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_rect1);
+ insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
_klaymanInCar = false;
_carClipFlag = false;
_carStatus = 0;
@@ -1165,6 +1113,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
// NOTE: Not in the else because 'which' is set to 1 in the true branch
if (which == 1) {
+ // Klaymen entering riding the car
_vm->gameState().which = 1;
_dataResource.load(0x003C0492);
_roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
@@ -1176,52 +1125,49 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
_asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
_sprite2 = insertStaticSprite(0x491F38A8, 1100);
- _kmScene1608 = createSprite<KmScene1608>(this, 439, 220); // Special Klayman handling...
+ _kmScene1608 = createSprite<KmScene1608>(this, 439, 220);
sendMessage(_kmScene1608, 0x2032, 1);
_kmScene1608->setDoDeltaX(1);
SetMessageHandler(&Scene1608::hmRidingCar);
SetUpdateHandler(&Scene1608::upRidingCar);
_asIdleCarLower->setVisible(false);
_asIdleCarFull->setVisible(false);
- // NOTE: Setting the point array was handled by messages 0x2000 (array) and 0x2001 (count) in the original
_asCar->setPathPoints(_roomPathPoints);
sendMessage(_asCar, 0x2002, 0);
sendMessage(_asCar, 0x2008, 90);
_sprite3 = insertStaticSprite(0xB47026B0, 1100);
- _rect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _rect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _rect2 = _rect1;
- _rect2.y2 = 215;
- _kmScene1608->setClipRect(_rect1);
- _asCar->setClipRect(_rect1);
- _asIdleCarLower->setClipRect(_rect1);
- _asIdleCarFull->setClipRect(_rect1);
+ _clipRect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _clipRect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
+ _clipRect2 = _clipRect1;
+ _clipRect2.y2 = 215;
+ _kmScene1608->setClipRect(_clipRect1);
+ _asCar->setClipRect(_clipRect1);
+ _asIdleCarLower->setClipRect(_clipRect1);
+ _asIdleCarFull->setClipRect(_clipRect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
// ... _vm->_collisionMan->addSprite(_asTape);
- insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_rect1);
+ insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
_klaymanInCar = true;
_carClipFlag = true;
_carStatus = 0;
}
_palette->addPalette("paKlayRed", 0, 64, 0);
-
+
}
Scene1608::~Scene1608() {
setGlobalVar(V_KLAYMAN_IS_DELTA_X, _kmScene1608->isDoDeltaX() ? 1 : 0);
- if (_klaymanInCar) {
+ if (_klaymanInCar)
delete _kmScene1608;
- } else {
+ else
delete _asCar;
- }
}
void Scene1608::upLowerFloor() {
Scene::update();
- if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_countdown1 != 0 && (--_countdown1 == 0))
leaveScene(0);
- }
}
void Scene1608::upUpperFloor() {
@@ -1292,13 +1238,13 @@ void Scene1608::upRidingCar() {
if (_asCar->getX() < 300) {
if (_carClipFlag) {
_carClipFlag = false;
- _asCar->setClipRect(_rect1);
+ _asCar->setClipRect(_clipRect1);
if (!_asCar->isDoDeltaX())
sendMessage(_asCar, 0x200E, 0);
}
} else if (!_carClipFlag) {
_carClipFlag = true;
- _asCar->setClipRect(_rect3);
+ _asCar->setClipRect(_clipRect3);
}
}
@@ -1311,7 +1257,7 @@ uint32 Scene1608::hmLowerFloor(int messageNum, const MessageParam ¶m, Entity
_klayman->setVisible(false);
showMouse(false);
_sprite1->setVisible(false);
- sendMessage(_asDoor, 0x4809, 0);
+ //sendMessage(_asDoor, 0x4809, 0); // Play sound?
_countdown1 = 28;
}
break;
@@ -1322,9 +1268,8 @@ uint32 Scene1608::hmLowerFloor(int messageNum, const MessageParam ¶m, Entity
if (sender == _asTape) {
sendEntityMessage(_kmScene1608, 0x1014, _asTape);
setMessageList(0x004B4770);
- } else if (sender == _asKey) {
+ } else if (sender == _asKey)
setMessageList(0x004B46C8);
- }
break;
}
return 0;
@@ -1334,9 +1279,8 @@ uint32 Scene1608::hmUpperFloor(int messageNum, const MessageParam ¶m, Entity
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x60842040) {
+ if (param.asInteger() == 0x60842040)
_carStatus = 1;
- }
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -1384,12 +1328,12 @@ uint32 Scene1608::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity
void Scene1608::updateKlaymanCliprect() {
if (_kmScene1608->getX() <= 375)
- _kmScene1608->setClipRect(_rect1);
+ _kmScene1608->setClipRect(_clipRect1);
else
- _kmScene1608->setClipRect(_rect2);
+ _kmScene1608->setClipRect(_clipRect2);
}
-Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
// TODO _vm->gameModule()->initScene3011Vars();
@@ -1400,15 +1344,13 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x92124A14);
setPalette(0x92124A14);
+ insertMouse435(0x24A10929, 20, 620);
for (int symbolPosition = 0; symbolPosition < 12; symbolPosition++)
_asSymbols[symbolPosition] = insertSprite<AsScene3011Symbol>(symbolPosition, false);
_ssButton = insertSprite<SsScene3011Button>(this, true);
_vm->_collisionMan->addSprite(_ssButton);
-
- insertMouse435(0x24A10929, 20, 620);
-
loadSound(0, 0x68E25540);
}
@@ -1428,9 +1370,8 @@ void Scene1609::update() {
_countdown1 = 12;
}
}
- if (_isSolved && !isSoundPlaying(0)) {
+ if (_isSolved && !isSoundPlaying(0))
leaveScene(1);
- }
Scene::update();
}
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index a2d5464..28aad13 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -37,6 +37,7 @@ public:
Module1600(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1600();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
@@ -105,18 +106,6 @@ protected:
void updateSound();
};
-class AsScene1608Door : public AnimatedSprite {
-public:
- AsScene1608Door(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stOpenDoor();
- void stOpenDoorDone();
- void stCloseDoor();
- void stCloseDoorDone();
-};
-
class AsCommonIdleCarLower : public AnimatedSprite {
public:
AsCommonIdleCarLower(NeverhoodEngine *vm, int16 x, int16 y);
@@ -142,7 +131,6 @@ public:
protected:
AsCommonCar *_asCar;
Sprite *_asKey;
- Sprite *_asDoor;
Sprite *_asIdleCarLower;
Sprite *_asIdleCarFull;
Sprite *_sprite1;
@@ -150,9 +138,9 @@ protected:
Sprite *_sprite3;
Sprite *_asTape;
Klayman *_kmScene1608;
- NRect _rect1;
- NRect _rect2;
- NRect _rect3;
+ NRect _clipRect1;
+ NRect _clipRect2;
+ NRect _clipRect3;
int _carStatus;
bool _carClipFlag;
bool _klaymanInCar;
@@ -172,7 +160,7 @@ protected:
class Scene1609 : public Scene {
public:
- Scene1609(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1609(NeverhoodEngine *vm, Module *parentModule);
protected:
Sprite *_ssButton;
AsScene3011Symbol *_asSymbols[12];
Commit: 904d9430bf7084e0ca449d69da6e1197d36b3779
https://github.com/scummvm/scummvm/commit/904d9430bf7084e0ca449d69da6e1197d36b3779
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module1700 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 77869fd..46fc2b4 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -317,9 +317,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 2;
- _vm->gameState().sceneNum = 7;
- createModule(1600, -1);
+ _vm->gameState().which = 3;
+ _vm->gameState().sceneNum = 4;
+ createModule(1700, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index df64e19..aa14529 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -42,15 +42,14 @@ Module1700::Module1700(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->setSoundListParams(kModule1700SoundList, true, 50, 600, 5, 150);
_vm->_soundMan->playTwoSounds(0x04212331, 0x41861371, 0x43A2507F, 0);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 0) {
+ else if (which == 0)
createScene(0, -1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(4, 1);
- } else {
+ else
createScene(4, 3);
- }
}
@@ -60,23 +59,28 @@ Module1700::~Module1700() {
void Module1700::createScene(int sceneNum, int which) {
debug("Module1700::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_vm->_soundMan->setSoundListParams(kModule1700SoundList, false, 0, 0, 0, 0);
createSmackerScene(0x3028A005, true, true, false);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
createNavigationScene(0x004AE8B8, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
createNavigationScene(0x004AE8E8, which);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_vm->_soundMan->setSoundListParams(kModule1700SoundList, false, 0, 0, 0, 0);
createSmackerScene(0x01190041, true, true, false);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->setSoundListParams(kModule1700SoundList, false, 0, 0, 0, 0);
_vm->_soundMan->startMusic(0x31114225, 0, 2);
_childObject = new Scene1705(_vm, this, which);
@@ -88,24 +92,23 @@ void Module1700::createScene(int sceneNum, int which) {
void Module1700::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
_vm->_soundMan->setSoundListParams(kModule1700SoundList, true, 0, 0, 0, 0);
createScene(1, 0);
break;
case 1:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(2, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(1, 1);
- }
break;
case 2:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(3, -1);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(1, 1);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2) {
if (!isSoundPlaying(0)) {
setSoundVolume(0, 60);
playSound(0, 0x58B45E58);
@@ -126,18 +129,10 @@ void Module1700::updateScene() {
// Scene1705
static const uint32 kScene1705FileHashes[] = {
- 0x910EA801,
- 0x920EA801,
- 0x940EA801,
- 0x980EA801,
- 0x800EA801,
- 0xB00EA801,
- 0xD00EA801,
- 0x100EA801,
- 0x900EA800,
- 0xD10EA801,
- 0x110EA801,
- 0x910EA800
+ 0x910EA801, 0x920EA801, 0x940EA801,
+ 0x980EA801, 0x800EA801, 0xB00EA801,
+ 0xD00EA801, 0x100EA801, 0x900EA800,
+ 0xD10EA801, 0x110EA801, 0x910EA800
};
SsScene1705WallSymbol::SsScene1705WallSymbol(NeverhoodEngine *vm, uint32 fileHash, int symbolIndex)
@@ -193,49 +188,49 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1705::update);
setHitRects(0x004B69D8);
-
setBackground(0x03118226);
-
setPalette(0x03118226);
_palette->addBasePalette(0x91D3A391, 0, 64, 0);
_palette->copyBasePalette(0, 256, 0);
addEntity(_palette);
-
insertMouse433(0x18222039);
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 0)], 0);
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 1)], 1);
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 2)], 2);
-
_sprite = insertStaticSprite(0x31313A22, 1100);
-
_ssTape = insertSprite<SsScene1705Tape>(this, 15, 1100, 238, 439, 0x02363852);
_vm->_collisionMan->addSprite(_ssTape);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1705>(231, 434);
setMessageList(0x004B69E8);
sendMessage(this, 0x2000, 0);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 1) {
+ // Klaymen teleporting in
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 2) {
+ // Klaymen teleporting out
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 3) {
+ // Klaymen returning from teleporter console
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else {
+ // Klaymen falling through the hole
insertKlayman<KmScene1705>(231, 74);
sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
diff --git a/engines/neverhood/module1700.h b/engines/neverhood/module1700.h
index c0ec9e5..26e1a5e 100644
--- a/engines/neverhood/module1700.h
+++ b/engines/neverhood/module1700.h
@@ -35,6 +35,7 @@ public:
Module1700(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1700();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
Commit: dd26512c0db0eb5189c761cd7b1f7d779bda7617
https://github.com/scummvm/scummvm/commit/dd26512c0db0eb5189c761cd7b1f7d779bda7617
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module1800 (like the ones before)
Changed paths:
engines/neverhood/module1800.cpp
engines/neverhood/module1800.h
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index e4b189b..fbb9483 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -43,15 +43,14 @@ Module1800::Module1800(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->setSoundListParams(kModule1800SoundList, true, 50, 600, 10, 150);
_vm->_soundMan->playTwoSounds(0x04A14718, 0x8A382B55, 0x0C242F1D, 0);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 2) {
+ else if (which == 2)
createScene(5, 0);
- } else if (which == 3) {
+ else if (which == 3)
createScene(0, 0);
- } else {
+ else
createScene(3, 1);
- }
}
@@ -63,39 +62,49 @@ void Module1800::createScene(int sceneNum, int which) {
static const byte kNavigationTypes00[] = {1, 0, 2, 0};
static const byte kNavigationTypes01[] = {5};
debug("Module1800::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
createNavigationScene(0x004AFD38, which, kNavigationTypes00);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
createNavigationScene(0x004AFD98, which, kNavigationTypes01);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
createSmackerScene(0x006C0085, true, true, false);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
createNavigationScene(0x004AFDB0, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
createNavigationScene(0x004AFDE0, which);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
createNavigationScene(0x004AFE40, which);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->_soundMan->deleteGroup(0x04A14718);
createSmackerScene(0x08D84010, true, true, false);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_vm->_soundMan->setSoundListParams(kModule1800SoundList, false, 0, 0, 0, 0);
createSmackerScene(0x0168B121, true, true, false);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_childObject = new CreditsScene(_vm, this, false);
break;
- case 9:
- // NOTE: Newly introduced sceneNum 9 (was duplicate 3 with own update handler)
+ case 1009:
+ _vm->gameState().sceneNum = 3;
+ // NOTE: Newly introduced sceneNum 1009 (was duplicate 3 with own update handler)
createSmackerScene(0x0A840C01, true, true, false);
break;
}
@@ -105,50 +114,45 @@ void Module1800::createScene(int sceneNum, int which) {
void Module1800::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(4, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(1, -1);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(3, 0);
- }
break;
case 1:
- if (_navigationAreaType == 3) {
+ if (_navigationAreaType == 3)
createScene(7, -1);
- } else {
+ else
createScene(2, -1);
- }
break;
case 2:
createScene(0, 2);
break;
case 3:
- if (_moduleResult == 0) {
- createScene(9, -1);
- } else if (_moduleResult == 1) {
+ if (_moduleResult == 0)
+ createScene(1009, -1);
+ else if (_moduleResult == 1)
createScene(0, 1);
- }
break;
case 4:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(6, -1);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(5, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(0, 3);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(4, 3);
- }
break;
case 5:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
leaveModule(2);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(4, 3);
- }
break;
case 6:
createScene(8, -1);
@@ -161,16 +165,15 @@ void Module1800::updateScene() {
leaveModule(1);
// TODO GameState stuff // Restarts the game?
break;
- case 9:
+ case 1009:
leaveModule(0);
break;
}
} else {
switch (_vm->gameState().sceneNum) {
case 0:
- if (navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 2) {
+ if (navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 2)
_vm->_soundMan->setTwoSoundsPlayFlag(false);
- }
break;
}
}
diff --git a/engines/neverhood/module1800.h b/engines/neverhood/module1800.h
index 8ec8dfe..3c1d02e 100644
--- a/engines/neverhood/module1800.h
+++ b/engines/neverhood/module1800.h
@@ -36,6 +36,7 @@ public:
Module1800(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1800();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
Commit: 2fbfd673ad4ca72652ff3d90656ced2020e31e6f
https://github.com/scummvm/scummvm/commit/2fbfd673ad4ca72652ff3d90656ced2020e31e6f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module1900 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module1900.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 46fc2b4..bb58eb4 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -317,9 +317,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 3;
- _vm->gameState().sceneNum = 4;
- createModule(1700, -1);
+ _vm->gameState().which = 1;
+ _vm->gameState().sceneNum = 0;
+ createModule(1900, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index da02243..269fd84 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -37,11 +37,10 @@ Module1900::Module1900(NeverhoodEngine *vm, Module *parentModule, int which)
// NOTE: The original has a Scene1908 here as well but it's not used here but in another module...
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else {
+ else
createScene(0, 0);
- }
_vm->_soundMan->addSoundList(0x04E1C09C, kModule1900SoundList);
_vm->_soundMan->setSoundListParams(kModule1900SoundList, true, 50, 600, 5, 150);
@@ -54,13 +53,15 @@ Module1900::~Module1900() {
void Module1900::createScene(int sceneNum, int which) {
debug("Module1900::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene1901(_vm, this, which);
break;
case 6:
- _childObject = new Scene1907(_vm, this, which);
+ _vm->gameState().sceneNum = 6;
+ _childObject = new Scene1907(_vm, this);
break;
}
SetUpdateHandler(&Module1900::updateScene);
@@ -69,13 +70,12 @@ void Module1900::createScene(int sceneNum, int which) {
void Module1900::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(6, 0);
- } else {
+ else
leaveModule(0);
- }
break;
case 6:
createScene(0, 1);
@@ -96,25 +96,27 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x01303227);
setPalette(0x01303227);
insertMouse433(0x0322301B);
-
+
insertStaticSprite(0x42213133, 1100);
- if (!getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
+ if (!getGlobalVar(V_STAIRS_PUZZLE_SOLVED))
insertStaticSprite(0x40A40168, 100);
- } else if (getGlobalVar(V_STAIRS_DOWN)) {
+ else if (getGlobalVar(V_STAIRS_DOWN)) {
insertStaticSprite(0x124404C4, 100);
setGlobalVar(V_STAIRS_DOWN_ONCE, 1);
- } else {
+ } else
insertStaticSprite(0x02840064, 100);
- }
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene1901>(120, 380);
setMessageList(0x004B3408);
} else if (which == 1) {
+ // Klaymen returning from the puzzle
insertKlayman<KmScene1901>(372, 380);
setMessageList(0x004B3410);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene1901>(0, 380);
setMessageList(0x004B3400);
}
@@ -125,73 +127,43 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
}
static const NPoint kAsScene1907SymbolGroundPositions[] = {
- {160, 310},
- { 90, 340},
- {210, 335},
- {210, 380},
- {310, 340},
- {290, 400},
- {400, 375},
- {370, 435},
- {475, 415}
+ {160, 310}, { 90, 340}, {210, 335},
+ {210, 380}, {310, 340}, {290, 400},
+ {400, 375}, {370, 435}, {475, 415}
};
static const NPoint kAsScene1907SymbolPluggedInPositions[] = {
- {275, 125},
- {244, 125},
- {238, 131},
- {221, 135},
- {199, 136},
- {168, 149},
- {145, 152},
- {123, 154},
- {103, 157}
+ {275, 125}, {244, 125}, {238, 131},
+ {221, 135}, {199, 136}, {168, 149},
+ {145, 152}, {123, 154}, {103, 157}
};
static const NPoint kAsScene1907SymbolGroundHitPositions[] = {
- {275, 299},
- {244, 299},
- {238, 305},
- {221, 309},
- {199, 310},
- {168, 323},
- {145, 326},
- {123, 328},
- {103, 331}
+ {275, 299}, {244, 299}, {238, 305},
+ {221, 309}, {199, 310}, {168, 323},
+ {145, 326}, {123, 328}, {103, 331}
};
static const NPoint kAsScene1907SymbolPluggedInDownPositions[] = {
- {275, 136},
- {244, 156},
- {238, 183},
- {221, 207},
- {199, 228},
- {168, 262},
- {145, 285},
- {123, 307},
- {103, 331}
+ {275, 136}, {244, 156}, {238, 183},
+ {221, 207}, {199, 228}, {168, 262},
+ {145, 285}, {123, 307}, {103, 331}
};
static const uint32 kAsScene1907SymbolFileHashes[] = {
- 0x006A1034,
- 0x006A1010,
- 0x006A1814,
- 0x006A1016,
- 0x006A0014,
- 0x002A1014,
- 0x00EA1014,
- 0x206A1014,
- 0x046A1414
+ 0x006A1034, 0x006A1010, 0x006A1814,
+ 0x006A1016, 0x006A0014, 0x002A1014,
+ 0x00EA1014, 0x206A1014, 0x046A1414
};
-int AsScene1907Symbol::_symbolFlag1 = 0;
-int AsScene1907Symbol::_symbolFlag2 = 0;
+bool AsScene1907Symbol::_plugInFailed = false;
+int AsScene1907Symbol::_plugInTryCount = 0;
AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene, int elementIndex, int positionIndex)
: AnimatedSprite(vm, 1000 - positionIndex), _parentScene(parentScene), _elementIndex(elementIndex), _isMoving(false) {
- _symbolFlag1 = 0;
- _symbolFlag2 = 0;
+ _plugInFailed = false;
+ _plugInTryCount = 0;
if (getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) {
_isPluggedIn = true;
@@ -230,20 +202,19 @@ void AsScene1907Symbol::update() {
AnimatedSprite::updateAnim();
handleSpriteUpdate();
AnimatedSprite::updatePosition();
- if (_symbolFlag1 && !_symbolFlag2)
- _symbolFlag1 = 0;
+ if (_plugInFailed && _plugInTryCount == 0)
+ _plugInFailed = false;
}
uint32 AsScene1907Symbol::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (!_isPluggedIn && !_symbolFlag1) {
+ if (!_isPluggedIn && !_plugInFailed) {
tryToPlugIn();
messageResult = 1;
- } else {
+ } else
messageResult = 0;
- }
break;
}
return messageResult;
@@ -324,14 +295,12 @@ void AsScene1907Symbol::suMoveDown() {
void AsScene1907Symbol::suMoveUp() {
_y -= _yIncr;
if (getGlobalVar(V_WALL_BROKEN)) {
- if (_y - (9 + (_elementIndex > 5 ? 31 : 0)) < kAsScene1907SymbolPluggedInPositions[_elementIndex].y) {
+ if (_y - (9 + (_elementIndex > 5 ? 31 : 0)) < kAsScene1907SymbolPluggedInPositions[_elementIndex].y)
_yIncr--;
- } else {
+ else
_yIncr++;
- }
- } else {
+ } else
_yIncr = 2;
- }
if (_yIncr > 9)
_yIncr = 9;
else if (_yIncr < 1)
@@ -345,7 +314,7 @@ void AsScene1907Symbol::suMoveUp() {
void AsScene1907Symbol::tryToPlugIn() {
_isPluggedIn = true;
- _symbolFlag2++;
+ _plugInTryCount++;
_newPositionIndex = _parentScene->getNextPosition();
_parentScene->setPositionFree(_currPositionIndex, true);
sendMessage(_parentScene, 0x1022, 1100 + _newPositionIndex);
@@ -361,7 +330,7 @@ void AsScene1907Symbol::tryToPlugIn() {
if (_elementIndex == _newPositionIndex) {
NextState(&AsScene1907Symbol::stPlugIn);
} else {
- _symbolFlag1 = 1;
+ _plugInFailed = true;
NextState(&AsScene1907Symbol::stPlugInFail);
}
}
@@ -406,8 +375,8 @@ void AsScene1907Symbol::stFallOffHitGround() {
void AsScene1907Symbol::cbFallOffHitGroundEvent() {
_currPositionIndex = _newPositionIndex;
- if (_symbolFlag2)
- _symbolFlag2--;
+ if (_plugInTryCount > 0)
+ _plugInTryCount--;
startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], 0, -1);
_newStickFrameIndex = 0;
SetUpdateHandler(&AnimatedSprite::update);
@@ -434,7 +403,7 @@ void AsScene1907Symbol::stPlugInFail() {
}
void AsScene1907Symbol::moveUp() {
- startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteUpdate(&AsScene1907Symbol::suMoveUp);
@@ -443,7 +412,7 @@ void AsScene1907Symbol::moveUp() {
}
void AsScene1907Symbol::moveDown() {
- startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);//????
+ startAnimation(kAsScene1907SymbolFileHashes[_elementIndex], -1, -1);
stopAnimation();
SetMessageHandler(&AsScene1907Symbol::handleMessage);
SetSpriteUpdate(&AsScene1907Symbol::suMoveDown);
@@ -546,7 +515,7 @@ void AsScene1907WaterHint::hide() {
SetMessageHandler(&Sprite::handleMessage);
}
-Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _currMovingSymbolIndex(0), _pluggedInCount(0),
_moveDownCountdown(0), _moveUpCountdown(0), _countdown3(0), _hasPlugInFailed(false) {
@@ -662,11 +631,12 @@ void Scene1907::plugInFailed() {
int Scene1907::getRandomPositionIndex() {
bool flag = false;
int index = 0;
- for (int i = 0; i < 9; i++) {
+ // Check if any position is free
+ for (int i = 0; i < 9; i++)
if (_positionFree[i])
flag = true;
- }
if (flag) {
+ // Get a random free position
flag = false;
while (!flag) {
index = _vm->_rnd->getRandomNumber(9 - 1);
diff --git a/engines/neverhood/module1900.h b/engines/neverhood/module1900.h
index 5f26c9e..72dbf63 100644
--- a/engines/neverhood/module1900.h
+++ b/engines/neverhood/module1900.h
@@ -35,6 +35,7 @@ public:
Module1900(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module1900();
protected:
+ int _sceneNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createScene(int sceneNum, int which);
void updateScene();
@@ -75,8 +76,8 @@ protected:
int _deltaX, _smallDeltaX;
int _deltaY, _smallDeltaY;
// Dumb, change if possible
- static int _symbolFlag1;
- static int _symbolFlag2;
+ static bool _plugInFailed;
+ static int _plugInTryCount;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmTryToPlugIn(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -117,7 +118,7 @@ protected:
class Scene1907 : public Scene {
public:
- Scene1907(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene1907(NeverhoodEngine *vm, Module *parentModule);
void plugInFailed();
void setPositionFree(int index, bool value) { _positionFree[index] = value; }
int getNextPosition() { return _pluggedInCount++; }
Commit: 9d987a97d3d7a6a740383889dc2a676684d06676
https://github.com/scummvm/scummvm/commit/9d987a97d3d7a6a740383889dc2a676684d06676
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2000 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2000.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index bb58eb4..896c8cc 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -317,9 +317,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 1;
+ _vm->gameState().which = 3;
_vm->gameState().sceneNum = 0;
- createModule(1900, -1);
+ createModule(2000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index a97cbaa..ce871de 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -29,13 +29,12 @@ namespace Neverhood {
Module2000::Module2000(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 0) {
+ else if (which == 0)
createScene(0, 1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(0, 3);
- }
}
@@ -45,15 +44,18 @@ Module2000::~Module2000() {
void Module2000::createScene(int sceneNum, int which) {
debug("Module2000::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene2001(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
createNavigationScene(getGlobalVar(V_WORLDS_JOINED) ? 0x004B7B48 : 0x004B7B00, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
setGlobalVar(V_WORLDS_JOINED, 1);
setSubVar(V_TELEPORTER_DEST_AVAILABLE, 1, 1);
createSmackerScene(0x204B2031, true, true, false);
@@ -65,26 +67,23 @@ void Module2000::createScene(int sceneNum, int which) {
void Module2000::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
leaveModule(0);
- } else {
+ else
createScene(1, 0);
- }
break;
case 1:
if (_moduleResult == 0) {
- if (getGlobalVar(V_WORLDS_JOINED)) {
+ if (getGlobalVar(V_WORLDS_JOINED))
createScene(1, 0);
- } else {
+ else
createScene(2, -1);
- }
- } else if (_moduleResult == 1) {
+ } else if (_moduleResult == 1)
createScene(1, 1);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(0, 0);
- }
break;
case 2:
createScene(1, 0);
@@ -109,25 +108,30 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x0D641724, 1100);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2001>(300, 345);
setMessageList(0x004B3538);
sendMessage(this, 0x2000, 0);
} else if (which == 1) {
+ // Klaymen teleporting in
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3540, false);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
+ // Klaymen teleporting out
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B35F0, false);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
+ // Klaymen returning from teleporter console
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3550, false);
sendMessage(this, 0x2000, 1);
} else {
+ // Klaymen standing around
insertKlayman<KmScene2001>(390, 345);
setMessageList(0x004B3530);
sendMessage(this, 0x2000, 0);
diff --git a/engines/neverhood/module2000.h b/engines/neverhood/module2000.h
index 8533092..9859c73 100644
--- a/engines/neverhood/module2000.h
+++ b/engines/neverhood/module2000.h
@@ -35,6 +35,7 @@ public:
Module2000(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2000();
protected:
+ int _sceneNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createScene(int sceneNum, int which);
void updateScene();
Commit: 0dd4995af35aac2aabb5c535e6fef3668eedae93
https://github.com/scummvm/scummvm/commit/0dd4995af35aac2aabb5c535e6fef3668eedae93
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2100 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2100.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 896c8cc..adf2c49 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -319,7 +319,7 @@ void GameModule::startup() {
_vm->gameState().which = 3;
_vm->gameState().sceneNum = 0;
- createModule(2000, -1);
+ createModule(2100, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index cbd11b6..7bbb9e8 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -31,15 +31,14 @@ Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addMusic(0x10A10C14, 0x11482B95);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(0, 0);
- } else if (which == 2) {
+ else if (which == 2)
createScene(0, 3);
- } else {
+ else
createScene(0, 1);
- }
}
@@ -49,9 +48,10 @@ Module2100::~Module2100() {
void Module2100::createScene(int sceneNum, int which) {
debug("Module2100::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_vm->_soundMan->startMusic(0x11482B95, 0, 1);
_childObject = new Scene2101(_vm, this, which);
break;
@@ -62,14 +62,13 @@ void Module2100::createScene(int sceneNum, int which) {
void Module2100::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (_moduleResult == 1) {
setGlobalVar(V_DOOR_PASSED, 1);
leaveModule(0);
- } else {
+ } else
leaveModule(1);
- }
break;
}
}
@@ -77,7 +76,7 @@ void Module2100::updateScene() {
// Scene2101
-AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool flag)
+AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool isOpen)
: AnimatedSprite(vm, 1100) {
createSurface(100, 328, 347);
@@ -85,12 +84,11 @@ AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool flag)
_y = 240;
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene2101Door::handleMessage);
- if (flag) {
+ if (isOpen) {
startAnimation(0x0C202B9C, -1, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
- } else {
+ } else
setVisible(false);
- }
}
uint32 AsScene2101Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -120,8 +118,8 @@ void AsScene2101Door::stCloseDoor() {
startAnimation(0xC222A8D4, 0, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
setVisible(true);
- NextState(&AsScene2101Door::stCloseDoorDone);
playSound(0, calcHash("fxDoorClose32"));
+ NextState(&AsScene2101Door::stCloseDoorDone);
}
void AsScene2101Door::stCloseDoorDone() {
@@ -164,18 +162,18 @@ SsCommonFloorButton::SsCommonFloorButton(NeverhoodEngine *vm, Scene *parentScene
if (_soundFileHash == 0)
_soundFileHash = 0x44141000;
createSurface(1010, 61, 30);
- if (_fileHash1) {
+ if (_fileHash1)
loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
- } else
+ else
setVisible(false);
}
void SsCommonFloorButton::update() {
if (_countdown != 0 && (--_countdown == 0)) {
sendMessage(_parentScene, 0x1022, 1010);
- if (_fileHash1) {
+ if (_fileHash1)
loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
- } else
+ else
setVisible(false);
}
}
@@ -223,6 +221,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
_doorStatus = 1;
_countdown1 = 0;
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2101>(640, 438);
setMessageList(0x004B8E50);
sendMessage(this, 0x2000, 0);
@@ -230,6 +229,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
_doorStatus = 2;
_countdown1 = 48;
} else if (which == 2) {
+ // Klaymen teleporting out
insertKlayman<KmScene2101>(115, 438);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B8F58);
@@ -238,6 +238,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
_doorStatus = 1;
_countdown1 = 0;
} else if (which == 3) {
+ // Klaymen returning from the teleporter console
insertKlayman<KmScene2101>(115, 438);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B8EB0);
@@ -246,6 +247,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
_doorStatus = 1;
_countdown1 = 0;
} else {
+ // Klaymen teleporting in
insertKlayman<KmScene2101>(115, 438);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B8EA0);
@@ -283,9 +285,8 @@ void Scene2101::update() {
}
}
}
- } else if (_doorStatus == 1 && _messageValue >= 0 && _klayman->getX() > 470 /* TODO ! && _messageList2 != 0x004B8F48*/) {
+ } else if (_doorStatus == 1 && _messageValue >= 0 && _klayman->getX() > 470 /* TODO ! && _messageList2 != 0x004B8F48*/)
setMessageList2(0x004B8F50);
- }
Scene::update();
}
@@ -293,17 +294,15 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x02144CB1) {
+ if (param.asInteger() == 0x02144CB1)
sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
- } else if (param.asInteger() == 0x21E64A00) {
- if (_doorStatus == 0) {
+ else if (param.asInteger() == 0x21E64A00) {
+ if (_doorStatus == 0)
setMessageList(0x004B8E80);
- } else {
+ else
setMessageList(0x004B8EC8);
- }
- } else if (param.asInteger() == 0x41442820) {
+ } else if (param.asInteger() == 0x41442820)
cancelMessageList();
- }
break;
case 0x2000:
if (param.asInteger() != 0) {
@@ -326,9 +325,8 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_klayman->getX() >= 228 && _klayman->getX() <= 500) {
sendEntityMessage(_klayman, 0x1014, sender);
setMessageList(0x004B8F78);
- } else if (_klayman->getX() < 228) {
+ } else if (_klayman->getX() < 228)
setMessageList2(0x004B8F00);
- }
}
break;
}
diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h
index cf7a613..8ec12f7 100644
--- a/engines/neverhood/module2100.h
+++ b/engines/neverhood/module2100.h
@@ -34,6 +34,7 @@ public:
Module2100(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2100();
protected:
+ int _sceneNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createScene(int sceneNum, int which);
void updateScene();
@@ -43,7 +44,7 @@ protected:
class AsScene2101Door : public AnimatedSprite {
public:
- AsScene2101Door(NeverhoodEngine *vm, bool flag);
+ AsScene2101Door(NeverhoodEngine *vm, bool isOpen);
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void stOpenDoor();
Commit: 1993d4165a8d2e3d2b956113b903899e0de4c6fa
https://github.com/scummvm/scummvm/commit/1993d4165a8d2e3d2b956113b903899e0de4c6fa
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2200 (like the ones before)
- Rename SceneInfo140 to HallOfRecordsInfo
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index adf2c49..5fec376 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -307,6 +307,7 @@ void GameModule::startup() {
setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
//setGlobalVar(V_PROJECTOR_LOCATION, 4);
setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
+ setGlobalVar(V_LIGHTS_ON, 1);
// <<<DEBUG
#if 1
@@ -317,9 +318,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 3;
- _vm->gameState().sceneNum = 0;
- createModule(2100, -1);
+ _vm->gameState().which = 2;
+ _vm->gameState().sceneNum = 41;
+ createModule(2200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 102704a..8616592 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -35,11 +35,10 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addMusic(0x11391412, 0x601C908C);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else {
+ else
createScene(0, 0);
- }
}
@@ -48,158 +47,205 @@ Module2200::~Module2200() {
}
void Module2200::createScene(int sceneNum, int which) {
- // CHECKME if this can be used regardless of the new sceneNum
- if (sceneNum == 7 && which >= 0)
- _vm->gameState().which = _vm->gameState().sceneNum;
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene2201(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->startMusic(0x601C908C, 0, 2);
_childObject = new Scene2202(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->startMusic(0x601C908C, 0, 2);
_childObject = new Scene2203(_vm, this, which);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 3);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2205(_vm, this, which);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
_vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2206(_vm, this, which);
break;
case 6:
- _childObject = new Scene2207(_vm, this, which);
+ _vm->gameState().sceneNum = 6;
+ _childObject = new Scene2207(_vm, this);
break;
case 7:
+ if (which >= 0)
+ _vm->gameState().which = _vm->gameState().sceneNum;
+ _vm->gameState().sceneNum = 7;
_childObject = new Scene2208(_vm, this, which);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_childObject = new Scene2208(_vm, this, which);
break;
case 9:
+ _vm->gameState().sceneNum = 9;
createHallOfRecordsScene(which, 0x004B7180);
break;
case 10:
+ _vm->gameState().sceneNum = 10;
createHallOfRecordsScene(which, 0x004B7198);
break;
case 11:
+ _vm->gameState().sceneNum = 11;
createHallOfRecordsScene(which, 0x004B71B0);
break;
case 12:
+ _vm->gameState().sceneNum = 12;
createHallOfRecordsScene(which, 0x004B71C8);
break;
case 13:
+ _vm->gameState().sceneNum = 13;
createHallOfRecordsScene(which, 0x004B71E0);
break;
case 14:
+ _vm->gameState().sceneNum = 14;
createHallOfRecordsScene(which, 0x004B71F8);
break;
case 15:
+ _vm->gameState().sceneNum = 15;
createHallOfRecordsScene(which, 0x004B7210);
break;
case 16:
+ _vm->gameState().sceneNum = 16;
createHallOfRecordsScene(which, 0x004B7228);
break;
case 17:
+ _vm->gameState().sceneNum = 17;
createHallOfRecordsScene(which, 0x004B7240);
break;
case 18:
+ _vm->gameState().sceneNum = 18;
createHallOfRecordsScene(which, 0x004B7258);
break;
case 19:
+ _vm->gameState().sceneNum = 19;
createHallOfRecordsScene(which, 0x004B7270);
break;
case 20:
+ _vm->gameState().sceneNum = 20;
createHallOfRecordsScene(which, 0x004B7288);
break;
case 21:
+ _vm->gameState().sceneNum = 21;
createHallOfRecordsScene(which, 0x004B72A0);
break;
case 22:
+ _vm->gameState().sceneNum = 22;
createHallOfRecordsScene(which, 0x004B72B8);
break;
case 23:
+ _vm->gameState().sceneNum = 23;
createHallOfRecordsScene(which, 0x004B72D0);
break;
case 24:
+ _vm->gameState().sceneNum = 24;
createHallOfRecordsScene(which, 0x004B72E8);
break;
case 25:
+ _vm->gameState().sceneNum = 25;
createHallOfRecordsScene(which, 0x004B7300);
break;
case 26:
+ _vm->gameState().sceneNum = 26;
createHallOfRecordsScene(which, 0x004B7318);
break;
case 27:
+ _vm->gameState().sceneNum = 27;
createHallOfRecordsScene(which, 0x004B7330);
break;
case 28:
+ _vm->gameState().sceneNum = 28;
createHallOfRecordsScene(which, 0x004B7348);
break;
case 29:
+ _vm->gameState().sceneNum = 29;
createHallOfRecordsScene(which, 0x004B7360);
break;
case 30:
+ _vm->gameState().sceneNum = 30;
createHallOfRecordsScene(which, 0x004B7378);
break;
case 31:
+ _vm->gameState().sceneNum = 31;
createHallOfRecordsScene(which, 0x004B7390);
break;
case 32:
+ _vm->gameState().sceneNum = 32;
createHallOfRecordsScene(which, 0x004B73A8);
break;
case 33:
+ _vm->gameState().sceneNum = 33;
createHallOfRecordsScene(which, 0x004B73C0);
break;
case 34:
+ _vm->gameState().sceneNum = 34;
createHallOfRecordsScene(which, 0x004B73D8);
break;
case 35:
+ _vm->gameState().sceneNum = 35;
createHallOfRecordsScene(which, 0x004B73F0);
break;
case 36:
+ _vm->gameState().sceneNum = 36;
createHallOfRecordsScene(which, 0x004B7408);
break;
case 37:
+ _vm->gameState().sceneNum = 37;
createHallOfRecordsScene(which, 0x004B7420);
break;
case 38:
+ _vm->gameState().sceneNum = 38;
createHallOfRecordsScene(which, 0x004B7438);
break;
case 39:
+ _vm->gameState().sceneNum = 39;
createHallOfRecordsScene(which, 0x004B7450);
break;
case 40:
+ _vm->gameState().sceneNum = 40;
createHallOfRecordsScene(which, 0x004B7468);
break;
case 41:
+ _vm->gameState().sceneNum = 41;
_childObject = new Scene2242(_vm, this, which);
break;
case 42:
+ _vm->gameState().sceneNum = 42;
createHallOfRecordsScene(which, 0x004B7480);
break;
case 43:
+ _vm->gameState().sceneNum = 43;
createHallOfRecordsScene(which, 0x004B7498);
break;
case 44:
+ _vm->gameState().sceneNum = 44;
createHallOfRecordsScene(which, 0x004B74B0);
break;
case 45:
+ _vm->gameState().sceneNum = 45;
createHallOfRecordsScene(which, 0x004B74C8);
break;
case 46:
+ _vm->gameState().sceneNum = 46;
_childObject = new Scene2247(_vm, this, which);
break;
case 47:
+ _vm->gameState().sceneNum = 47;
if (!getGlobalVar(V_WORLDS_JOINED)) {
if (getGlobalVar(V_LIGHTS_ON))
createStaticScene(0x83110287, 0x10283839);
@@ -222,50 +268,46 @@ void Module2200::createScene(int sceneNum, int which) {
void Module2200::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(2, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(1, 0);
- } else {
+ else
leaveModule(0);
- }
break;
case 1:
createScene(0, 2);
break;
case 2:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(4, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(3, 0);
- } else {
+ else
createScene(0, 1);
- }
break;
case 3:
createScene(2, 2);
break;
case 4:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(5, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(4, 2);
- } else {
+ else
createScene(2, 1);
- }
break;
case 5:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(46, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(6, 0);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(8, 0);
- } else {
+ else
createScene(4, 1);
- }
break;
case 6:
createScene(5, 2);
@@ -399,8 +441,8 @@ void Module2200::updateScene() {
#undef HallOfRecordsSceneLink
-void Module2200::createHallOfRecordsScene(int which, uint32 sceneInfo140Id) {
- _childObject = new HallOfRecordsScene(_vm, this, which, sceneInfo140Id);
+void Module2200::createHallOfRecordsScene(int which, uint32 hallOfRecordsInfoId) {
+ _childObject = new HallOfRecordsScene(_vm, this, which, hallOfRecordsInfoId);
}
// Scene2201
@@ -415,15 +457,15 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
SetUpdateHandler(&AnimatedSprite::update);
}
-AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1)
- : AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _doorOpen(flag1) {
+AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen)
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _isOpen(isOpen) {
_x = 408;
_y = 290;
createSurface(900, 63, 266);
SetUpdateHandler(&AsScene2201Door::update);
SetMessageHandler(&AsScene2201Door::handleMessage);
- if (_doorOpen) {
+ if (_isOpen) {
startAnimation(0xE2CB0412, -1, -1);
_countdown = 48;
_newStickFrameIndex = STICK_LAST_FRAME;
@@ -435,9 +477,8 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *
}
void AsScene2201Door::update() {
- if (_countdown != 0 && _doorOpen && (--_countdown == 0)) {
+ if (_countdown != 0 && _isOpen && (--_countdown == 0))
stCloseDoor();
- }
AnimatedSprite::update();
}
@@ -446,24 +487,24 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x11001090) {
- if (_doorOpen)
+ if (_isOpen)
_ssDoorLight->setVisible(true);
} else if (param.asInteger() == 0x11283090) {
- if (!_doorOpen)
+ if (!_isOpen)
_ssDoorLight->setVisible(false);
}
break;
case 0x2000:
- if (_doorOpen)
+ if (_isOpen)
_countdown = 144;
- messageResult = _doorOpen ? 1 : 0;
+ messageResult = _isOpen ? 1 : 0;
break;
case 0x3002:
gotoNextState();
break;
case 0x4808:
_countdown = 144;
- if (!_doorOpen)
+ if (!_isOpen)
stOpenDoor();
break;
}
@@ -471,14 +512,14 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,
}
void AsScene2201Door::stOpenDoor() {
- _doorOpen = true;
+ _isOpen = true;
startAnimation(0xE2CB0412, 0, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
playSound(0, calcHash("fxDoorOpen33"));
}
void AsScene2201Door::stCloseDoor() {
- _doorOpen = false;
+ _isOpen = false;
startAnimation(0xE2CB0412, -1, -1);
_playBackwards = true;
_newStickFrameIndex = 0;
@@ -507,14 +548,12 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x04104242);
loadHitRectList();
-
setBackground(0x40008208);
setPalette(0x40008208);
insertMouse433(0x0820C408);
_asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++)
@@ -526,42 +565,40 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[1].x2 = 640;
_clipRects[1].y2 = 480;
- if (!getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
+ if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))
insertStaticSprite(0x00026027, 900);
- }
tempSprite = insertStaticSprite(0x030326A0, 1100);
_clipRects[0].x1 = tempSprite->getDrawRect().x;
-
insertStaticSprite(0x811DA061, 1100);
-
tempSprite = insertStaticSprite(0x11180022, 1100);
_clipRects[1].x1 = tempSprite->getDrawRect().x;
-
tempSprite = insertStaticSprite(0x0D411130, 1100);
_clipRects[0].y2 = tempSprite->getDrawRect().y2();
_clipRects[1].y1 = tempSprite->getDrawRect().y2();
-
_ssDoorLight = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2201>(300, 427, _clipRects, 2);
setMessageList(0x004B8118);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 1) {
+ // Klaymen entering from the back
insertKlayman<KmScene2201>(412, 393, _clipRects, 2);
setMessageList(0x004B8130);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 2) {
+ // Klaymen returning from the puzzle
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2201>(379, 427, _clipRects, 2);
_klayman->setDoDeltaX(1);
- } else {
+ } else
insertKlayman<KmScene2201>(261, 427, _clipRects, 2);
- }
setMessageList(0x004B8178);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else {
+ // Klaymen entering from the left
NPoint pt = _dataResource.getPoint(0x0304D8DC);
insertKlayman<KmScene2201>(pt.x, pt.y, _clipRects, 2);
setMessageList(0x004B8120);
@@ -591,34 +628,30 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x402064D8) {
+ if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssDoorButton);
- } else if (param.asInteger() == 0x35803198) {
- if (sendMessage(_asDoor, 0x2000, 0)) {
+ else if (param.asInteger() == 0x35803198) {
+ if (sendMessage(_asDoor, 0x2000, 0))
setMessageList(0x004B81A0);
- } else {
+ else
setMessageList(0x004B81B8);
- }
} else if (param.asInteger() == 0x51445010) {
- if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
+ if (getGlobalVar(V_TILE_PUZZLE_SOLVED))
setMessageList(0x004B8108);
- } else {
+ else
setMessageList(0x004B8150);
- }
- } else if (param.asInteger() == 0x1D203082) {
+ } else if (param.asInteger() == 0x1D203082)
setMessageList(0x004B8180);
- } else if (param.asInteger() == 0x00049091) {
- if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
+ else if (param.asInteger() == 0x00049091) {
+ if (getGlobalVar(V_TILE_PUZZLE_SOLVED))
setMessageList(0x004B8138);
- } else {
+ else
setMessageList(0x004B8108);
- }
}
break;
case 0x480B:
- if (sender == _ssDoorButton) {
+ if (sender == _ssDoorButton)
sendMessage(_asDoor, 0x4808, 0);
- }
break;
case 0x4826:
if (sender == _asTape) {
@@ -630,82 +663,65 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-static const NPoint kSsScene2202PuzzleTilePoints[] = {
- {196, 105},
- {323, 102},
- {445, 106},
- {192, 216},
- {319, 220},
- {446, 216},
- {188, 320},
- {319, 319},
- {443, 322}
+static const NPoint kSsScene2202PuzzleCubePoints[] = {
+ {196, 105}, {323, 102}, {445, 106},
+ {192, 216}, {319, 220}, {446, 216},
+ {188, 320}, {319, 319}, {443, 322}
};
-static const uint32 kSsScene2202PuzzleTileFileHashes1[] = {
- 0xA500800C,
- 0x2182910C,
- 0x2323980C,
- 0x23049084,
- 0x21008080,
- 0x2303900C,
- 0x6120980C,
- 0x2504D808
+static const uint32 kSsScene2202PuzzleCubeFileHashes1[] = {
+ 0xA500800C, 0x2182910C, 0x2323980C,
+ 0x23049084, 0x21008080, 0x2303900C,
+ 0x6120980C, 0x2504D808
};
-static const uint32 kSsScene2202PuzzleTileFileHashes2[] = {
- 0x0AAD8080,
- 0x0A290291,
- 0x0A2BA398,
- 0x822B8490,
- 0x86298080,
- 0x0A2B8390,
- 0x0A69A098,
- 0x0E2D84D8
+static const uint32 kSsScene2202PuzzleCubeFileHashes2[] = {
+ 0x0AAD8080, 0x0A290291, 0x0A2BA398,
+ 0x822B8490, 0x86298080, 0x0A2B8390,
+ 0x0A69A098, 0x0E2D84D8
};
-SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value)
- : StaticSprite(vm, 900), _parentScene(parentScene), _value(value), _tileIndex(tileIndex), _isMoving(false) {
+SsScene2202PuzzleCube::SsScene2202PuzzleCube(NeverhoodEngine *vm, Scene *parentScene, int16 cubePosition, int16 cubeSymbol)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _cubeSymbol(cubeSymbol), _cubePosition(cubePosition), _isMoving(false) {
int surfacePriority;
- SetUpdateHandler(&SsScene2202PuzzleTile::update);
- SetMessageHandler(&SsScene2202PuzzleTile::handleMessage);
- if (_tileIndex >= 0 && _tileIndex <= 2)
+ SetUpdateHandler(&SsScene2202PuzzleCube::update);
+ SetMessageHandler(&SsScene2202PuzzleCube::handleMessage);
+ if (_cubePosition >= 0 && _cubePosition <= 2)
surfacePriority = 100;
- else if (_tileIndex >= 3 && _tileIndex <= 5)
+ else if (_cubePosition >= 3 && _cubePosition <= 5)
surfacePriority = 300;
else
surfacePriority = 500;
- loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0,
- kSsScene2202PuzzleTilePoints[_tileIndex].x, kSsScene2202PuzzleTilePoints[_tileIndex].y);
+ loadSprite(kSsScene2202PuzzleCubeFileHashes2[_cubeSymbol], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0,
+ kSsScene2202PuzzleCubePoints[_cubePosition].x, kSsScene2202PuzzleCubePoints[_cubePosition].y);
loadSound(0, 0x40958621);
loadSound(1, 0x51108241);
}
-void SsScene2202PuzzleTile::update() {
+void SsScene2202PuzzleCube::update() {
handleSpriteUpdate();
updatePosition();
}
-uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 SsScene2202PuzzleCube::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
- sendMessage(_parentScene, 0x2000, _tileIndex);
- }
+ if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED))
+ sendMessage(_parentScene, 0x2000, _cubePosition);
messageResult = 1;
break;
case 0x2001:
_isMoving = true;
- moveTile(param.asInteger());
+ moveCube(param.asInteger());
break;
}
return messageResult;
}
-void SsScene2202PuzzleTile::suMoveTileX() {
+void SsScene2202PuzzleCube::suMoveCubeX() {
bool done = false;
@@ -732,15 +748,14 @@ void SsScene2202PuzzleTile::suMoveTileX() {
_counterDirection = true;
}
- if (done) {
+ if (done)
stopMoving();
- }
updateBounds();
}
-void SsScene2202PuzzleTile::suMoveTileY() {
+void SsScene2202PuzzleCube::suMoveCubeY() {
bool done = false;
@@ -767,29 +782,26 @@ void SsScene2202PuzzleTile::suMoveTileY() {
_counterDirection = true;
}
- if (done) {
+ if (done)
stopMoving();
- }
updateBounds();
}
-void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
+void SsScene2202PuzzleCube::moveCube(int16 newCubePosition) {
- loadSprite(kSsScene2202PuzzleTileFileHashes1[_value], kSLFCenteredDrawOffset);
+ loadSprite(kSsScene2202PuzzleCubeFileHashes1[_cubeSymbol], kSLFCenteredDrawOffset);
- setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1);
- setSubVar(VA_CUBE_POSITIONS, newTileIndex, (uint32)_value);
-
- _tileIndex = newTileIndex;
+ setSubVar(VA_CUBE_POSITIONS, _cubePosition, (uint32)-1);
+ setSubVar(VA_CUBE_POSITIONS, newCubePosition, (uint32)_cubeSymbol);
+ _cubePosition = newCubePosition;
_errValue = 0;
_counterDirection = false;
_counter = 0;
-
- _newX = kSsScene2202PuzzleTilePoints[newTileIndex].x;
- _newY = kSsScene2202PuzzleTilePoints[newTileIndex].y;
+ _newX = kSsScene2202PuzzleCubePoints[newCubePosition].x;
+ _newY = kSsScene2202PuzzleCubePoints[newCubePosition].y;
if (_x == _newX && _y == _newY)
return;
@@ -821,7 +833,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
if (_xDelta > _yDelta) {
- SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileX);
+ SetSpriteUpdate(&SsScene2202PuzzleCube::suMoveCubeX);
if (_xIncr > 0) {
if (_newX - _x >= 180)
_xFlagPos = _newX - 90;
@@ -835,7 +847,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
playSound(0);
} else {
- SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileY);
+ SetSpriteUpdate(&SsScene2202PuzzleCube::suMoveCubeY);
if (_yIncr > 0) {
if (_newY - _y >= 180)
_xFlagPos = _newY - 90;
@@ -852,16 +864,16 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
-void SsScene2202PuzzleTile::stopMoving() {
- loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset);
+void SsScene2202PuzzleCube::stopMoving() {
+ loadSprite(kSsScene2202PuzzleCubeFileHashes2[_cubeSymbol], kSLFCenteredDrawOffset);
SetSpriteUpdate(NULL);
_isMoving = false;
- sendMessage(_parentScene, 0x2002, _tileIndex);
+ sendMessage(_parentScene, 0x2002, _cubePosition);
}
Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isTileMoving(false),
- _ssMovingTile(NULL), _ssDoneMovingTile(NULL) {
+ : Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isCubeMoving(false),
+ _ssMovingCube(NULL), _ssDoneMovingCube(NULL) {
// TODO initScene2201Vars();
SetMessageHandler(&Scene2202::handleMessage);
@@ -872,11 +884,11 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
insertMouse435(0x00A08089, 20, 620);
- for (uint32 index = 0; index < 9; index++) {
- int16 value = (int16)getSubVar(VA_CUBE_POSITIONS, index);
- if (value >= 0) {
- Sprite *puzzleTileSprite = insertSprite<SsScene2202PuzzleTile>(this, index, value);
- _vm->_collisionMan->addSprite(puzzleTileSprite);
+ for (uint32 cubePosition = 0; cubePosition < 9; cubePosition++) {
+ int16 cubeSymbol = (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition);
+ if (cubeSymbol >= 0) {
+ Sprite *puzzleCubeSprite = insertSprite<SsScene2202PuzzleCube>(this, cubePosition, cubeSymbol);
+ _vm->_collisionMan->addSprite(puzzleCubeSprite);
}
}
@@ -899,9 +911,8 @@ Scene2202::~Scene2202() {
void Scene2202::update() {
Scene::update();
- if (_leaveScene && !isSoundPlaying(1)) {
+ if (_leaveScene && !isSoundPlaying(1))
leaveScene(0);
- }
if (_isSolved && !isSoundPlaying(0)) {
playSound(1);
@@ -909,19 +920,19 @@ void Scene2202::update() {
_leaveScene = true;
}
- if (_ssMovingTile && !_isTileMoving) {
- int16 freeTileIndex = getFreeTileIndex(_movingTileIndex);
- if (freeTileIndex != -1) {
- setSurfacePriority(_ssMovingTile->getSurface(), 700);
- sendMessage(_ssMovingTile, 0x2001, freeTileIndex);
- _ssMovingTile = NULL;
- _isTileMoving = true;
+ if (_ssMovingCube && !_isCubeMoving) {
+ int16 freeCubePosition = getFreeCubePosition(_movingCubePosition);
+ if (freeCubePosition != -1) {
+ setSurfacePriority(_ssMovingCube->getSurface(), 700);
+ sendMessage(_ssMovingCube, 0x2001, freeCubePosition);
+ _ssMovingCube = NULL;
+ _isCubeMoving = true;
}
}
- if (_ssDoneMovingTile) {
- setSurfacePriority(_ssDoneMovingTile->getSurface(), _surfacePriority);
- _ssDoneMovingTile = NULL;
+ if (_ssDoneMovingCube) {
+ setSurfacePriority(_ssDoneMovingCube->getSurface(), _surfacePriority);
+ _ssDoneMovingCube = NULL;
if (testIsSolved()) {
playSound(0);
setGlobalVar(V_TILE_PUZZLE_SOLVED, 1);
@@ -935,39 +946,37 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
- }
break;
case 0x2000:
- _movingTileIndex = (int16)param.asInteger();
- _ssMovingTile = (Sprite*)sender;
+ _movingCubePosition = (int16)param.asInteger();
+ _ssMovingCube = (Sprite*)sender;
break;
case 0x2002:
- _isTileMoving = false;
- _ssDoneMovingTile = (Sprite*)sender;
- if (param.asInteger() <= 2) {
+ _isCubeMoving = false;
+ _ssDoneMovingCube = (Sprite*)sender;
+ if (param.asInteger() <= 2)
_surfacePriority = 100;
- } else if (param.asInteger() >= 3 && param.asInteger() <= 5) {
+ else if (param.asInteger() >= 3 && param.asInteger() <= 5)
_surfacePriority = 300;
- } else {
+ else
_surfacePriority = 500;
- }
break;
}
return 0;
}
-int16 Scene2202::getFreeTileIndex(int16 index) {
- if (index >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 3) == -1) {
- return index - 3;
- } else if (index <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 3) == -1) {
- return index + 3;
- } else if (index != 0 && index != 3 && index != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 1) == -1) {
- return index - 1;
- } else if (index != 2 && index != 5 && index != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 1) == -1) {
- return index + 1;
- } else
+int16 Scene2202::getFreeCubePosition(int16 cubePosition) {
+ if (cubePosition >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition - 3) == -1)
+ return cubePosition - 3;
+ else if (cubePosition <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition + 3) == -1)
+ return cubePosition + 3;
+ else if (cubePosition != 0 && cubePosition != 3 && cubePosition != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition - 1) == -1)
+ return cubePosition - 1;
+ else if (cubePosition != 2 && cubePosition != 5 && cubePosition != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition + 1) == -1)
+ return cubePosition + 1;
+ else
return -1;
}
@@ -1087,8 +1096,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x82C80334);
setPalette(0x82C80334);
insertMouse433(0x80330824);
-
setHitRects(0x004B8320);
+ setRectList(0x004B8420);
if (getGlobalVar(V_KEY3_LOCATION) == 1) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
@@ -1097,37 +1106,35 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
_asLeftDoor = insertSprite<AsScene2203Door>(this, 0);
_asRightDoor = insertSprite<AsScene2203Door>(this, 1);
-
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
_ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100);
-
_leftDoorClipRect.set(_ssSmallLeftDoor->getDrawRect().x, 0, 640, 480);
_rightDoorClipRect.set(0, 0, _ssSmallRightDoor->getDrawRect().x2(), 480);
-
sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);
sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor);
-
_vm->_collisionMan->addSprite(_asLeftDoor);
_vm->_collisionMan->addSprite(_asRightDoor);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2203>(200, 427);
setMessageList(0x004B8340);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2203>(640, 427);
setMessageList(0x004B8350);
} else if (which == 2) {
+ // Klaymen returning from the displayer
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2203>(362, 427);
_klayman->setDoDeltaX(1);
- } else {
+ } else
insertKlayman<KmScene2203>(202, 427);
- }
setMessageList(0x004B8358);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2203>(0, 427);
setMessageList(0x004B8348);
}
@@ -1140,8 +1147,6 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_leftDoorClipRect);
}
- setRectList(0x004B8420);
-
}
Scene2203::~Scene2203() {
@@ -1153,25 +1158,22 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x2001:
sendEntityMessage(_klayman, 0x1014, sender);
- if (sender == _asLeftDoor) {
+ if (sender == _asLeftDoor)
setMessageList2(0x004B83B0);
- } else {
+ else
setMessageList2(0x004B83C8);
- }
break;
case 0x2002:
- if (sender == _asLeftDoor) {
+ if (sender == _asLeftDoor)
setMessageList2(0x004B8370);
- } else {
+ else
setMessageList2(0x004B8360);
- }
break;
case 0x2003:
- if (sender == _asLeftDoor) {
+ if (sender == _asLeftDoor)
_ssSmallLeftDoor->setVisible(false);
- } else {
+ else
_ssSmallRightDoor->setVisible(false);
- }
break;
case 0x4808:
if (sender == _asLeftDoor) {
@@ -1220,7 +1222,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2205::update);
setHitRects(0x004B0620);
-
+ loadDataResource(0x00144822);
if (getGlobalVar(V_LIGHTS_ON)) {
_isLightOn = true;
setBackground(0x0008028D);
@@ -1236,41 +1238,36 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xA0289D08);
_ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0xDAC86E84, 100, 0);
}
-
_palette->addBasePalette(0xD00A028D, 0, 256, 0);
-
_ssDoorFrame = insertSprite<SsScene2205DoorFrame>();
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2205>(320, 417);
setMessageList(0x004B0658);
- if (!getGlobalVar(V_LIGHTS_ON)) {
+ if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x68033B1C, 0, 65, 0);
- }
_isKlaymanInLight = false;
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2205>(640, 417);
setMessageList(0x004B0648);
- if (!getGlobalVar(V_LIGHTS_ON)) {
+ if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x68033B1C, 0, 65, 0);
- }
_isKlaymanInLight = false;
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2205>(0, 417);
setMessageList(0x004B0640);
_isKlaymanInLight = true;
}
_klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480);
-
- loadDataResource(0x00144822);
_klayman->setSoundFlag(true);
-
}
void Scene2205::update() {
Scene::update();
-
if (!_isLightOn && getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0x0008028D, 0, 256, 0);
changeBackground(0x0008028D);
@@ -1291,7 +1288,6 @@ void Scene2205::update() {
}
_isLightOn = false;
}
-
if (!getGlobalVar(V_LIGHTS_ON)) {
if (_isKlaymanInLight && _klayman->getX() > 85) {
_palette->addBasePalette(0x68033B1C, 0, 65, 0);
@@ -1303,20 +1299,18 @@ void Scene2205::update() {
_isKlaymanInLight = true;
}
}
-
}
uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x6449569A) {
+ if (param.asInteger() == 0x6449569A)
setMessageList(0x004B0690);
- } else if (param.asInteger() == 0x2841369C) {
+ else if (param.asInteger() == 0x2841369C)
setMessageList(0x004B0630);
- } else if (param.asInteger() == 0x402064D8) {
+ else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssLightSwitch);
- }
break;
case 0x480B:
setGlobalVar(V_LIGHTS_ON, getGlobalVar(V_LIGHTS_ON) ? 0 : 1);
@@ -1326,21 +1320,15 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
static const int16 kScene2206XPositions[] = {
- 384,
- 480,
- 572
+ 384, 480, 572
};
static const uint32 kScene2206MessageIds1[] = {
- 0x004B8998,
- 0x004B89B8,
- 0x004B89D8
+ 0x004B8998, 0x004B89B8, 0x004B89D8
};
static const uint32 kScene2206MessageIds2[] = {
- 0x004B89F8,
- 0x004B8A20,
- 0x004B8A48
+ 0x004B89F8, 0x004B8A20, 0x004B8A48
};
static const int16 kAsScene2206DoorSpikesXDeltasOpen[] = {
@@ -1371,15 +1359,15 @@ uint32 AsScene2206DoorSpikes::handleMessage(int messageNum, const MessageParam &
switch (messageNum) {
case 0x4808:
_deltaIndex = 0;
+ playSound(0, 0x032746E0);
SetMessageHandler(NULL);
SetSpriteUpdate(&AsScene2206DoorSpikes::suOpen);
- playSound(0, 0x032746E0);
break;
case 0x4809:
_deltaIndex = 0;
+ playSound(0, 0x002642C0);
SetMessageHandler(NULL);
SetSpriteUpdate(&AsScene2206DoorSpikes::suClose);
- playSound(0, 0x002642C0);
break;
}
return messageResult;
@@ -1422,9 +1410,9 @@ uint32 AsScene2206Platform::handleMessage(int messageNum, const MessageParam &pa
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4803:
+ _yDelta = 0;
SetMessageHandler(NULL);
SetSpriteUpdate(&AsScene2206Platform::suMoveDown);
- _yDelta = 0;
break;
}
return messageResult;
@@ -1441,9 +1429,8 @@ SsScene2206TestTube::SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene
if (getGlobalVar(V_HAS_TEST_TUBE)) {
setVisible(false);
SetMessageHandler(NULL);
- } else {
+ } else
SetMessageHandler(&SsScene2206TestTube::handleMessage);
- }
_collisionBoundsOffset = _drawOffset;
updateBounds();
}
@@ -1499,38 +1486,37 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
}
_asPlatform->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
-
setBackground(fileHash);
-
setPalette(fileHash);
addEntity(_palette);
-
_palette->addBasePalette(fileHash, 0, 256, 0);
-
- if (!getGlobalVar(V_LIGHTS_ON)) {
+ if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x0263D144, 0, 65, 0);
- }
-
_vm->_collisionMan->addSprite(_ssTestTube);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2206>(200, 430);
setMessageList(0x004B88A8);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2206>(640, 430);
setMessageList(0x004B88B8);
} else if (which == 2) {
+ // Klaymen entering from the back
insertKlayman<KmScene2206>(205, 396);
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(V_LIGHTS_ON) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
klaymanBehindSpikes();
playSound(0, 0x53B8284A);
} else if (which == 3) {
+ // Klaymen entering from reading a text column
insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)], 430);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
setMessageList(0x004B8A70);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2206>(0, 430);
setMessageList(0x004B88B0);
}
@@ -1548,11 +1534,11 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- } else if (param.asInteger() == 0x402064D8) {
+ else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x11C40840) {
+ else if (param.asInteger() == 0x11C40840) {
if (getGlobalVar(V_SPIKES_RETRACTED))
setMessageList(0x004B8948);
else
@@ -1616,26 +1602,17 @@ void Scene2206::readClickedColumn() {
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 183) / 7);
setGlobalVar(V_COLUMN_TEXT_NAME, calcHash("stLineagex"));
setGlobalVar(V_COLUMN_BACK_NAME, 0);
- if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144) {
+ if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144)
setMessageList2(kScene2206MessageIds1[getGlobalVar(V_CLICKED_COLUMN_INDEX)]);
- } else {
+ else
setMessageList2(kScene2206MessageIds2[getGlobalVar(V_CLICKED_COLUMN_INDEX)]);
- }
}
static const uint32 kScene2207FileHashes[] = {
- 0x33B1E12E,
- 0x33D1E12E,
- 0x3311E12E,
- 0x3291E12E,
- 0x3191E12E,
- 0x3791E12E,
- 0x3B91E12E,
- 0x2391E12E,
- 0x1391E12E,
- 0x3BB1E12E,
- 0x23B1E12E,
- 0x13B1E12E
+ 0x33B1E12E, 0x33D1E12E, 0x3311E12E,
+ 0x3291E12E, 0x3191E12E, 0x3791E12E,
+ 0x3B91E12E, 0x2391E12E, 0x1391E12E,
+ 0x3BB1E12E, 0x23B1E12E, 0x13B1E12E
};
AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene)
@@ -1650,10 +1627,10 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
_y = pt.y;
createSurface(1100, 129, 103);
startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, 0, 0);
+ _newStickFrameIndex = 0;
SetUpdateHandler(&AsScene2207Elevator::update);
- SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);
SetMessageHandler(&AsScene2207Elevator::handleMessage);
- _newStickFrameIndex = 0;
+ SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);
}
AsScene2207Elevator::~AsScene2207Elevator() {
@@ -1667,9 +1644,9 @@ void AsScene2207Elevator::update() {
startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
- if (_destPointIndexDelta != 0) {
+ if (_destPointIndexDelta != 0)
_destPointIndexDelta = 0;
- } else {
+ else {
_vm->_soundMan->deleteSound(0xD3B02847);
playSound(0, 0x53B8284A);
}
@@ -1683,20 +1660,19 @@ void AsScene2207Elevator::update() {
startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
- if (_destPointIndexDelta != 0) {
+ if (_destPointIndexDelta != 0)
_destPointIndexDelta = 0;
- } else {
+ else {
_vm->_soundMan->deleteSound(0xD3B02847);
playSound(0, 0x53B8284A);
}
}
}
- if (_pointIndex > 20 && _surface->getPriority() != 900) {
+ if (_pointIndex > 20 && _surface->getPriority() != 900)
sendMessage(_parentScene, 0x2002, 900);
- } else if (_pointIndex < 20 && _surface->getPriority() != 1100) {
+ else if (_pointIndex < 20 && _surface->getPriority() != 1100)
sendMessage(_parentScene, 0x2002, 1100);
- }
AnimatedSprite::update();
@@ -1738,13 +1714,12 @@ void AsScene2207Elevator::moveToY(int16 y) {
}
if (_destPointIndex != _pointIndex) {
- if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1) {
+ if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1)
_destPointIndexDelta = 0;
- } else if (_destPointIndex < _pointIndex) {
+ else if (_destPointIndex < _pointIndex)
_destPointIndexDelta = -2;
- } else {
+ else
_destPointIndexDelta = 2;
- }
_vm->_soundMan->addSound(0x02700413, 0xD3B02847);
_vm->_soundMan->playSoundLooping(0xD3B02847);
}
@@ -1756,14 +1731,14 @@ void AsScene2207Elevator::moveToY(int16 y) {
AsScene2207Lever::AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2207Lever::handleMessage);
+ _x = x;
+ _y = y;
createSurface(1010, 71, 73);
setDoDeltaX(doDeltaX);
startAnimation(0x80880090, 0, -1);
_newStickFrameIndex = 0;
- _x = x;
- _y = y;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207Lever::handleMessage);
}
uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1795,8 +1770,8 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m
void AsScene2207Lever::stLeverDown() {
startAnimation(0x80880090, 1, -1);
- FinalizeState(&AsScene2207Lever::stLeverDownEvent);
playSound(0, 0x40581882);
+ FinalizeState(&AsScene2207Lever::stLeverDownEvent);
}
void AsScene2207Lever::stLeverDownEvent() {
@@ -1805,9 +1780,9 @@ void AsScene2207Lever::stLeverDownEvent() {
void AsScene2207Lever::stLeverUp() {
startAnimation(0x80880090, 6, -1);
- FinalizeState(&AsScene2207Lever::stLeverUpEvent);
_playBackwards = true;
playSound(0, 0x40581882);
+ FinalizeState(&AsScene2207Lever::stLeverUpEvent);
}
void AsScene2207Lever::stLeverUpEvent() {
@@ -1817,16 +1792,16 @@ void AsScene2207Lever::stLeverUpEvent() {
AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1200), _idle(true) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);
- createSurface1(0xCCFD6090, 100);
_x = 309;
_y = 320;
+ createSurface1(0xCCFD6090, 100);
startAnimation(0xCCFD6090, 0, -1);
_newStickFrameIndex = 0;
loadSound(1, 0x40330872);
loadSound(2, 0x72A2914A);
loadSound(3, 0xD4226080);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);
}
AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() {
@@ -1847,15 +1822,14 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
stopSound(2);
stopSound(3);
_vm->_soundMan->deleteSound(0x12121943);
- } else if (param.asInteger() == 0x3A980501) {
+ } else if (param.asInteger() == 0x3A980501)
playSound(1);
- } else if (param.asInteger() == 0x2A2AD498) {
+ else if (param.asInteger() == 0x2A2AD498)
playSound(2);
- } else if (param.asInteger() == 0xC4980008) {
+ else if (param.asInteger() == 0xC4980008)
playSound(3);
- } else if (param.asInteger() == 0x06B84228) {
+ else if (param.asInteger() == 0x06B84228)
playSound(0, 0xE0702146);
- }
}
break;
case 0x2006:
@@ -1899,13 +1873,13 @@ void AsScene2207WallRobotAnimation::cbStopAnimation() {
AsScene2207WallCannonAnimation::AsScene2207WallCannonAnimation(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200), _idle(true) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage);
- createSurface1(0x8CAA0099, 100);
_x = 309;
_y = 320;
+ createSurface1(0x8CAA0099, 100);
startAnimation(0x8CAA0099, 0, -1);
_newStickFrameIndex = 0;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage);
}
uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1952,7 +1926,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
updatePosition();
}
-Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
_vm->gameModule()->initCannonSymbolsPuzzle();
@@ -1965,66 +1939,47 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2207>(0, 0);
_klayman->setRepl(64, 0);
-
setMessageList(0x004B38E8);
-
_asElevator = insertSprite<AsScene2207Elevator>(this);
if (getGlobalVar(V_LIGHTS_ON)) {
-
setBackground(0x88C00241);
setPalette(0x88C00241);
insertMouse433(0x00245884);
-
_ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
-
_asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
_asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);
_vm->_collisionMan->addSprite(_asLever);
-
_asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);
_asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>();
-
_asWallRobotAnimation->setVisible(false);
_asWallCannonAnimation->setVisible(false);
-
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x2C4061C4, 100, 0);
-
_asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480);
_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
_asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
-
} else {
-
setGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT, 1);
-
setBackground(0x05C02A55);
setPalette(0x05C02A55);
insertMouse433(0x02A51054);
-
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
-
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 0)], 0);
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 1)], 1);
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 2)], 2);
-
_asTape = NULL;
_asLever = NULL;
_asWallRobotAnimation = NULL;
_asWallCannonAnimation = NULL;
_ssButton = NULL;
-
_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);
_asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);
-
}
_dataResource.load(0x00524846);
-
setRectList(0x004B38B8);
sendEntityMessage(_klayman, 0x1014, _asElevator);
@@ -2041,9 +1996,8 @@ void Scene2207::update() {
setSurfacePriority(_asElevator->getSurface(), _elevatorSurfacePriority);
_elevatorSurfacePriority = 0;
}
- if (_klayman->getY() == 423) {
+ if (_klayman->getY() == 423)
_klaymanAtElevator = _klayman->getX() > 459 && _klayman->getX() < 525;
- }
}
uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -2055,38 +2009,34 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asElevator, 0x2000, _mouseClickPos.y);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
- } else {
+ } else
cancelMessageList();
- }
} else if (param.asInteger() == 0x34569073) {
if (_klaymanAtElevator) {
_isKlaymanBusy = true;
sendMessage(_asElevator, 0x2000, 0);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
- } else {
+ } else
cancelMessageList();
- }
} else if (param.asInteger() == 0x4054C877) {
if (_klaymanAtElevator) {
sendMessage(_asElevator, 0x2000, 480);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
- } else {
+ } else
cancelMessageList();
- }
} else if (param.asInteger() == 0x0CBC6211) {
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
setRectList(0x004B38B8);
- } else if (param.asInteger() == 0x402064D8) {
+ } else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x231DA241) {
- if (_ssButton) {
+ else if (param.asInteger() == 0x231DA241) {
+ if (_ssButton)
setMessageList(0x004B38F0);
- } else {
+ else
setMessageList(0x004B37D8);
- }
}
break;
case 0x2002:
@@ -2183,14 +2133,11 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_background->createSurface(0, 640, 528);
_background->getSpriteResource().getPosition().y = 480;
addBackground(_background);
-
setPalette(0x08100289);
- addEntity(_palette); // Why?
-
+ addEntity(_palette);
insertMouse435(0x0028D089, 40, 600);
createFontSurface();
-
_backgroundSurface = new BaseSurface(_vm, 0, 640, 480);
spriteResource.load2(0x08100289);
_backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
@@ -2207,17 +2154,13 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2208::handleMessage);
_visibleRowsCount = 10;
-
_newRowIndex = (int16)getGlobalVar(V_CLICKED_COLUMN_ROW);
if (_newRowIndex + _visibleRowsCount > _maxRowIndex)
_newRowIndex = _maxRowIndex - _visibleRowsCount;
if (_newRowIndex < 6)
_newRowIndex = 0;
-
_rowScrollY = 0;
-
_backgroundScrollY = 48 * _newRowIndex;
-
_currRowIndex = _newRowIndex;
for (int16 rowIndex = 0; rowIndex < _visibleRowsCount; rowIndex++)
@@ -2253,9 +2196,8 @@ void Scene2208::update() {
}
if (_currRowIndex < _newRowIndex) {
- if (_rowScrollY == 0) {
+ if (_rowScrollY == 0)
drawRow(_currRowIndex + _visibleRowsCount);
- }
_backgroundScrollY += 4;
_rowScrollY += 4;
if (_rowScrollY == 48) {
@@ -2284,9 +2226,8 @@ uint32 Scene2208::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 40 || param.asPoint().x >= 600) {
+ if (param.asPoint().x <= 40 || param.asPoint().x >= 600)
leaveScene(0);
- }
break;
}
return messageResult;
@@ -2372,17 +2313,21 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2242>(200, 430);
setMessageList(0x004B3C18);
} else if (which == 1) {
+ // Klaymen entering from looking through the window
insertKlayman<KmScene2242>(530, 430);
setMessageList(0x004B3D60);
} else if (which == 2) {
+ // Klaymen returning from reading a text column
insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(V_CLICKED_COLUMN_INDEX) ? 0 : 1], 430);
setMessageList(0x004B3D48);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2242>(0, 430);
setMessageList(0x004B3C20);
}
@@ -2414,9 +2359,8 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- }
break;
case 0x4826:
if (sender == _asTape) {
@@ -2442,11 +2386,10 @@ void Scene2242::readClickedColumn() {
index = 1;
}
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
- if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) {
+ if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133)
setMessageList2(kScene2242MessageListIds1[index]);
- } else {
+ else
setMessageList2(kScene2242MessageListIds2[index]);
- }
}
static const int16 kHallOfRecordsKlaymanXPos[] = {
@@ -2464,38 +2407,42 @@ static const uint32 kHallOfRecordsSceneMessageListIds1[] = {
0x004B2AF8, 0x004B2B20, 0x004B2B48
};
-HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id)
+HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId)
: Scene(vm, parentModule, true) {
- _sceneInfo140 = _vm->_staticData->getSceneInfo140Item(sceneInfo140Id);
+ _hallOfRecordsInfo = _vm->_staticData->getHallOfRecordsInfoItem(hallOfRecordsInfoId);
SetMessageHandler(&HallOfRecordsScene::handleMessage);
SetUpdateHandler(&Scene::update);
- if (!getGlobalVar(V_LIGHTS_ON) && _sceneInfo140->bgFilename2) {
+ if (!getGlobalVar(V_LIGHTS_ON) && _hallOfRecordsInfo->bgFilename2) {
setRectList(0x004B2BF8);
- setBackground(_sceneInfo140->bgFilename2);
- setPalette(_sceneInfo140->bgFilename2);
+ setBackground(_hallOfRecordsInfo->bgFilename2);
+ setPalette(_hallOfRecordsInfo->bgFilename2);
insertMouse433(0x14320138);
} else {
setRectList(0x004B2BB8);
- setBackground(_sceneInfo140->bgFilename1);
- setPalette(_sceneInfo140->bgFilename1);
+ setBackground(_hallOfRecordsInfo->bgFilename1);
+ setPalette(_hallOfRecordsInfo->bgFilename1);
insertMouse433(0x63A40028);
}
if (which < 0) {
+ // Restoring game
insertKlayman<KmHallOfRecords>(200, 430);
setMessageList(0x004B2900);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmHallOfRecords>(640, 430);
setMessageList(0x004B2910);
} else if (which == 2) {
- insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _sceneInfo140->xPosIndex], 430);
+ // Klaymen returning from reading a text column
+ insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _hallOfRecordsInfo->xPosIndex], 430);
setMessageList(0x004B2B70);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
} else {
+ // Klaymen entering from the left
insertKlayman<KmHallOfRecords>(0, 430);
setMessageList(0x004B2908);
}
@@ -2513,9 +2460,8 @@ uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam &par
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- }
break;
}
return messageResult;
@@ -2523,22 +2469,20 @@ uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam &par
void HallOfRecordsScene::readClickedColumn() {
int16 index = (_mouseClickPos.x - 23) / 89;
- if (index >= _sceneInfo140->count) {
+ if (index >= _hallOfRecordsInfo->count)
setMessageList2(0x004B2920);
- } else {
- setGlobalVar(V_CLICKED_COLUMN_INDEX, _sceneInfo140->xPosIndex + index);
+ else {
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, _hallOfRecordsInfo->xPosIndex + index);
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
- setGlobalVar(V_COLUMN_TEXT_NAME, _sceneInfo140->txFilename);
- if (index == 0 && _sceneInfo140->bgFilename3) {
- setGlobalVar(V_COLUMN_BACK_NAME, _sceneInfo140->bgFilename3);
- } else {
+ setGlobalVar(V_COLUMN_TEXT_NAME, _hallOfRecordsInfo->txFilename);
+ if (index == 0 && _hallOfRecordsInfo->bgFilename3)
+ setGlobalVar(V_COLUMN_BACK_NAME, _hallOfRecordsInfo->bgFilename3);
+ else
setGlobalVar(V_COLUMN_BACK_NAME, 0);
- }
- if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133) {
+ if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133)
setMessageList2(kHallOfRecordsSceneMessageListIds1[index]);
- } else {
+ else
setMessageList2(kHallOfRecordsSceneMessageListIds2[index]);
- }
}
}
@@ -2557,9 +2501,6 @@ static const uint32 kScene2247MessageListIds1[] = {
Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- //DEBUG
- setGlobalVar(V_LIGHTS_ON, 1);
-
SetMessageHandler(&Scene2247::handleMessage);
SetUpdateHandler(&Scene::update);
@@ -2576,17 +2517,21 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2247>(200, 430);
setMessageList(0x004B5428);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2247>(640, 430);
setMessageList(0x004B5438);
} else if (which == 2) {
+ // Klaymen returning from reading a text column
insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(V_COLUMN_TEXT_NAME) == 0x0008E486 ? 0 : 1], 430);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
setMessageList(0x004B5530);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2247>(0, 430);
setMessageList(0x004B5430);
}
@@ -2603,9 +2548,8 @@ uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- }
break;
}
return messageResult;
@@ -2624,11 +2568,10 @@ void Scene2247::readClickedColumn() {
}
setGlobalVar(V_CLICKED_COLUMN_INDEX, 0);
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
- if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133) {
+ if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133)
setMessageList2(kScene2247MessageListIds1[index]);
- } else {
+ else
setMessageList2(kScene2247MessageListIds2[index]);
- }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 625990b..34be267 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -38,9 +38,10 @@ public:
Module2200(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2200();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
- void createHallOfRecordsScene(int which, uint32 sceneInfo140Id);
+ void createHallOfRecordsScene(int which, uint32 hallOfRecordsInfoId);
};
// Scene2201
@@ -63,11 +64,11 @@ public:
class AsScene2201Door : public AnimatedSprite {
public:
- AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1);
+ AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen);
protected:
Klayman *_klayman;
Sprite *_ssDoorLight;
- bool _doorOpen;
+ bool _isOpen;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -95,13 +96,13 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-class SsScene2202PuzzleTile : public StaticSprite {
+class SsScene2202PuzzleCube : public StaticSprite {
public:
- SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value);
+ SsScene2202PuzzleCube(NeverhoodEngine *vm, Scene *parentScene, int16 cubePosition, int16 cubeSymbol);
protected:
Scene *_parentScene;
- int16 _value;
- int16 _tileIndex;
+ int16 _cubeSymbol;
+ int16 _cubePosition;
int16 _newX, _newY;
int16 _xDelta, _yDelta;
int16 _xIncr;
@@ -113,9 +114,9 @@ protected:
bool _isMoving;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suMoveTileX();
- void suMoveTileY();
- void moveTile(int16 newTileIndex);
+ void suMoveCubeX();
+ void suMoveCubeY();
+ void moveCube(int16 newCubePosition);
void stopMoving();
};
@@ -124,16 +125,16 @@ public:
Scene2202(NeverhoodEngine *vm, Module *parentModule, int which);
~Scene2202();
protected:
- Sprite *_ssMovingTile;
- Sprite *_ssDoneMovingTile;
- bool _isTileMoving;
- int16 _movingTileIndex;
+ Sprite *_ssMovingCube;
+ Sprite *_ssDoneMovingCube;
+ bool _isCubeMoving;
+ int16 _movingCubePosition;
int _surfacePriority;
bool _leaveScene;
bool _isSolved;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- int16 getFreeTileIndex(int16 index);
+ int16 getFreeCubePosition(int16 index);
bool testIsSolved();
};
@@ -298,7 +299,7 @@ public:
class Scene2207 : public Scene {
public:
- Scene2207(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene2207(NeverhoodEngine *vm, Module *parentModule);
protected:
Sprite *_asElevator;
Sprite *_ssMaskPart1;
@@ -332,7 +333,7 @@ protected:
int16 _rowScrollY;
int16 _maxRowIndex;
int16 _visibleRowsCount;
- Common::Array<const char*> _strings; // TODO: Move to TextResource
+ Common::Array<const char*> _strings;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createFontSurface();
@@ -353,10 +354,10 @@ protected:
class HallOfRecordsScene : public Scene {
public:
- HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id);
+ HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId);
~HallOfRecordsScene();
protected:
- SceneInfo140 *_sceneInfo140;
+ HallOfRecordsInfo *_hallOfRecordsInfo;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void readClickedColumn();
};
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 147a319..1a633e2 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -125,19 +125,19 @@ void StaticData::load(const char *filename) {
_navigationLists[id] = navigationList;
}
- // Load SceneInfo140 items
- uint32 sceneInfo140ItemsCount = fd.readUint32LE();
- debug("sceneInfo140ItemsCount: %d", sceneInfo140ItemsCount);
- for (uint32 i = 0; i < sceneInfo140ItemsCount; i++) {
- SceneInfo140 *sceneInfo140 = new SceneInfo140();
+ // Load HallOfRecordsInfo items
+ uint32 hallOfRecordsInfoItemsCount = fd.readUint32LE();
+ debug("hallOfRecordsInfoItemsCount: %d", hallOfRecordsInfoItemsCount);
+ for (uint32 i = 0; i < hallOfRecordsInfoItemsCount; i++) {
+ HallOfRecordsInfo *hallOfRecordsInfo = new HallOfRecordsInfo();
uint32 id = fd.readUint32LE();
- sceneInfo140->bgFilename1 = fd.readUint32LE();
- sceneInfo140->bgFilename2 = fd.readUint32LE();
- sceneInfo140->txFilename = fd.readUint32LE();
- sceneInfo140->bgFilename3 = fd.readUint32LE();
- sceneInfo140->xPosIndex = fd.readByte();
- sceneInfo140->count = fd.readByte();
- _sceneInfo140Items[id] = sceneInfo140;
+ hallOfRecordsInfo->bgFilename1 = fd.readUint32LE();
+ hallOfRecordsInfo->bgFilename2 = fd.readUint32LE();
+ hallOfRecordsInfo->txFilename = fd.readUint32LE();
+ hallOfRecordsInfo->bgFilename3 = fd.readUint32LE();
+ hallOfRecordsInfo->xPosIndex = fd.readByte();
+ hallOfRecordsInfo->count = fd.readByte();
+ _hallOfRecordsInfoItems[id] = hallOfRecordsInfo;
}
// Load SceneInfo2700 items
@@ -185,10 +185,10 @@ NavigationList *StaticData::getNavigationList(uint32 id) {
return _navigationLists[id];
}
-SceneInfo140 *StaticData::getSceneInfo140Item(uint32 id) {
- if (!_sceneInfo140Items[id])
- error("StaticData::getSceneInfo140Item() SceneInfo140 with id %08X not found", id);
- return _sceneInfo140Items[id];
+HallOfRecordsInfo *StaticData::getHallOfRecordsInfoItem(uint32 id) {
+ if (!_hallOfRecordsInfoItems[id])
+ error("StaticData::getHallOfRecordsInfoItem() HallOfRecordsInfo with id %08X not found", id);
+ return _hallOfRecordsInfoItems[id];
}
SceneInfo2700 *StaticData::getSceneInfo2700(uint32 id) {
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index 2a2db55..69a407b 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -68,7 +68,7 @@ struct NavigationItem {
typedef Common::Array<NavigationItem> NavigationList;
-struct SceneInfo140 {
+struct HallOfRecordsInfo {
uint32 bgFilename1;
uint32 bgFilename2;
uint32 txFilename;
@@ -100,14 +100,14 @@ public:
RectList *getRectList(uint32 id);
MessageList *getMessageList(uint32 id);
NavigationList *getNavigationList(uint32 id);
- SceneInfo140 *getSceneInfo140Item(uint32 id);
+ HallOfRecordsInfo *getHallOfRecordsInfoItem(uint32 id);
SceneInfo2700 *getSceneInfo2700(uint32 id);
protected:
Common::HashMap<uint32, HitRectList*> _hitRectLists;
Common::HashMap<uint32, RectList*> _rectLists;
Common::HashMap<uint32, MessageList*> _messageLists;
Common::HashMap<uint32, NavigationList*> _navigationLists;
- Common::HashMap<uint32, SceneInfo140*> _sceneInfo140Items;
+ Common::HashMap<uint32, HallOfRecordsInfo*> _hallOfRecordsInfoItems;
Common::HashMap<uint32, SceneInfo2700*> _sceneInfo2700Items;
};
Commit: 61e2a6f81d570c52485f610e84316ce63c9bfcba
https://github.com/scummvm/scummvm/commit/61e2a6f81d570c52485f610e84316ce63c9bfcba
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2300 (like the ones before)
- Also fix previous modules (oops)
Changed paths:
engines/neverhood/module1100.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2300.h
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 6dcc5f9..cc6284b 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -66,7 +66,7 @@ void Module1100::createScene(int sceneNum, int which) {
static const uint32 kSmackerFileHashList07[] = {0x00290321, 0x01881000, 0};
debug("Module1100::createScene(%d, %d)", sceneNum, which);
_sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
_vm->gameState().sceneNum = 0;
_countdown = 65;
@@ -206,7 +206,7 @@ void Module1100::updateScene() {
break;
}
} else {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0)) {
_vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index fbb9483..30bffb9 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -170,7 +170,7 @@ void Module1800::updateScene() {
break;
}
} else {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 2)
_vm->_soundMan->setTwoSoundsPlayFlag(false);
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 9b1945a..2c43afe 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -36,9 +36,9 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addSoundList(0x1A214010, kModule2300SoundList);
_vm->_soundMan->setSoundListParams(kModule2300SoundList, true, 50, 600, 10, 150);
- _flag = getGlobalVar(V_WALL_BROKEN) == 0;
+ _isWallBroken = getGlobalVar(V_WALL_BROKEN) != 0;
- if (_flag) {
+ if (_isWallBroken) {
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 0);
_vm->_soundMan->playSoundLooping(0x90F0D1C3);
} else {
@@ -48,19 +48,18 @@ Module2300::Module2300(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->playTwoSounds(0x1A214010, 0x48498E46, 0x50399F64, 0);
_vm->_soundMan->playTwoSounds(0x1A214010, 0x41861371, 0x43A2507F, 0);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(2, 0);
- } else if (which == 2) {
+ else if (which == 2)
createScene(3, 0);
- } else if (which == 3) {
+ else if (which == 3)
createScene(4, -1);
- } else if (which == 4) {
+ else if (which == 4)
createScene(1, 3);
- } else {
+ else
createScene(0, 1);
- }
}
@@ -70,34 +69,39 @@ Module2300::~Module2300() {
void Module2300::createScene(int sceneNum, int which) {
debug("Module2300::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
createNavigationScene(0x004B67B8, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
createNavigationScene(0x004B67E8, which);
- if (_flag) {
+ if (_isWallBroken) {
_soundVolume = 15;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 15);
}
break;
case 2:
+ _vm->gameState().sceneNum = 2;
createNavigationScene(0x004B6878, which);
break;
case 3:
- if (getGlobalVar(V_WALL_BROKEN)) {
+ _vm->gameState().sceneNum = 3;
+ if (getGlobalVar(V_WALL_BROKEN))
createNavigationScene(0x004B68F0, which);
- } else {
+ else {
_vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
createNavigationScene(0x004B68A8, which);
- if (_flag) {
+ if (_isWallBroken) {
_soundVolume = 87;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, 87);
}
}
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->setTwoSoundsPlayFlag(true);
createSmackerScene(0x20080A0B, true, true, false);
break;
@@ -108,42 +112,38 @@ void Module2300::createScene(int sceneNum, int which) {
void Module2300::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(1, 4);
- } else {
+ else
leaveModule(0);
- }
break;
case 1:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(0, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(2, 1);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(1, 3);
- } else if (_moduleResult == 4) {
+ else if (_moduleResult == 4)
createScene(3, 1);
- } else if (_moduleResult == 5) {
+ else if (_moduleResult == 5)
leaveModule(3);
- } else {
+ else
leaveModule(4);
- }
break;
case 2:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
leaveModule(3);
- } else {
+ else
createScene(1, 5);
- }
break;
case 3:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
leaveModule(2);
- } else {
+ else
createScene(1, 1);
- }
break;
case 4:
_vm->_soundMan->setTwoSoundsPlayFlag(false);
@@ -151,9 +151,9 @@ void Module2300::updateScene() {
break;
}
} else {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 1:
- if (_flag && navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 4 &&
+ if (_isWallBroken && navigationScene()->isWalkingForward() && navigationScene()->getNavigationIndex() == 4 &&
navigationScene()->getFrameNumber() % 2) {
_soundVolume++;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
@@ -166,7 +166,7 @@ void Module2300::updateScene() {
}
break;
case 3:
- if (_flag && navigationScene()->isWalkingForward() && navigationScene()->getFrameNumber() % 2) {
+ if (_isWallBroken && navigationScene()->isWalkingForward() && navigationScene()->getFrameNumber() % 2) {
_soundVolume--;
_vm->_soundMan->setSoundVolume(0x90F0D1C3, _soundVolume);
}
diff --git a/engines/neverhood/module2300.h b/engines/neverhood/module2300.h
index ed39a45..64f6c6d 100644
--- a/engines/neverhood/module2300.h
+++ b/engines/neverhood/module2300.h
@@ -36,7 +36,8 @@ public:
Module2300(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2300();
protected:
- bool _flag;
+ int _sceneNum;
+ bool _isWallBroken;
int _soundVolume;
void createScene(int sceneNum, int which);
void updateScene();
Commit: 38df3c0d62624bd078b9b7bad7d51110053d6e01
https://github.com/scummvm/scummvm/commit/38df3c0d62624bd078b9b7bad7d51110053d6e01
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2400 (like the ones before)
- Fix Klayman::stTurnToFront()
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 5fec376..cd6c88e 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -308,6 +308,13 @@ void GameModule::startup() {
//setGlobalVar(V_PROJECTOR_LOCATION, 4);
setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
setGlobalVar(V_LIGHTS_ON, 1);
+ setGlobalVar(V_WATER_RUNNING, 1);
+ setGlobalVar(V_HAS_TEST_TUBE, 1);
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, 0, 3);
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, 1, 1);
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, 2, 2);
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, 3, 0);
+ setSubVar(VA_CURR_WATER_PIPES_LEVEL, 4, 4);
// <<<DEBUG
#if 1
@@ -318,9 +325,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 2;
- _vm->gameState().sceneNum = 41;
- createModule(2200, -1);
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 0;
+ createModule(2400, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 9e9f136..88a878c 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -1825,7 +1825,7 @@ void Klayman::stTurnToFront() {
if (!stStartAction(AnimationCallback(&Klayman::stTurnToFront))) {
_status2 = 0;
_acceptInput = false;
- startAnimationByHash(0xCA221107, 0x8520108C, 0);
+ startAnimationByHash(0xCA221107, 0, 0x8520108C);
SetUpdateHandler(&Klayman::update);
SetMessageHandler(&Klayman::hmWalkToFront);
SetSpriteUpdate(&Klayman::suUpdateDestX);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index ccc47d0..3acb8b4 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -29,11 +29,10 @@ Module2400::Module2400(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addMusic(0x202D1010, 0xB110382D);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
- } else {
+ else
createScene(0, 0);
- }
}
@@ -43,39 +42,48 @@ Module2400::~Module2400() {
void Module2400::createScene(int sceneNum, int which) {
debug("Module2400::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_vm->_soundMan->stopMusic(0xB110382D, 0, 0);
_childObject = new Scene2401(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->startMusic(0xB110382D, 0, 2);
_childObject = new Scene2402(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->startMusic(0xB110382D, 0, 0);
_childObject = new Scene2403(_vm, this, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->stopMusic(0xB110382D, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 0);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
_vm->_soundMan->startMusic(0xB110382D, 0, 2);
_childObject = new Scene2406(_vm, this, which);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->_soundMan->stopMusic(0xB110382D, 0, 2);
createSmackerScene(0x20D80001, true, true, false);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
createStaticScene(0x81523218, 0x2321C81D);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
createStaticScene(0x08100210, 0x00214089);
break;
case 9:
+ _vm->gameState().sceneNum = 9;
createStaticScene(0x8C020505, 0x205018C8);
break;
}
@@ -85,7 +93,7 @@ void Module2400::createScene(int sceneNum, int which) {
void Module2400::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (_moduleResult == 1)
createScene(1, 0);
@@ -138,42 +146,25 @@ void Module2400::updateScene() {
}
static const NPoint kScene2401Points[] = {
- {384, 389},
- {406, 389},
- {429, 389},
- {453, 389},
- {477, 389}
+ {384, 389}, {406, 389}, {429, 389},
+ {453, 389}, {477, 389}
};
static const uint32 kScene2401FileHashes1[] = {
- 0x02842920,
- 0x02882920,
- 0x02902920,
- 0x02A02920,
- 0x02C02920,
- 0x02002920,
- 0x03802920,
- 0x00802920,
- 0x06802920,
+ 0x02842920, 0x02882920, 0x02902920,
+ 0x02A02920, 0x02C02920, 0x02002920,
+ 0x03802920, 0x00802920, 0x06802920,
0x03842920
};
static const uint32 kScene2401FileHashes2[] = {
- 0xD0910020,
- 0xD0910038,
- 0xD0910008,
- 0xD0910068,
- 0xD09100A8,
- 0
+ 0xD0910020, 0xD0910038, 0xD0910008,
+ 0xD0910068, 0xD09100A8, 0
};
static const uint32 kScene2401FileHashes3[] = {
- 0xD0910020,
- 0xD0910038,
- 0xD0910008,
- 0xD0910068,
- 0xD09100A8,
- 0
+ 0xD0910020, 0xD0910038, 0xD0910008,
+ 0xD0910068, 0xD09100A8, 0
};
static const NRect kScene2401Rects[] = {
@@ -185,31 +176,25 @@ static const NRect kScene2401Rects[] = {
};
static const uint32 kAsScene2401WaterSpitFileHashes2[] = {
- 0x5C044690,
- 0x5C644690,
- 0x5CA44690,
- 0x5D244690,
- 0x5E244690
+ 0x5C044690, 0x5C644690, 0x5CA44690,
+ 0x5D244690, 0x5E244690
};
static const uint32 kAsScene2401WaterSpitFileHashes1[] = {
- 0xF4418408,
- 0xF4418808,
- 0xF4419008,
- 0xF441A008,
- 0xCD4F8411
+ 0xF4418408, 0xF4418808, 0xF4419008,
+ 0xF441A008, 0xCD4F8411
};
AsScene2401WaterSpit::AsScene2401WaterSpit(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2401WaterSpit::handleMessage);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- createSurface(100, 146, 74);
_x = 240;
_y = 447;
+ createSurface(100, 146, 74);
setVisible(false);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2401WaterSpit::handleMessage);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
}
uint32 AsScene2401WaterSpit::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -223,9 +208,9 @@ uint32 AsScene2401WaterSpit::handleMessage(int messageNum, const MessageParam &p
_x = 240;
_y = 447;
_soundIndex = getSubVar(VA_CURR_WATER_PIPES_LEVEL, param.asInteger());
- playSound(0, 0x48640244);
startAnimation(kAsScene2401WaterSpitFileHashes2[param.asInteger()], 0, -1);
setVisible(true);
+ playSound(0, 0x48640244);
break;
case 0x3002:
stopAnimation();
@@ -238,12 +223,12 @@ uint32 AsScene2401WaterSpit::handleMessage(int messageNum, const MessageParam &p
AsScene2401FlowingWater::AsScene2401FlowingWater(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200), _isWaterFlowing(false) {
- createSurface1(0x10203116, 100);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2401FlowingWater::handleMessage);
_x = 88;
_y = 421;
+ createSurface1(0x10203116, 100);
setVisible(false);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2401FlowingWater::handleMessage);
}
AsScene2401FlowingWater::~AsScene2401FlowingWater() {
@@ -254,9 +239,8 @@ uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (_isWaterFlowing && param.asInteger() == 0x02421405) {
+ if (_isWaterFlowing && param.asInteger() == 0x02421405)
startAnimationByHash(0x10203116, 0x01084280, 0);
- }
break;
case 0x2002:
if (!_isWaterFlowing) {
@@ -282,12 +266,12 @@ uint32 AsScene2401FlowingWater::handleMessage(int messageNum, const MessageParam
AsScene2401WaterFlushing::AsScene2401WaterFlushing(NeverhoodEngine *vm, int16 x, int16 y)
: AnimatedSprite(vm, 1200), _countdown(0), _flushLoopCount(0) {
- createSurface1(0xB8596884, 100);
- SetUpdateHandler(&AsScene2401WaterFlushing::update);
- SetMessageHandler(&AsScene2401WaterFlushing::handleMessage);
_x = x;
_y = y;
+ createSurface1(0xB8596884, 100);
setVisible(false);
+ SetUpdateHandler(&AsScene2401WaterFlushing::update);
+ SetMessageHandler(&AsScene2401WaterFlushing::handleMessage);
}
void AsScene2401WaterFlushing::update() {
@@ -325,12 +309,10 @@ uint32 AsScene2401WaterFlushing::handleMessage(int messageNum, const MessagePara
AsScene2401Door::AsScene2401Door(NeverhoodEngine *vm, bool isOpen)
: AnimatedSprite(vm, 1100), _countdown(0), _isOpen(isOpen) {
- createSurface1(0x44687810, 100);
_x = 320;
_y = 240;
+ createSurface1(0x44687810, 100);
_newStickFrameIndex = STICK_LAST_FRAME;
- SetUpdateHandler(&AsScene2401Door::update);
- SetMessageHandler(&AsScene2401Door::handleMessage);
if (_isOpen) {
stopAnimation();
setVisible(false);
@@ -339,6 +321,8 @@ AsScene2401Door::AsScene2401Door(NeverhoodEngine *vm, bool isOpen)
startAnimation(0x44687810, 0, -1);
_newStickFrameIndex = 0;
}
+ SetUpdateHandler(&AsScene2401Door::update);
+ SetMessageHandler(&AsScene2401Door::handleMessage);
}
void AsScene2401Door::update() {
@@ -384,14 +368,11 @@ void AsScene2401Door::stDoorOpenFinished() {
}
Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _flag(false),
+ : Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _unkFlag(false),
_soundToggle(false), _asWaterSpitIndex(0) {
_vm->gameModule()->initWaterPipesPuzzle();
- setGlobalVar(V_WATER_RUNNING, 1); //DEBUG! Enables water
- setGlobalVar(V_HAS_TEST_TUBE, 1); //DEBUG! Gives the test tube
-
SetMessageHandler(&Scene2401::handleMessage);
SetUpdateHandler(&Scene2401::update);
@@ -422,16 +403,19 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
_asWaterSpit[1] = insertSprite<AsScene2401WaterSpit>();
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2401>(200, 447);
setMessageList(0x004B2F70);
_asDoor = insertSprite<AsScene2401Door>(false);
} else if (which == 1) {
+ // Klaymen entering from the back
insertKlayman<KmScene2401>(280, 413);
setMessageList(0x004B2F80);
_palette->addBasePalette(0xB103B604, 0, 65, 0);
_palette->addPalette(0xB103B604, 0, 65, 0);
_asDoor = insertSprite<AsScene2401Door>(true);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2401>(-20, 447);
setMessageList(0x004B2F78);
_asDoor = insertSprite<AsScene2401Door>(false);
@@ -446,10 +430,10 @@ void Scene2401::update() {
_ssWaterPipes[_pipeStatus - 1]->setVisible(false);
if (_pipeStatus >= 10) {
bool puzzleSolved = true, waterInside = false;
- for (uint i = 0; i < 5; i++) {
- if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, i) != getSubVar(VA_GOOD_WATER_PIPES_LEVEL, i))
+ for (uint pipeIndex = 0; pipeIndex < 5; pipeIndex++) {
+ if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, pipeIndex) != getSubVar(VA_GOOD_WATER_PIPES_LEVEL, pipeIndex))
puzzleSolved = false;
- if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, i) != 0)
+ if (getSubVar(VA_CURR_WATER_PIPES_LEVEL, pipeIndex) != 0)
waterInside = true;
}
if (puzzleSolved) {
@@ -475,9 +459,8 @@ void Scene2401::update() {
_pipeStatus++;
}
- if (_countdown2 != 0 && (--_countdown2) == 0) {
+ if (_countdown2 != 0 && (--_countdown2) == 0)
sendMessage(_asFlowingWater, 0x2003, 0);
- }
Scene::update();
@@ -492,33 +475,29 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
else if (param.asInteger() == 0x02144CB1)
sendEntityMessage(_klayman, 0x1014, _ssFloorButton);
else if (param.asInteger() == 0x11C40840) {
- if (getGlobalVar(V_NOTES_DOOR_UNLOCKED) && sendMessage(_asDoor, 0x2004, 0)) {
+ if (getGlobalVar(V_NOTES_DOOR_UNLOCKED) && sendMessage(_asDoor, 0x2004, 0))
setMessageList(0x004B3090);
- } else {
+ else
setMessageList(0x004B30B0);
- }
} else if (param.asInteger() == 0x412722C0) {
if (_countdown2 > 0 && getGlobalVar(V_HAS_TEST_TUBE)) {
_countdown2 = 144;
setMessageList(0x004B3020);
- } else {
+ } else
setMessageList(0x004B3050);
- }
} else if (param.asInteger() == 0x21142050) {
- if (_flag && _countdown1 == 0 && getGlobalVar(V_NOTES_PUZZLE_SOLVED) == 0) {
+ if (_unkFlag && _countdown1 == 0 && !getGlobalVar(V_NOTES_PUZZLE_SOLVED))
setMessageList(0x004B2FA8);
- } else {
+ else
setMessageList(0x004B2FC8);
- }
- } else if (param.asInteger() == 0x87441031) {
+ } else if (param.asInteger() == 0x87441031)
setSurfacePriority(_sprite1->getSurface(), 1100);
- } else if (param.asInteger() == 0x80C40322) {
+ else if (param.asInteger() == 0x80C40322) {
setSurfacePriority(_sprite1->getSurface(), 200);
cancelMessageList();
- _flag = true;
- } else if (param.asInteger() == 0x09C4B40A && _countdown2 > 12) {
+ _unkFlag = true;
+ } else if (param.asInteger() == 0x09C4B40A && _countdown2 > 12)
_countdown2 = 12;
- }
break;
case 0x2000:
messageResult = 0;
@@ -558,29 +537,21 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
void Scene2401::playPipeSound(uint32 fileHash) {
- if (_soundToggle)
- playSound(0, fileHash);
- else
- playSound(1, fileHash);
+ playSound(_soundToggle ? 0 : 1, fileHash);
_soundToggle = !_soundToggle;
}
static const uint32 kScene2402FileHashes[] = {
- 0xD0910020,
- 0xD0910038,
- 0xD0910008,
- 0xD0910068,
- 0xD09100A8
+ 0xD0910020, 0xD0910038, 0xD0910008,
+ 0xD0910068, 0xD09100A8
};
AsScene2402Door::AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool isOpen)
: AnimatedSprite(vm, 1100), _parentScene(parentScene), _isOpen(isOpen), _countdown(0) {
- SetUpdateHandler(&AsScene2402Door::update);
- SetMessageHandler(&AsScene2402Door::handleMessage);
- createSurface1(0x80495831, 100);
_x = 320;
_y = 240;
+ createSurface1(0x80495831, 100);
if (_isOpen) {
startAnimation(0x80495831, -1, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
@@ -589,6 +560,8 @@ AsScene2402Door::AsScene2402Door(NeverhoodEngine *vm, Scene *parentScene, bool i
stopAnimation();
setVisible(false);
}
+ SetUpdateHandler(&AsScene2402Door::update);
+ SetMessageHandler(&AsScene2402Door::handleMessage);
}
void AsScene2402Door::update() {
@@ -634,12 +607,11 @@ void AsScene2402Door::stDoorClosingFinished() {
AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
: AnimatedSprite(vm, 1100), _klayman(klayman), _countdown1(0), _countdown2(0) {
- createSurface(100, 127, 90);
- SetMessageHandler(&Sprite::handleMessage);
_x = 260;
_y = 210;
+ createSurface(100, 127, 90);
setDoDeltaX(1);
-
+ SetMessageHandler(&Sprite::handleMessage);
if (!getGlobalVar(V_TV_JOKE_TOLD)) {
loadSound(0, 0x58208810);
_countdown1 = 48;
@@ -656,7 +628,6 @@ AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman)
_countdown1 = 0;
SetUpdateHandler(&AsScene2402TV::upFocusKlayman);
}
-
}
AsScene2402TV::~AsScene2402TV() {
@@ -675,11 +646,10 @@ void AsScene2402TV::upWait() {
void AsScene2402TV::upFocusKlayman() {
int16 frameIndex = CLIP<int16>((_klayman->getX() - _x + 150) / 10, 0, 29);
if (frameIndex != _currFrameIndex) {
- if (frameIndex > _currFrameIndex) {
+ if (frameIndex > _currFrameIndex)
_currFrameIndex++;
- } else if (frameIndex < _currFrameIndex) {
+ else if (frameIndex < _currFrameIndex)
_currFrameIndex--;
- }
startAnimation(0x050A0103, _currFrameIndex, -1);
_newStickFrameIndex = _currFrameIndex;
if (_countdown2 == 0) {
@@ -687,9 +657,8 @@ void AsScene2402TV::upFocusKlayman() {
_vm->_soundMan->playSoundLooping(0xC42D4528);
}
_countdown2 = 5;
- } else if (_countdown2 != 0 && (--_countdown2 == 0)) {
+ } else if (_countdown2 != 0 && (--_countdown2 == 0))
_vm->_soundMan->deleteSound(0xC42D4528);
- }
AnimatedSprite::update();
}
@@ -704,9 +673,8 @@ uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x431EA0B0) {
+ if (param.asInteger() == 0x431EA0B0)
playSound(0);
- }
break;
case 0x3002:
gotoNextState();
@@ -732,16 +700,20 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2402>(198, 404);
setMessageList(0x004AF7C8);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2402>(660, 404);
setMessageList(0x004AF7D8);
} else if (which == 2) {
+ // Klaymen returning from looking through the window
insertKlayman<KmScene2402>(409, 404);
_klayman->setDoDeltaX(getGlobalVar(V_KLAYMAN_IS_DELTA_X) ? 1 : 0);
setMessageList(0x004AF888);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2402>(0, 404);
setMessageList(0x004AF7D0);
}
@@ -780,9 +752,9 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x402064D8) {
+ if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x01C66840) {
+ else if (param.asInteger() == 0x01C66840) {
if (sendMessage(_asDoor, 0x2000, 0))
setMessageList(0x004AF800);
else
@@ -809,10 +781,7 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
void Scene2402::playPipeSound(uint32 fileHash) {
- if (_soundToggle)
- playSound(0, fileHash);
- else
- playSound(1, fileHash);
+ playSound(_soundToggle ? 0 : 1, fileHash);
_soundToggle = !_soundToggle;
}
@@ -832,22 +801,26 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
_asLightCord->setClipRect(0, 25, 640, 480);
if (which < 0) {
+ // Restoring game
_isClimbingLadder = false;
insertKlayman<KmScene2403>(220, 449);
setMessageList(0x004B5C98);
setRectList(0x004B5E18);
} else if (which == 1) {
+ // Klaymen returning from looking through the window
_isClimbingLadder = false;
insertKlayman<KmScene2403>(433, 449);
setMessageList(0x004B5D70);
setRectList(0x004B5E18);
} else if (which == 2) {
+ // Klaymen standing around after the critter video
_isClimbingLadder = false;
insertKlayman<KmScene2403>(440, 449);
_klayman->setDoDeltaX(1);
setMessageList(0x004B5C98);
setRectList(0x004B5E18);
} else {
+ // Klaymen coming up from ladder
_isClimbingLadder = true;
insertKlayman<KmScene2403>(122, 599);
setMessageList(0x004B5CA0);
@@ -860,20 +833,17 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite3 = insertSprite<AsScene1002KlaymanLadderHands>(_klayman);
tempSprite3->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2());
_klayman->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2());
-
loadSound(1, calcHash("fxFogHornSoft"));
-
}
uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x040424D0) {
+ if (param.asInteger() == 0x040424D0)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x180CE614) {
+ else if (param.asInteger() == 0x180CE614)
sendEntityMessage(_klayman, 0x1014, _asLightCord);
- }
break;
case 0x2000:
_isClimbingLadder = true;
@@ -895,9 +865,8 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
break;
case 0x480F:
- if (sender == _asLightCord) {
+ if (sender == _asLightCord)
leaveScene(2);
- }
break;
case 0x4826:
if (sender == _asTape && !_isClimbingLadder) {
@@ -929,7 +898,6 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 5, 1100, 456, 409, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
tempSprite2 = insertStaticSprite(0x19625293, 1100);
_clipRects[0].x1 = 0;
_clipRects[0].y1 = 0;
@@ -947,33 +915,37 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
}
tempSprite2 = insertStaticSprite(0x22300924, 1300);
-
_clipRects[1].x1 = tempSprite1->getDrawRect().x;
_clipRects[1].y1 = tempSprite2->getDrawRect().y;
_clipRects[1].x2 = 640;
_clipRects[1].y2 = 480;
if (which < 0) {
+ // Restoring game
_isClimbingLadder = false;
insertKlayman<KmScene2406>(307, 404, _clipRects, 2);
setMessageList(0x004B76C8);
setRectList(0x004B78C8);
} else if (which == 1) {
+ // Klaymen coming down the ladder
_isClimbingLadder = true;
insertKlayman<KmScene2406>(253, -16, _clipRects, 2);
setMessageList(0x004B76D8);
setRectList(0x004B78D8);
} else if (which == 2) {
+ // Klaymen returning from the diskplayer
_isClimbingLadder = false;
insertKlayman<KmScene2406>(480, 404, _clipRects, 2);
setMessageList(0x004B77C0);
setRectList(0x004B78C8);
} else if (which == 3) {
+ // Klaymen returning from looking through the window
_isClimbingLadder = false;
insertKlayman<KmScene2406>(387, 404, _clipRects, 2);
setMessageList(0x004B7810);
setRectList(0x004B78C8);
} else {
+ // Klaymen entering from the left
_isClimbingLadder = false;
insertKlayman<KmScene2406>(0, 404, _clipRects, 2);
setMessageList(0x004B76D0);
@@ -990,11 +962,10 @@ uint32 Scene2406::handleMessage(int messageNum, const MessageParam ¶m, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x41062804) {
- if (getGlobalVar(V_SPIKES_RETRACTED)) {
+ if (getGlobalVar(V_SPIKES_RETRACTED))
setMessageList(0x004B7758);
- } else {
+ else
setMessageList(0x004B7738);
- }
}
break;
case 0x2000:
diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h
index 8074c58..908c9d6 100644
--- a/engines/neverhood/module2400.h
+++ b/engines/neverhood/module2400.h
@@ -44,6 +44,7 @@ public:
Module2400(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2400();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -100,7 +101,7 @@ protected:
Sprite *_asWaterFlushing[5];
Sprite *_asDoor;
bool _soundToggle;
- bool _flag;
+ bool _unkFlag;
int _countdown1;
int _countdown2;
int _pipeStatus;
Commit: 28e613c68bf9d7fd12d151c9fb0f496b6c6cf0ee
https://github.com/scummvm/scummvm/commit/28e613c68bf9d7fd12d151c9fb0f496b6c6cf0ee
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2500 (like the ones before)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index cd6c88e..e35ced3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -326,8 +326,8 @@ void GameModule::startup() {
*/
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 0;
- createModule(2400, -1);
+ _vm->gameState().sceneNum = 3;
+ createModule(2500, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index de6e19e..3479387 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -28,30 +28,25 @@ namespace Neverhood {
// TODO Maybe move these to the DAT
static const uint32 kScene2505StaticSprites[] = {
- 0x4000A226,
- 0
+ 0x4000A226, 0
};
static const NRect kScene2505ClipRect = NRect(0, 0, 564, 480);
static const uint32 kScene2506StaticSprites[] = {
- 0x4027AF02,
- 0
+ 0x4027AF02, 0
};
static const NRect kScene2506ClipRect = NRect(0, 0, 640, 441);
static const uint32 kScene2508StaticSprites1[] = {
- 0x2F08E610,
- 0xD844E6A0,
- 0
+ 0x2F08E610, 0xD844E6A0, 0
};
static const NRect kScene2508ClipRect1 = NRect(0, 0, 594, 448);
static const uint32 kScene2508StaticSprites2[] = {
- 0x2F08E610,
- 0
+ 0x2F08E610, 0
};
static const NRect kScene2508ClipRect2 = NRect(0, 0, 594, 448);
@@ -63,11 +58,10 @@ Module2500::Module2500(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->startMusic(0x05343184, 0, 0);
SetMessageHandler(&Module2500::handleMessage);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
- } else {
+ else
createScene(0, 0);
- }
loadSound(0, 0x00880CCC);
loadSound(1, 0x00880CC0);
@@ -82,16 +76,19 @@ Module2500::~Module2500() {
void Module2500::createScene(int sceneNum, int which) {
debug("Module2500::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene2501(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->gameState().which = which;
createScene2704(which, 0x004B01B8, 220);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->gameState().which = which;
if (getGlobalVar(V_WORLDS_JOINED))
createScene2704(which, 0x004B01E0, 150);
@@ -99,22 +96,27 @@ void Module2500::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B0208, 150);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_childObject = new Scene2504(_vm, this, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->gameState().which = which;
createScene2704(which, 0x004B0230, 150, kScene2505StaticSprites, &kScene2505ClipRect);
break;
case 5:
setGlobalVar(V_CAR_DELTA_X, 1);
+ _vm->gameState().sceneNum = 5;
_vm->gameState().which = which;
createScene2704(which, 0x004B0268, 150, kScene2506StaticSprites, &kScene2506ClipRect);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->gameState().which = which;
createScene2704(which, 0x004B02A0, 150);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_vm->gameState().which = which;
if (getGlobalVar(V_ENTRANCE_OPEN))
createScene2704(which, 0x004B02C8, 150, kScene2508StaticSprites1, &kScene2508ClipRect1);
@@ -122,9 +124,11 @@ void Module2500::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B02C8, 150, kScene2508StaticSprites2, &kScene2508ClipRect2);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_childObject = new Scene1608(_vm, this, which);
break;
case 9:
+ _vm->gameState().sceneNum = 9;
if (getGlobalVar(V_ENTRANCE_OPEN))
createStaticScene(0xC62A0645, 0xA0641C6A);
else
@@ -137,7 +141,7 @@ void Module2500::createScene(int sceneNum, int which) {
void Module2500::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (_moduleResult == 1)
createScene(2, 0);
@@ -232,13 +236,13 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x99BE9015); // Don't add this to the sprite list
addEntity(_ssTrackShadowBackground);
-
_asCar = createSprite<AsCommonCar>(this, 211, 400); // Create but don't add to the sprite list yet
_asIdleCarLower = insertSprite<AsCommonIdleCarLower>(211, 400);
_asIdleCarFull = insertSprite<AsCommonIdleCarFull>(211, 400);
insertStaticSprite(0xC42AC521, 1500);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2501>(162, 393);
_kmScene2501 = _klayman;
_klaymanInCar = false;
@@ -250,6 +254,8 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_asCar->setVisible(false);
_currTrackIndex = 0;
} else if (which == 1 || which == 2) {
+ // 1: Klaymen entering riding the car on the left track
+ // 2: Klaymen entering riding the car on the bottom track
addSprite(_asCar);
_kmScene2501 = (Klayman*)new KmScene2501(_vm, this, 275, 393);
_klaymanInCar = true;
@@ -261,6 +267,7 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarFull->setVisible(false);
_currTrackIndex = which;
} else {
+ // Klaymen entering the car
insertKlayman<KmScene2501>(162, 393);
_kmScene2501 = _klayman;
_klaymanInCar = false;
@@ -392,26 +399,24 @@ uint32 Scene2501::hmRidingCar(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2005:
- if (_sceneInfos[_currTrackIndex]->which1 < 0 && _newTrackIndex >= 0) {
+ if (_sceneInfos[_currTrackIndex]->which1 < 0 && _newTrackIndex >= 0)
changeTrack();
- } else if (_sceneInfos[_currTrackIndex]->which1 == 0) {
+ else if (_sceneInfos[_currTrackIndex]->which1 == 0) {
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
sendMessage(_asCar, 0x200F, 1);
- } else if (_sceneInfos[_currTrackIndex]->which1 > 0) {
+ } else if (_sceneInfos[_currTrackIndex]->which1 > 0)
leaveScene(_sceneInfos[_currTrackIndex]->which1);
- }
break;
case 0x2006:
- if (_sceneInfos[_currTrackIndex]->which2 < 0 && _newTrackIndex >= 0) {
+ if (_sceneInfos[_currTrackIndex]->which2 < 0 && _newTrackIndex >= 0)
changeTrack();
- } else if (_sceneInfos[_currTrackIndex]->which2 == 0) {
+ else if (_sceneInfos[_currTrackIndex]->which2 == 0) {
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
sendMessage(_asCar, 0x200F, 1);
- } else if (_sceneInfos[_currTrackIndex]->which2 > 0) {
+ } else if (_sceneInfos[_currTrackIndex]->which2 > 0)
leaveScene(_sceneInfos[_currTrackIndex]->which2);
- }
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -437,11 +442,10 @@ void Scene2501::changeTrack() {
_currTrackIndex = _newTrackIndex;
_trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
_asCar->setPathPoints(_trackPoints);
- if (_currTrackIndex == 0) {
+ if (_currTrackIndex == 0)
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
- } else {
+ else
sendMessage(_asCar, 0x2002, 0);
- }
sendPointMessage(_asCar, 0x2004, _clickPoint);
_newTrackIndex = -1;
}
@@ -503,11 +507,10 @@ void SsScene2504Button::update() {
_isSoundPlaying = false;
}
if (_countdown != 0 && (--_countdown) == 0) {
- if (getSubVar(VA_LOCKS_DISABLED, 0x01180951)) {
+ if (getSubVar(VA_LOCKS_DISABLED, 0x01180951))
playSound(0);
- } else {
+ else
playSound(1);
- }
_isSoundPlaying = true;
}
}
@@ -519,11 +522,10 @@ uint32 SsScene2504Button::handleMessage(int messageNum, const MessageParam ¶
if (_countdown == 0 && !_isSoundPlaying) {
setVisible(true);
_countdown = 2;
- if (getSubVar(VA_LOCKS_DISABLED, 0x01180951)) {
+ if (getSubVar(VA_LOCKS_DISABLED, 0x01180951))
setSubVar(VA_LOCKS_DISABLED, 0x01180951, 0);
- } else {
+ else
setSubVar(VA_LOCKS_DISABLED, 0x01180951, 1);
- }
playSound(2);
}
messageResult = 1;
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index 3e018f9..38a1a43 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -39,6 +39,7 @@ public:
Module2500(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2500();
protected:
+ int _sceneNum;
int _soundIndex;
void createScene(int sceneNum, int which);
void updateScene();
Commit: 36204f573dd1903382de4c629d1e53242327ddcb
https://github.com/scummvm/scummvm/commit/36204f573dd1903382de4c629d1e53242327ddcb
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:35-07:00
Commit Message:
NEVERHOOD: Clean up Module2600 (like the ones before)
Changed paths:
engines/neverhood/module2600.cpp
engines/neverhood/module2600.h
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index d1b95be..4ddcc38 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -36,13 +36,12 @@ static const uint32 kModule2600SoundList[] = {
Module2600::Module2600(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 1) {
+ else if (which == 1)
createScene(4, 1);
- } else {
+ else
createScene(0, 1);
- }
_vm->_soundMan->addSoundList(0x40271018, kModule2600SoundList);
_vm->_soundMan->setSoundListParams(kModule2600SoundList, true, 50, 600, 5, 150);
@@ -56,67 +55,74 @@ Module2600::~Module2600() {
void Module2600::createScene(int sceneNum, int which) {
debug("Module2600::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
createNavigationScene(0x004B8608, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
createNavigationScene(0x004B8638, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
createNavigationScene(0x004B86C8, which);
break;
case 3:
- if (getGlobalVar(V_CREATURE_ANGRY)) {
+ _vm->gameState().sceneNum = 3;
+ if (getGlobalVar(V_CREATURE_ANGRY))
createNavigationScene(0x004B8758, which);
- } else {
+ else
createNavigationScene(0x004B86F8, which);
- }
break;
case 4:
+ _vm->gameState().sceneNum = 4;
createNavigationScene(0x004B87B8, which);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
createNavigationScene(0x004B8698, which);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_vm->_soundMan->deleteGroup(0x40271018);
createSmackerScene(0x30090001, true, true, false);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_childObject = new Scene2609(_vm, this, which);
break;
case 1002:
- if (getGlobalVar(V_FRUIT_COUNTING_INDEX) == 1) {
+ _vm->gameState().sceneNum = 2;
+ if (getGlobalVar(V_FRUIT_COUNTING_INDEX) == 1)
createSmackerScene(0x018C0404, true, true, false);
- } else if (getGlobalVar(V_FRUIT_COUNTING_INDEX) == 2) {
+ else if (getGlobalVar(V_FRUIT_COUNTING_INDEX) == 2)
createSmackerScene(0x018C0407, true, true, false);
- } else {
+ else
createSmackerScene(0x818C0405, true, true, false);
- }
- if (getGlobalVar(V_FRUIT_COUNTING_INDEX) >= 2) {
+ if (getGlobalVar(V_FRUIT_COUNTING_INDEX) >= 2)
setGlobalVar(V_FRUIT_COUNTING_INDEX, 0);
- } else {
+ else
incGlobalVar(V_FRUIT_COUNTING_INDEX, +1);
- }
break;
case 1003:
+ _vm->gameState().sceneNum = 3;
createSmackerScene(0x001C0007, true, true, false);
break;
case 1006:
- if (getGlobalVar(V_WATER_RUNNING)) {
+ _vm->gameState().sceneNum = 6;
+ if (getGlobalVar(V_WATER_RUNNING))
createSmackerScene(0x049A1181, true, true, false);
- } else {
+ else
createSmackerScene(0x04981181, true, true, false);
- }
break;
case 1008:
- if (getGlobalVar(V_WATER_RUNNING)) {
+ _vm->gameState().sceneNum = 8;
+ if (getGlobalVar(V_WATER_RUNNING))
createSmackerScene(0x42B80941, true, true, false);
- } else {
+ else
createSmackerScene(0x42980941, true, true, false);
- }
break;
}
SetUpdateHandler(&Module2600::updateScene);
@@ -125,63 +131,57 @@ void Module2600::createScene(int sceneNum, int which) {
void Module2600::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(1, 3);
- } else {
+ else
leaveModule(0);
- }
break;
case 1:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(6, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(0, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(2, 1);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(3, 0);
- }
break;
case 2:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(1, 0);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(1002, -1);
- }
break;
case 3:
if (_moduleResult == 0) {
- if (getGlobalVar(V_CREATURE_ANGRY)) {
+ if (getGlobalVar(V_CREATURE_ANGRY))
createScene(4, 0);
- } else {
+ else
createScene(1003, -1);
- }
- } else if (_moduleResult == 2) {
+ } else if (_moduleResult == 2)
createScene(1, 1);
- } else if (_moduleResult == 3) {
- if (getGlobalVar(V_CREATURE_ANGRY)) {
+ else if (_moduleResult == 3) {
+ if (getGlobalVar(V_CREATURE_ANGRY))
createScene(4, 0);
- } else {
+ else {
setGlobalVar(V_CREATURE_ANGRY, 1);
createScene(7, -1);
}
}
break;
case 4:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
leaveModule(1);
- } else {
+ else
createScene(3, 1);
- }
break;
case 6:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createScene(1006, -1);
- } else if (_moduleResult == 1) {
+ else if (_moduleResult == 1)
createScene(1, 2);
- }
break;
case 7:
leaveModule(0);
@@ -208,6 +208,9 @@ void Module2600::updateScene() {
SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
: StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) {
+ SetUpdateHandler(&SsScene2609Button::update);
+ SetMessageHandler(&SsScene2609Button::handleMessage);
+
loadSprite(0x825A6923, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
if (!getGlobalVar(V_WATER_RUNNING))
setVisible(false);
@@ -215,8 +218,6 @@ SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene)
loadSound(1, 0x7027FD64);
loadSound(2, 0x44043000);
loadSound(3, 0x44045000);
- SetUpdateHandler(&SsScene2609Button::update);
- SetMessageHandler(&SsScene2609Button::handleMessage);
}
void SsScene2609Button::update() {
@@ -295,6 +296,9 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _isBusy(false) {
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&Scene2609::handleMessage);
+
setBackground(0x51409A16);
setPalette(0x51409A16);
_asWater = insertSprite<AsScene2609Water>();
@@ -303,8 +307,6 @@ Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x09A1251C, 20, 620);
insertStaticSprite(0x02138002, 1200);
insertStaticSprite(0x825E2827, 1200);
- SetMessageHandler(&Scene2609::handleMessage);
- SetUpdateHandler(&Scene::update);
}
uint32 Scene2609::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
diff --git a/engines/neverhood/module2600.h b/engines/neverhood/module2600.h
index 107ee91..8f2f377 100644
--- a/engines/neverhood/module2600.h
+++ b/engines/neverhood/module2600.h
@@ -36,6 +36,7 @@ public:
Module2600(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2600();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
};
Commit: 8d5a4f736e1160463ee7bd85ed67e9b9f742509e
https://github.com/scummvm/scummvm/commit/8d5a4f736e1160463ee7bd85ed67e9b9f742509e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:36-07:00
Commit Message:
NEVERHOOD: Add tables for new scenes in Module2700
Changed paths:
devtools/create_neverhood/create_neverhood.cpp
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/create_neverhood.cpp b/devtools/create_neverhood/create_neverhood.cpp
index dc77d71..323066d 100644
--- a/devtools/create_neverhood/create_neverhood.cpp
+++ b/devtools/create_neverhood/create_neverhood.cpp
@@ -87,7 +87,6 @@ struct HitRect {
uint16 messageNum;
void load(uint32 offset) {
- printf("Loading HitRect @ %08X...\n", offset);
byte *item = getData(offset);
x1 = READ_LE_UINT16(item + 0);
y1 = READ_LE_UINT16(item + 2);
@@ -117,7 +116,6 @@ struct MessageItem {
MessageItem(uint16 msgNum, uint32 msgParam) : messageNum(msgNum), messageParam(msgParam) {}
void load(uint32 offset) {
- printf("Loading MessageItem @ %08X...\n", offset);
byte *item = getData(offset);
messageNum = READ_LE_UINT16(item + 0);
messageParam = READ_LE_UINT32(item + 4);
@@ -140,7 +138,6 @@ struct SubRectItem {
uint32 messageListOffset;
void load(uint32 offset) {
- printf("Loading SubRectItem @ %08X...\n", offset);
byte *item = getData(offset);
x1 = READ_LE_UINT16(item + 0);
y1 = READ_LE_UINT16(item + 2);
@@ -173,7 +170,6 @@ struct RectItem {
std::vector<SubRectItem> subRectItems;
void load(uint32 offset) {
- printf("Loading RectItem @ %08X...\n", offset);
byte *item = getData(offset);
uint32 subItemOffset;
x1 = READ_LE_UINT16(item + 0);
@@ -217,7 +213,6 @@ struct NavigationItem {
uint32 mouseCursorFileHash;
void load(uint32 offset) {
- printf("Loading NavigationItem @ %08X...\n", offset);
byte *item = getData(offset);
fileHash = READ_LE_UINT32(item + 0);
leftSmackerFileHash = READ_LE_UINT32(item + 4);
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index eb210f8..1218526 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -124,6 +124,8 @@ static const uint32 rectListOffsets[] = {
1, 0x004B78D8,
// Scene2501
1, 0x004B2608,
+ // Scene2732
+ 1, 0x004AE360,
// Scene2801
1, 0x004B6CE0,
1, 0x004B6CD0,
@@ -438,6 +440,8 @@ static const uint32 messageListOffsets[] = {
// Scene2501
7, 0x004B2538,
6, 0x004B2570,
+ // Scene2732
+ 1, 0x004AE328,
// Scene2801
1, 0x004B6BB8,
1, 0x004B6BC0,
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index 26a705e..e384ee1 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: c539060460b312a52ac1c0993b2d39c5f666c6fa
https://github.com/scummvm/scummvm/commit/c539060460b312a52ac1c0993b2d39c5f666c6fa
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:36-07:00
Commit Message:
NEVERHOOD: Clean up Module2700 (like the ones before)
- Add Scene2703 and Scene2732
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e35ced3..6516485 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -326,8 +326,8 @@ void GameModule::startup() {
*/
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 3;
- createModule(2500, -1);
+ _vm->gameState().sceneNum = 28;
+ createModule(2700, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 88a878c..782c376 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -3291,6 +3291,44 @@ void Klayman::stStartWalkingResume() {
FinalizeState(&Klayman::evStartWalkingDone);
}
+void Klayman::upPeekInsideBlink() {
+ update();
+ ++_blinkCounter;
+ if (_blinkCounter >= _blinkCounterMax)
+ stPeekInsideBlink();
+}
+
+void Klayman::stPeekInside() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 8, 37);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::stPeekInsideBlink);
+}
+
+void Klayman::stPeekInsideReturn() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0xAC20C012, 43, 49);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::stPeekInsideBlink() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 38, 42);
+ _newStickFrameIndex = 42;
+ SetUpdateHandler(&Klayman::upPeekInsideBlink);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(NULL);
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+}
+
//##############################################################################
// KmScene1001
@@ -5563,6 +5601,23 @@ uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
+KmScene2732::KmScene2732(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+ // Empty
+}
+
+uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4804:
+ GotoState(&Klayman::stPeekInside);
+ break;
+ case 0x483C:
+ GotoState(&Klayman::stPeekInsideReturn);
+ break;
+ }
+ return 0;
+}
+
KmScene2801::KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 1ac4519..ab2c523 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -348,6 +348,11 @@ public:
uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
void evMoveVenusFlyTrapDone();
+ void stPeekInside();
+ void stPeekInsideReturn();
+ void stPeekInsideBlink();
+ void upPeekInsideBlink();
+
////////////////////////////////////////////////////////////////////////////
void stopWalking();
@@ -678,6 +683,13 @@ protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
+class KmScene2732 : public Klayman {
+public:
+ KmScene2732(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
+};
+
class KmScene2801 : public Klayman {
public:
KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 1e02e64..a625f87 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -91,12 +91,13 @@ Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
which = _vm->gameState().which;
+ // Scenes 0, 30 and 31 are "normal" scenes, whereas the other scenes are tracks.
+ // "gameState().which" indicates which track the car is at.
if (_vm->gameState().sceneNum == 0 || _vm->gameState().sceneNum == 30 || _vm->gameState().sceneNum == 31)
which = -1;
createScene(_vm->gameState().sceneNum, which);
- } else {
+ } else
createScene(0, 0);
- }
loadSound(0, 0x00880CCC);
loadSound(1, 0x00880CC0);
@@ -111,17 +112,21 @@ Module2700::~Module2700() {
void Module2700::createScene(int sceneNum, int which) {
debug("Module2700::createScene(%d, %d)", sceneNum, which);
- if (sceneNum != 30 && sceneNum != 31)
- _vm->gameState().which = which;
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
+ _vm->gameState().which = which;
_childObject = new Scene2701(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
+ _vm->gameState().which = which;
_childObject = new Scene2702(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
+ _vm->gameState().which = which;
if (which == 6 || which == 7)
createScene2703(which, 0x004B1710);
else if (which == 4 || which == 5)
@@ -132,41 +137,54 @@ void Module2700::createScene(int sceneNum, int which) {
createScene2703(which, 0x004B1788);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B17B0, 150);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B17D8, 150);
break;
case 5:
- if (which >= 4) {
+ _vm->gameState().sceneNum = 5;
+ _vm->gameState().which = which;
+ if (which >= 4)
_childObject = new Scene2706(_vm, this, which);
- } else if (which == 2 || which == 3) {
+ else if (which == 2 || which == 3)
createScene2704(which, 0x004B1828, 150);
- } else {
+ else
createScene2704(which, 0x004B1800, 150);
- }
break;
case 6:
+ _vm->gameState().sceneNum = 6;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1850, 150);
break;
case 7:
- if (which == 2 || which == 3) {
+ _vm->gameState().sceneNum = 7;
+ _vm->gameState().which = which;
+ if (which == 2 || which == 3)
createScene2704(which, 0x004B1878, 150);
- } else {
+ else
createScene2704(which, 0x004B18A0, 150);
- }
break;
case 8:
- if (which == 2 || which == 3) {
+ _vm->gameState().sceneNum = 8;
+ _vm->gameState().which = which;
+ if (which == 2 || which == 3)
createScene2704(which, 0x004B18C8, 150);
- } else {
+ else
createScene2704(which, 0x004B18F0, 150);
- }
break;
case 9:
+ _vm->gameState().sceneNum = 9;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1918, 150, kScene2710StaticSprites, &kScene2710ClipRect);
break;
case 10:
+ _vm->gameState().sceneNum = 10;
+ _vm->gameState().which = which;
// TODO _vm->gameModule()->initScene2808Vars2();
_scene2711StaticSprites[0] = kScene2711FileHashes1[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 2)];
_scene2711StaticSprites[1] = kScene2711FileHashes2[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 1)];
@@ -177,100 +195,131 @@ void Module2700::createScene(int sceneNum, int which) {
createScene2704(which, 0x004B1950, 150, _scene2711StaticSprites, &kScene2711ClipRect);
break;
case 11:
+ _vm->gameState().sceneNum = 11;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B19E0, 150);
break;
case 12:
+ _vm->gameState().sceneNum = 12;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1A08, 150);
break;
case 13:
+ _vm->gameState().sceneNum = 13;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1A30, 150);
break;
case 14:
- if (which == 4 || which == 5) {
+ _vm->gameState().sceneNum = 14;
+ _vm->gameState().which = which;
+ if (which == 4 || which == 5)
createScene2704(which, 0x004B1A58, 150);
- } else if (which == 2 || which == 3) {
+ else if (which == 2 || which == 3)
createScene2704(which, 0x004B1A80, 150);
- } else {
+ else
createScene2704(which, 0x004B1AA8, 150);
- }
break;
case 15:
- if (which == 4 || which == 5) {
+ _vm->gameState().sceneNum = 15;
+ _vm->gameState().which = which;
+ if (which == 4 || which == 5)
createScene2704(which, 0x004B1AD0, 150);
- } else if (which == 2 || which == 3) {
+ else if (which == 2 || which == 3)
createScene2704(which, 0x004B1AF8, 150);
- } else {
+ else
createScene2704(which, 0x004B1B20, 150);
- }
break;
case 16:
- if (which == 4 || which == 5) {
+ _vm->gameState().sceneNum = 16;
+ _vm->gameState().which = which;
+ if (which == 4 || which == 5)
createScene2704(which, 0x004B1B48, 150);
- } else if (which == 2 || which == 3) {
+ else if (which == 2 || which == 3)
createScene2704(which, 0x004B1B70, 150);
- } else {
+ else
createScene2704(which, 0x004B1B98, 150);
- }
break;
case 17:
- if (which == 4 || which == 5) {
+ _vm->gameState().sceneNum = 17;
+ _vm->gameState().which = which;
+ if (which == 4 || which == 5)
createScene2704(which, 0x004B1BC0, 150);
- } else if (which == 2 || which == 3) {
+ else if (which == 2 || which == 3)
createScene2704(which, 0x004B1BE8, 150);
- } else {
+ else
createScene2704(which, 0x004B1C10, 150);
- }
break;
case 18:
- if (which == 2 || which == 3) {
+ _vm->gameState().sceneNum = 18;
+ _vm->gameState().which = which;
+ if (which == 2 || which == 3)
createScene2704(which, 0x004B1C38, 150);
- } else {
+ else
createScene2704(which, 0x004B1C60, 150);
- }
break;
case 19:
- if (which == 2 || which == 3) {
+ _vm->gameState().sceneNum = 19;
+ _vm->gameState().which = which;
+ if (which == 2 || which == 3)
createScene2704(which, 0x004B1CB0, 150);
- } else {
+ else
createScene2704(which, 0x004B1C88, 150);
- }
break;
case 20:
- if (which == 2 || which == 3) {
+ _vm->gameState().sceneNum = 20;
+ _vm->gameState().which = which;
+ if (which == 2 || which == 3)
createScene2704(which, 0x004B1CD8, 150);
- } else {
+ else
createScene2704(which, 0x004B1D00, 150);
- }
break;
case 21:
+ _vm->gameState().sceneNum = 21;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1D28, 150);
break;
case 22:
+ _vm->gameState().sceneNum = 22;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1D50, 150);
break;
case 23:
+ _vm->gameState().sceneNum = 23;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1D78, 150, kScene2724StaticSprites, &kScene2724ClipRect);
break;
case 24:
+ _vm->gameState().sceneNum = 24;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1DB0, 150, kScene2725StaticSprites, &kScene2725ClipRect);
break;
case 25:
+ _vm->gameState().sceneNum = 25;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1DE8, 150);
break;
case 26:
+ _vm->gameState().sceneNum = 26;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1E10, 150);
break;
case 27:
+ _vm->gameState().sceneNum = 27;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1E38, 150);
break;
case 28:
+ _vm->gameState().sceneNum = 28;
+ _vm->gameState().which = which;
createScene2704(which, 0x004B1E60, 150);
break;
case 30:
+ _vm->gameState().sceneNum = 30;
createStaticScene(0x09507248, 0x0724C09D);
break;
case 31:
-//TODO _childObject = new Scene2732(_vm, this, which);
+ _vm->gameState().sceneNum = 31;
+ _childObject = new Scene2732(_vm, this);
break;
}
SetUpdateHandler(&Module2700::updateScene);
@@ -282,10 +331,7 @@ void Module2700::createScene(int sceneNum, int which) {
void Module2700::updateScene() {
if (!updateChild()) {
-
- debug("sceneNum = %d; _moduleResult = %d", _vm->gameState().sceneNum, _moduleResult);
-
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
SceneLinkIf(1, 1, 0);
leaveModule(0);
@@ -444,15 +490,15 @@ void Module2700::updateScene() {
SceneLinkIf(1, 31, 0);
createScene(27, 1);
break;
- case 29:
+ case 30:
createScene(13, 1);
break;
- case 30:
+ case 31:
createScene(28, 1);
break;
}
} else {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 21:
if (!_raidoMusicInitialized) {
_vm->_soundMan->stopMusic(0x04020210, 0, 1);
@@ -469,10 +515,6 @@ void Module2700::updateScene() {
}
}
-void Module2700::update() {
-
-}
-
uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
@@ -486,8 +528,8 @@ uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Enti
return messageResult;
}
-void Module2700::createScene2703(int which, uint32 sceneInfoId, const uint32 *staticSprites, const NRect *clipRect) {
- // TODO
+void Module2700::createScene2703(int which, uint32 sceneInfoId) {
+ _childObject = new Scene2703(_vm, this, which, sceneInfoId);
}
void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
@@ -495,15 +537,9 @@ void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, con
}
static const NPoint kCarShadowOffsets[] = {
- {-63, 3},
- {-48, 40},
- {-33, 58},
- { 0, 65},
- { 40, 53},
- { 56, 27},
- { 63, 0},
- {-30, 26},
- { 0, 30},
+ {-63, 3}, {-48, 40}, {-33, 58},
+ { 0, 65}, { 40, 53}, { 56, 27},
+ { 63, 0}, {-30, 26}, { 0, 30},
{ 26, 25}
};
@@ -588,21 +624,16 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(sceneInfo->bgFilename);
setPalette(sceneInfo->bgFilename);
-
_palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
-
insertMouse433(0x08B08180);
tempSprite = insertStaticSprite(0x1E086325, 1200);
-
clipRect.set(0, 0, 640, tempSprite->getDrawRect().y2());
if (sceneInfo->class437Filename) {
-
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
addEntity(_ssTrackShadowBackground);
-
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
_asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -613,10 +644,8 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
}
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
-
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
-
_dataResource.load(sceneInfo->dataResourceFilename);
_trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
_asCar->setPathPoints(_trackPoints);
@@ -670,9 +699,9 @@ uint32 Scene2701::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x >= 385) {
+ if (param.asPoint().x >= 385)
leaveScene(0);
- } else {
+ else {
sendPointMessage(_asCar, 0x2004, param.asPoint());
SetMessageHandler(&Scene2701::hmRidingCar);
}
@@ -691,7 +720,7 @@ static const uint32 kScene2702Infos[2][3] = {
Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag1(true), _newTrackIndex(-1), _count(3) {
+ : Scene(vm, parentModule, true), _isInLight(true), _newTrackIndex(-1), _count(3) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
@@ -702,22 +731,18 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x18808B00);
setPalette(0x18808B00);
-
_palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
addEntity(_palette);
-
insertMouse433(0x08B04180);
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x12002035);
addEntity(_ssTrackShadowBackground);
-
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
insertSprite<AsCommonCarConnector>(_asCar);
_asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
_asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
-
_dataResource.load(0x04310014);
if (which == 1) {
@@ -728,7 +753,7 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
_currTrackIndex = 2;
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
- _flag1 = false;
+ _isInLight = false;
} else if (which == 3) {
_currSceneInfos = _sceneInfos[0];
_currTrackIndex = 0;
@@ -737,13 +762,13 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
_currTrackIndex = 2;
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
- _flag1 = false;
+ _isInLight = false;
} else if (which == 5) {
_currSceneInfos = _sceneInfos[0];
_currTrackIndex = 1;
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
- _flag1 = false;
+ _isInLight = false;
} else {
_currSceneInfos = _sceneInfos[1];
_currTrackIndex = 0;
@@ -766,18 +791,16 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene2702::update() {
Scene::update();
- if (_flag1 && _asCar->getX() > 422) {
- debug("fade #1");
+ if (_isInLight && _asCar->getX() > 422) {
_palette->addBasePalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addBasePalette(calcHash("paKlayShade"), 0, 65, 0);
_palette->startFadeToPalette(12);
- _flag1 = false;
- } else if (!_flag1 && _asCar->getX() <= 422) {
- debug("fade #2");
+ _isInLight = false;
+ } else if (!_isInLight && _asCar->getX() <= 422) {
_palette->addBasePalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addBasePalette(calcHash("paKlayFloor"), 0, 65, 0);
_palette->startFadeToPalette(12);
- _flag1 = true;
+ _isInLight = true;
}
}
@@ -831,11 +854,10 @@ void Scene2702::findClosestTrack(NPoint pt) {
sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
else
sendMessage(_asCar, 0x2003, 0);
- } else if (_currTrackIndex == 2) {
+ } else if (_currTrackIndex == 2)
sendMessage(_asCar, 0x2003, 0);
- } else {
+ else
sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
- }
} else {
_newTrackIndex = -1;
sendMessage(_asCar, 0x2004, pt.x);
@@ -851,15 +873,132 @@ void Scene2702::changeTrack() {
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
else
sendMessage(_asCar, 0x2002, 0);
- } else if (_currTrackIndex == 2) {
+ } else if (_currTrackIndex == 2)
sendMessage(_asCar, 0x2002, 0);
- } else {
+ else
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
- }
sendMessage(_asCar, 0x2004, _newTrackDestX);
_newTrackIndex = -1;
}
+Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId)
+ : Scene(vm, parentModule, true) {
+
+ SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
+
+ SetMessageHandler(&Scene2703::handleMessage);
+ SetUpdateHandler(&Scene2703::update);
+
+ setBackground(sceneInfo->bgFilename);
+ setPalette(sceneInfo->bgFilename);
+ _palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
+ addEntity(_palette);
+ insertMouse433(sceneInfo->mouseCursorFilename);
+
+ _palStatus = 2;
+
+ if (sceneInfo->class437Filename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
+ addEntity(_ssTrackShadowBackground);
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
+ _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
+ } else {
+ _ssTrackShadowBackground = NULL;
+ _asCarShadow = NULL;
+ _asCar = insertSprite<AsCommonCar>(this, 320, 240);
+ }
+
+ _asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
+ _which1 = sceneInfo->which1;
+ _which2 = sceneInfo->which2;
+ _dataResource.load(sceneInfo->dataResourceFilename);
+ _trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
+ _asCar->setPathPoints(_trackPoints);
+
+ if (sceneInfo->rectListName) {
+ _rectList = _dataResource.getRectArray(sceneInfo->rectListName);
+ // TODO _asCar->setPathRects(_rectList);
+ }
+
+ if (which == _which2) {
+ NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
+ if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
+ sendMessage(_asCar, 0x2009, 0);
+ else
+ sendMessage(_asCar, 0x2007, 150);
+ } else {
+ NPoint testPoint = (*_trackPoints)[0];
+ sendMessage(_asCar, 0x2002, 0);
+ if (testPoint.x > 0 && testPoint.x < 640 && testPoint.y > 0 && testPoint.y < 480)
+ sendMessage(_asCar, 0x2009, 0);
+ else
+ sendMessage(_asCar, 0x2008, 150);
+ }
+
+ if (which == 0) {
+ _palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
+ _palStatus = 1;
+ } else if (which == 2 || which == 4 || which == 6) {
+ _palette->addPalette(calcHash("paPodBlack"), 65, 31, 65);
+ _palette->addPalette(calcHash("paKlayBlack"), 0, 65, 0);
+ _palStatus = 0;
+ }
+
+ _palette->copyBasePalette(0, 256, 0);
+
+}
+
+void Scene2703::update() {
+ Scene::update();
+ if (_mouseClicked) {
+ sendPointMessage(_asCar, 0x2004, _mouseClickPos);
+ _mouseClicked = false;
+ }
+ if (_asCar->getX() > 469) {
+ if (_palStatus != 2) {
+ _palette->addBasePalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addBasePalette(calcHash("paKlayShade"), 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ _palStatus = 2;
+ }
+ } else if (_asCar->getX() > 181) {
+ if (_palStatus != 1) {
+ _palette->addBasePalette(calcHash("paPodShade"), 65, 31, 65);
+ _palette->addBasePalette(calcHash("paKlayShade"), 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ _palStatus = 1;
+ }
+ } else if (_palStatus != 0) {
+ _palette->addBasePalette(calcHash("paPodBlack"), 65, 31, 65);
+ _palette->addBasePalette(calcHash("paKlayBlack"), 0, 65, 0);
+ _palette->startFadeToPalette(12);
+ _palStatus = 0;
+ }
+}
+
+uint32 Scene2703::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2005:
+ if (_which1 >= 0)
+ leaveScene(_which1);
+ break;
+ case 0x2006:
+ if (_which2 >= 0)
+ leaveScene(_which2);
+ break;
+ case 0x200D:
+ sendMessage(_parentModule, 0x200D, 0);
+ break;
+ }
+ return 0;
+}
+
Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
const uint32 *staticSprites, const NRect *clipRect)
: Scene(vm, parentModule, true) {
@@ -871,10 +1010,10 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
setBackground(sceneInfo->bgFilename);
setPalette(sceneInfo->bgFilename);
-
+
if (sceneInfo->exPaletteFilename1)
_palette->addPalette(sceneInfo->exPaletteFilename1, 0, 65, 0);
-
+
if (sceneInfo->exPaletteFilename2)
_palette->addPalette(sceneInfo->exPaletteFilename2, 65, 31, 65);
@@ -884,10 +1023,8 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
insertMouse433(sceneInfo->mouseCursorFilename);
if (sceneInfo->class437Filename) {
-
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
addEntity(_ssTrackShadowBackground);
-
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
_asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -899,10 +1036,8 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
}
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
-
_which1 = sceneInfo->which1;
_which2 = sceneInfo->which2;
-
_dataResource.load(sceneInfo->dataResourceFilename);
_trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
_asCar->setPathPoints(_trackPoints);
@@ -1092,4 +1227,22 @@ void Scene2706::changeTrack() {
_newTrackIndex = -1;
}
+Scene2732::Scene2732(NeverhoodEngine *vm, Module *parentModule)
+ : Scene(vm, parentModule, true) {
+
+ Sprite *tempSprite;
+
+ setBackground(0x0220C041);
+ setPalette(0x0220C041);
+ insertMouse433(0x0C04502A);
+ setRectList(0x004AE360);
+
+ insertKlayman<KmScene2732>(108, 331);
+ setMessageList(0x004AE328);
+
+ tempSprite = insertStaticSprite(0x50C22C48, 1100);
+ _klayman->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480);
+
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index 4973211..d17d12c 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -37,15 +37,15 @@ public:
Module2700(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2700();
protected:
+ int _sceneNum;
int _soundIndex;
bool _raidoMusicInitialized;
uint32 _scene2711StaticSprites[6];
uint32 _musicFileHash;
void createScene(int sceneNum, int which);
void updateScene();
- void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createScene2703(int which, uint32 sceneInfoId, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
+ void createScene2703(int which, uint32 sceneInfoId);
void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
@@ -110,7 +110,7 @@ protected:
int16 _newTrackDestX;
int _currTrackIndex, _newTrackIndex;
int _count;
- bool _flag1;
+ bool _isInLight;
SceneInfo2700 *_sceneInfos[2][3];
SceneInfo2700 **_currSceneInfos;
NPointArray *_trackPoints;
@@ -120,6 +120,24 @@ protected:
void changeTrack();
};
+class Scene2703 : public Scene {
+public:
+ Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId);
+protected:
+ AsCommonCar *_asCar;
+ Sprite *_ssTrackShadowBackground;
+ Sprite *_asCarShadow;
+ Sprite *_asCarConnector;
+ Sprite *_asCarTrackShadow;
+ Sprite *_asCarConnectorShadow;
+ int _palStatus;
+ int _which1, _which2;
+ NPointArray *_trackPoints;
+ NRectArray *_rectList;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class Scene2704 : public Scene {
public:
Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
@@ -156,6 +174,11 @@ protected:
void changeTrack();
};
+class Scene2732 : public Scene {
+public:
+ Scene2732(NeverhoodEngine *vm, Module *parentModule);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE2700_H */
Commit: 4df22cf9795eb5612865e4a977f03986c4d4aeb1
https://github.com/scummvm/scummvm/commit/4df22cf9795eb5612865e4a977f03986c4d4aeb1
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:36-07:00
Commit Message:
NEVERHOOD: Remove track rectList code because none of the tracks has a rectList
Changed paths:
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index c14e2b3..db8eeab 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -210,7 +210,6 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
_newDeltaXType = -1;
_soundCounter = 0;
_pathPoints = NULL;
- _rectList = NULL; // TODO Check if this is used
startAnimation(0xD4220027, 0, -1);
setDoDeltaX(getGlobalVar(V_CAR_DELTA_X));
@@ -408,7 +407,6 @@ void AsCommonCar::stCarAtHome() {
_isIdle = false;
_isMoving = false;
_rectFlag = false;
- _rectList = NULL;
NextState(&AsCommonCar::stLeanForwardIdle);
startAnimation(0x35698F78, 0, -1);
setDoDeltaX(doDeltaX ? 1 : 0);
@@ -452,27 +450,10 @@ void AsCommonCar::updateMovement() {
SetUpdateHandler(&AsCommonCar::update);
SetMessageHandler(&AsCommonCar::hmAnimation);
NextState(&AsCommonCar::stUpdateMoveDirection);
- } else {
- bool inRect = false;
- uint index = 0;
- if (_rectList && _rectList->size() > 0) {
- while (index < _rectList->size()) {
- NRect r = (*_rectList)[index];
- if (_x >= r.x1 && _x <= r.x2 && _y >= r.y1 && _y <= r.y2)
- break;
- }
- if (index < _rectList->size() && !_rectFlag)
- inRect = true;
- _rectFlag = index < _rectList->size();
- }
- if (inRect) {
- gotoNextState();
- stHandleRect();
- } else if (_newMoveDirection != _currMoveDirection && _isMoving && !_isBusy) {
- gotoNextState();
- _currMoveDirection = _newMoveDirection;
- stUpdateMoveDirection();
- }
+ } else if (_newMoveDirection != _currMoveDirection && _isMoving && !_isBusy) {
+ gotoNextState();
+ _currMoveDirection = _newMoveDirection;
+ stUpdateMoveDirection();
}
}
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 28aad13..2a7d547 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -50,7 +50,6 @@ public:
protected:
Scene *_parentScene;
NPointArray *_pathPoints;
- NRectArray *_rectList;
int _newMoveDirection;
int _currMoveDirection;
int _exitDirection;
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index a625f87..9a8a2f9 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -918,11 +918,6 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
_asCar->setPathPoints(_trackPoints);
- if (sceneInfo->rectListName) {
- _rectList = _dataResource.getRectArray(sceneInfo->rectListName);
- // TODO _asCar->setPathRects(_rectList);
- }
-
if (which == _which2) {
NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
@@ -1042,11 +1037,6 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
_asCar->setPathPoints(_trackPoints);
- if (sceneInfo->rectListName) {
- _rectList = _dataResource.getRectArray(sceneInfo->rectListName);
- // TODO _asCar->setPathRects(_rectList);
- }
-
if (which == _which2) {
NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index d17d12c..68c471c 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -133,7 +133,6 @@ protected:
int _palStatus;
int _which1, _which2;
NPointArray *_trackPoints;
- NRectArray *_rectList;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -151,7 +150,6 @@ protected:
Sprite *_asCarConnectorShadow;
int _which1, _which2;
NPointArray *_trackPoints;
- NRectArray *_rectList;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 228d9264c8e9f5e1930e8b69ce809783d303bbbc
https://github.com/scummvm/scummvm/commit/228d9264c8e9f5e1930e8b69ce809783d303bbbc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: Start with menu widget stuff (doesn't do anything yet!)
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index fdde1a2..bec640e 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -354,4 +354,100 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
+WidgetScene::WidgetScene(NeverhoodEngine *vm, Module *parentModule)
+ : Scene(vm, parentModule, true), _currWidget(NULL) {
+}
+
+void WidgetScene::getMousPos(NPoint &pt) {
+ pt.x = _mouseCursor->getX();
+ pt.y = _mouseCursor->getY();
+}
+
+void WidgetScene::setCurrWidget(Widget *newWidget) {
+ if (newWidget && newWidget != _currWidget) {
+ if (_currWidget)
+ _currWidget->exitWidget();
+ newWidget->enterWidget();
+ _currWidget = newWidget;
+ }
+}
+
+Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority, bool visible)
+ : StaticSprite(vm, baseObjectPriority), _itemID(itemID), _parentScene(parentScene),
+ _baseObjectPriority(baseObjectPriority), _baseSurfacePriority(baseSurfacePriority), _visible(visible) {
+
+ SetUpdateHandler(&Widget::update);
+ SetMessageHandler(&Widget::handleMessage);
+
+ setPosition(x, y);
+}
+
+void Widget::show() {
+ if (_surface)
+ _surface->setVisible(true);
+ _visible = true;
+}
+
+void Widget::hide() {
+ if (_surface)
+ _surface->setVisible(false);
+ _visible = false;
+}
+
+void Widget::onClick() {
+ _parentScene->setCurrWidget(this);
+ // TODO Somehow _parentScene->onClick(_itemID, 0);
+}
+
+void Widget::setPosition(int16 x, int16 y) {
+ _x = x;
+ _y = y;
+ updateBounds();
+}
+
+void Widget::refresh() {
+ _needRefresh = true;
+ StaticSprite::updatePosition();
+ _collisionBoundsOffset.set(0, 0,
+ _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ updateBounds();
+}
+
+void Widget::addSprite() {
+ // Empty
+}
+
+int16 Widget::getWidth() {
+ return _spriteResource.getDimensions().width;
+}
+
+int16 Widget::getHeight() {
+ return _spriteResource.getDimensions().height;
+}
+
+void Widget::enterWidget() {
+ // Empty
+}
+
+void Widget::exitWidget() {
+ // Empty
+}
+
+void Widget::update() {
+ handleSpriteUpdate();
+ StaticSprite::updatePosition();
+}
+
+uint32 Widget::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1011:
+ onClick();
+ messageResult = 1;
+ break;
+ }
+ return messageResult;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 77cef44..1b6ba8a 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -79,6 +79,41 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class Widget;
+
+class WidgetScene : public Scene {
+public:
+ WidgetScene(NeverhoodEngine *vm, Module *parentModule);
+ void getMousPos(NPoint &pt);
+ virtual void setCurrWidget(Widget *newWidget);
+protected:
+ Widget *_currWidget;
+};
+
+class Widget : public StaticSprite {
+public:
+ Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority, bool visible);
+ virtual void show();
+ virtual void hide();
+ virtual void onClick();
+ virtual void setPosition(int16 x, int16 y);
+ virtual void refresh();
+ virtual void addSprite();
+ virtual int16 getWidth();
+ virtual int16 getHeight();
+ virtual void enterWidget();
+ virtual void exitWidget();
+protected:
+ int16 _itemID;
+ WidgetScene *_parentScene;
+ int _baseObjectPriority;
+ int _baseSurfacePriority;
+ bool _visible;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MENUMODULE_H */
Commit: eecd9b8b2a2eda9641bf7bbd5bd5860123d102b4
https://github.com/scummvm/scummvm/commit/eecd9b8b2a2eda9641bf7bbd5bd5860123d102b4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: Add TextLabelWidget (still doesn't do anything)
Changed paths:
engines/neverhood/graphics.h
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 3ca3339..d6808e3 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -149,6 +149,7 @@ public:
void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen);
int16 getStringWidth(const byte *string, int stringLen);
+ uint16 getCharHeight() const { return _charHeight; }
protected:
uint16 _numRows;
byte _firstChar;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index bec640e..01fcd41 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -450,4 +450,52 @@ uint32 Widget::handleMessage(int messageNum, const MessageParam ¶m, Entity *
return messageResult;
}
+TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority, bool visible,
+ const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, TextSurface *textSurface)
+ : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority, visible),
+ _string(string), _stringLen(stringLen), _drawSurface(drawSurface), _tx(tx), _ty(ty), _textSurface(textSurface) {
+
+}
+
+void TextLabelWidget::addSprite() {
+ _parentScene->addSprite(this);
+ _vm->_collisionMan->addSprite(this);
+}
+
+int16 TextLabelWidget::getWidth() {
+ return _textSurface->getStringWidth(_string, _stringLen);
+}
+
+int16 TextLabelWidget::getHeight() {
+ return _textSurface->getCharHeight();
+}
+
+void TextLabelWidget::drawString(int maxStringLength) {
+ _textSurface->drawString(_drawSurface, _x, _y, _string, MIN(_stringLen, maxStringLength));
+ _visible = true;
+ _collisionBoundsOffset.set(_tx, _ty, getWidth(), getHeight());
+ updateBounds();
+}
+
+void TextLabelWidget::clear() {
+ _visible = false;
+ _collisionBoundsOffset.set(0, 0, 0, 0);
+ updateBounds();
+}
+
+void TextLabelWidget::onClick() {
+ Widget::onClick();
+ // TODO Click handler?
+}
+
+void TextLabelWidget::setString(const byte *string, int stringLen) {
+ _string = string;
+ _stringLen = stringLen;
+}
+
+void TextLabelWidget::setY(int16 y) {
+ _ty = y;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 1b6ba8a..8381b4e 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -114,6 +114,28 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+class TextLabelWidget : public Widget {
+public:
+ TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority, bool visible,
+ const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, TextSurface *textSurface);
+ virtual void onClick();
+ virtual void addSprite();
+ virtual int16 getWidth();
+ virtual int16 getHeight();
+ void drawString(int maxStringLength);
+ void clear();
+ void setString(const byte *string, int stringLen);
+ TextSurface *getTextSurface() const { return _textSurface; }
+ void setY(int16 y);
+protected:
+ BaseSurface *_drawSurface;
+ int16 _tx, _ty;
+ TextSurface *_textSurface;
+ const byte *_string;
+ int _stringLen;
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MENUMODULE_H */
Commit: 0022c57858f5cac3544692ad134a2446c4f3be3a
https://github.com/scummvm/scummvm/commit/0022c57858f5cac3544692ad134a2446c4f3be3a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: Add SavegameListBox
Changed paths:
engines/neverhood/graphics.h
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index d6808e3..b528690 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -149,6 +149,7 @@ public:
void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen);
int16 getStringWidth(const byte *string, int stringLen);
+ uint16 getCharWidth() const { return _charWidth; }
uint16 getCharHeight() const { return _charHeight; }
protected:
uint16 _numRows;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 01fcd41..7e1198a 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -358,7 +358,7 @@ WidgetScene::WidgetScene(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _currWidget(NULL) {
}
-void WidgetScene::getMousPos(NPoint &pt) {
+void WidgetScene::getMousePos(NPoint &pt) {
pt.x = _mouseCursor->getX();
pt.y = _mouseCursor->getY();
}
@@ -397,7 +397,7 @@ void Widget::hide() {
void Widget::onClick() {
_parentScene->setCurrWidget(this);
- // TODO Somehow _parentScene->onClick(_itemID, 0);
+ // TODO _parentScene->onClick(_itemID, 0);
}
void Widget::setPosition(int16 x, int16 y) {
@@ -406,7 +406,7 @@ void Widget::setPosition(int16 x, int16 y) {
updateBounds();
}
-void Widget::refresh() {
+void Widget::refreshPosition() {
_needRefresh = true;
StaticSprite::updatePosition();
_collisionBoundsOffset.set(0, 0,
@@ -494,8 +494,117 @@ void TextLabelWidget::setString(const byte *string, int stringLen) {
_stringLen = stringLen;
}
-void TextLabelWidget::setY(int16 y) {
- _ty = y;
+void TextLabelWidget::setTY(int16 ty) {
+ _ty = ty;
+}
+
+SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority, bool visible,
+ StringArray *savegameList, TextSurface *textSurface1, TextSurface *textSurface2, uint32 fileHash1, NRect &rect)
+ : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority, visible),
+ _savegameList(savegameList), _textSurface1(textSurface1), _textSurface2(textSurface2), _fileHash1(fileHash1), _rect(rect),
+ _maxStringLength(0), _topIndex(0), _visibleItemsCount(0), _currIndex(0) {
+
+ _maxVisibleItemsCount = (_rect.y2 - _rect.y1) / _textSurface1->getCharHeight();
+ _maxStringLength = (_rect.x2 - _rect.x1) / _textSurface1->getCharWidth();
+}
+
+void SavegameListBox::onClick() {
+ NPoint mousePos;
+ int16 w = _rect.x2 - _rect.x1, h = _rect.y2 - _rect.y1;
+ _parentScene->getMousePos(mousePos);
+ mousePos.x -= _x + _rect.x1;
+ mousePos.y -= _y + _rect.y1;
+ if (mousePos.x >= 0 && mousePos.x <= w && mousePos.y >= 0 && mousePos.y <= h) {
+ int newIndex = _topIndex + mousePos.y / _textSurface1->getCharHeight();
+ if (newIndex <= _visibleItemsCount) {
+ _currIndex = newIndex;
+ refresh();
+ _parentScene->setCurrWidget(this);
+ // TODO _parentScene->onClick(_itemID, 5);
+ }
+ }
+}
+
+void SavegameListBox::addSprite() {
+ _spriteResource.load2(_fileHash1);
+ createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ refreshPosition();
+ _parentScene->addSprite(this);
+ _vm->_collisionMan->addSprite(this);
+ if (_visible)
+ show();
+ else
+ hide();
+ buildItems();
+ _topIndex = 0;
+ _visibleItemsCount = MIN(_maxVisibleItemsCount, (int)_textLabelItems.size());
+ refresh();
+}
+
+void SavegameListBox::buildItems() {
+ StringArray &savegameList = *_savegameList;
+ int16 itemX = _rect.x1, itemY = 0;
+ for (uint i = 0; i < savegameList.size(); ++i) {
+ const byte *string = (const byte*)savegameList[i].c_str();
+ int stringLen = (int)savegameList[i].size();
+ TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1,
+ _baseSurfacePriority + 1, _visible, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _textSurface1);
+ label->addSprite();
+ _textLabelItems.push_back(label);
+ }
+}
+
+void SavegameListBox::drawItems() {
+ for (int i = 0; i < (int)_textLabelItems.size(); ++i) {
+ TextLabelWidget *label = _textLabelItems[i];
+ if (i >= _topIndex && i <= _visibleItemsCount) {
+ label->setY(_rect.y1 + (i - _topIndex) * _textSurface1->getCharHeight());
+ label->updateBounds();
+ label->drawString(_maxStringLength);
+ } else {
+ label->clear();
+ }
+ }
+}
+
+void SavegameListBox::refresh() {
+ refreshPosition();
+ drawItems();
+}
+
+void SavegameListBox::scrollUp() {
+ if (_topIndex > 0) {
+ --_topIndex;
+ --_visibleItemsCount;
+ refresh();
+ }
+}
+
+void SavegameListBox::scrollDown() {
+ if (_visibleItemsCount < (int)_textLabelItems.size()) {
+ ++_topIndex;
+ ++_visibleItemsCount;
+ refresh();
+ }
+}
+
+void SavegameListBox::pageUp() {
+ int distance = MIN(_topIndex, _maxVisibleItemsCount);
+ if (distance > 0) {
+ _topIndex -= distance;
+ _visibleItemsCount = distance;
+ refresh();
+ }
+}
+
+void SavegameListBox::pageDown() {
+ int distance = MIN((int)_textLabelItems.size() - _visibleItemsCount - 1, _maxVisibleItemsCount);
+ if (distance > 0) {
+ _topIndex += distance;
+ _visibleItemsCount += distance;
+ refresh();
+ }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 8381b4e..1d7678d 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -79,12 +79,14 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
+typedef Common::Array<Common::String> StringArray;
+
class Widget;
class WidgetScene : public Scene {
public:
WidgetScene(NeverhoodEngine *vm, Module *parentModule);
- void getMousPos(NPoint &pt);
+ void getMousePos(NPoint &pt);
virtual void setCurrWidget(Widget *newWidget);
protected:
Widget *_currWidget;
@@ -98,7 +100,7 @@ public:
virtual void hide();
virtual void onClick();
virtual void setPosition(int16 x, int16 y);
- virtual void refresh();
+ virtual void refreshPosition();
virtual void addSprite();
virtual int16 getWidth();
virtual int16 getHeight();
@@ -127,7 +129,7 @@ public:
void clear();
void setString(const byte *string, int stringLen);
TextSurface *getTextSurface() const { return _textSurface; }
- void setY(int16 y);
+ void setTY(int16 ty);
protected:
BaseSurface *_drawSurface;
int16 _tx, _ty;
@@ -136,6 +138,34 @@ protected:
int _stringLen;
};
+class SavegameListBox : public Widget {
+public:
+ SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority, bool visible,
+ StringArray *savegameList, TextSurface *textSurface1, TextSurface *textSurface2, uint32 fileHash1, NRect &rect);
+ virtual void onClick();
+ virtual void addSprite();
+ void buildItems();
+ void drawItems();
+ void refresh();
+ void scrollUp();
+ void scrollDown();
+ void pageUp();
+ void pageDown();
+protected:
+ NRect _rect;
+ uint32 _fileHash1;
+ int _maxStringLength;
+ Common::Array<TextLabelWidget*> _textLabelItems;
+ int _topIndex;
+ int _visibleItemsCount;
+ StringArray *_savegameList;
+ TextSurface *_textSurface1;
+ TextSurface *_textSurface2;
+ int _currIndex;
+ int _maxVisibleItemsCount;
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MENUMODULE_H */
Commit: 6be5c1171332764dacad9113250ede7e765bb361
https://github.com/scummvm/scummvm/commit/6be5c1171332764dacad9113250ede7e765bb361
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: More work on the menu system:
- Add handling of ascii and system key input
- Fix TextSurface::drawChar()
- Pause audio when entering the menu, resume it again afterwards
- Add TextEditWidget
- Add SaveGameMenu (doesn't actually save anything yet and needs more work)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/graphics.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
engines/neverhood/neverhood.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6516485..ce72a22 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -123,13 +123,6 @@ void GameModule::handleMouseUp(int16 x, int16 y) {
}
}
-void GameModule::handleEscapeKey() {
- if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
- _mainMenuRequested = true;
- else
- sendMessage(_childObject, 0x000C, 0);
-}
-
void GameModule::handleSpaceKey() {
if (_childObject) {
debug(2, "GameModule::handleSpaceKey()");
@@ -137,6 +130,31 @@ void GameModule::handleSpaceKey() {
}
}
+void GameModule::handleAsciiKey(char key) {
+ if (_childObject) {
+ debug(2, "GameModule::handleAsciiKey()");
+ sendMessage(_childObject, 0x000A, (uint32)key);
+ }
+}
+
+void GameModule::handleKeyDown(Common::KeyCode keyCode) {
+ if (_childObject) {
+ if (keyCode == Common::KEYCODE_ESCAPE)
+ handleEscapeKey();
+ else if (keyCode == Common::KEYCODE_SPACE)
+ handleSpaceKey();
+ debug(2, "GameModule::handleKeyDown()");
+ sendMessage(_childObject, 0x000B, keyCode);
+ }
+}
+
+void GameModule::handleEscapeKey() {
+ if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
+ _mainMenuRequested = true;
+ else if (_childObject)
+ sendMessage(_childObject, 0x000C, 0);
+}
+
void GameModule::initKeySlotsPuzzle() {
if (!getSubVar(VA_IS_PUZZLE_INIT, 0x25400B10)) {
NonRepeatingRandomNumbers keySlots(_vm->_rnd, 16);
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 8fafe2b..81ebfb8 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -37,8 +37,10 @@ public:
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
void handleMouseUp(int16 x, int16 y);
- void handleEscapeKey();
void handleSpaceKey();
+ void handleAsciiKey(char key);
+ void handleKeyDown(Common::KeyCode keyCode);
+ void handleEscapeKey();
void initKeySlotsPuzzle();
void initMemoryPuzzle();
void initWaterPipesPuzzle();
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index b87c447..81cec9f 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -180,7 +180,7 @@ TextSurface::TextSurface(NeverhoodEngine *vm, uint32 fileHash, uint16 numRows, u
: BaseSurface(vm, 0, charWidth * charCount, charHeight * numRows),
_numRows(numRows), _firstChar(firstChar), _charWidth(charWidth), _charHeight(charHeight),
_fileHash(fileHash), _charCount(charCount) {
-
+
SpriteResource spriteResource(_vm);
spriteResource.load2(_fileHash);
drawSpriteResourceEx(spriteResource, false, false, 0, 0);
@@ -189,8 +189,8 @@ TextSurface::TextSurface(NeverhoodEngine *vm, uint32 fileHash, uint16 numRows, u
void TextSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr) {
NDrawRect sourceRect;
chr -= _firstChar;
- sourceRect.x = (chr % 16) * _charWidth;
- sourceRect.y = (chr / 16) * _charHeight;
+ sourceRect.x = (chr % _charCount) * _charWidth;
+ sourceRect.y = (chr / _charCount) * _charHeight;
sourceRect.width = _charWidth;
sourceRect.height = _charHeight;
destSurface->copyFrom(_surface, x, y, sourceRect, true);
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 7e1198a..6a82c47 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -27,7 +27,8 @@ namespace Neverhood {
enum {
MAIN_MENU = 0,
CREDITS_SCENE = 1,
- MAKING_OF = 2
+ MAKING_OF = 2,
+ SAVE_GAME_MENU = 3
};
static const uint32 kMakingOfSmackerFileHashList[] = {
@@ -48,22 +49,18 @@ static const uint32 kMakingOfSmackerFileHashList[] = {
};
MenuModule::MenuModule(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
+ : Module(vm, parentModule), _savegameList(NULL) {
SetMessageHandler(&MenuModule::handleMessage);
- // TODO Check if the background actually needs to be saved
- _savedBackground = new Background(_vm, 0);
- _savedBackground->createSurface(0, 640, 480);
- // TODO Save current palette
- // TODO Stop all sounds and music
-
_savedPaletteData = _vm->_screen->getPaletteData();
+ _vm->_mixer->pauseAll(true);
createScene(MAIN_MENU, -1);
}
MenuModule::~MenuModule() {
+ _vm->_mixer->pauseAll(false);
_vm->_screen->setPaletteData(_savedPaletteData);
}
@@ -79,6 +76,9 @@ void MenuModule::createScene(int sceneNum, int which) {
case MAKING_OF:
createSmackerScene(kMakingOfSmackerFileHashList, false, true, true);
break;
+ case SAVE_GAME_MENU:
+ createSaveGameMenu();
+ break;
}
SetUpdateHandler(&MenuModule::updateScene);
_childObject->handleUpdate();
@@ -100,7 +100,7 @@ void MenuModule::updateScene() {
break;
case 2:
debug("SAVE GAME");
- // TODO createSaveGameMenu();
+ createScene(SAVE_GAME_MENU, -1);
break;
case 3:
debug("RESUME GAME");
@@ -137,6 +137,9 @@ void MenuModule::updateScene() {
case MAKING_OF:
createScene(MAIN_MENU, -1);
break;
+ case SAVE_GAME_MENU:
+ handleSaveGameMenuAction(_moduleResult);
+ break;
default:
break;
}
@@ -148,60 +151,38 @@ uint32 MenuModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
return Module::handleMessage(messageNum, param, sender);;
}
-static const uint32 kMainMenuButtonFileHashes[] = {
- 0x36C62120,
- 0x56C62120,
- 0x96C62120,
- 0x16C62121,
- 0x16C62122,
- 0x16C62124,
- 0x16C62128,
- 0x16C62130,
- 0x16C62100
-};
+void MenuModule::createSaveGameMenu() {
+ // TODO Load actual savegames list :)
+ _savegameList = new StringArray();
+ _savegameList->push_back(Common::String("Annoying scene"));
+ _savegameList->push_back(Common::String("Stuff happens"));
+ for (uint i = 0; i < 33; ++i)
+ _savegameList->push_back(Common::String::format("Game %d", i));
+ _childObject = new SaveGameMenu(_vm, this, _savegameList);
+}
-MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex)
- : StaticSprite(vm, 900), _parentScene(parentScene), _buttonIndex(buttonIndex), _countdown(0) {
+void MenuModule::handleSaveGameMenuAction(int action) {
+ if (action != 0) {
+ createScene(MAIN_MENU, -1);
+ } else {
+ // TODO Actual saving later 0048A62E
+ createScene(MAIN_MENU, -1);
+ }
+ delete _savegameList;
+ _savegameList = NULL;
+}
- loadSprite(kMainMenuButtonFileHashes[_buttonIndex], kSLFDefDrawOffset | kSLFDefPosition, 100);
+MenuButton::MenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex, uint32 fileHash, const NRect &collisionBounds)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _buttonIndex(buttonIndex), _countdown(0) {
- // TODO Move to const array
- switch (_buttonIndex) {
- case 0:
- _collisionBounds.set(52, 121, 110, 156);
- break;
- case 1:
- _collisionBounds.set(52, 192, 109, 222);
- break;
- case 2:
- _collisionBounds.set(60, 257, 119, 286);
- break;
- case 3:
- _collisionBounds.set(67, 326, 120, 354);
- break;
- case 4:
- _collisionBounds.set(70, 389, 128, 416);
- break;
- case 5:
- _collisionBounds.set(523, 113, 580, 144);
- break;
- case 6:
- _collisionBounds.set(525, 176, 577, 206);
- break;
- case 7:
- _collisionBounds.set(527, 384, 580, 412);
- break;
- case 8:
- _collisionBounds.set(522, 255, 580, 289);
- break;
- }
-
+ loadSprite(fileHash, kSLFDefDrawOffset | kSLFDefPosition, 100);
+ _collisionBounds = collisionBounds;
setVisible(false);
- SetUpdateHandler(&MainMenuButton::update);
- SetMessageHandler(&MainMenuButton::handleMessage);
+ SetUpdateHandler(&MenuButton::update);
+ SetMessageHandler(&MenuButton::handleMessage);
}
-void MainMenuButton::update() {
+void MenuButton::update() {
updatePosition();
if (_countdown != 0 && (--_countdown) == 0) {
setVisible(false);
@@ -209,7 +190,7 @@ void MainMenuButton::update() {
}
}
-uint32 MainMenuButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 MenuButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
@@ -226,6 +207,30 @@ uint32 MainMenuButton::handleMessage(int messageNum, const MessageParam ¶m,
MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true) {
+ static const uint32 kMenuButtonFileHashes[] = {
+ 0x36C62120,
+ 0x56C62120,
+ 0x96C62120,
+ 0x16C62121,
+ 0x16C62122,
+ 0x16C62124,
+ 0x16C62128,
+ 0x16C62130,
+ 0x16C62100
+ };
+
+ static const NRect kMenuButtonCollisionBounds[] = {
+ NRect(52, 121, 110, 156),
+ NRect(52, 192, 109, 222),
+ NRect(60, 257, 119, 286),
+ NRect(67, 326, 120, 354),
+ NRect(70, 389, 128, 416),
+ NRect(523, 113, 580, 144),
+ NRect(525, 176, 577, 206),
+ NRect(527, 384, 580, 412),
+ NRect(522, 255, 580, 289)
+ };
+
setBackground(0x08C0020C);
setPalette(0x08C0020C);
insertMouse433(0x00208084);
@@ -233,12 +238,13 @@ MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
insertStaticSprite(0x41137051, 100);
insertStaticSprite(0xC10B2015, 100);
- // TODO Only is music is disabled
+ // TODO Only if music is enabled
_musicOnButton = insertStaticSprite(0x0C24C0EE, 100);
for (uint buttonIndex = 0; buttonIndex < 9; ++buttonIndex) {
- Sprite *mainMenuButton = insertSprite<MainMenuButton>(this, buttonIndex);
- _vm->_collisionMan->addSprite(mainMenuButton);
+ Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
+ kMenuButtonFileHashes[buttonIndex], kMenuButtonCollisionBounds[buttonIndex]);
+ _vm->_collisionMan->addSprite(menuButton);
}
SetUpdateHandler(&Scene::update);
@@ -341,7 +347,7 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, En
leaveScene(0);
break;
case 0x000B://TODO Implement this message
- if (param.asInteger() == 27 && _canAbort)
+ if (param.asInteger() == Common::KEYCODE_ESCAPE && _canAbort)
leaveScene(0);
break;
case 0x101D:
@@ -358,9 +364,11 @@ WidgetScene::WidgetScene(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _currWidget(NULL) {
}
-void WidgetScene::getMousePos(NPoint &pt) {
+NPoint WidgetScene::getMousePos() {
+ NPoint pt;
pt.x = _mouseCursor->getX();
pt.y = _mouseCursor->getY();
+ return pt;
}
void WidgetScene::setCurrWidget(Widget *newWidget) {
@@ -372,10 +380,13 @@ void WidgetScene::setCurrWidget(Widget *newWidget) {
}
}
+void WidgetScene::handleEvent(int16 itemID, int eventType) {
+}
+
Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, bool visible)
+ int baseObjectPriority, int baseSurfacePriority)
: StaticSprite(vm, baseObjectPriority), _itemID(itemID), _parentScene(parentScene),
- _baseObjectPriority(baseObjectPriority), _baseSurfacePriority(baseSurfacePriority), _visible(visible) {
+ _baseObjectPriority(baseObjectPriority), _baseSurfacePriority(baseSurfacePriority) {
SetUpdateHandler(&Widget::update);
SetMessageHandler(&Widget::handleMessage);
@@ -383,18 +394,6 @@ Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene
setPosition(x, y);
}
-void Widget::show() {
- if (_surface)
- _surface->setVisible(true);
- _visible = true;
-}
-
-void Widget::hide() {
- if (_surface)
- _surface->setVisible(false);
- _visible = false;
-}
-
void Widget::onClick() {
_parentScene->setCurrWidget(this);
// TODO _parentScene->onClick(_itemID, 0);
@@ -451,9 +450,9 @@ uint32 Widget::handleMessage(int messageNum, const MessageParam ¶m, Entity *
}
TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, bool visible,
+ int baseObjectPriority, int baseSurfacePriority,
const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, TextSurface *textSurface)
- : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority, visible),
+ : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
_string(string), _stringLen(stringLen), _drawSurface(drawSurface), _tx(tx), _ty(ty), _textSurface(textSurface) {
}
@@ -473,13 +472,11 @@ int16 TextLabelWidget::getHeight() {
void TextLabelWidget::drawString(int maxStringLength) {
_textSurface->drawString(_drawSurface, _x, _y, _string, MIN(_stringLen, maxStringLength));
- _visible = true;
_collisionBoundsOffset.set(_tx, _ty, getWidth(), getHeight());
updateBounds();
}
void TextLabelWidget::clear() {
- _visible = false;
_collisionBoundsOffset.set(0, 0, 0, 0);
updateBounds();
}
@@ -498,47 +495,215 @@ void TextLabelWidget::setTY(int16 ty) {
_ty = ty;
}
+TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority,
+ const byte *string, int maxStringLength, TextSurface *textSurface, uint32 fileHash, const NRect &rect)
+ : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
+ _maxStringLength(maxStringLength), _textSurface(textSurface), _fileHash(fileHash), _rect(rect),
+ _cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0) {
+
+ _entryString = (const char*)string;
+ _maxVisibleChars = (_rect.x2 - _rect.x1) / _textSurface->getCharWidth();
+ _cursorPos = _entryString.size();
+
+ SetUpdateHandler(&TextEditWidget::update);
+ SetMessageHandler(&TextEditWidget::handleMessage);
+}
+
+TextEditWidget::~TextEditWidget() {
+ delete _cursorSurface;
+}
+
+void TextEditWidget::onClick() {
+ NPoint mousePos = _parentScene->getMousePos();
+ mousePos.x -= _x + _rect.x1;
+ mousePos.y -= _y + _rect.y1;
+ if (mousePos.x >= 0 && mousePos.x <= _rect.x2 - _rect.x1 &&
+ mousePos.y >= 0 && mousePos.y <= _rect.y2 - _rect.y1) {
+ if (_entryString.size() == 1)
+ _cursorPos = 0;
+ else {
+ int newCursorPos = mousePos.x / _textSurface->getCharWidth();
+ if (mousePos.x % _textSurface->getCharWidth() > _textSurface->getCharWidth() / 2 && newCursorPos <= (int)_entryString.size())//###
+ ++newCursorPos;
+ _cursorPos = MIN((int)_entryString.size(), newCursorPos);
+ }
+ _cursorSurface->setVisible(true);
+ refresh();
+ }
+ Widget::onClick();
+}
+
+void TextEditWidget::addSprite() {
+ SpriteResource cursorSpriteResource(_vm);
+
+ _spriteResource.load2(_fileHash);
+ createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
+ refreshPosition();
+ _parentScene->addSprite(this);
+ _vm->_collisionMan->addSprite(this);
+ _surface->setVisible(true);
+ _textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _textSurface->getCharHeight()) / 2,
+ 0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
+ (const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _textSurface);
+ _textLabelWidget->addSprite();
+ cursorSpriteResource.load2(_cursorFileHash);
+ _cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
+ _cursorSurface->drawSpriteResourceEx(cursorSpriteResource, false, false, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
+ _cursorSurface->setVisible(true);
+ refresh();
+}
+
+void TextEditWidget::enterWidget() {
+ _cursorSurface->setVisible(true);
+ refresh();
+}
+
+void TextEditWidget::exitWidget() {
+ _cursorSurface->setVisible(false);
+ refresh();
+}
+
+void TextEditWidget::setCursor(uint32 cursorFileHash, int16 cursorWidth, int16 cursorHeight) {
+ _cursorFileHash = cursorFileHash;
+ _cursorWidth = cursorWidth;
+ _cursorHeight = cursorHeight;
+}
+
+void TextEditWidget::drawCursor() {
+ if (_cursorSurface->getVisible() && _cursorPos >= 0 && _cursorPos <= _maxVisibleChars) {
+ NDrawRect sourceRect(0, 0, _cursorWidth, _cursorHeight);
+ _surface->copyFrom(_cursorSurface->getSurface(), _rect.x1 + _cursorPos * _textSurface->getCharWidth(),
+ _rect.y1 + (_rect.y2 - _cursorHeight - _rect.y1 + 1) / 2, sourceRect, true);
+ } else
+ _cursorSurface->setVisible(false);
+}
+
+void TextEditWidget::updateString() {
+ _textLabelWidget->setString((const byte *)_entryString.c_str(), _entryString.size());
+ _textLabelWidget->drawString(_maxVisibleChars);
+}
+
+void TextEditWidget::getString(Common::String &string) {
+ string = _entryString;
+}
+
+void TextEditWidget::setString(const Common::String &string) {
+ _entryString = string;
+ _cursorPos = _entryString.size();
+ refresh();
+}
+
+void TextEditWidget::handleAsciiKey(char ch) {
+ if ((int)_entryString.size() < _maxStringLength &&
+ ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch == ' ')) {
+ _entryString.insertChar(ch, _cursorPos);
+ ++_cursorPos;
+ refresh();
+ }
+}
+
+void TextEditWidget::handleKeyDown(Common::KeyCode keyCode) {
+ bool doRefresh = true;
+ switch (keyCode) {
+ case Common::KEYCODE_DELETE:
+ if (_entryString.size() > 0 && _cursorPos < (int)_entryString.size())
+ _entryString.deleteChar(_cursorPos);
+ break;
+ case Common::KEYCODE_HOME:
+ _cursorPos = 0;
+ break;
+ case Common::KEYCODE_END:
+ _cursorPos = _entryString.size();
+ break;
+ case Common::KEYCODE_LEFT:
+ if (_entryString.size() > 0 && _cursorPos > 0)
+ --_cursorPos;
+ break;
+ case Common::KEYCODE_RIGHT:
+ if (_cursorPos < (int)_entryString.size())
+ ++_cursorPos;
+ break;
+ case Common::KEYCODE_BACKSPACE:
+ if (_entryString.size() > 0 && _cursorPos > 0)
+ _entryString.deleteChar(--_cursorPos);
+ break;
+ default:
+ break;
+ }
+ if (doRefresh) {
+ _cursorSurface->setVisible(true);
+ _cursorTicks = 0;
+ refresh();
+ }
+}
+
+void TextEditWidget::refresh() {
+ refreshPosition();
+ updateString();
+ drawCursor();
+}
+
+void TextEditWidget::update() {
+ Widget::update();
+ if (_parentScene->getCurrWidget() == this && _cursorTicks++ == 10) {
+ _cursorSurface->setVisible(!_cursorSurface->getVisible());
+ refresh();
+ _cursorTicks = 0;
+ }
+}
+
+uint32 TextEditWidget::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Widget::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x000A:
+ handleAsciiKey(param.asInteger());
+ break;
+ case 0x000B:
+ handleKeyDown((Common::KeyCode)param.asInteger());
+ break;
+ }
+ return messageResult;
+}
+
SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, bool visible,
- StringArray *savegameList, TextSurface *textSurface1, TextSurface *textSurface2, uint32 fileHash1, NRect &rect)
- : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority, visible),
- _savegameList(savegameList), _textSurface1(textSurface1), _textSurface2(textSurface2), _fileHash1(fileHash1), _rect(rect),
- _maxStringLength(0), _topIndex(0), _visibleItemsCount(0), _currIndex(0) {
+ int baseObjectPriority, int baseSurfacePriority,
+ StringArray *savegameList, TextSurface *textSurface, uint32 bgFileHash, const NRect &rect)
+ : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
+ _savegameList(savegameList), _textSurface(textSurface), _bgFileHash(bgFileHash), _rect(rect),
+ _maxStringLength(0), _firstVisibleItem(0), _lastVisibleItem(0), _currIndex(0) {
- _maxVisibleItemsCount = (_rect.y2 - _rect.y1) / _textSurface1->getCharHeight();
- _maxStringLength = (_rect.x2 - _rect.x1) / _textSurface1->getCharWidth();
+ _maxVisibleItemsCount = (_rect.y2 - _rect.y1) / _textSurface->getCharHeight();
+ _maxStringLength = (_rect.x2 - _rect.x1) / _textSurface->getCharWidth();
}
void SavegameListBox::onClick() {
- NPoint mousePos;
- int16 w = _rect.x2 - _rect.x1, h = _rect.y2 - _rect.y1;
- _parentScene->getMousePos(mousePos);
+ NPoint mousePos = _parentScene->getMousePos();
mousePos.x -= _x + _rect.x1;
mousePos.y -= _y + _rect.y1;
- if (mousePos.x >= 0 && mousePos.x <= w && mousePos.y >= 0 && mousePos.y <= h) {
- int newIndex = _topIndex + mousePos.y / _textSurface1->getCharHeight();
- if (newIndex <= _visibleItemsCount) {
+ if (mousePos.x >= 0 && mousePos.x <= _rect.x2 - _rect.x1 &&
+ mousePos.y >= 0 && mousePos.y <= _rect.y2 - _rect.y1) {
+ int newIndex = _firstVisibleItem + mousePos.y / _textSurface->getCharHeight();
+ if (newIndex <= _lastVisibleItem) {
_currIndex = newIndex;
refresh();
_parentScene->setCurrWidget(this);
- // TODO _parentScene->onClick(_itemID, 5);
+ debug("_currIndex = %d", _currIndex);
+ _parentScene->handleEvent(_itemID, 5);
}
}
}
void SavegameListBox::addSprite() {
- _spriteResource.load2(_fileHash1);
+ _spriteResource.load2(_bgFileHash);
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
_vm->_collisionMan->addSprite(this);
- if (_visible)
- show();
- else
- hide();
+ _surface->setVisible(true);
buildItems();
- _topIndex = 0;
- _visibleItemsCount = MIN(_maxVisibleItemsCount, (int)_textLabelItems.size());
+ _firstVisibleItem = 0;
+ _lastVisibleItem = MIN(_maxVisibleItemsCount, (int)_textLabelItems.size());
refresh();
}
@@ -549,7 +714,7 @@ void SavegameListBox::buildItems() {
const byte *string = (const byte*)savegameList[i].c_str();
int stringLen = (int)savegameList[i].size();
TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1,
- _baseSurfacePriority + 1, _visible, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _textSurface1);
+ _baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _textSurface);
label->addSprite();
_textLabelItems.push_back(label);
}
@@ -558,13 +723,12 @@ void SavegameListBox::buildItems() {
void SavegameListBox::drawItems() {
for (int i = 0; i < (int)_textLabelItems.size(); ++i) {
TextLabelWidget *label = _textLabelItems[i];
- if (i >= _topIndex && i <= _visibleItemsCount) {
- label->setY(_rect.y1 + (i - _topIndex) * _textSurface1->getCharHeight());
+ if (i >= _firstVisibleItem && i < _lastVisibleItem) {
+ label->setY(_rect.y1 + (i - _firstVisibleItem) * _textSurface->getCharHeight());
label->updateBounds();
label->drawString(_maxStringLength);
- } else {
+ } else
label->clear();
- }
}
}
@@ -574,37 +738,153 @@ void SavegameListBox::refresh() {
}
void SavegameListBox::scrollUp() {
- if (_topIndex > 0) {
- --_topIndex;
- --_visibleItemsCount;
+ if (_firstVisibleItem > 0) {
+ --_firstVisibleItem;
+ --_lastVisibleItem;
refresh();
}
}
void SavegameListBox::scrollDown() {
- if (_visibleItemsCount < (int)_textLabelItems.size()) {
- ++_topIndex;
- ++_visibleItemsCount;
+ if (_lastVisibleItem < (int)_textLabelItems.size()) {
+ ++_firstVisibleItem;
+ ++_lastVisibleItem;
refresh();
}
}
void SavegameListBox::pageUp() {
- int distance = MIN(_topIndex, _maxVisibleItemsCount);
- if (distance > 0) {
- _topIndex -= distance;
- _visibleItemsCount = distance;
+ int amount = MIN(_firstVisibleItem, _maxVisibleItemsCount);
+ if (amount > 0) {
+ _firstVisibleItem -= amount;
+ _lastVisibleItem -= amount;
refresh();
}
}
void SavegameListBox::pageDown() {
- int distance = MIN((int)_textLabelItems.size() - _visibleItemsCount - 1, _maxVisibleItemsCount);
- if (distance > 0) {
- _topIndex += distance;
- _visibleItemsCount += distance;
+ int amount = MIN((int)_textLabelItems.size() - _lastVisibleItem, _maxVisibleItemsCount);
+ if (amount > 0) {
+ _firstVisibleItem += amount;
+ _lastVisibleItem += amount;
refresh();
}
}
+SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArray *savegameList)
+ : WidgetScene(vm, parentModule), _savegameList(savegameList) {
+
+ static const uint32 kSaveGameMenuButtonFileHashes[] = {
+ 0x8359A824,
+ 0x0690E260,
+ 0x0352B050,
+ 0x1392A223,
+ 0x13802260,
+ 0x0B32B200
+ };
+
+ static const NRect kSaveGameMenuButtonCollisionBounds[] = {
+ NRect(518, 106, 602, 160),
+ NRect(516, 378, 596, 434),
+ NRect(394, 108, 458, 206),
+ NRect(400, 204, 458, 276),
+ NRect(398, 292, 456, 352),
+ NRect(396, 352, 460, 444)
+ };
+
+ static const NRect kListBoxRect(0, 0, 320, 272);
+ static const NRect kTextEditRect(0, 0, 377, 17);
+ static const NRect kMouseRect(50, 47, 427, 64);
+
+ _textSurface = new TextSurface(_vm, 0x2328121A, 7, 32, 32, 11, 17);
+
+ setBackground(0x30084E25);
+ setPalette(0x30084E25);
+ insertMouse433(0x84E21308, &kMouseRect);
+ insertStaticSprite(0x1340A5C2, 200);
+ insertStaticSprite(0x1301A7EA, 200);
+
+ _listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this, 1000, 1000,
+ _savegameList, _textSurface, 0x1115A223, kListBoxRect);
+ _listBox->addSprite();
+
+ _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 1000, 1000,
+ (const byte*)_savegameName.c_str(), 29, _textSurface, 0x3510A868, kTextEditRect);
+ _textEditWidget->setCursor(0x8290AC20, 2, 13);
+ _textEditWidget->addSprite();
+ _textEditWidget->setString(_savegameName);
+ setCurrWidget(_textEditWidget);
+
+ for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
+ Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
+ kSaveGameMenuButtonFileHashes[buttonIndex], kSaveGameMenuButtonCollisionBounds[buttonIndex]);
+ _vm->_collisionMan->addSprite(menuButton);
+ }
+
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&SaveGameMenu::handleMessage);
+}
+
+SaveGameMenu::~SaveGameMenu() {
+ delete _textSurface;
+}
+
+void SaveGameMenu::handleEvent(int16 itemID, int eventType) {
+ if (itemID == 69 && eventType == 5) {
+ uint currIndex = _listBox->getCurrIndex();
+ _textEditWidget->setString((*_savegameList)[currIndex]);
+ setCurrWidget(_textEditWidget);
+ }
+}
+
+uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x000A:
+ sendMessage(_textEditWidget, 0x000A, param.asInteger());
+ setCurrWidget(_textEditWidget);
+ break;
+ case 0x000B:
+ if (param.asInteger() == Common::KEYCODE_RETURN) {
+ // Return
+ // TODO 00486B05
+ // Get string from edit field and inform main module
+ leaveScene(0);
+ } else if (param.asInteger() == Common::KEYCODE_ESCAPE) {
+ // Escape
+ leaveScene(1);
+ } else {
+ sendMessage(_textEditWidget, 0x000B, param.asInteger());
+ setCurrWidget(_textEditWidget);
+ }
+ break;
+ case 0x2000:
+ // Handle menu button click
+ switch (param.asInteger()) {
+ case 0:
+ // TODO Same handling as Return
+ leaveScene(0);
+ break;
+ case 1:
+ leaveScene(1);
+ break;
+ case 2:
+ _listBox->pageUp();
+ break;
+ case 3:
+ _listBox->scrollUp();
+ break;
+ case 4:
+ _listBox->scrollDown();
+ break;
+ case 5:
+ _listBox->pageDown();
+ break;
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 1d7678d..7c1e6e1 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -30,6 +30,8 @@
namespace Neverhood {
+typedef Common::Array<Common::String> StringArray;
+
class MenuModule : public Module {
public:
MenuModule(NeverhoodEngine *vm, Module *parentModule, int which);
@@ -37,17 +39,18 @@ public:
protected:
int _sceneNum;
Common::String _savegameName;
- Background *_savedBackground;
byte *_savedPaletteData;
- // TODO _savegameList (list of strings?)
+ StringArray *_savegameList;
void createScene(int sceneNum, int which);
void updateScene();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createSaveGameMenu();
+ void handleSaveGameMenuAction(int action);
};
-class MainMenuButton : public StaticSprite {
+class MenuButton : public StaticSprite {
public:
- MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex);
+ MenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex, uint32 fileHash, const NRect &collisionBounds);
protected:
Scene *_parentScene;
int _countdown;
@@ -79,15 +82,15 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
-typedef Common::Array<Common::String> StringArray;
-
class Widget;
class WidgetScene : public Scene {
public:
WidgetScene(NeverhoodEngine *vm, Module *parentModule);
- void getMousePos(NPoint &pt);
+ NPoint getMousePos();
virtual void setCurrWidget(Widget *newWidget);
+ virtual Widget *getCurrWidget() { return _currWidget; }
+ virtual void handleEvent(int16 itemID, int eventType);
protected:
Widget *_currWidget;
};
@@ -95,9 +98,7 @@ protected:
class Widget : public StaticSprite {
public:
Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, bool visible);
- virtual void show();
- virtual void hide();
+ int baseObjectPriority, int baseSurfacePriority);
virtual void onClick();
virtual void setPosition(int16 x, int16 y);
virtual void refreshPosition();
@@ -111,7 +112,6 @@ protected:
WidgetScene *_parentScene;
int _baseObjectPriority;
int _baseSurfacePriority;
- bool _visible;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -119,7 +119,7 @@ protected:
class TextLabelWidget : public Widget {
public:
TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, bool visible,
+ int baseObjectPriority, int baseSurfacePriority,
const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, TextSurface *textSurface);
virtual void onClick();
virtual void addSprite();
@@ -138,11 +138,46 @@ protected:
int _stringLen;
};
+class TextEditWidget : public Widget {
+public:
+ TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ int baseObjectPriority, int baseSurfacePriority,
+ const byte *string, int maxStringLength, TextSurface *textSurface, uint32 fileHash, const NRect &rect);
+ ~TextEditWidget();
+ virtual void onClick();
+ virtual void addSprite();
+ virtual void enterWidget();
+ virtual void exitWidget();
+ void setCursor(uint32 cursorFileHash, int16 cursorWidth, int16 cursorHeight);
+ void drawCursor();
+ void updateString();
+ void getString(Common::String &string);
+ void setString(const Common::String &string);
+ void handleAsciiKey(char ch);
+ void handleKeyDown(Common::KeyCode keyCode);
+ void refresh();
+protected:
+ NRect _rect;
+ uint32 _fileHash;
+ int _maxVisibleChars;
+ int _maxStringLength;
+ int _cursorPos;
+ int _cursorTicks;
+ Common::String _entryString;
+ TextSurface *_textSurface;
+ TextLabelWidget *_textLabelWidget;
+ BaseSurface *_cursorSurface;
+ uint32 _cursorFileHash;
+ int16 _cursorWidth, _cursorHeight;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
class SavegameListBox : public Widget {
public:
SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, bool visible,
- StringArray *savegameList, TextSurface *textSurface1, TextSurface *textSurface2, uint32 fileHash1, NRect &rect);
+ int baseObjectPriority, int baseSurfacePriority,
+ StringArray *savegameList, TextSurface *textSurface, uint32 bgFileHash, const NRect &rect);
virtual void onClick();
virtual void addSprite();
void buildItems();
@@ -152,20 +187,35 @@ public:
void scrollDown();
void pageUp();
void pageDown();
+ uint getCurrIndex() const { return _currIndex; }
protected:
- NRect _rect;
- uint32 _fileHash1;
+ const NRect _rect;
+ uint32 _bgFileHash;
int _maxStringLength;
Common::Array<TextLabelWidget*> _textLabelItems;
- int _topIndex;
- int _visibleItemsCount;
+ int _firstVisibleItem;
+ int _lastVisibleItem;
StringArray *_savegameList;
- TextSurface *_textSurface1;
- TextSurface *_textSurface2;
- int _currIndex;
+ TextSurface *_textSurface;
+ uint _currIndex;
int _maxVisibleItemsCount;
};
+class SaveGameMenu : public WidgetScene {
+public:
+ SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArray *savegameList);
+ ~SaveGameMenu();
+ virtual void handleEvent(int16 itemID, int eventType);
+protected:
+ StringArray *_savegameList;
+ TextSurface *_textSurface;
+ SavegameListBox *_listBox;
+ TextEditWidget *_textEditWidget;
+ Common::String _savegameName;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MENUMODULE_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 9141de0..208a157 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -112,16 +112,8 @@ Common::Error NeverhoodEngine::run() {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_keyState = event.kbd.keycode;
- switch (_keyState) {
- case Common::KEYCODE_ESCAPE:
- _gameModule->handleEscapeKey();
- break;
- case Common::KEYCODE_SPACE:
- _gameModule->handleSpaceKey();
- break;
- default:
- break;
- }
+ _gameModule->handleKeyDown(event.kbd.keycode);
+ _gameModule->handleAsciiKey(event.kbd.ascii);
break;
case Common::EVENT_KEYUP:
_keyState = Common::KEYCODE_INVALID;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 9e49c6b..aa4efac 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -100,28 +100,29 @@ void Scene::addEntity(Entity *entity) {
}
bool Scene::removeEntity(Entity *entity) {
- for (uint index = 0; index < _entities.size(); index++) {
+ for (uint index = 0; index < _entities.size(); index++)
if (_entities[index] == entity) {
_entities.remove_at(index);
return true;
}
- }
return false;
}
void Scene::addSurface(BaseSurface *surface) {
- int index = 0, insertIndex = -1;
- for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
- if ((*iter)->getPriority() > surface->getPriority()) {
- insertIndex = index;
- break;
+ if (surface) {
+ int index = 0, insertIndex = -1;
+ for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) {
+ if ((*iter)->getPriority() > surface->getPriority()) {
+ insertIndex = index;
+ break;
+ }
+ index++;
}
- index++;
+ if (insertIndex >= 0)
+ _surfaces.insert_at(insertIndex, surface);
+ else
+ _surfaces.push_back(surface);
}
- if (insertIndex >= 0)
- _surfaces.insert_at(insertIndex, surface);
- else
- _surfaces.push_back(surface);
}
bool Scene::removeSurface(BaseSurface *surface) {
@@ -191,7 +192,7 @@ Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
}
-void Scene::insertMouse433(uint32 fileHash, NRect *mouseRect) {
+void Scene::insertMouse433(uint32 fileHash, const NRect *mouseRect) {
NRect rect(-1, -1, -1, -1);
if (mouseRect)
rect = *mouseRect;
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index c9e27f7..21f054e 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -59,7 +59,7 @@ public:
void setPalette(uint32 fileHash = 0);
void setHitRects(uint32 id);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
- void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL);
+ void insertMouse433(uint32 fileHash, const NRect *mouseRect = NULL);
void insertMouse435(uint32 fileHash, int16 x1, int16 x2);
void insertNavigationMouse(uint32 fileHash, int type);
void showMouse(bool visible);
Commit: 73e0372cefad2fa4eb95d4c02c66b3361b7599be
https://github.com/scummvm/scummvm/commit/73e0372cefad2fa4eb95d4c02c66b3361b7599be
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: A little more work on the menu stuff
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 6a82c47..528d303 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -64,6 +64,13 @@ MenuModule::~MenuModule() {
_vm->_screen->setPaletteData(_savedPaletteData);
}
+void MenuModule::setSavegameInfo(const Common::String &description, uint slot, bool newSavegame) {
+ _savegameDescription = description;
+ _savegameSlot = slot;
+ _newSavegame = newSavegame;
+ debug("SAVEGAME: description = [%s]; slot = %d; new = %d", description.c_str(), slot, newSavegame);
+}
+
void MenuModule::createScene(int sceneNum, int which) {
_sceneNum = sceneNum;
switch (_sceneNum) {
@@ -491,20 +498,16 @@ void TextLabelWidget::setString(const byte *string, int stringLen) {
_stringLen = stringLen;
}
-void TextLabelWidget::setTY(int16 ty) {
- _ty = ty;
-}
-
TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority,
- const byte *string, int maxStringLength, TextSurface *textSurface, uint32 fileHash, const NRect &rect)
+ int baseObjectPriority, int baseSurfacePriority, int maxStringLength, TextSurface *textSurface,
+ uint32 fileHash, const NRect &rect)
: Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
_maxStringLength(maxStringLength), _textSurface(textSurface), _fileHash(fileHash), _rect(rect),
- _cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0) {
+ _cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0),
+ _modified(false) {
- _entryString = (const char*)string;
_maxVisibleChars = (_rect.x2 - _rect.x1) / _textSurface->getCharWidth();
- _cursorPos = _entryString.size();
+ _cursorPos = 0;
SetUpdateHandler(&TextEditWidget::update);
SetMessageHandler(&TextEditWidget::handleMessage);
@@ -584,13 +587,14 @@ void TextEditWidget::updateString() {
_textLabelWidget->drawString(_maxVisibleChars);
}
-void TextEditWidget::getString(Common::String &string) {
- string = _entryString;
+Common::String& TextEditWidget::getString() {
+ return _entryString;
}
void TextEditWidget::setString(const Common::String &string) {
_entryString = string;
_cursorPos = _entryString.size();
+ _modified = false;
refresh();
}
@@ -599,6 +603,7 @@ void TextEditWidget::handleAsciiKey(char ch) {
((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch == ' ')) {
_entryString.insertChar(ch, _cursorPos);
++_cursorPos;
+ _modified = true;
refresh();
}
}
@@ -606,10 +611,6 @@ void TextEditWidget::handleAsciiKey(char ch) {
void TextEditWidget::handleKeyDown(Common::KeyCode keyCode) {
bool doRefresh = true;
switch (keyCode) {
- case Common::KEYCODE_DELETE:
- if (_entryString.size() > 0 && _cursorPos < (int)_entryString.size())
- _entryString.deleteChar(_cursorPos);
- break;
case Common::KEYCODE_HOME:
_cursorPos = 0;
break;
@@ -624,9 +625,17 @@ void TextEditWidget::handleKeyDown(Common::KeyCode keyCode) {
if (_cursorPos < (int)_entryString.size())
++_cursorPos;
break;
+ case Common::KEYCODE_DELETE:
+ if (_entryString.size() > 0 && _cursorPos < (int)_entryString.size()) {
+ _entryString.deleteChar(_cursorPos);
+ _modified = true;
+ }
+ break;
case Common::KEYCODE_BACKSPACE:
- if (_entryString.size() > 0 && _cursorPos > 0)
+ if (_entryString.size() > 0 && _cursorPos > 0) {
_entryString.deleteChar(--_cursorPos);
+ _modified = true;
+ }
break;
default:
break;
@@ -808,11 +817,10 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
_savegameList, _textSurface, 0x1115A223, kListBoxRect);
_listBox->addSprite();
- _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 1000, 1000,
- (const byte*)_savegameName.c_str(), 29, _textSurface, 0x3510A868, kTextEditRect);
+ _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 1000, 1000, 29,
+ _textSurface, 0x3510A868, kTextEditRect);
_textEditWidget->setCursor(0x8290AC20, 2, 13);
_textEditWidget->addSprite();
- _textEditWidget->setString(_savegameName);
setCurrWidget(_textEditWidget);
for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
@@ -847,12 +855,10 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
break;
case 0x000B:
if (param.asInteger() == Common::KEYCODE_RETURN) {
- // Return
- // TODO 00486B05
- // Get string from edit field and inform main module
+ ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
+ _listBox->getCurrIndex(), _textEditWidget->isModified());
leaveScene(0);
} else if (param.asInteger() == Common::KEYCODE_ESCAPE) {
- // Escape
leaveScene(1);
} else {
sendMessage(_textEditWidget, 0x000B, param.asInteger());
@@ -863,7 +869,9 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
// Handle menu button click
switch (param.asInteger()) {
case 0:
- // TODO Same handling as Return
+ // TODO Same handling as Return, merge
+ ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
+ _listBox->getCurrIndex(), _textEditWidget->isModified());
leaveScene(0);
break;
case 1:
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 7c1e6e1..0f45795 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -36,11 +36,14 @@ class MenuModule : public Module {
public:
MenuModule(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~MenuModule();
+ void setSavegameInfo(const Common::String &description, uint slot, bool newSavegame);
protected:
int _sceneNum;
- Common::String _savegameName;
byte *_savedPaletteData;
StringArray *_savegameList;
+ Common::String _savegameDescription;
+ uint _savegameSlot;
+ bool _newSavegame;
void createScene(int sceneNum, int which);
void updateScene();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -129,7 +132,6 @@ public:
void clear();
void setString(const byte *string, int stringLen);
TextSurface *getTextSurface() const { return _textSurface; }
- void setTY(int16 ty);
protected:
BaseSurface *_drawSurface;
int16 _tx, _ty;
@@ -141,8 +143,8 @@ protected:
class TextEditWidget : public Widget {
public:
TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority,
- const byte *string, int maxStringLength, TextSurface *textSurface, uint32 fileHash, const NRect &rect);
+ int baseObjectPriority, int baseSurfacePriority, int maxStringLength, TextSurface *textSurface,
+ uint32 fileHash, const NRect &rect);
~TextEditWidget();
virtual void onClick();
virtual void addSprite();
@@ -151,11 +153,12 @@ public:
void setCursor(uint32 cursorFileHash, int16 cursorWidth, int16 cursorHeight);
void drawCursor();
void updateString();
- void getString(Common::String &string);
+ Common::String& getString();
void setString(const Common::String &string);
void handleAsciiKey(char ch);
void handleKeyDown(Common::KeyCode keyCode);
void refresh();
+ bool isModified() const { return _modified; }
protected:
NRect _rect;
uint32 _fileHash;
@@ -169,6 +172,7 @@ protected:
BaseSurface *_cursorSurface;
uint32 _cursorFileHash;
int16 _cursorWidth, _cursorHeight;
+ bool _modified;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -211,7 +215,7 @@ protected:
TextSurface *_textSurface;
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
- Common::String _savegameName;
+ Common::String _savegameDescription;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 685ce4e3122dfd48ce136f6bc6baaacf142e8850
https://github.com/scummvm/scummvm/commit/685ce4e3122dfd48ce136f6bc6baaacf142e8850
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: Add initCodeSymbolsPuzzle
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module1600.cpp
engines/neverhood/module3000.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index ce72a22..c7ce53f 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -262,6 +262,23 @@ void GameModule::initCannonSymbolsPuzzle() {
}
}
+void GameModule::initCodeSymbolsPuzzle() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x0CD09B50)) {
+ for (int i = 0; i < 12; ++i)
+ setSubVar(VA_CODE_SYMBOLS, i, i);
+ for (int i = 0; i < 12; ++i) {
+ uint32 index1 = _vm->_rnd->getRandomNumber(12 - 1);
+ uint32 index2 = _vm->_rnd->getRandomNumber(12 - 1);
+ uint32 temp = getSubVar(VA_CODE_SYMBOLS, index1);
+ setSubVar(VA_CODE_SYMBOLS, index1, getSubVar(VA_CODE_SYMBOLS, index2));
+ setSubVar(VA_CODE_SYMBOLS, index2, temp);
+ }
+ setGlobalVar(V_NOISY_SYMBOL_INDEX, _vm->_rnd->getRandomNumber(11 - 1) + 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x0CD09B50, 1);
+ }
+
+}
+
uint32 GameModule::getCurrRadioMusicFileHash() {
uint musicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
return (musicIndex % 5 != 0) ? 0 : kRadioMusicFileHashes[CLIP<uint>(musicIndex / 5, 0, 17)];
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 81ebfb8..e1461d2 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -46,8 +46,9 @@ public:
void initWaterPipesPuzzle();
void initRadioPuzzle();
void initTestTubes1Puzzle();
- void initTestTubes2Puzzle();
+ void initTestTubes2Puzzle();
void initCannonSymbolsPuzzle();
+ void initCodeSymbolsPuzzle();
uint32 getCurrRadioMusicFileHash();
protected:
Entity *_prevChildObject;
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index db8eeab..ca4d2e5 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1317,7 +1317,7 @@ void Scene1608::updateKlaymanCliprect() {
Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
- // TODO _vm->gameModule()->initScene3011Vars();
+ _vm->gameModule()->initCodeSymbolsPuzzle();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
SetMessageHandler(&Scene1609::handleMessage);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 9c2d896..1fc1f53 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -1450,7 +1450,7 @@ void AsScene3011Symbol::change(int symbolIndex, bool isNoisy) {
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0) {
- // TODO _vm->gameModule()->initScene3011Vars();
+ _vm->gameModule()->initCodeSymbolsPuzzle();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
SetMessageHandler(&Scene3011::handleMessage);
Commit: 1904e944c561a21dbe6271f64393f2bfc5f584f9
https://github.com/scummvm/scummvm/commit/1904e944c561a21dbe6271f64393f2bfc5f584f9
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:37-07:00
Commit Message:
NEVERHOOD: Add initCubeSymbolsPuzzle
- Add microtiles to the screen update to eliminate overdraw
(microtiles code taken from the Toltecs engine)
- Fix sprite dimensions in AsScene1402PuzzleBox which caused a crash
- Fix screen shaking in Scene1402
(the puzzle box and bridge parts now shake along :)
- Use addSoundItem/addMusicItem in the SoundMan instead of
directly using push_back on the resp. arrays
- Remove old code and comments
Changed paths:
A engines/neverhood/microtiles.cpp
A engines/neverhood/microtiles.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module.mk
engines/neverhood/module1400.cpp
engines/neverhood/module2200.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
engines/neverhood/sound.cpp
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c7ce53f..be4f5d3 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,7 +276,15 @@ void GameModule::initCodeSymbolsPuzzle() {
setGlobalVar(V_NOISY_SYMBOL_INDEX, _vm->_rnd->getRandomNumber(11 - 1) + 1);
setSubVar(VA_IS_PUZZLE_INIT, 0x0CD09B50, 1);
}
+}
+void GameModule::initCubeSymbolsPuzzle() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x60400854)) {
+ NonRepeatingRandomNumbers cubeSymbols(_vm->_rnd, 9);
+ for (uint32 cubePosition = 0; cubePosition < 9; ++cubePosition)
+ setSubVar(VA_CUBE_POSITIONS, cubePosition, (uint32)(cubeSymbols.getNumber() - 1));
+ setSubVar(VA_IS_PUZZLE_INIT, 0x60400854, 1);
+ }
}
uint32 GameModule::getCurrRadioMusicFileHash() {
@@ -352,7 +360,7 @@ void GameModule::startup() {
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 4, 4);
// <<<DEBUG
-#if 1
+#if 0
/*
//DEBUG>>>
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
@@ -364,9 +372,9 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 28;
createModule(2700, -1);
#endif
-#if 0
+#if 1
_vm->gameState().sceneNum = 0;
- createModule(1800, -1);
+ createModule(1400, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index e1461d2..53adb85 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -49,6 +49,7 @@ public:
void initTestTubes2Puzzle();
void initCannonSymbolsPuzzle();
void initCodeSymbolsPuzzle();
+ void initCubeSymbolsPuzzle();
uint32 getCurrRadioMusicFileHash();
protected:
Entity *_prevChildObject;
diff --git a/engines/neverhood/microtiles.cpp b/engines/neverhood/microtiles.cpp
new file mode 100644
index 0000000..ee64fda
--- /dev/null
+++ b/engines/neverhood/microtiles.cpp
@@ -0,0 +1,164 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ *
+ */
+
+#include "neverhood/microtiles.h"
+
+namespace Neverhood {
+
+MicroTileArray::MicroTileArray(int16 width, int16 height) {
+ _tilesW = (width / TileSize) + ((width % TileSize) > 0 ? 1 : 0);
+ _tilesH = (height / TileSize) + ((height % TileSize) > 0 ? 1 : 0);
+ _tiles = new BoundingBox[_tilesW * _tilesH];
+ clear();
+}
+
+MicroTileArray::~MicroTileArray() {
+ delete[] _tiles;
+}
+
+void MicroTileArray::addRect(Common::Rect r) {
+
+ int ux0, uy0, ux1, uy1;
+ int tx0, ty0, tx1, ty1;
+ int ix0, iy0, ix1, iy1;
+
+ r.clip(Common::Rect(0, 0, 639, 479));
+
+ ux0 = r.left / TileSize;
+ uy0 = r.top / TileSize;
+ ux1 = r.right / TileSize;
+ uy1 = r.bottom / TileSize;
+
+ tx0 = r.left % TileSize;
+ ty0 = r.top % TileSize;
+ tx1 = r.right % TileSize;
+ ty1 = r.bottom % TileSize;
+
+ for (int yc = uy0; yc <= uy1; yc++) {
+ for (int xc = ux0; xc <= ux1; xc++) {
+ ix0 = (xc == ux0) ? tx0 : 0;
+ ix1 = (xc == ux1) ? tx1 : TileSize - 1;
+ iy0 = (yc == uy0) ? ty0 : 0;
+ iy1 = (yc == uy1) ? ty1 : TileSize - 1;
+ updateBoundingBox(_tiles[xc + yc * _tilesW], ix0, iy0, ix1, iy1);
+ }
+ }
+
+}
+
+void MicroTileArray::clear() {
+ memset(_tiles, 0, _tilesW * _tilesH * sizeof(BoundingBox));
+}
+
+byte MicroTileArray::TileX0(const BoundingBox &boundingBox) {
+ return (boundingBox >> 24) & 0xFF;
+}
+
+byte MicroTileArray::TileY0(const BoundingBox &boundingBox) {
+ return (boundingBox >> 16) & 0xFF;
+}
+
+byte MicroTileArray::TileX1(const BoundingBox &boundingBox) {
+ return (boundingBox >> 8) & 0xFF;
+}
+
+byte MicroTileArray::TileY1(const BoundingBox &boundingBox) {
+ return boundingBox & 0xFF;
+}
+
+bool MicroTileArray::isBoundingBoxEmpty(const BoundingBox &boundingBox) {
+ return boundingBox == EmptyBoundingBox;
+}
+
+bool MicroTileArray::isBoundingBoxFull(const BoundingBox &boundingBox) {
+ return boundingBox == FullBoundingBox;
+}
+
+void MicroTileArray::setBoundingBox(BoundingBox &boundingBox, byte x0, byte y0, byte x1, byte y1) {
+ boundingBox = (x0 << 24) | (y0 << 16) | (x1 << 8) | y1;
+}
+
+void MicroTileArray::updateBoundingBox(BoundingBox &boundingBox, byte x0, byte y0, byte x1, byte y1) {
+ if (!isBoundingBoxEmpty(boundingBox)) {
+ x0 = MIN(TileX0(boundingBox), x0);
+ y0 = MIN(TileY0(boundingBox), y0);
+ x1 = MAX(TileX1(boundingBox), x1);
+ y1 = MAX(TileY1(boundingBox), y1);
+ }
+ setBoundingBox(boundingBox, x0, y0, x1, y1);
+}
+
+RectArray *MicroTileArray::getRectangles() {
+
+ RectArray *rects = new RectArray();
+
+ int x, y;
+ int x0, y0, x1, y1;
+ int i = 0;
+
+ for (y = 0; y < _tilesH; ++y) {
+ for (x = 0; x < _tilesW; ++x) {
+
+ int start;
+ int finish = 0;
+ BoundingBox boundingBox = _tiles[i];
+
+ if (isBoundingBoxEmpty(boundingBox)) {
+ ++i;
+ continue;
+ }
+
+ x0 = (x * TileSize) + TileX0(boundingBox);
+ y0 = (y * TileSize) + TileY0(boundingBox);
+ y1 = (y * TileSize) + TileY1(boundingBox);
+
+ start = i;
+
+ if (TileX1(boundingBox) == TileSize - 1 && x != _tilesW - 1) { // check if the tile continues
+ while (!finish) {
+ ++x;
+ ++i;
+ if (x == _tilesW || i >= _tilesW * _tilesH ||
+ TileY0(_tiles[i]) != TileY0(boundingBox) ||
+ TileY1(_tiles[i]) != TileY1(boundingBox) ||
+ TileX0(_tiles[i]) != 0)
+ {
+ --x;
+ --i;
+ finish = 1;
+ }
+ }
+ }
+
+ x1 = (x * TileSize) + TileX1(_tiles[i]);
+
+ rects->push_back(Common::Rect(x0, y0, x1 + 1, y1 + 1));
+
+ ++i;
+ }
+ }
+
+ return rects;
+}
+
+} // End of namespace Neverhood
diff --git a/engines/neverhood/microtiles.h b/engines/neverhood/microtiles.h
new file mode 100644
index 0000000..2ad6796
--- /dev/null
+++ b/engines/neverhood/microtiles.h
@@ -0,0 +1,64 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ *
+ */
+
+#ifndef NEVERHOOD_MICROTILES_H
+#define NEVERHOOD_MICROTILES_H
+
+#include "common/scummsys.h"
+#include "common/array.h"
+#include "common/util.h"
+#include "common/rect.h"
+
+namespace Neverhood {
+
+typedef uint32 BoundingBox;
+
+const BoundingBox FullBoundingBox = 0x00001F1F;
+const BoundingBox EmptyBoundingBox = 0x00000000;
+const int TileSize = 32;
+
+typedef Common::Array<Common::Rect> RectArray;
+
+class MicroTileArray {
+public:
+ MicroTileArray(int16 width, int16 height);
+ ~MicroTileArray();
+ void addRect(Common::Rect r);
+ void clear();
+ RectArray *getRectangles();
+protected:
+ BoundingBox *_tiles;
+ int16 _tilesW, _tilesH;
+ byte TileX0(const BoundingBox &boundingBox);
+ byte TileY0(const BoundingBox &boundingBox);
+ byte TileX1(const BoundingBox &boundingBox);
+ byte TileY1(const BoundingBox &boundingBox);
+ bool isBoundingBoxEmpty(const BoundingBox &boundingBox);
+ bool isBoundingBoxFull(const BoundingBox &boundingBox);
+ void setBoundingBox(BoundingBox &boundingBox, byte x0, byte y0, byte x1, byte y1);
+ void updateBoundingBox(BoundingBox &boundingBox, byte x0, byte y0, byte x1, byte y1);
+};
+
+} // namespace Neverhood
+
+#endif // NEVERHOOD_MICROTILES_H
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 224dfb5..9069203 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS = \
graphics.o \
klayman.o \
menumodule.o \
+ microtiles.o \
module.o \
module1000.o \
module1100.o \
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 2494941..db3acb6 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -780,7 +780,7 @@ SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHas
AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int status)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
- createSurface(900, 152, 147);
+ createSurface(900, 347, 230);
SetFilterY(&Sprite::defFilterY);
SetUpdateHandler(&AnimatedSprite::update);
@@ -844,9 +844,10 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1402::handleMessage);
+ _vm->_screen->setYOffset(0);
+
setBackground(0x231482F0);
setBackgroundY(-10);
- // TODO g_screen->field_26 = 0;
setPalette(0x231482F0);
_palette->addPalette(0x91D3A391, 0, 64, 0);
insertMouse433(0x482F4239);
@@ -891,7 +892,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
startShaking();
}
}
-
+
if (_asPuzzleBox)
_asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
@@ -919,10 +920,10 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
void Scene1402::upShaking() {
if (_isShaking) {
setBackgroundY(_vm->_rnd->getRandomNumber(10 - 1) - 10);
- // TODO g_screen->field_26 = -10 - _background->getDrawRect().y;
+ _vm->_screen->setYOffset(-10 - getBackgroundY());
} else {
setBackgroundY(-10);
- // TODO g_screen->field_26 = 0;
+ _vm->_screen->setYOffset(0);
SetUpdateHandler(&Scene::update);
}
Scene::update();
@@ -973,6 +974,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
} else
setMessageList2(0x004B0B68);
}
+ break;
}
return 0;
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 8616592..8a7e346 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -539,9 +539,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
- if (!getSubVar(VA_IS_PUZZLE_INIT, 0x60400854)) {
- // TODO _vm->gameModule()->initScene2201Vars();
- }
+ _vm->gameModule()->initCubeSymbolsPuzzle();
SetMessageHandler(&Scene2201::handleMessage);
SetUpdateHandler(&Scene2201::update);
@@ -875,7 +873,8 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isCubeMoving(false),
_ssMovingCube(NULL), _ssDoneMovingCube(NULL) {
- // TODO initScene2201Vars();
+ _vm->gameModule()->initCubeSymbolsPuzzle();
+
SetMessageHandler(&Scene2202::handleMessage);
SetUpdateHandler(&Scene2202::update);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index aa4efac..6141ee4 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -29,7 +29,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
: Entity(vm, 0), _parentModule(parentModule), _dataResource(vm) {
_isKlaymanBusy = false;
- _systemCallbackFlag = false;
+ _doConvertMessages = false;
_messageList = NULL;
_rectType = 0;
_mouseClickPos.x = 0;
@@ -46,7 +46,6 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
}
_vm->_screen->setFps(24);
_vm->_screen->setSmackerDecoder(NULL);
- // TODO g_screen->resetDirtyRects();
_canAcceptInput = true;
_messageList2 = NULL;
_smackerPlayer = NULL;
@@ -229,7 +228,6 @@ void Scene::update() {
if (_mouseClicked) {
if (_klayman) {
- // TODO: Merge later
if (_canAcceptInput &&
_klayman->hasMessageHandler() &&
sendMessage(_klayman, 0x1008, 0) != 0 &&
@@ -262,27 +260,11 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
case 0: // mouse moved
if (_mouseCursor && _mouseCursor->hasMessageHandler())
sendMessage(_mouseCursor, 0x4002, param);
- // TODO Seems unused: queryPositionSomeRects(param.asPoint().x, param.asPoint().y);
break;
case 1: // mouse clicked
_mouseClicked = true;
_mouseClickPos = param.asPoint();
break;
- /* ORIGINAL DEBUG
- case 3:
- drawSurfaceRects();
- break;
- */
- /* ORIGINAL DEBUG
- case 4:
- drawRectListRects();
- break;
- */
- /* ORIGINAL DEBUG
- case 5:
- broadcastObjectMessage5();
- break;
- */
case 6:
sendMessage(_parentModule, 0x1009, param);
break;
@@ -331,34 +313,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
return 0;
}
-void Scene::smackerUpdate() {
- //**ALL TODO
-#if 0
- _smackerPlayer->handleUpdate();
- if (_smackerDone) {
- delete _smackerPlayer;
- _smackerPlayer = NULL;
- _updateHandlerCb = _savedUpdateHandlerCb;
- _messageHandlerCb = _savedMessageHandlerCb;
- if (_palette)
- _palette->usePalette();
- // TODO _background->restore();
- // TODO g_screen->smackerPlayer = NULL;
- }
-#endif
-}
-
-uint32 Scene::smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x3002:
- _smackerDone = true;
- break;
- }
- return 0;
-}
-
bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
- //debug("Scene::queryPositionSprite(%d, %d)", mouseX, mouseY);
for (uint i = 0; i < _vm->_collisionMan->getSpriteCount(); i++) {
Sprite *sprite = _vm->_collisionMan->getSprite(i);
if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
@@ -380,7 +335,6 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
for (uint j = 0; j < rectList[i].subRects.size(); j++) {
debug(2, " (%d, %d) ? (%d, %d, %d, %d)", mouseX, mouseY, rectList[i].subRects[j].rect.x1, rectList[i].subRects[j].rect.y1, rectList[i].subRects[j].rect.x2, rectList[i].subRects[j].rect.y2);
if (rectList[i].subRects[j].rect.contains(mouseX, mouseY)) {
- //debug("Scene::queryPositionRectList() -> %08X", rectList[i].subRects[j].messageListId);
return setMessageList2(rectList[i].subRects[j].messageListId);
}
}
@@ -394,53 +348,33 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) {
return true;
}
-void Scene::setMessageList(uint32 id, bool canAcceptInput, bool systemCallbackFlag) {
- setMessageList(_vm->_staticData->getMessageList(id), canAcceptInput, systemCallbackFlag);
+void Scene::setMessageList(uint32 id, bool canAcceptInput, bool doConvertMessages) {
+ setMessageList(_vm->_staticData->getMessageList(id), canAcceptInput, doConvertMessages);
}
-void Scene::setMessageList(MessageList *messageList, bool canAcceptInput, bool systemCallbackFlag) {
- //debug("Scene::setMessageList(%p)", (void*)messageList);
+void Scene::setMessageList(MessageList *messageList, bool canAcceptInput, bool doConvertMessages) {
_messageList = messageList;
_messageListCount = _messageList ? _messageList->size() : 0;
_messageListIndex = 0;
_isKlaymanBusy = false;
_canAcceptInput = canAcceptInput;
- _systemCallbackFlag = systemCallbackFlag;
+ _doConvertMessages = doConvertMessages;
_messageListStatus = 1;
sendMessage(_klayman, 0x101C, 0);
-
-#if 0
- // DEBUG: Show message list
- for (uint i = 0; i < messageList->size(); i++) {
- debug("A: %02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
- }
- debug("A: ================================================================");
-#endif
-
}
-bool Scene::setMessageList2(uint32 id, bool canAcceptInput, bool systemCallbackFlag) {
- return setMessageList2(_vm->_staticData->getMessageList(id), canAcceptInput, systemCallbackFlag);
+bool Scene::setMessageList2(uint32 id, bool canAcceptInput, bool doConvertMessages) {
+ return setMessageList2(_vm->_staticData->getMessageList(id), canAcceptInput, doConvertMessages);
}
-bool Scene::setMessageList2(MessageList *messageList, bool canAcceptInput, bool systemCallbackFlag) {
- //debug("Scene::setMessageList2(%p)", (void*)messageList);
-
-#if 0
- // DEBUG: Show message list
- for (uint i = 0; i < messageList->size(); i++) {
- debug("B: %02d: %04X, %08X", i, (*messageList)[i].messageNum, (*messageList)[i].messageValue);
- }
- debug("B: ================================================================");
-#endif
-
+bool Scene::setMessageList2(MessageList *messageList, bool canAcceptInput, bool doConvertMessages) {
if (_messageListStatus == 0 ||
(_messageListStatus == 1 && messageList != _messageList2) ||
(_messageListStatus == 2 && messageList == _messageList2)) {
// NOTE Skipped unneeded resource preloading code
_messageValue = -1;
_messageList2 = messageList;
- setMessageList(messageList, canAcceptInput, systemCallbackFlag);
+ setMessageList(messageList, canAcceptInput, doConvertMessages);
return true;
}
return false;
@@ -465,45 +399,39 @@ void Scene::processMessageList() {
uint32 messageNum = (*_messageList)[_messageListIndex].messageNum;
uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;
- //debug("Scene::processMessageList() %04X, %08X", messageNum, messageParam);
-
- _messageListIndex++;
- if (_messageListIndex == _messageListCount) {
+ ++_messageListIndex;
+ if (_messageListIndex == _messageListCount)
sendMessage(_klayman, 0x1021, 0);
- }
- if (_systemCallbackFlag) {
+ if (_doConvertMessages)
messageNum = convertMessageNum(messageNum);
- }
- if (messageNum != 0x4003) {
- if (messageNum == 0x1009 || messageNum == 0x1024) {
- sendMessage(_parentModule, messageNum, messageParam);
- } else if (messageNum == 0x100A) {
- _messageValue = messageParam;
- sendMessage(_parentModule, messageNum, messageParam);
- } else if (messageNum == 0x4001) {
- _isKlaymanBusy = true;
- sendPointMessage(_klayman, 0x4001, _mouseClickPos);
- } else if (messageNum == 0x100D) {
- if (this->hasMessageHandler() && sendMessage(this, 0x100D, messageParam) != 0)
- continue;
- } else if (messageNum == 0x101A) {
- _messageListStatus = 0;
- } else if (messageNum == 0x101B) {
- _messageListStatus = 2;
- } else if (messageNum == 0x1020) {
- _canAcceptInput = false;
- } else if (messageNum >= 0x2000 && messageNum <= 0x2FFF) {
- if (this->hasMessageHandler() && sendMessage(this, messageNum, messageParam) != 0) {
- _isMessageListBusy = false;
- return;
- }
- } else {
- _isKlaymanBusy = true;
- if (_klayman->hasMessageHandler() && sendMessage(_klayman, messageNum, messageParam) != 0) {
- _isKlaymanBusy = false;
- }
- }
- }
+ if (messageNum == 0x1009 || messageNum == 0x1024) {
+ sendMessage(_parentModule, messageNum, messageParam);
+ } else if (messageNum == 0x100A) {
+ _messageValue = messageParam;
+ sendMessage(_parentModule, messageNum, messageParam);
+ } else if (messageNum == 0x4001) {
+ _isKlaymanBusy = true;
+ sendPointMessage(_klayman, 0x4001, _mouseClickPos);
+ } else if (messageNum == 0x100D) {
+ if (this->hasMessageHandler() && sendMessage(this, 0x100D, messageParam) != 0)
+ continue;
+ } else if (messageNum == 0x101A) {
+ _messageListStatus = 0;
+ } else if (messageNum == 0x101B) {
+ _messageListStatus = 2;
+ } else if (messageNum == 0x1020) {
+ _canAcceptInput = false;
+ } else if (messageNum >= 0x2000 && messageNum <= 0x2FFF) {
+ if (this->hasMessageHandler() && sendMessage(this, messageNum, messageParam) != 0) {
+ _isMessageListBusy = false;
+ return;
+ }
+ } else if (messageNum != 0x4003) {
+ _isKlaymanBusy = true;
+ if (_klayman->hasMessageHandler() && sendMessage(_klayman, messageNum, messageParam) != 0) {
+ _isKlaymanBusy = false;
+ }
+ }
if (_messageListIndex == _messageListCount) {
_canAcceptInput = true;
_messageList = NULL;
@@ -538,7 +466,6 @@ void Scene::clearRectList() {
void Scene::loadHitRectList() {
HitRectList *hitRectList = _dataResource.getHitRectList();
- //debug("Scene::loadHitRectList() hitRectList = %p", (void*)hitRectList);
if (hitRectList) {
_hitRectList = *hitRectList;
_vm->_collisionMan->setHitRects(&_hitRectList);
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 21f054e..b531796 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -170,7 +170,7 @@ protected:
int _messageListStatus;
uint _messageListCount;
uint _messageListIndex;
- bool _systemCallbackFlag;
+ bool _doConvertMessages;
bool _canAcceptInput;
bool _isKlaymanBusy;
@@ -189,17 +189,14 @@ protected:
void (Entity::*_savedUpdateHandlerCb)();
uint32 (Entity::*_savedMessageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
- bool _smackerDone;
int _messageValue;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void smackerUpdate();
- uint32 smackerHandleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
bool queryPositionSprite(int16 mouseX, int16 mouseY);
bool queryPositionRectList(int16 mouseX, int16 mouseY);
- void setMessageList(uint32 id, bool canAcceptInput = true, bool systemCallbackFlag = false);
- void setMessageList(MessageList *messageList, bool canAcceptInput = true, bool systemCallbackFlag = false);
- bool setMessageList2(uint32 id, bool canAcceptInput = true, bool systemCallbackFlag = false);
- bool setMessageList2(MessageList *messageList, bool canAcceptInput = true, bool systemCallbackFlag = false);
+ void setMessageList(uint32 id, bool canAcceptInput = true, bool doConvertMessages = false);
+ void setMessageList(MessageList *messageList, bool canAcceptInput = true, bool doConvertMessages = false);
+ bool setMessageList2(uint32 id, bool canAcceptInput = true, bool doConvertMessages = false);
+ bool setMessageList2(MessageList *messageList, bool canAcceptInput = true, bool doConvertMessages = false);
void processMessageList();
void setRectList(uint32 id);
void setRectList(RectList *rectList);
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 7321ddb..352e59e 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -26,7 +26,8 @@
namespace Neverhood {
Screen::Screen(NeverhoodEngine *vm)
- : _vm(vm), _paletteData(NULL), _paletteChanged(false), _smackerDecoder(NULL) {
+ : _vm(vm), _paletteData(NULL), _paletteChanged(false), _smackerDecoder(NULL),
+ _yOffset(0) {
_ticks = _vm->_system->getMillis();
@@ -35,10 +36,12 @@ Screen::Screen(NeverhoodEngine *vm)
_renderQueue = new RenderQueue();
_prevRenderQueue = new RenderQueue();
+ _microTiles = new MicroTileArray(640, 480);
}
Screen::~Screen() {
+ delete _microTiles;
delete _renderQueue;
delete _prevRenderQueue;
_backScreen->free();
@@ -56,16 +59,8 @@ void Screen::update() {
return;
}
- // NOTE This is more or less experimental code for a smart "render queue".
- // It works well so far but needs some optimizing, e.g. reducing overdraw.
- // Maybe I'll use my microtiles code from the Toltecs engine.
- // Also better move this to a separate method or even class.
-
- Common::Array<Common::Rect> updateRects;
+ _microTiles->clear();
- for (RenderQueue::iterator jt = _prevRenderQueue->begin(); jt != _prevRenderQueue->end(); ++jt)
- (*jt)._refresh = true;
-
for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
RenderItem &renderItem = (*it);
renderItem._refresh = true;
@@ -81,27 +76,34 @@ void Screen::update() {
for (RenderQueue::iterator jt = _prevRenderQueue->begin(); jt != _prevRenderQueue->end(); ++jt) {
RenderItem &prevRenderItem = (*jt);
if (prevRenderItem._refresh)
- updateRects.push_back(Common::Rect(prevRenderItem._destX, prevRenderItem._destY, prevRenderItem._destX + prevRenderItem._width, prevRenderItem._destY + prevRenderItem._height));
+ _microTiles->addRect(Common::Rect(prevRenderItem._destX, prevRenderItem._destY, prevRenderItem._destX + prevRenderItem._width, prevRenderItem._destY + prevRenderItem._height));
}
for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
RenderItem &renderItem = (*it);
if (renderItem._refresh)
- updateRects.push_back(Common::Rect(renderItem._destX, renderItem._destY, renderItem._destX + renderItem._width, renderItem._destY + renderItem._height));
+ _microTiles->addRect(Common::Rect(renderItem._destX, renderItem._destY, renderItem._destX + renderItem._width, renderItem._destY + renderItem._height));
+ renderItem._refresh = true;
}
+ RectArray *updateRects = _microTiles->getRectangles();
+
for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
RenderItem &renderItem = (*it);
- for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
+ for (RectArray::iterator ri = updateRects->begin(); ri != updateRects->end(); ++ri)
blitRenderItem(renderItem, *ri);
}
SWAP(_renderQueue, _prevRenderQueue);
_renderQueue->clear();
- for (Common::Array<Common::Rect>::iterator ri = updateRects.begin(); ri != updateRects.end(); ++ri)
- _vm->_system->copyRectToScreen((const byte*)_backScreen->getBasePtr((*ri).left, (*ri).top), _backScreen->pitch, (*ri).left, (*ri).top, (*ri).width(), (*ri).height());
-
+ for (Common::Array<Common::Rect>::iterator ri = updateRects->begin(); ri != updateRects->end(); ++ri) {
+ Common::Rect &r = *ri;
+ _vm->_system->copyRectToScreen((const byte*)_backScreen->getBasePtr(r.left, r.top), _backScreen->pitch, r.left, r.top, r.width(), r.height());
+ }
+
+ delete updateRects;
+
}
uint32 Screen::getNextFrameTime() {
@@ -120,6 +122,14 @@ int Screen::getFps() {
return 1000 / _frameDelay;
}
+void Screen::setYOffset(int16 yOffset) {
+ _yOffset = yOffset;
+}
+
+int16 Screen::getYOffset() {
+ return _yOffset;
+}
+
void Screen::setPaletteData(byte *paletteData) {
_paletteChanged = true;
_paletteData = paletteData;
@@ -194,15 +204,8 @@ void Screen::drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect,
ddRect.y1 = 0;
}
- //debug(2, "draw: x = %d; y = %d; (%d, %d, %d, %d)", destX, destY, ddRect.x1, ddRect.y1, ddRect.x2, ddRect.y2);
-
queueBlit(surface, destX, destY, ddRect, transparent, version, shadowSurface);
- // Useful for debugging
- //_backScreen->frameRect(Common::Rect(clipRect.x1, clipRect.y1, clipRect.x2, clipRect.y2), 250);
- //_backScreen->frameRect(Common::Rect(destX, destY, destX + ddRect.x2, destY + ddRect.y2), 255);
- //_backScreen->frameRect(Common::Rect(drawRect.x, drawRect.y, drawRect.x + drawRect.width, drawRect.y + drawRect.height), 255);
-
}
void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version) {
@@ -240,45 +243,6 @@ void Screen::drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, ND
}
-void Screen::blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent,
- const Graphics::Surface *shadowSurface) {
-
- const byte *source = (const byte*)surface->getBasePtr(ddRect.x1, ddRect.y1);
- byte *dest = (byte*)_backScreen->getBasePtr(destX, destY);
- int width = ddRect.x2 - ddRect.x1;
- int height = ddRect.y2 - ddRect.y1;
-
- if (width <= 0 || height <= 0)
- return;
-
- if (shadowSurface) {
- const byte *shadowSource = (const byte*)shadowSurface->getBasePtr(destX, destY);
- while (height--) {
- for (int xc = 0; xc < width; xc++)
- if (source[xc] != 0)
- dest[xc] = shadowSource[xc];
- source += surface->pitch;
- shadowSource += shadowSurface->pitch;
- dest += _backScreen->pitch;
- }
- } else if (!transparent) {
- while (height--) {
- memcpy(dest, source, width);
- source += surface->pitch;
- dest += _backScreen->pitch;
- }
- } else {
- while (height--) {
- for (int xc = 0; xc < width; xc++)
- if (source[xc] != 0)
- dest[xc] = source[xc];
- source += surface->pitch;
- dest += _backScreen->pitch;
- }
- }
-
-}
-
void Screen::drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect) {
const byte *source = (const byte*)surface->getBasePtr(0, 0);
@@ -377,8 +341,8 @@ void Screen::drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &d
void Screen::queueBlit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent, byte version,
const Graphics::Surface *shadowSurface) {
- int width = ddRect.x2 - ddRect.x1;
- int height = ddRect.y2 - ddRect.y1;
+ const int width = ddRect.x2 - ddRect.x1;
+ const int height = ddRect.y2 - ddRect.y1;
if (width <= 0 || height <= 0)
return;
@@ -406,7 +370,7 @@ void Screen::blitRenderItem(const RenderItem &renderItem, const Common::Rect &cl
const int16 y0 = MAX<int16>(clipRect.top, renderItem._destY);
const int16 x1 = MIN<int16>(clipRect.right, renderItem._destX + renderItem._width);
const int16 y1 = MIN<int16>(clipRect.bottom, renderItem._destY + renderItem._height);
- int16 width = x1 - x0;
+ const int16 width = x1 - x0;
int16 height = y1 - y0;
if (width < 0 || height < 0)
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 4e7618b..33de141 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -27,6 +27,7 @@
#include "graphics/surface.h"
#include "video/smk_decoder.h"
#include "neverhood/neverhood.h"
+#include "neverhood/microtiles.h"
#include "neverhood/graphics.h"
namespace Neverhood {
@@ -64,6 +65,8 @@ public:
uint32 getNextFrameTime();
void setFps(int fps);
int getFps();
+ void setYOffset(int16 yOffset);
+ int16 getYOffset();
void setPaletteData(byte *paletteData);
void unsetPaletteData(byte *paletteData);
byte *getPaletteData() { return _paletteData; }
@@ -75,8 +78,6 @@ public:
const Graphics::Surface *shadowSurface = NULL);
void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version);
void drawShadowSurface(const Graphics::Surface *surface, const Graphics::Surface *shadowSurface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect);
- void blit(const Graphics::Surface *surface, int16 destX, int16 destY, NRect &ddRect, bool transparent,
- const Graphics::Surface *shadowSurface = NULL);
void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect);
void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent, byte version);
void drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent, byte version);
@@ -86,13 +87,14 @@ public:
void blitRenderItem(const RenderItem &renderItem, const Common::Rect &clipRect);
protected:
NeverhoodEngine *_vm;
+ MicroTileArray *_microTiles;
Graphics::Surface *_backScreen;
Video::SmackerDecoder *_smackerDecoder;
int32 _ticks;
int32 _frameDelay;
byte *_paletteData;
bool _paletteChanged;
- //
+ int16 _yOffset;
bool _fullRefresh;
RenderQueue *_renderQueue, *_prevRenderQueue;
};
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index d7a244b..04959b4 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -44,7 +44,6 @@ void SmackerSurface::setSmackerFrame(const Graphics::Surface *smackerFrame) {
_drawRect.y = 0;
_drawRect.width = smackerFrame->w;
_drawRect.height = smackerFrame->h;
- // TODO: Check if _sysRect is needed at all in the reimplementation...
_sysRect.x = 0;
_sysRect.y = 0;
_sysRect.width = (smackerFrame->w + 3) & 0xFFFC; // align by 4 bytes
@@ -66,7 +65,7 @@ void SmackerDoubleSurface::draw() {
// SmackerPlayer
SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag, bool paused)
- : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _dirtyFlag(false), _videoDone(false), _paused(paused),
+ : Entity(vm, 0), _scene(scene), _doubleSurface(doubleSurface), _videoDone(false), _paused(paused),
_palette(NULL), _smackerDecoder(NULL), _smackerSurface(NULL), _stream(NULL), _smackerFirst(true),
_drawX(-1), _drawY(-1) {
@@ -96,8 +95,6 @@ void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
_stream = _vm->_res->createStream(fileHash);
- // TODO: _keepLastFrame stuff
-
_smackerDecoder = new Video::SmackerDecoder();
_smackerDecoder->loadStream(_stream);
@@ -164,11 +161,6 @@ void SmackerPlayer::update() {
if (!_smackerDecoder)
return;
- if (_dirtyFlag) {
- // TODO _vm->_screen->resetDirtyRects();
- _dirtyFlag = false;
- }
-
if (_paused) {
if (_smackerFirst)
updateFrame();
@@ -208,13 +200,6 @@ void SmackerPlayer::updateFrame() {
_smackerFirst = false;
}
- if (_doubleSurface) {
- // TODO
- }
-
- // TODO _vm->_screen->_skipUpdate = true;
- _dirtyFlag = true;
-
if (_smackerDecoder->hasDirtyPalette())
updatePalette();
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index 63c9ebb..b4d8ddb 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -73,7 +73,6 @@ protected:
Common::SeekableReadStream *_stream;
bool _keepLastFrame;
bool _videoDone;
- bool _dirtyFlag;
bool _paused;
int _drawX, _drawY;
void update();
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 18f40dc..52783cc 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -166,7 +166,7 @@ void SoundMan::addMusic(uint32 nameHash, uint32 musicFileHash) {
musicItem->_countdown = 24;
musicItem->_musicResource = new MusicResource(_vm);
musicItem->_musicResource->load(musicFileHash);
- _musicItems.push_back(musicItem);
+ addMusicItem(musicItem);
}
void SoundMan::deleteMusic(uint32 musicFileHash) {
@@ -203,7 +203,7 @@ void SoundMan::stopMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolume
void SoundMan::addSound(uint32 nameHash, uint32 soundFileHash) {
SoundItem *soundItem = new SoundItem(_vm, nameHash, soundFileHash, false, 50, 600, false, 0, false, 0);
- _soundItems.push_back(soundItem);
+ addSoundItem(soundItem);
}
void SoundMan::addSoundList(uint32 nameHash, const uint32 *soundFileHashList) {
@@ -337,8 +337,6 @@ void SoundMan::deleteMusicGroup(uint32 nameHash) {
void SoundMan::deleteSoundGroup(uint32 nameHash) {
- SoundItem *soundItem;
-
if (_soundIndex1 != -1 && _soundItems[_soundIndex1]->_nameHash == nameHash) {
deleteSoundByIndex(_soundIndex1);
_soundIndex1 = -1;
@@ -349,13 +347,9 @@ void SoundMan::deleteSoundGroup(uint32 nameHash) {
_soundIndex2 = -1;
}
- for (uint index = 0; index < _soundItems.size(); ++index) {
- soundItem = _soundItems[index];
- if (soundItem && soundItem->_nameHash == nameHash) {
- delete soundItem;
- _soundItems[index] = NULL;
- }
- }
+ for (uint index = 0; index < _soundItems.size(); ++index)
+ if (_soundItems[index] && _soundItems[index]->_nameHash == nameHash)
+ deleteSoundByIndex(index);
}
@@ -384,16 +378,14 @@ void SoundMan::playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soun
soundItem = new SoundItem(_vm, nameHash, soundFileHash1, false, 0, 0,
_playOnceAfterCountdown, _initialCountdown, false, currCountdown1);
soundItem->_soundResource->setVolume(80);
- _soundIndex1 = _soundItems.size();
- _soundItems.push_back(soundItem);
+ _soundIndex1 = addSoundItem(soundItem);
}
if (soundFileHash2 != 0) {
soundItem = new SoundItem(_vm, nameHash, soundFileHash2, false, 0, 0,
_playOnceAfterCountdown, _initialCountdown, false, currCountdown2);
soundItem->_soundResource->setVolume(80);
- _soundIndex2 = _soundItems.size();
- _soundItems.push_back(soundItem);
+ _soundIndex2 = addSoundItem(soundItem);
}
}
@@ -410,8 +402,7 @@ void SoundMan::playSoundThree(uint32 nameHash, uint32 soundFileHash) {
if (soundFileHash != 0) {
soundItem = new SoundItem(_vm, nameHash, soundFileHash, false, 0, 0,
false, _initialCountdown3, false, 0);
- _soundIndex3 = _soundItems.size();
- _soundItems.push_back(soundItem);
+ _soundIndex3 = addSoundItem(soundItem);
}
}
@@ -445,15 +436,26 @@ SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
}
int16 SoundMan::addMusicItem(MusicItem *musicItem) {
- return 0; // TODO
+#if 0
+ for (uint i = 0; i < _musicItems.size(); ++i)
+ if (!_musicItems[i]) {
+ _musicItems[i] = musicItem;
+ return i;
+ }
+#endif
+ int16 musicIndex = _musicItems.size();
+ _musicItems.push_back(musicItem);
+ return musicIndex;
}
int16 SoundMan::addSoundItem(SoundItem *soundItem) {
+#if 0
for (uint i = 0; i < _soundItems.size(); ++i)
if (!_soundItems[i]) {
_soundItems[i] = soundItem;
return i;
}
+#endif
int16 soundIndex = _soundItems.size();
_soundItems.push_back(soundItem);
return soundIndex;
@@ -541,6 +543,8 @@ int16 AudioResourceMan::addSound(uint32 fileHash) {
void AudioResourceMan::removeSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
+ _vm->_mixer->stopHandle(soundItem->_soundHandle);
if (soundItem->_data) {
_vm->_res->unloadResource(soundItem->_resourceHandle);
soundItem->_data = NULL;
@@ -549,8 +553,6 @@ void AudioResourceMan::removeSound(int16 soundIndex) {
_vm->_res->unuseResource(soundItem->_resourceHandle);
soundItem->_resourceHandle = -1;
}
- if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
- _vm->_mixer->stopHandle(soundItem->_soundHandle);
delete soundItem;
_soundItems[soundIndex] = NULL;
}
@@ -565,6 +567,8 @@ void AudioResourceMan::loadSound(int16 soundIndex) {
void AudioResourceMan::unloadSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
+ if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
+ _vm->_mixer->stopHandle(soundItem->_soundHandle);
if (soundItem->_data) {
_vm->_res->unloadResource(soundItem->_resourceHandle);
soundItem->_data = NULL;
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index d034783..1e73078 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/sprite.h"
+#include "neverhood/screen.h"
namespace Neverhood {
@@ -74,13 +75,6 @@ bool Sprite::checkCollision(NRect &rect) {
}
uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x0005:
- // TODO: Draw debug marker (?)
- // TODO g_Screen->drawLine(_x - 5, _y, _x + 6, _y);
- // TODO g_Screen->drawLine(_x, _y - 5, _x, _y + 6);
- break;
- }
return 0;
}
@@ -93,8 +87,7 @@ void Sprite::createSurface(int surfacePriority, int16 width, int16 height) {
}
int16 Sprite::defFilterY(int16 y) {
- // TODO return y - g_screen->field_26;
- return y;
+ return y - _vm->_screen->getYOffset();
}
void Sprite::setClipRect(int16 x1, int16 y1, int16 x2, int16 y2) {
Commit: 325c85fc41dd6a0dbf8050ef3e39fe8c91d8966a
https://github.com/scummvm/scummvm/commit/325c85fc41dd6a0dbf8050ef3e39fe8c91d8966a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Fix Klaymen in Scene1403 (*facepalm*)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1400.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index be4f5d3..1d01cdd 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -373,7 +373,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 0;
+ _vm->gameState().sceneNum = 2;
createModule(1400, -1);
#endif
#if 0
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index db3acb6..e0cf2c5 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -1300,11 +1300,11 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
// Restoring game
- insertKlayman<KmScene1402>(380, 463);
+ insertKlayman<KmScene1403>(380, 463);
setMessageList(0x004B1F18);
} else {
// Klaymen entering from the right
- insertKlayman<KmScene1402>(640, 463);
+ insertKlayman<KmScene1403>(640, 463);
setMessageList(0x004B1F20);
}
_klayman->setRepl(64, 0);
Commit: 370f00e808a907f940169ce28e4c391e45b4c2f0
https://github.com/scummvm/scummvm/commit/370f00e808a907f940169ce28e4c391e45b4c2f0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: New _sceneNum in Module2800
- Very slightly improved the speed in SmackerPlayer::gotoFrame()
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
engines/neverhood/smackerplayer.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1d01cdd..bd671ee 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -373,8 +373,8 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 2;
- createModule(1400, -1);
+ _vm->gameState().sceneNum = 1;
+ createModule(2800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index c42e033..6500ae0 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -59,13 +59,15 @@ Module2800::~Module2800() {
void Module2800::createScene(int sceneNum, int which) {
debug("Module2800::createScene(%d, %d)", sceneNum, which);
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
_childObject = new Scene2801(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0);
if (getGlobalVar(V_RADIO_ENABLED))
_childObject = new Scene2802(_vm, this, which);
@@ -73,101 +75,124 @@ void Module2800::createScene(int sceneNum, int which) {
createStaticScene(0x000C6444, 0xC6440008);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
- //setGlobalVar(V_KLAYMAN_SMALL,1);//DEBUG
if (getGlobalVar(V_KLAYMAN_SMALL))
_childObject = new Scene2803Small(_vm, this, which);
else
_childObject = new Scene2803(_vm, this, which);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_childObject = new Scene2804(_vm, this, which);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->stopMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2805(_vm, this, which);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2806(_vm, this, which);
break;
case 6:
+ _vm->gameState().sceneNum = 6;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2807(_vm, this, which);
break;
case 7:
+ _vm->gameState().sceneNum = 7;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2808(_vm, this, 0);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2809(_vm, this, which);
break;
case 9:
+ _vm->gameState().sceneNum = 9;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2810(_vm, this, which);
break;
case 10:
+ _vm->gameState().sceneNum = 10;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2808(_vm, this, 1);
break;
case 11:
+ _vm->gameState().sceneNum = 11;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2812(_vm, this, which);
break;
case 12:
+ _vm->gameState().sceneNum = 12;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x0000A245, 0x0A241008);
break;
case 13:
+ _vm->gameState().sceneNum = 13;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x81C60635, 0x60631814);
break;
case 14:
+ _vm->gameState().sceneNum = 14;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0xCA811204, 0x11200CA0);
break;
case 15:
+ _vm->gameState().sceneNum = 15;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x2D438A00, 0x38A042DC);
break;
case 16:
+ _vm->gameState().sceneNum = 16;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x0A806204, 0x062000A0);
break;
case 17:
+ _vm->gameState().sceneNum = 17;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x010F9284, 0xF9280018);
break;
case 18:
+ _vm->gameState().sceneNum = 18;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x0100022B, 0x0022F018);
break;
case 19:
+ _vm->gameState().sceneNum = 19;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x10866205, 0x66201100);
break;
case 20:
+ _vm->gameState().sceneNum = 20;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x01C58000, 0x58004014);
break;
case 21:
+ _vm->gameState().sceneNum = 21;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new Scene2822(_vm, this, which);
break;
case 22:
+ _vm->gameState().sceneNum = 22;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x9408121E, 0x8121A948);
break;
case 23:
+ _vm->gameState().sceneNum = 23;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x048C0600, 0xC0604040);
break;
case 24:
+ _vm->gameState().sceneNum = 24;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
createStaticScene(0x04270A94, 0x70A9004A);
break;
case 25:
+ _vm->gameState().sceneNum = 25;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
if (getGlobalVar(V_SHRINK_LIGHTS_ON))
createStaticScene(0x01600204, 0x0020001E);
@@ -175,6 +200,7 @@ void Module2800::createScene(int sceneNum, int which) {
createStaticScene(0x08611204, 0x1120008E);
break;
case 26:
+ _vm->gameState().sceneNum = 26;
_vm->_soundMan->startMusic(0xD2FA4D14, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 4);
break;
@@ -189,7 +215,7 @@ void Module2800::createScene(int sceneNum, int which) {
void Module2800::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
if (_moduleResult != 2) {
if (_musicResource) {
@@ -359,7 +385,7 @@ void Module2800::updateScene() {
break;
}
} else {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
updateMusic(true);
break;
@@ -402,6 +428,9 @@ void Module2800::updateMusic(bool halfVolume) {
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
+ Sprite *_sprite1;
+ Sprite *_sprite2;
+
_vm->gameModule()->initRadioPuzzle();
SetMessageHandler(&Scene2801::handleMessage);
@@ -586,7 +615,7 @@ void Scene2802::update() {
changeTuneStatus(prevTuneStatus, _currTuneStatus);
//DEBUG>>>
- debug("_currRadioMusicIndex = %d; V_GOOD_RADIO_MUSIC_INDEX = %d", _currRadioMusicIndex, getGlobalVar(V_GOOD_RADIO_MUSIC_INDEX));
+ //debug("_currRadioMusicIndex = %d; V_GOOD_RADIO_MUSIC_INDEX = %d", _currRadioMusicIndex, getGlobalVar(V_GOOD_RADIO_MUSIC_INDEX));
//DEBUG<<<
if (getGlobalVar(V_RADIO_MOVE_DISH_VIDEO) && prevTuneStatus != _currTuneStatus && _currRadioMusicIndex != 0) {
@@ -1990,8 +2019,6 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[1].x1 = _sprite4->getDrawRect().x;
_clipRects[1].y1 = _sprite4->getDrawRect().y;
- _fieldEC = true;
-
tempSprite = insertStaticSprite(0xD2012C02, 1100);
_clipRects[2].x1 = tempSprite->getDrawRect().x;
_clipRects[2].y2 = tempSprite->getDrawRect().y2();
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index bdcb1ee..1dd7bca 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -36,7 +36,7 @@ public:
Module2800(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2800();
protected:
- bool _flag;
+ int _sceneNum;
uint32 _currentMusicFileHash;
MusicResource *_musicResource;
void createScene(int sceneNum, int which);
@@ -49,8 +49,6 @@ public:
Scene2801(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Scene2801();
protected:
- Sprite *_sprite1;
- Sprite *_sprite2;
Sprite *_asTape;
uint32 _paletteHash;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -301,7 +299,6 @@ protected:
NPointArray *_pointList;
int _pointIndex;
NRect _clipRects[4];
- bool _fieldEC;
Sprite *_sprite1;
Sprite *_sprite2;
Sprite *_sprite3;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 04959b4..85319dc 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -111,7 +111,7 @@ void SmackerPlayer::close() {
_smackerDecoder->stop();
delete _smackerDecoder;
delete _palette;
- // NOTE: The SmackerDecoder deletes the _stream
+ // NOTE The SmackerDecoder deletes the _stream
delete _smackerSurface;
_smackerDecoder = NULL;
_palette = NULL;
@@ -125,7 +125,7 @@ void SmackerPlayer::gotoFrame(int frameNumber) {
if (frameNumber < _smackerDecoder->getCurFrame())
rewind();
while (_smackerDecoder->getCurFrame() != frameNumber)
- updateFrame();
+ _smackerDecoder->decodeNextFrame();
}
}
@@ -199,7 +199,7 @@ void SmackerPlayer::updateFrame() {
_smackerSurface->getDrawRect().y = _drawY;
_smackerFirst = false;
}
-
+
if (_smackerDecoder->hasDirtyPalette())
updatePalette();
Commit: 1b9807b312172b0cb31b2eb83b8afc5fd23f97f5
https://github.com/scummvm/scummvm/commit/1b9807b312172b0cb31b2eb83b8afc5fd23f97f5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Remove more old comments
- Add the remaining idle stuff to Klayman
Changed paths:
engines/neverhood/diskplayerscene.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module1800.cpp
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 572074b..d6d4de1 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -25,8 +25,6 @@
namespace Neverhood {
-// TODO: Maybe move hash tables into neverhood.dat
-
static const uint32 kDiskplayerPaletteFileHashes[] = {
0x03B78240,
0x34B32B08,
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index bd671ee..956d969 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -373,8 +373,9 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 1;
- createModule(2800, -1);
+ _vm->gameState().sceneNum = 4;
+ _vm->gameState().which = 1;
+ createModule(1800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 81cec9f..2a8f543 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -34,7 +34,6 @@ BaseSurface::BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 h
_drawRect.y = 0;
_drawRect.width = width;
_drawRect.height = height;
- // TODO: Check if _sysRect is needed at all in the reimplementation...
_sysRect.x = 0;
_sysRect.y = 0;
_sysRect.width = (width + 3) & 0xFFFC; // align by 4 bytes
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 782c376..9673adc 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -53,6 +53,11 @@ static const KlaymanIdleTableItem klaymanTable4[] = {
{1, &Klayman::stDoIdleHeadOff},
};
+static const KlaymanIdleTableItem klaymanIdleTable1002[] = {
+ {1, &Klayman::stDoIdlePickEar},
+ {2, &Klayman::stIdleWonderAbout}
+};
+
// Klayman
Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
@@ -268,6 +273,16 @@ uint32 Klayman::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
+void Klayman::stIdleWonderAbout() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::stStandAround);
+}
+
void Klayman::stSitIdleTeleporter() {
_status2 = 0;
_acceptInput = true;
@@ -3421,7 +3436,7 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
void KmScene1002::xUpdate() {
if (_x >= 250 && _x <= 435 && _y >= 420) {
if (_idleTableNum == 0) {
- // TODO setKlaymanIdleTable(stru_4B44C8);
+ setKlaymanIdleTable(klaymanIdleTable1002, ARRAYSIZE(klaymanIdleTable1002));
_idleTableNum = 1;
}
} else if (_idleTableNum == 1) {
@@ -3670,7 +3685,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // TODO setKlaymanIdleTable(dword_4AEF10, 3);
+ setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
_flagF6 = true;
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index ab2c523..443bb97 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -77,6 +77,8 @@ public:
void stIdleHeadOff();
uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stIdleWonderAbout();
+
void stDoIdleTeleporterHands();
void stIdleTeleporterHands();
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index 30bffb9..dc5f942 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -163,7 +163,6 @@ void Module1800::updateScene() {
case 8:
// NOTE: After Klayman jumped into the hole and died...
leaveModule(1);
- // TODO GameState stuff // Restarts the game?
break;
case 1009:
leaveModule(0);
Commit: cc015e3d24d15dc0c3532063927fd40e2329f43e
https://github.com/scummvm/scummvm/commit/cc015e3d24d15dc0c3532063927fd40e2329f43e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Simplify resource loading
- Renamne and clean up
Changed paths:
engines/neverhood/blbarchive.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/module1000.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2700.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/resourceman.cpp
engines/neverhood/resourceman.h
engines/neverhood/smackerscene.cpp
engines/neverhood/sound.cpp
engines/neverhood/sound.h
engines/neverhood/sprite.cpp
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 5551ff0..02fad55 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -73,7 +73,7 @@ void BlbArchive::open(const Common::String &filename) {
if (header.id1 != 0x2004940 || header.id2 != 7 || header.fileSize != _fd.size())
error("BlbArchive::open() %s seems to be corrupt", filename.c_str());
- debug(2, "%s: fileCount = %d", filename.c_str(), header.fileCount);
+ debug(4, "%s: fileCount = %d", filename.c_str(), header.fileCount);
_entries.reserve(header.fileCount);
@@ -98,7 +98,7 @@ void BlbArchive::open(const Common::String &filename) {
entry.offset = _fd.readUint32LE();
entry.diskSize = _fd.readUint32LE();
entry.size = _fd.readUint32LE();
- debug(2, "%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
+ debug(4, "%08X: %03d, %02X, %04X, %08X, %08X, %08X, %08X",
entry.fileHash, entry.type, entry.comprType, extDataOffsets[i], entry.timeStamp,
entry.offset, entry.diskSize, entry.size);
}
@@ -131,11 +131,8 @@ void BlbArchive::load(BlbArchiveEntry *entry, byte *buffer, uint32 size) {
_fd.read(buffer, size);
break;
case 3: // DCL-compressed
- if (!Common::decompressDCL(&_fd, buffer, entry->diskSize, entry->size)) {
- debug("decompressDCL(diskSize: %d; size: %d)", entry->diskSize, entry->size);
- debug("-> fileHash: %08X; type: %d; offset: %08X; endOffset: %08X", entry->fileHash, entry->type, entry->offset, entry->offset + entry->diskSize);
- debug("-> fd.pos() = %08X", _fd.pos());
- }
+ if (!Common::decompressDCL(&_fd, buffer, entry->diskSize, entry->size))
+ error("BlbArchive::load() Error during decompression of %=8X", entry->fileHash);
break;
default:
error("BlbArchive::load() Unknown compression type %d", entry->comprType);
@@ -148,7 +145,6 @@ byte *BlbArchive::getEntryExtData(uint index) {
}
byte *BlbArchive::getEntryExtData(BlbArchiveEntry *entry) {
- //return (_extData && entry->extDataOfs != 0) ? &_extData[entry->extDataOfs - 1] : NULL;
return entry->extData;
}
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 956d969..e6f38f0 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -375,7 +375,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().sceneNum = 4;
_vm->gameState().which = 1;
- createModule(1800, -1);
+ createModule(1000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 2a8f543..3b456a5 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -150,7 +150,7 @@ void ShadowSurface::draw() {
// FontSurface
-FontSurface::FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
+FontSurface::FontSurface(NeverhoodEngine *vm, NPointArray &tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
: BaseSurface(vm, 0, charWidth * 16, charHeight * numRows), _tracking(tracking), _numRows(numRows), _firstChar(firstChar),
_charWidth(charWidth), _charHeight(charHeight) {
}
@@ -168,7 +168,7 @@ void FontSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr)
void FontSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string) {
for (; *string != 0; string++) {
drawChar(destSurface, x, y, *string);
- x += (*_tracking)[*string - _firstChar].x;
+ x += _tracking[*string - _firstChar].x;
}
}
@@ -216,7 +216,7 @@ enum BitmapFlags {
BF_HAS_IMAGE = 16
};
-void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels) {
+void parseBitmapResource(const byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, const byte **palette, const byte **pixels) {
uint16 flags;
@@ -263,7 +263,7 @@ void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoin
}
-void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY, byte oldColor, byte newColor) {
+void unpackSpriteRle(const byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY, byte oldColor, byte newColor) {
const bool replaceColors = oldColor != newColor;
@@ -313,7 +313,7 @@ void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPi
}
-void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
+void unpackSpriteNormal(const byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
// TODO: Flip Y
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index b528690..65d25c0 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -131,11 +131,11 @@ protected:
class FontSurface : public BaseSurface {
public:
- FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
+ FontSurface(NeverhoodEngine *vm, NPointArray &tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string);
protected:
- NPointArray *_tracking;
+ NPointArray _tracking;
uint16 _numRows;
byte _firstChar;
uint16 _charWidth;
@@ -162,9 +162,9 @@ protected:
// Misc
-void parseBitmapResource(byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, byte **palette, byte **pixels);
-void unpackSpriteRle(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY, byte oldColor = 0, byte newColor = 0);
-void unpackSpriteNormal(byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
+void parseBitmapResource(const byte *sprite, bool *rle, NDimensions *dimensions, NPoint *position, const byte **palette, const byte **pixels);
+void unpackSpriteRle(const byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY, byte oldColor = 0, byte newColor = 0);
+void unpackSpriteNormal(const byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY);
int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2);
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index c7c3fb2..caa4466 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1597,7 +1597,7 @@ FontSurface *Scene1005::createFontSurface() {
uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
- fontSurface = new FontSurface(_vm, tracking, numRows, firstChar, charWidth, charHeight);
+ fontSurface = new FontSurface(_vm, *tracking, numRows, firstChar, charWidth, charHeight);
if (getGlobalVar(V_ENTRANCE_OPEN)) {
fontSprite.load2(0x283CE401);
} else {
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 8a7e346..8061e97 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2242,7 +2242,7 @@ void Scene2208::createFontSurface() {
uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
spriteResource.load2(0x0800090C);
- _fontSurface = new FontSurface(_vm, tracking, numRows, firstChar, charWidth, charHeight);
+ _fontSurface = new FontSurface(_vm, *tracking, numRows, firstChar, charWidth, charHeight);
_fontSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 9a8a2f9..50b4b24 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -185,7 +185,7 @@ void Module2700::createScene(int sceneNum, int which) {
case 10:
_vm->gameState().sceneNum = 10;
_vm->gameState().which = which;
- // TODO _vm->gameModule()->initScene2808Vars2();
+ _vm->gameModule()->initTestTubes2Puzzle();
_scene2711StaticSprites[0] = kScene2711FileHashes1[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 2)];
_scene2711StaticSprites[1] = kScene2711FileHashes2[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 1)];
_scene2711StaticSprites[2] = kScene2711FileHashes3[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 0)];
@@ -631,8 +631,8 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x1E086325, 1200);
clipRect.set(0, 0, 640, tempSprite->getDrawRect().y2());
- if (sceneInfo->class437Filename) {
- _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
+ if (sceneInfo->bgShadowFilename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -898,8 +898,8 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_palStatus = 2;
- if (sceneInfo->class437Filename) {
- _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
+ if (sceneInfo->bgShadowFilename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -1017,8 +1017,8 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
insertMouse433(sceneInfo->mouseCursorFilename);
- if (sceneInfo->class437Filename) {
- _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->class437Filename);
+ if (sceneInfo->bgShadowFilename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index 8e167dd..ffaa802 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -157,7 +157,6 @@ void NavigationScene::handleNavigation(const NPoint &mousePos) {
uint32 direction = sendPointMessage(_mouseCursor, 0x2064, mousePos);
switch (direction) {
- // TODO: Merge cases 0 and 1?
case 0:
if (navigationItem.leftSmackerFileHash != 0) {
_smackerFileHash = navigationItem.leftSmackerFileHash;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 208a157..c29cc7b 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -214,7 +214,7 @@ void writeTga(const char *filename, byte *pixels, byte *palette, int16 width, in
}
void NeverhoodEngine::dumpAllResources() {
-
+#if 0
PaletteResource paletteResource(this);
byte *vgaPalette = new byte[768];
//paletteResource.load(0x4086520E);
@@ -258,7 +258,7 @@ void NeverhoodEngine::dumpAllResources() {
}
delete[] vgaPalette;
-
+#endif
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 1246472..64f1061 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -20,6 +20,7 @@
*
*/
+#include "common/algorithm.h"
#include "common/memstream.h"
#include "neverhood/resource.h"
#include "neverhood/resourceman.h"
@@ -33,7 +34,7 @@ namespace Neverhood {
// SpriteResource
SpriteResource::SpriteResource(NeverhoodEngine *vm)
- : _vm(vm), _resourceHandle(-1), _pixels(NULL) {
+ : _vm(vm), _pixels(NULL) {
}
SpriteResource::~SpriteResource() {
@@ -53,43 +54,30 @@ bool SpriteResource::load(uint32 fileHash) {
debug(2, "SpriteResource::load(%08X)", fileHash);
// TODO: Later merge with load2 and make the mode a parameter
unload();
- _resourceHandle = _vm->_res->useResource(fileHash);
- debug(2, "SpriteResource::load(0x%08X) _resourceHandle = %d", fileHash, _resourceHandle);
- if (_resourceHandle != -1) {
- if (_vm->_res->getResourceType(_resourceHandle) == 2) {
- byte *spriteData = _vm->_res->loadResource(_resourceHandle, true);
- parseBitmapResource(spriteData, &_rle, &_dimensions, NULL, NULL, &_pixels);
- } else {
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- }
+ _vm->_res->queryResource(fileHash, _resourceHandle);
+ if (_resourceHandle.isValid() && _resourceHandle.type() == 2) {
+ _vm->_res->loadResource(_resourceHandle);
+ const byte *spriteData = _resourceHandle.data();
+ parseBitmapResource(spriteData, &_rle, &_dimensions, NULL, NULL, &_pixels);
}
return _pixels != NULL;
}
bool SpriteResource::load2(uint32 fileHash) {
+ debug(2, "SpriteResource::load2(%08X)", fileHash);
unload();
- _resourceHandle = _vm->_res->useResource(fileHash);
- if (_resourceHandle != -1) {
- if (_vm->_res->getResourceType(_resourceHandle) == 2) {
- byte *spriteData = _vm->_res->loadResource(_resourceHandle, true);
- parseBitmapResource(spriteData, &_rle, &_dimensions, &_position, NULL, &_pixels);
- } else {
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- }
+ _vm->_res->queryResource(fileHash, _resourceHandle);
+ if (_resourceHandle.isValid() && _resourceHandle.type() == 2) {
+ _vm->_res->loadResource(_resourceHandle);
+ const byte *spriteData = _resourceHandle.data();
+ parseBitmapResource(spriteData, &_rle, &_dimensions, &_position, NULL, &_pixels);
}
return _pixels != NULL;
}
void SpriteResource::unload() {
- if (_resourceHandle != -1) {
- _vm->_res->unloadResource(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- } else {
- delete[] _pixels;
- }
+ _vm->_res->unloadResource(_resourceHandle);
+ delete[] _pixels;
_pixels = NULL;
_rle = false;
}
@@ -97,7 +85,7 @@ void SpriteResource::unload() {
// PaletteResource
PaletteResource::PaletteResource(NeverhoodEngine *vm)
- : _vm(vm), _resourceHandle(-1), _palette(NULL) {
+ : _vm(vm), _palette(NULL) {
}
PaletteResource::~PaletteResource() {
@@ -107,33 +95,22 @@ PaletteResource::~PaletteResource() {
bool PaletteResource::load(uint32 fileHash) {
debug(2, "PaletteResource::load(%08X)", fileHash);
unload();
- _resourceHandle = _vm->_res->useResource(fileHash);
- if (_resourceHandle != -1) {
- _palette = _vm->_res->loadResource(_resourceHandle, true);
- switch (_vm->_res->getResourceType(_resourceHandle)) {
- case 2:
- // Palette is stored in a bitmap
+ _vm->_res->queryResource(fileHash, _resourceHandle);
+ if (_resourceHandle.isValid() &&
+ (_resourceHandle.type() == 2 || _resourceHandle.type() == 3)) {
+ _vm->_res->loadResource(_resourceHandle);
+ _palette = _resourceHandle.data();
+ // Check if the palette is stored in a bitmap
+ if (_resourceHandle.type() == 2)
parseBitmapResource(_palette, NULL, NULL, NULL, &_palette, NULL);
- break;
- case 3:
- // _palette already points to the correct data
- break;
- default:
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- break;
- }
- }
+
+ }
return _palette != NULL;
}
void PaletteResource::unload() {
- if (_resourceHandle != -1) {
- _vm->_res->unloadResource(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- _palette = NULL;
- }
+ _vm->_res->unloadResource(_resourceHandle);
+ _palette = NULL;
}
void PaletteResource::copyPalette(byte *destPalette) {
@@ -147,14 +124,12 @@ void PaletteResource::copyPalette(byte *destPalette) {
// AnimResource
AnimResource::AnimResource(NeverhoodEngine *vm)
- : _vm(vm), _width(0), _height(0), _currSpriteData(NULL) {
-
- clear();
- clear2();
+ : _vm(vm), _width(0), _height(0), _currSpriteData(NULL), _fileHash(0), _paletteData(NULL),
+ _spriteData(NULL), _replEnabled(false), _replOldColor(0), _replNewColor(0) {
}
AnimResource::~AnimResource() {
- unloadInternal();
+ unload();
}
void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX, bool flipY) {
@@ -175,27 +150,18 @@ bool AnimResource::load(uint32 fileHash) {
return true;
unload();
- _resourceHandle = _vm->_res->useResource(fileHash);
- if (_resourceHandle == -1)
+
+ _vm->_res->queryResource(fileHash, _resourceHandle);
+ if (!_resourceHandle.isValid() || _resourceHandle.type() != 4)
return false;
- byte *resourceData, *animList, *frameList;
+ const byte *resourceData, *animList, *frameList;
uint16 animInfoStartOfs, animListIndex, animListCount;
uint16 frameListStartOfs, frameCount;
uint32 spriteDataOfs, paletteDataOfs;
- if (_vm->_res->getResourceType(_resourceHandle) != 4) {
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- return false;
- }
-
- resourceData = _vm->_res->loadResource(_resourceHandle);
- if (!resourceData) {
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- return false;
- }
+ _vm->_res->loadResource(_resourceHandle);
+ resourceData = _resourceHandle.data();
animListCount = READ_LE_UINT16(resourceData);
animInfoStartOfs = READ_LE_UINT16(resourceData + 2);
@@ -212,8 +178,6 @@ bool AnimResource::load(uint32 fileHash) {
if (animListIndex >= animListCount) {
_vm->_res->unloadResource(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
return false;
}
@@ -257,44 +221,22 @@ bool AnimResource::load(uint32 fileHash) {
}
_fileHash = fileHash;
-
+
return true;
}
void AnimResource::unload() {
- if (_resourceHandle != -1) {
- _vm->_res->unloadResource(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- clear();
- }
-}
-
-void AnimResource::clear() {
- _resourceHandle = -1;
+ _vm->_res->unloadResource(_resourceHandle);
_currSpriteData = NULL;
_fileHash = 0;
_paletteData = NULL;
_spriteData = NULL;
-}
-
-void AnimResource::clear2() {
- clear();
_replEnabled = true;
_replOldColor = 0;
_replNewColor = 0;
}
-bool AnimResource::loadInternal(uint32 fileHash) {
- unloadInternal();
- return load(fileHash);
-}
-
-void AnimResource::unloadInternal() {
- unload();
- clear2();
-}
-
int16 AnimResource::getFrameIndex(uint32 frameHash) {
int16 frameIndex = -1;
for (uint i = 0; i < _frames.size(); i++)
@@ -312,8 +254,10 @@ void AnimResource::setRepl(byte oldColor, byte newColor) {
}
NDimensions AnimResource::loadSpriteDimensions(uint32 fileHash) {
+ ResourceHandle resourceHandle;
NDimensions dimensions;
- byte *resDimensions = _vm->_res->getResourceExtDataByHash(fileHash);
+ _vm->_res->queryResource(fileHash, resourceHandle);
+ const byte *resDimensions = resourceHandle.extData();
if (resDimensions) {
dimensions.width = READ_LE_UINT16(resDimensions + 0);
dimensions.height = READ_LE_UINT16(resDimensions + 2);
@@ -368,7 +312,7 @@ NDrawRect& MouseCursorResource::getRect() {
void MouseCursorResource::draw(int frameNum, byte *dest, int destPitch) {
if (_cursorSprite.getPixels()) {
int sourcePitch = (_cursorSprite.getDimensions().width + 3) & 0xFFFC; // 4 byte alignment
- byte *source = _cursorSprite.getPixels() + _cursorNum * (sourcePitch * 32) + frameNum * 32;
+ const byte *source = _cursorSprite.getPixels() + _cursorNum * (sourcePitch * 32) + frameNum * 32;
for (int16 yc = 0; yc < 32; yc++) {
memcpy(dest, source, 32);
source += sourcePitch;
@@ -380,7 +324,7 @@ void MouseCursorResource::draw(int frameNum, byte *dest, int destPitch) {
// TextResource
TextResource::TextResource(NeverhoodEngine *vm)
- : _vm(vm), _resourceHandle(-1), _textData(NULL), _count(0) {
+ : _vm(vm), _textData(NULL), _count(0) {
}
@@ -389,38 +333,20 @@ TextResource::~TextResource() {
}
void TextResource::load(uint32 fileHash) {
+ debug(2, "TextResource::load(%08X)", fileHash);
unload();
- _resourceHandle = _vm->_res->useResource(fileHash);
- if (_resourceHandle != -1) {
- if (_vm->_res->getResourceType(_resourceHandle) == 6) {
- _textData = _vm->_res->loadResource(_resourceHandle, true);
- _count = READ_LE_UINT32(_textData);
-
- debug("TEXT RESOURCE %08X, count = %d:", fileHash, _count);
- for (uint i = 0; i < _count-1; i++) {
- const char *textEnd, *text = getString(i, textEnd);
- while (text < textEnd) {
- debug("[%04d] [%s]", i, text);
- text += strlen(text) + 1;
- }
- debug("------------------");
- }
-
- } else {
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- }
+ _vm->_res->queryResource(fileHash, _resourceHandle);
+ if (_resourceHandle.isValid() && _resourceHandle.type() == 6) {
+ _vm->_res->loadResource(_resourceHandle);
+ _textData = _resourceHandle.data();
+ _count = READ_LE_UINT32(_textData);
}
}
void TextResource::unload() {
- if (_resourceHandle != -1) {
- _vm->_res->unloadResource(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- _textData = NULL;
- _count = 0;
- }
+ _vm->_res->unloadResource(_resourceHandle);
+ _textData = NULL;
+ _count = 0;
}
const char *TextResource::getString(uint index, const char *&textEnd) {
@@ -432,7 +358,7 @@ const char *TextResource::getString(uint index, const char *&textEnd) {
// DataResource
DataResource::DataResource(NeverhoodEngine *vm)
- : _vm(vm), _resourceHandle(-1) {
+ : _vm(vm) {
}
DataResource::~DataResource() {
@@ -441,18 +367,14 @@ DataResource::~DataResource() {
void DataResource::load(uint32 fileHash) {
debug(2, "DataResource::load(%08X)", fileHash);
- byte *data = NULL;
+ const byte *data = NULL;
uint32 dataSize = 0;
unload();
- _resourceHandle = _vm->_res->useResource(fileHash);
- if (_resourceHandle != -1) {
- if (_vm->_res->getResourceType(_resourceHandle) == 5) {
- data = _vm->_res->loadResource(_resourceHandle, true);
- dataSize = _vm->_res->getResourceSize(_resourceHandle);
- } else {
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- }
+ _vm->_res->queryResource(fileHash, _resourceHandle);
+ if (_resourceHandle.isValid() && _resourceHandle.type() == 5) {
+ _vm->_res->loadResource(_resourceHandle);
+ data = _resourceHandle.data();
+ dataSize = _resourceHandle.size();
}
if (data && dataSize) {
Common::MemoryReadStream dataS(data, dataSize);
@@ -588,40 +510,45 @@ void DataResource::load(uint32 fileHash) {
}
void DataResource::unload() {
- if (_resourceHandle != -1) {
- _vm->_res->unloadResource(_resourceHandle);
- _vm->_res->unuseResource(_resourceHandle);
- _resourceHandle = -1;
- // TODO: Clear arrays
- }
+ _vm->_res->unloadResource(_resourceHandle);
+ _directory.clear();
+ _points.clear();
+ for (Common::Array<NPointArray*>::iterator it = _pointArrays.begin(); it != _pointArrays.end(); ++it)
+ delete (*it);
+ _pointArrays.clear();
+ for (Common::Array<NRectArray*>::iterator it = _rectArrays.begin(); it != _rectArrays.end(); ++it)
+ delete (*it);
+ _rectArrays.clear();
+ for (Common::Array<HitRectList*>::iterator it = _hitRectLists.begin(); it != _hitRectLists.end(); ++it)
+ delete (*it);
+ _hitRectLists.clear();
+ for (Common::Array<MessageList*>::iterator it = _messageLists.begin(); it != _messageLists.end(); ++it)
+ delete (*it);
+ _messageLists.clear();
+ _drRects.clear();
+ for (Common::Array<DRSubRectList*>::iterator it = _drSubRectLists.begin(); it != _drSubRectLists.end(); ++it)
+ delete (*it);
+ _drSubRectLists.clear();
}
NPoint DataResource::getPoint(uint32 nameHash) {
DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(nameHash, 1);
- if (drDirectoryItem)
- return _points[drDirectoryItem->offset];
- return NPoint();
+ return drDirectoryItem ? _points[drDirectoryItem->offset] : NPoint();
}
NPointArray *DataResource::getPointArray(uint32 nameHash) {
DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(nameHash, 2);
- if (drDirectoryItem)
- return _pointArrays[drDirectoryItem->offset];
- return NULL;
+ return drDirectoryItem ? _pointArrays[drDirectoryItem->offset] : NULL;
}
NRectArray *DataResource::getRectArray(uint32 nameHash) {
DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(nameHash, 3);
- if (drDirectoryItem)
- return _rectArrays[drDirectoryItem->offset];
- return NULL;
+ return drDirectoryItem ? _rectArrays[drDirectoryItem->offset] : NULL;
}
HitRectList *DataResource::getHitRectList() {
DataResource::DRDirectoryItem *drDirectoryItem = findDRDirectoryItem(calcHash("HitArray"), 3);
- if (drDirectoryItem)
- return _hitRectLists[drDirectoryItem->offset];
- return NULL;
+ return drDirectoryItem ? _hitRectLists[drDirectoryItem->offset] : NULL;
}
MessageList *DataResource::getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY) {
@@ -642,10 +569,9 @@ MessageList *DataResource::getMessageListAtPos(int16 klaymanX, int16 klaymanY, i
}
DataResource::DRDirectoryItem *DataResource::findDRDirectoryItem(uint32 nameHash, uint16 type) {
- for (Common::Array<DRDirectoryItem>::iterator it = _directory.begin(); it != _directory.end(); it++) {
+ for (Common::Array<DRDirectoryItem>::iterator it = _directory.begin(); it != _directory.end(); it++)
if ((*it).nameHash == nameHash && (*it).type == type)
return &(*it);
- }
return NULL;
}
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 50a49e3..996579b 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -27,6 +27,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/graphics.h"
#include "neverhood/staticdata.h"
+#include "neverhood/resourceman.h"
namespace Neverhood {
@@ -41,13 +42,13 @@ public:
const NDimensions& getDimensions() { return _dimensions; }
NPoint& getPosition() { return _position; }
bool isRle() const { return _rle; }
- byte *getPixels() const { return _pixels; }
+ const byte *getPixels() const { return _pixels; }
protected:
NeverhoodEngine *_vm;
- int _resourceHandle;
+ ResourceHandle _resourceHandle;
NDimensions _dimensions;
NPoint _position;
- byte *_pixels;
+ const byte *_pixels;
bool _rle;
};
@@ -58,11 +59,11 @@ public:
bool load(uint32 fileHash);
void unload();
void copyPalette(byte *destPalette);
- byte *palette() { return _palette; }
+ const byte *palette() { return _palette; }
protected:
NeverhoodEngine *_vm;
- int _resourceHandle;
- byte *_palette;
+ ResourceHandle _resourceHandle;
+ const byte *_palette;
};
struct AnimFrameInfo {
@@ -82,9 +83,6 @@ public:
bool load(uint32 fileHash);
void unload();
void clear();
- void clear2();
- bool loadInternal(uint32 fileHash);
- void unloadInternal();
uint getFrameCount() const { return _frames.size(); }
const AnimFrameInfo& getFrameInfo(int16 index) const { return _frames[index]; }
int16 getFrameIndex(uint32 frameHash);
@@ -93,12 +91,12 @@ public:
NDimensions loadSpriteDimensions(uint32 fileHash);
protected:
NeverhoodEngine *_vm;
- int _resourceHandle;
+ ResourceHandle _resourceHandle;
int16 _width, _height;
- byte *_currSpriteData;
+ const byte *_currSpriteData;
uint32 _fileHash;
- byte *_paletteData;
- byte *_spriteData;
+ const byte *_paletteData;
+ const byte *_spriteData;
bool _replEnabled;
byte _replOldColor;
byte _replNewColor;
@@ -131,8 +129,8 @@ public:
uint getCount() const { return _count;}
protected:
NeverhoodEngine *_vm;
- int _resourceHandle;
- byte *_textData;
+ ResourceHandle _resourceHandle;
+ const byte *_textData;
uint _count;
};
@@ -178,7 +176,7 @@ protected:
typedef Common::Array<DRSubRect> DRSubRectList;
NeverhoodEngine *_vm;
- int _resourceHandle;
+ ResourceHandle _resourceHandle;
Common::Array<DRDirectoryItem> _directory;
Common::Array<NPoint> _points;
Common::Array<NPointArray*> _pointArrays;
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index eb6aa01..3b67b26 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -24,6 +24,13 @@
namespace Neverhood {
+ResourceHandle::ResourceHandle()
+ : _resourceFileEntry(NULL), _data(NULL) {
+}
+
+ResourceHandle::~ResourceHandle() {
+}
+
ResourceMan::ResourceMan() {
}
@@ -66,92 +73,43 @@ ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash) {
return entry;
}
-int ResourceMan::useResource(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- if (!entry)
- return -1;
- if (entry->resourceHandle != -1) {
- _resources[entry->resourceHandle]->useRefCount++;
- } else {
- Resource *resource = new Resource();
- resource->entry = entry;
- resource->useRefCount = 1;
- entry->resourceHandle = (int)_resources.size();
- _resources.push_back(resource);
- }
- return entry->resourceHandle;
-}
-
-void ResourceMan::unuseResource(int resourceHandle) {
- if (resourceHandle < 0)
- return;
- Resource *resource = _resources[resourceHandle];
- if (resource->useRefCount > 0)
- resource->useRefCount--;
-}
-
-uint32 ResourceMan::getResourceSize(int resourceHandle) const {
- if (resourceHandle < 0)
- return 0;
- Resource *resource = _resources[resourceHandle];
- return resource->entry->archiveEntry->size;
-}
-
-byte ResourceMan::getResourceType(int resourceHandle) {
- if (resourceHandle < 0)
- return 0;
- Resource *resource = _resources[resourceHandle];
- return resource->entry->archiveEntry->type;
-}
-
-byte ResourceMan::getResourceTypeByHash(uint32 fileHash) {
+Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
- return entry->archiveEntry->type;
-}
-
-byte *ResourceMan::getResourceExtData(int resourceHandle) {
- if (resourceHandle < 0)
- return NULL;
- Resource *resource = _resources[resourceHandle];
- return resource->entry->archive->getEntryExtData(resource->entry->archiveEntry);
+ return entry->archive->createStream(entry->archiveEntry);
}
-byte *ResourceMan::getResourceExtDataByHash(uint32 fileHash) {
- ResourceFileEntry *entry = findEntrySimple(fileHash);
- return entry ? entry->archive->getEntryExtData(entry->archiveEntry) : NULL;
+void ResourceMan::queryResource(uint32 fileHash, ResourceHandle &resourceHandle) {
+ resourceHandle._resourceFileEntry = findEntry(fileHash);
}
-byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
- if (resourceHandle < 0)
- return NULL;
- Resource *resource = _resources[resourceHandle];
- ResourceData *resourceData = _data[resource->entry->archiveEntry->fileHash];
- if (!resourceData) {
- resourceData = new ResourceData();
- _data[resource->entry->archiveEntry->fileHash] = resourceData;
- }
- if (resourceData->data != NULL) {
- resourceData->dataRefCount++;
- } else {
- resourceData->data = new byte[resource->entry->archiveEntry->size];
- resource->entry->archive->load(resource->entry->archiveEntry, resourceData->data, 0);
- resourceData->dataRefCount = 1;
+void ResourceMan::loadResource(ResourceHandle &resourceHandle) {
+ resourceHandle._data = NULL;
+ if (resourceHandle.isValid()) {
+ const uint32 fileHash = resourceHandle.fileHash();
+ ResourceData *resourceData = _data[fileHash];
+ if (!resourceData) {
+ resourceData = new ResourceData();
+ _data[fileHash] = resourceData;
+ }
+ if (resourceData->data != NULL) {
+ resourceData->dataRefCount++;
+ } else {
+ resourceData->data = new byte[resourceHandle._resourceFileEntry->archiveEntry->size];
+ resourceHandle._resourceFileEntry->archive->load(resourceHandle._resourceFileEntry->archiveEntry, resourceData->data, 0);
+ resourceData->dataRefCount = 1;
+ }
+ resourceHandle._data = resourceData->data;
}
- return resourceData->data;
-}
-
-void ResourceMan::unloadResource(int resourceHandle) {
- if (resourceHandle < 0)
- return;
- Resource *resource = _resources[resourceHandle];
- ResourceData *resourceData = _data[resource->entry->archiveEntry->fileHash];
- if (resourceData && resourceData->dataRefCount > 0)
- resourceData->dataRefCount--;
}
-Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- return entry->archive->createStream(entry->archiveEntry);
+void ResourceMan::unloadResource(ResourceHandle &resourceHandle) {
+ if (resourceHandle.isValid()) {
+ ResourceData *resourceData = _data[resourceHandle.fileHash()];
+ if (resourceData && resourceData->dataRefCount > 0)
+ --resourceData->dataRefCount;
+ resourceHandle._resourceFileEntry = NULL;
+ resourceHandle._data = NULL;
+ }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
index 5ca8fa2..515849e 100644
--- a/engines/neverhood/resourceman.h
+++ b/engines/neverhood/resourceman.h
@@ -48,20 +48,23 @@ struct ResourceData {
ResourceData() : data(NULL), dataRefCount() {}
};
-#if 0
class ResourceMan;
struct ResourceHandle {
+friend class ResourceMan;
public:
ResourceHandle();
~ResourceHandle();
- const byte *data();
- uint32 size() const { return _archiveEntry ? _archiveEntry->size : 0 };
+ bool isValid() const { return _resourceFileEntry != NULL && _resourceFileEntry->archiveEntry != NULL; }
+ byte type() const { return isValid() ? _resourceFileEntry->archiveEntry->type : 0; };
+ const byte *data() const { return _data; }
+ uint32 size() const { return isValid() ? _resourceFileEntry->archiveEntry->size : 0; };
+ const byte *extData() const { return isValid() ? _resourceFileEntry->archiveEntry->extData : NULL; };
+ uint32 fileHash() const { return isValid() ? _resourceFileEntry->archiveEntry->fileHash : 0; };
protected:
- ResourceMan *_res;
ResourceFileEntry *_resourceFileEntry;
+ const byte *_data;
};
-#endif
class ResourceMan {
public:
@@ -70,21 +73,12 @@ public:
void addArchive(const Common::String &filename);
ResourceFileEntry *findEntrySimple(uint32 fileHash);
ResourceFileEntry *findEntry(uint32 fileHash);
- int useResource(uint32 fileHash);
- void unuseResource(int resourceHandle);
- uint32 getResourceSize(int resourceHandle) const;
- byte getResourceType(int resourceHandle);
- byte getResourceTypeByHash(uint32 fileHash);
- byte *getResourceExtData(int resourceHandle);
- byte *getResourceExtDataByHash(uint32 fileHash);
- byte *loadResource(int resourceHandle, bool moveToFront = false);
- void unloadResource(int resourceHandle);
Common::SeekableReadStream *createStream(uint32 fileHash);
const ResourceFileEntry& getEntry(uint index) { return _entries[index]; }
uint getEntryCount() { return _entries.size(); }
-#if 0
- ResourceHandle getResource(uint32 fileHash);
-#endif
+ void queryResource(uint32 fileHash, ResourceHandle &resourceHandle);
+ void loadResource(ResourceHandle &resourceHandle);
+ void unloadResource(ResourceHandle &resourceHandle);
protected:
typedef Common::HashMap<uint32, ResourceFileEntry> EntriesMap;
Common::Array<BlbArchive*> _archives;
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 0ed6890..a08aad4 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -70,7 +70,9 @@ void SmackerScene::nextVideo() {
if (_fileHashList && _fileHashList[_fileHashListIndex] != 0) {
uint32 smackerFileHash = _fileHashList[_fileHashListIndex];
- if (_vm->_res->getResourceTypeByHash(smackerFileHash) != 10) {
+ ResourceHandle resourceHandle;
+ _vm->_res->queryResource(smackerFileHash, resourceHandle);
+ if (resourceHandle.type() != 10) {
// Not a Smacker file
_vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, 0);
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 52783cc..f0961f4 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -524,7 +524,7 @@ AudioResourceMan::~AudioResourceMan() {
int16 AudioResourceMan::addSound(uint32 fileHash) {
AudioResourceManSoundItem *soundItem = new AudioResourceManSoundItem();
- soundItem->_resourceHandle = _vm->_res->useResource(fileHash);
+ _vm->_res->queryResource(fileHash, soundItem->_resourceHandle);
soundItem->_fileHash = fileHash;
soundItem->_data = NULL;
soundItem->_isLoaded = false;
@@ -543,16 +543,7 @@ int16 AudioResourceMan::addSound(uint32 fileHash) {
void AudioResourceMan::removeSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
- _vm->_mixer->stopHandle(soundItem->_soundHandle);
- if (soundItem->_data) {
- _vm->_res->unloadResource(soundItem->_resourceHandle);
- soundItem->_data = NULL;
- }
- if (soundItem->_resourceHandle != 1) {
- _vm->_res->unuseResource(soundItem->_resourceHandle);
- soundItem->_resourceHandle = -1;
- }
+ unloadSound(soundIndex);
delete soundItem;
_soundItems[soundIndex] = NULL;
}
@@ -561,7 +552,8 @@ void AudioResourceMan::loadSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
if (!soundItem->_data) {
// TODO Check if it's a sound resource
- soundItem->_data = _vm->_res->loadResource(soundItem->_resourceHandle);
+ _vm->_res->loadResource(soundItem->_resourceHandle);
+ soundItem->_data = soundItem->_resourceHandle.data();
}
}
@@ -569,10 +561,8 @@ void AudioResourceMan::unloadSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
_vm->_mixer->stopHandle(soundItem->_soundHandle);
- if (soundItem->_data) {
- _vm->_res->unloadResource(soundItem->_resourceHandle);
- soundItem->_data = NULL;
- }
+ _vm->_res->unloadResource(soundItem->_resourceHandle);
+ soundItem->_data = NULL;
}
void AudioResourceMan::setSoundVolume(int16 soundIndex, int16 volume) {
@@ -597,9 +587,8 @@ void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
if (!soundItem->_data)
return;
- uint32 soundSize = _vm->_res->getResourceSize(soundItem->_resourceHandle);
- Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundSize, DisposeAfterUse::NO);
- byte *shiftValue = _vm->_res->getResourceExtData(soundItem->_resourceHandle);
+ Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundItem->_resourceHandle.size(), DisposeAfterUse::NO);
+ const byte *shiftValue = soundItem->_resourceHandle.extData();
NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, false, DisposeAfterUse::YES, stream);
_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &soundItem->_soundHandle,
@@ -719,8 +708,10 @@ void AudioResourceMan::updateMusicItem(int16 musicIndex) {
AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
if (musicItem->_start && !_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
+ ResourceHandle resourceHandle;
+ _vm->_res->queryResource(musicItem->_fileHash, resourceHandle);
Common::SeekableReadStream *stream = _vm->_res->createStream(musicItem->_fileHash);
- byte *shiftValue = _vm->_res->getResourceExtDataByHash(musicItem->_fileHash);
+ const byte *shiftValue = resourceHandle.extData();
NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, true, DisposeAfterUse::YES, stream);
_vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &musicItem->_soundHandle,
audioStream, -1, VOLUME(musicItem->_isFadingIn ? musicItem->_fadeVolume : musicItem->_volume),
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index 1f0940c..8bfd5af 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -184,8 +184,8 @@ private:
struct AudioResourceManSoundItem {
uint32 _fileHash;
- int _resourceHandle;
- byte *_data;
+ ResourceHandle _resourceHandle;
+ const byte *_data;
bool _isLoaded;
bool _isPlaying;
int16 _volume;
@@ -195,8 +195,6 @@ struct AudioResourceManSoundItem {
struct AudioResourceManMusicItem {
uint32 _fileHash;
- // streamIndex dw
- // needCreate db
bool _isPlaying;
bool _remove;
int16 _volume;
@@ -207,8 +205,6 @@ struct AudioResourceManMusicItem {
int16 _fadeVolume;
int16 _fadeVolumeStep;
Audio::SoundHandle _soundHandle;
- // status dw
- // updateCounter dd
};
class AudioResourceMan {
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 1e73078..c7676ce 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -263,10 +263,10 @@ void AnimatedSprite::updateAnim() {
if (_currFrameTicks != 0 && (--_currFrameTicks == 0) && _animResource.getFrameCount() != 0) {
if (_nextAnimFileHash != 0) {
- if (_animResource.loadInternal(_nextAnimFileHash)) {
+ if (_animResource.load(_nextAnimFileHash)) {
_currAnimFileHash = _nextAnimFileHash;
} else {
- _animResource.loadInternal(calcHash("sqDefault"));
+ _animResource.load(calcHash("sqDefault"));
_currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
@@ -294,10 +294,10 @@ void AnimatedSprite::updateAnim() {
_currStickFrameIndex = _currFrameIndex;
} else {
if (_animStatus == 1) {
- if (_animResource.loadInternal(_newAnimFileHash)) {
+ if (_animResource.load(_newAnimFileHash)) {
_currAnimFileHash = _newAnimFileHash;
} else {
- _animResource.loadInternal(calcHash("sqDefault"));
+ _animResource.load(calcHash("sqDefault"));
_currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
@@ -307,10 +307,10 @@ void AnimatedSprite::updateAnim() {
_currFrameIndex = _plFirstFrameHash != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_plFirstFrameHash)) : 0;
_lastFrameIndex = _plLastFrameHash != 0 ? MAX<int16>(0, _animResource.getFrameIndex(_plLastFrameHash)) : _animResource.getFrameCount() - 1;
} else {
- if (_animResource.loadInternal(_newAnimFileHash)) {
+ if (_animResource.load(_newAnimFileHash)) {
_currAnimFileHash = _newAnimFileHash;
} else {
- _animResource.loadInternal(calcHash("sqDefault"));
+ _animResource.load(calcHash("sqDefault"));
_currAnimFileHash = 0;
}
if (_replOldColor != _replNewColor) {
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 1a633e2..31f9f5e 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -147,7 +147,7 @@ void StaticData::load(const char *filename) {
SceneInfo2700 *sceneInfo2700 = new SceneInfo2700();
uint32 id = fd.readUint32LE();
sceneInfo2700->bgFilename = fd.readUint32LE();
- sceneInfo2700->class437Filename = fd.readUint32LE();
+ sceneInfo2700->bgShadowFilename = fd.readUint32LE();
sceneInfo2700->dataResourceFilename = fd.readUint32LE();
sceneInfo2700->pointListName = fd.readUint32LE();
sceneInfo2700->rectListName = fd.readUint32LE();
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index 69a407b..f9a8b71 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -80,7 +80,7 @@ struct HallOfRecordsInfo {
struct SceneInfo2700 {
uint32 id;
uint32 bgFilename;
- uint32 class437Filename;
+ uint32 bgShadowFilename;
uint32 dataResourceFilename;
uint32 pointListName;
uint32 rectListName;
Commit: b2934eb166ba5b442a93969ad8b4dfbbc6ef3314
https://github.com/scummvm/scummvm/commit/b2934eb166ba5b442a93969ad8b4dfbbc6ef3314
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Fix Klaymen "grow" animation after drinking the potion
- Remove static sprite 0x50C027A8 Scene2803/Scene2803Small because the resource doesn't exist!
- Remove some old comments
- Fix resource extData handling which fixes some crashes
- Enable reusing deleted sound/music slots in SoundMan (was disabled for debugging)
Changed paths:
engines/neverhood/blbarchive.cpp
engines/neverhood/entity.cpp
engines/neverhood/entity.h
engines/neverhood/gamemodule.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/module2800.cpp
engines/neverhood/resource.cpp
engines/neverhood/resourceman.cpp
engines/neverhood/resourceman.h
engines/neverhood/sound.cpp
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 02fad55..748d04c 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -91,7 +91,6 @@ void BlbArchive::open(const Common::String &filename) {
BlbArchiveEntry &entry = _entries[i];
entry.type = _fd.readByte();
entry.comprType = _fd.readByte();
- //entry.extDataOfs = _fd.readUint16LE();
entry.extData = NULL;
extDataOffsets[i] = _fd.readUint16LE();
entry.timeStamp = _fd.readUint32LE();
@@ -132,7 +131,7 @@ void BlbArchive::load(BlbArchiveEntry *entry, byte *buffer, uint32 size) {
break;
case 3: // DCL-compressed
if (!Common::decompressDCL(&_fd, buffer, entry->diskSize, entry->size))
- error("BlbArchive::load() Error during decompression of %=8X", entry->fileHash);
+ error("BlbArchive::load() Error during decompression of %08X", entry->fileHash);
break;
default:
error("BlbArchive::load() Unknown compression type %d", entry->comprType);
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index 29524f8..c7f1659 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -46,11 +46,6 @@ Entity *MessageParam::asEntity() const {
return _entity;
}
-// TODO: Disable heavy debug stuff in release mode
-
-#define SetUpdateHandler(handler) _updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); debug(2, "SetUpdateHandler(" #handler ")"); _updateHandlerCbName = #handler
-#define SetMessageHandler(handler) _messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler
-
Entity::Entity(NeverhoodEngine *vm, int priority)
: _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _soundResources(NULL) {
}
@@ -63,13 +58,13 @@ void Entity::draw() {
}
void Entity::handleUpdate() {
- debug(2, "handleUpdate() -> [%s]", _updateHandlerCbName.c_str());
+ debug(5, "handleUpdate() -> [%s]", _updateHandlerCbName.c_str());
if (_updateHandlerCb)
(this->*_updateHandlerCb)();
}
uint32 Entity::receiveMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- debug(2, "receiveMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
+ debug(5, "receiveMessage(%04X) -> [%s]", messageNum, _messageHandlerCbName.c_str());
return _messageHandlerCb ? (this->*_messageHandlerCb)(messageNum, param, sender) : 0;
}
diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h
index 89a1a42..fb8941a 100644
--- a/engines/neverhood/entity.h
+++ b/engines/neverhood/entity.h
@@ -61,12 +61,12 @@ protected:
#define SetUpdateHandler(handler) \
_updateHandlerCb = static_cast <void (Entity::*)(void)> (handler); \
- debug(2, "SetUpdateHandler(" #handler ")"); \
+ debug(5, "SetUpdateHandler(" #handler ")"); \
_updateHandlerCbName = #handler
#define SetMessageHandler(handler) \
_messageHandlerCb = static_cast <uint32 (Entity::*)(int messageNum, const MessageParam ¶m, Entity *sender)> (handler); \
- debug(2, "SetMessageHandler(" #handler ")"); \
+ debug(5, "SetMessageHandler(" #handler ")"); \
_messageHandlerCbName = #handler
const uint kMaxSoundResources = 16;
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index e6f38f0..5cb9198 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -358,6 +358,8 @@ void GameModule::startup() {
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 2, 2);
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 3, 0);
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 4, 4);
+ setGlobalVar(V_KLAYMAN_SMALL, 1);
+ setGlobalVar(V_SHRINK_LIGHTS_ON, 0);
// <<<DEBUG
#if 0
@@ -369,13 +371,13 @@ void GameModule::startup() {
*/
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 28;
- createModule(2700, -1);
+ _vm->gameState().sceneNum = 2;
+ createModule(2800, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 4;
- _vm->gameState().which = 1;
- createModule(1000, -1);
+ _vm->gameState().sceneNum = 5;
+ _vm->gameState().which = 0;
+ createModule(2800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -416,7 +418,6 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 0
- setGlobalVar(V_KLAYMAN_SMALL, 1); // DEBUG Make Klayman small
_vm->gameState().sceneNum = 2;
createModule(2800, -1);
#endif
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 9673adc..39d38c3 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2212,16 +2212,16 @@ uint32 Klayman::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *
return messageResult;
}
-void Klayman::sub421230() {//stGrow
+void Klayman::stFinishGrow() {
_status2 = 2;
_acceptInput = false;
- startAnimationByHash(0x38445000, 0, -1);
+ startAnimation(0x38445000, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41F1D0);
+ SetMessageHandler(&Klayman::hmFinishGrow);
}
-uint32 Klayman::handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender) {
+uint32 Klayman::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
@@ -5728,7 +5728,7 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4804:
if (param.asInteger() == 3)
- GotoState(&Klayman::sub421230);
+ GotoState(&Klayman::stFinishGrow);
break;
case 0x480D:
GotoState(&Klayman::stPullCord);
@@ -5882,11 +5882,11 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-
- _surface->setClipRects(clipRects, clipRectsCount);
if (flag) {
+ NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
+ delete _surface;
+ createSurface(1000, dimensions.width, dimensions.height);
loadSound(3, 0x58E0C341);
loadSound(4, 0x40A00342);
loadSound(5, 0xD0A1C348);
@@ -5895,6 +5895,7 @@ KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
_dataResource.load(0x98182003);
+ _surface->setClipRects(clipRects, clipRectsCount);
}
@@ -5943,9 +5944,10 @@ KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
bool flag, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
- _surface->setClipRects(clipRects, clipRectsCount);
-
if (flag) {
+ NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
+ delete _surface;
+ createSurface(1000, dimensions.width, dimensions.height);
loadSound(3, 0x58E0C341);
loadSound(4, 0x40A00342);
loadSound(5, 0xD0A1C348);
@@ -5954,6 +5956,7 @@ KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
}
_dataResource.load(0x1830009A);
+ _surface->setClipRects(clipRects, clipRectsCount);
}
@@ -6070,7 +6073,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x4804:
if (param.asInteger() == 3)
- GotoState(&Klayman::sub421230);
+ GotoState(&Klayman::stFinishGrow);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 443bb97..3b08108 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -319,8 +319,8 @@ public:
void stTurnToBackSmall();
uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender);
- void sub421230();//stGrow??
- uint32 handleMessage41F1D0(int messageNum, const MessageParam ¶m, Entity *sender);
+ void stFinishGrow();
+ uint32 hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender);
void stJumpToRingVenusFlyTrap();
uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 6500ae0..fb437fd 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -661,9 +661,6 @@ uint32 Scene2802::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (prevTuneStatus != _currTuneStatus)
changeTuneStatus(prevTuneStatus, _currTuneStatus);
break;
- case 0x000D:
- // DEBUG message
- break;
}
return 0;
}
@@ -1035,7 +1032,6 @@ void Scene2803::toggleBackground() {
}
void Scene2803::changeBackground() {
- // TODO? g_screen->resetDirtyRects();
if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
_asLightCord->setFileHashes(0x8FAD5932, 0x276E1A3D);
_background->load(0x412A423E);
@@ -1050,16 +1046,14 @@ void Scene2803::changeBackground() {
_mouseCursor->updateCursor();
_sprite8->loadSprite(0x3C42022F);
_sprite9->loadSprite(0x341A0237);
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0)
_asTestTubeOne->loadSprite(0x66121222);
- } else
+ else
sendMessage(_asTestTubeOne, 0x2000, 0);
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
_asTestTubeTwo->loadSprite(0x64330236);
- }
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
_asTestTubeThree->loadSprite(0x2E4A22A2);
- }
_sprite10->setVisible(true);
} else {
_asLightCord->setFileHashes(0xAFAD591A, 0x276E321D);
@@ -1075,16 +1069,12 @@ void Scene2803::changeBackground() {
_mouseCursor->updateCursor();
_sprite8->loadSprite(0x108012C1);
_sprite9->loadSprite(0x708072E0);
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
- _asTestTubeOne->loadSprite(0x50C027A8);
- } else
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) != 0)
sendMessage(_asTestTubeOne, 0x2000, 1);
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
_asTestTubeTwo->loadSprite(0xD48077A0);
- }
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) {
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
_asTestTubeThree->loadSprite(0x30022689);
- }
_sprite10->setVisible(false);
}
updatePaletteArea();
@@ -1144,18 +1134,14 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
_sprite5 = insertStaticSprite(0x34422912, 1100);
_sprite6 = insertStaticSprite(0x3C42022F, 1100);
_sprite7 = insertStaticSprite(0x341A0237, 1100);
-
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0)
insertStaticSprite(0x66121222, 100);
else
insertSprite<AnimatedSprite>(kScene2803SmallFileHashes1[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0)], 100, 529, 326);
-
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
insertStaticSprite(0x64330236, 100);
-
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
insertStaticSprite(0x2E4A22A2, 100);
-
} else {
setBackground(0x29800A01);
setPalette(0x29800A01);
@@ -1169,19 +1155,12 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
_sprite6 = insertStaticSprite(0x108012C1, 1100);
_sprite7 = insertStaticSprite(0x708072E0, 1100);
insertStaticSprite(0x90582EA4, 100);
-
- setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0, 1);//DEBUG, FIXME crashes when not done?!
- if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0)
- insertStaticSprite(0x50C027A8, 100);
- else
+ if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) != 0)
insertSprite<AnimatedSprite>(kScene2803SmallFileHashes2[getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0)], 100, 529, 326);
-
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3)
insertStaticSprite(0xD48077A0, 100);
-
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3)
insertStaticSprite(0x30022689, 100);
-
}
_sprite6->setVisible(false);
@@ -1992,6 +1971,8 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
+ which = 3;
+
SetMessageHandler(&Scene2806::handleMessage);
SetUpdateHandler(&Scene2806::update);
@@ -2023,7 +2004,7 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[2].x1 = tempSprite->getDrawRect().x;
_clipRects[2].y2 = tempSprite->getDrawRect().y2();
_clipRects[3].y1 = tempSprite->getDrawRect().y2();
- _clipRects[1].x2 = tempSprite->getDrawRect().x2();
+ _clipRects[1].x2 = tempSprite->getDrawRect().x;
tempSprite = insertStaticSprite(0x72875F42, 1100);
_clipRects[3].x1 = tempSprite->getDrawRect().x;
@@ -2038,6 +2019,9 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[2].x2 = 640;
_clipRects[3].x2 = 640;
+ for (uint i = 0; i < 4; i++)
+ debug("clipRect[%d] (%d, %d, %d, %d)", i, _clipRects[i].x1, _clipRects[i].y1, _clipRects[i].x2, _clipRects[i].y2);
+
if (which < 0) {
insertKlayman<KmScene2806>(441, 423, false, _clipRects, 4);
setMessageList(0x004AF098);
@@ -2288,25 +2272,21 @@ uint32 AsScene2808TestTube::handleMessage(int messageNum, const MessageParam &pa
}
void AsScene2808TestTube::fill() {
-
-
- if ((int)_fillLevel < _testTubeSetNum * 3 + 3)
- return;
-
- if (_testTubeSetNum == 0) {
- playSound(_fillLevel);
- setVisible(true);
- startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices1[_fillLevel], kClass490FrameIndices1[_fillLevel + 1]);
- _newStickFrameIndex = kClass490FrameIndices1[_fillLevel + 1];
- } else {
- playSound(3 + _fillLevel);
- setVisible(true);
- startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices2[_fillLevel], kClass490FrameIndices2[_fillLevel + 1]);
- _newStickFrameIndex = kClass490FrameIndices2[_fillLevel + 1];
+ if ((int)_fillLevel < _testTubeSetNum * 3 + 3) {
+ if (_testTubeSetNum == 0) {
+ playSound(_fillLevel);
+ setVisible(true);
+ startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices1[_fillLevel], kClass490FrameIndices1[_fillLevel + 1]);
+ _newStickFrameIndex = kClass490FrameIndices1[_fillLevel + 1];
+ } else {
+ playSound(3 + _fillLevel);
+ setVisible(true);
+ startAnimation(kClass490FileHashes[_testTubeIndex], kClass490FrameIndices2[_fillLevel], kClass490FrameIndices2[_fillLevel + 1]);
+ _newStickFrameIndex = kClass490FrameIndices2[_fillLevel + 1];
+ }
+ _ssDispenser->startCountdown(_fillLevel);
+ _fillLevel++;
}
- _ssDispenser->startCountdown(_fillLevel);
- _fillLevel++;
-
}
void AsScene2808TestTube::flush() {
@@ -2446,13 +2426,12 @@ void AsScene2808LightEffect::update() {
Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _countdown(0), _testTubeSetNum(which), _leaveResult(0), _isFlowing(false) {
- Sprite *tempSprite;
+ Sprite *asHandle;
- if (which == 0) {
+ if (which == 0)
_vm->gameModule()->initTestTubes1Puzzle();
- } else {
+ else
_vm->gameModule()->initTestTubes2Puzzle();
- }
SetMessageHandler(&Scene2808::handleMessage);
SetUpdateHandler(&Scene2808::update);
@@ -2460,8 +2439,8 @@ Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(kScene2808FileHashes1[which]);
setPalette(kScene2808FileHashes1[which]);
- tempSprite = insertSprite<AsScene2808Handle>(this, which);
- _vm->_collisionMan->addSprite(tempSprite);
+ asHandle = insertSprite<AsScene2808Handle>(this, which);
+ _vm->_collisionMan->addSprite(asHandle);
_asFlow = insertSprite<AsScene2808Flow>(this, which);
insertSprite<AsScene2808LightEffect>(which);
@@ -2513,9 +2492,14 @@ uint32 Scene2808::handleMessage(int messageNum, const MessageParam ¶m, Entit
void Scene2808::update() {
// DEBUG>>> Show correct values
+ #if 1
debug("---------------");
- debug("%03d %03d %03d", getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2));
+ if (_testTubeSetNum == 0)
+ debug("%03d %03d %03d", getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2));
+ else
+ debug("%03d %03d %03d", getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 0), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 1), getSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, 2));
debug("%03d %03d %03d", _asTestTubes[0]->getFillLevel(), _asTestTubes[1]->getFillLevel(), _asTestTubes[2]->getFillLevel());
+ #endif
// DEBUG<<<
Scene::update();
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 64f1061..7f897a4 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -162,7 +162,7 @@ bool AnimResource::load(uint32 fileHash) {
_vm->_res->loadResource(_resourceHandle);
resourceData = _resourceHandle.data();
-
+
animListCount = READ_LE_UINT16(resourceData);
animInfoStartOfs = READ_LE_UINT16(resourceData + 2);
spriteDataOfs = READ_LE_UINT32(resourceData + 4);
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 3b67b26..c30e272 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -66,8 +66,10 @@ ResourceFileEntry *ResourceMan::findEntrySimple(uint32 fileHash) {
return p != _entries.end() ? &(*p)._value : NULL;
}
-ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash) {
+ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash, ResourceFileEntry **firstEntry) {
ResourceFileEntry *entry = findEntrySimple(fileHash);
+ if (firstEntry)
+ *firstEntry = entry;
for (; entry && entry->archiveEntry->comprType == 0x65; fileHash = entry->archiveEntry->diskSize)
entry = findEntrySimple(fileHash);
return entry;
@@ -79,7 +81,9 @@ Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
}
void ResourceMan::queryResource(uint32 fileHash, ResourceHandle &resourceHandle) {
- resourceHandle._resourceFileEntry = findEntry(fileHash);
+ ResourceFileEntry *firstEntry;
+ resourceHandle._resourceFileEntry = findEntry(fileHash, &firstEntry);
+ resourceHandle._extData = firstEntry ? firstEntry->archiveEntry->extData : NULL;
}
void ResourceMan::loadResource(ResourceHandle &resourceHandle) {
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
index 515849e..e83de24 100644
--- a/engines/neverhood/resourceman.h
+++ b/engines/neverhood/resourceman.h
@@ -59,10 +59,11 @@ public:
byte type() const { return isValid() ? _resourceFileEntry->archiveEntry->type : 0; };
const byte *data() const { return _data; }
uint32 size() const { return isValid() ? _resourceFileEntry->archiveEntry->size : 0; };
- const byte *extData() const { return isValid() ? _resourceFileEntry->archiveEntry->extData : NULL; };
+ const byte *extData() const { return _extData; };
uint32 fileHash() const { return isValid() ? _resourceFileEntry->archiveEntry->fileHash : 0; };
protected:
ResourceFileEntry *_resourceFileEntry;
+ const byte *_extData;
const byte *_data;
};
@@ -72,7 +73,7 @@ public:
~ResourceMan();
void addArchive(const Common::String &filename);
ResourceFileEntry *findEntrySimple(uint32 fileHash);
- ResourceFileEntry *findEntry(uint32 fileHash);
+ ResourceFileEntry *findEntry(uint32 fileHash, ResourceFileEntry **firstEntry = NULL);
Common::SeekableReadStream *createStream(uint32 fileHash);
const ResourceFileEntry& getEntry(uint index) { return _entries[index]; }
uint getEntryCount() { return _entries.size(); }
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index f0961f4..3cbcf96 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -436,26 +436,22 @@ SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
}
int16 SoundMan::addMusicItem(MusicItem *musicItem) {
-#if 0
for (uint i = 0; i < _musicItems.size(); ++i)
if (!_musicItems[i]) {
_musicItems[i] = musicItem;
return i;
}
-#endif
int16 musicIndex = _musicItems.size();
_musicItems.push_back(musicItem);
return musicIndex;
}
int16 SoundMan::addSoundItem(SoundItem *soundItem) {
-#if 0
for (uint i = 0; i < _soundItems.size(); ++i)
if (!_soundItems[i]) {
_soundItems[i] = soundItem;
return i;
}
-#endif
int16 soundIndex = _soundItems.size();
_soundItems.push_back(soundItem);
return soundIndex;
@@ -550,7 +546,7 @@ void AudioResourceMan::removeSound(int16 soundIndex) {
void AudioResourceMan::loadSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (!soundItem->_data) {
+ if (!soundItem->_data && soundItem->_resourceHandle.isValid()) {
// TODO Check if it's a sound resource
_vm->_res->loadResource(soundItem->_resourceHandle);
soundItem->_data = soundItem->_resourceHandle.data();
@@ -580,6 +576,7 @@ void AudioResourceMan::setSoundPan(int16 soundIndex, int16 pan) {
}
void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
+
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
if (!soundItem->_data)
loadSound(soundIndex);
@@ -587,8 +584,9 @@ void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
if (!soundItem->_data)
return;
- Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundItem->_resourceHandle.size(), DisposeAfterUse::NO);
const byte *shiftValue = soundItem->_resourceHandle.extData();
+
+ Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundItem->_resourceHandle.size(), DisposeAfterUse::NO);
NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, false, DisposeAfterUse::YES, stream);
_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &soundItem->_soundHandle,
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index c7676ce..2419122 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -477,7 +477,6 @@ void AnimatedSprite::gotoNextState() {
if (_nextStateCb) {
_currStateCb = _nextStateCb;
_nextStateCb = NULL;
- //debug("Fire _nextStateCb '%s'", _nextStateCbName.c_str());
(this->*_currStateCb)();
} else {
_currStateCb = NULL;
Commit: 9a1d9883ad8a8f56b6c7397efe07a17625a03970
https://github.com/scummvm/scummvm/commit/9a1d9883ad8a8f56b6c7397efe07a17625a03970
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Fix AsCommonCar turning
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2800.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 5cb9198..dacac98 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -362,7 +362,7 @@ void GameModule::startup() {
setGlobalVar(V_SHRINK_LIGHTS_ON, 0);
// <<<DEBUG
-#if 0
+#if 1
/*
//DEBUG>>>
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
@@ -371,10 +371,10 @@ void GameModule::startup() {
*/
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 2;
- createModule(2800, -1);
+ _vm->gameState().sceneNum = 14;
+ createModule(2700, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 5;
_vm->gameState().which = 0;
createModule(2800, -1);
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index ca4d2e5..41fc415 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -210,6 +210,7 @@ AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
_newDeltaXType = -1;
_soundCounter = 0;
_pathPoints = NULL;
+ _currMoveDirection = 0;
startAnimation(0xD4220027, 0, -1);
setDoDeltaX(getGlobalVar(V_CAR_DELTA_X));
@@ -496,21 +497,6 @@ void AsCommonCar::stIdleBlink() {
NextState(&AsCommonCar::stLeanForwardIdle);
}
-void AsCommonCar::stHandleRect() {
- _isBusy = true;
- gotoNextState();
- startAnimation(0x9C220DA4, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- FinalizeState(&AsCommonCar::evHandleRectDone);
-}
-
-void AsCommonCar::evHandleRectDone() {
- _isBusy = false;
- _newMoveDirection = 0;
- stUpdateMoveDirection();
-}
-
void AsCommonCar::stUpdateMoveDirection() {
_isMoving = true;
if (_currMoveDirection == 1)
@@ -532,12 +518,13 @@ void AsCommonCar::moveToNextPoint() {
} else {
NPoint nextPt = pathPoint(_currPointIndex + 1);
NPoint currPt = pathPoint(_currPointIndex);
- if (ABS(nextPt.y - currPt.y) <= ABS(nextPt.x - currPt.x) && nextPt.x >= currPt.x &&
- (_currMoveDirection == 4 || _currMoveDirection == 2)) {
- if (_currMoveDirection == 4)
- _currMoveDirection = 2;
- else if (_currMoveDirection == 2)
+ if (ABS(nextPt.y - currPt.y) <= ABS(nextPt.x - currPt.x) &&
+ ((_currMoveDirection == 2 && nextPt.x < currPt.x) ||
+ (_currMoveDirection == 4 && nextPt.x >= currPt.x))) {
+ if (_currMoveDirection == 2)
_currMoveDirection = 4;
+ else if (_currMoveDirection == 4)
+ _currMoveDirection = 2;
if (_isIdle)
stTurnCarMoveToNextPoint();
else
@@ -619,8 +606,9 @@ void AsCommonCar::moveToPrevPoint() {
prevPt = pathPoint(_currPointIndex);
currPt = pathPoint(_currPointIndex + 1);
}
- if (ABS(prevPt.y - currPt.y) <= ABS(prevPt.x - currPt.x) && currPt.x >= prevPt.x &&
- (_currMoveDirection == 2 || _currMoveDirection == 4)) {
+ if (ABS(prevPt.y - currPt.y) <= ABS(prevPt.x - currPt.x) &&
+ ((_currMoveDirection == 2 && prevPt.x < currPt.x) ||
+ (_currMoveDirection == 4 && prevPt.x >= currPt.x))) {
if (_currMoveDirection == 2)
_currMoveDirection = 4;
else if (_currMoveDirection == 4)
@@ -657,8 +645,8 @@ void AsCommonCar::stBrakeMoveToPrevPoint() {
void AsCommonCar::evTurnCarDone() {
_isBusy = false;
- _newMoveDirection = 0;
setDoDeltaX(2);
+ _newMoveDirection = 0;
stUpdateMoveDirection();
}
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 2a7d547..0c567e6 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -89,8 +89,6 @@ protected:
void stLeanForwardIdle();
void evIdleDone();
void stIdleBlink();
- void stHandleRect();
- void evHandleRectDone();
void stUpdateMoveDirection();
void stTurnCar();
void moveToNextPoint();
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index fb437fd..f97d071 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -1736,8 +1736,6 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2804::handleMessage);
SetUpdateHandler(&Scene2804::update);
- //setGlobalVar(V_SHRINK_LIGHTS_ON, 1); // DEBUG Set lights on
-
if (getGlobalVar(V_SHRINK_LIGHTS_ON)) {
setBackground(0xA1D03005);
setPalette(0xA1D03005);
@@ -2019,9 +2017,6 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[2].x2 = 640;
_clipRects[3].x2 = 640;
- for (uint i = 0; i < 4; i++)
- debug("clipRect[%d] (%d, %d, %d, %d)", i, _clipRects[i].x1, _clipRects[i].y1, _clipRects[i].x2, _clipRects[i].y2);
-
if (which < 0) {
insertKlayman<KmScene2806>(441, 423, false, _clipRects, 4);
setMessageList(0x004AF098);
Commit: c182688e44a385549ca0734196a8a920a13ed8b6
https://github.com/scummvm/scummvm/commit/c182688e44a385549ca0734196a8a920a13ed8b6
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Add saveload skeleton (doesn't actually do anything yet)
Changed paths:
A engines/neverhood/saveload.cpp
engines/neverhood/module.mk
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 9069203..b3deb6f 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -41,6 +41,7 @@ MODULE_OBJS = \
palette.o \
resource.o \
resourceman.o \
+ saveload.o \
scene.o \
screen.o \
smackerscene.o \
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index ba6b9f7..a66bdb3 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -105,6 +105,9 @@ public:
uint32 version;
byte gameID;
uint32 flags;
+ uint32 saveDate;
+ uint32 saveTime;
+ uint32 playTime;
Graphics::Surface *thumbnail;
};
@@ -113,7 +116,6 @@ public:
bool canLoadGameStateCurrently() { return _isSaveAllowed; }
bool canSaveGameStateCurrently() { return _isSaveAllowed; }
-#if 0 // Not used yet but let's keep it for later when it is
Common::Error loadGameState(int slot);
Common::Error saveGameState(int slot, const Common::String &description);
void savegame(const char *filename, const char *description);
@@ -121,7 +123,6 @@ public:
const char *getSavegameFilename(int num);
static Common::String getSavegameFilename(const Common::String &target, int num);
static kReadSaveHeaderError readSaveHeader(Common::SeekableReadStream *in, bool loadThumbnail, SaveHeader &header);
-#endif
GameState& gameState() { return _gameState; }
GameModule *gameModule() { return _gameModule; }
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
new file mode 100644
index 0000000..96d7fdd
--- /dev/null
+++ b/engines/neverhood/saveload.cpp
@@ -0,0 +1,147 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ *
+ */
+
+#include "common/savefile.h"
+
+#include "graphics/thumbnail.h"
+
+#include "neverhood/neverhood.h"
+
+namespace Neverhood {
+
+#define NEVERHOOD_SAVEGAME_VERSION 0
+
+NeverhoodEngine::kReadSaveHeaderError NeverhoodEngine::readSaveHeader(Common::SeekableReadStream *in, bool loadThumbnail, SaveHeader &header) {
+
+ header.version = in->readUint32LE();
+ if (header.version > NEVERHOOD_SAVEGAME_VERSION)
+ return kRSHEInvalidVersion;
+
+ byte descriptionLen = in->readByte();
+ header.description = "";
+ while (descriptionLen--)
+ header.description += (char)in->readByte();
+
+ if (loadThumbnail) {
+ header.thumbnail = Graphics::loadThumbnail(*in);
+ } else {
+ Graphics::skipThumbnail(*in);
+ }
+
+ // Not used yet, reserved for future usage
+ header.gameID = in->readByte();
+ header.flags = in->readUint32LE();
+
+ header.saveDate = in->readUint32LE();
+ header.saveTime = in->readUint32LE();
+ header.playTime = in->readUint32LE();
+
+ return ((in->eos() || in->err()) ? kRSHEIoError : kRSHENoError);
+}
+
+void NeverhoodEngine::savegame(const char *filename, const char *description) {
+
+ Common::OutSaveFile *out;
+ if (!(out = g_system->getSavefileManager()->openForSaving(filename))) {
+ warning("Can't create file '%s', game not saved", filename);
+ return;
+ }
+
+ TimeDate curTime;
+ g_system->getTimeAndDate(curTime);
+
+ // Header start
+ out->writeUint32LE(NEVERHOOD_SAVEGAME_VERSION);
+
+ byte descriptionLen = strlen(description);
+ out->writeByte(descriptionLen);
+ out->write(description, descriptionLen);
+
+ Graphics::saveThumbnail(*out);
+
+ // Not used yet, reserved for future usage
+ out->writeByte(0);
+ out->writeUint32LE(0);
+ uint32 saveDate = ((curTime.tm_mday & 0xFF) << 24) | (((curTime.tm_mon + 1) & 0xFF) << 16) | ((curTime.tm_year + 1900) & 0xFFFF);
+ uint32 saveTime = ((curTime.tm_hour & 0xFF) << 16) | (((curTime.tm_min) & 0xFF) << 8) | ((curTime.tm_sec) & 0xFF);
+ uint32 playTime = g_engine->getTotalPlayTime() / 1000;
+ out->writeUint32LE(saveDate);
+ out->writeUint32LE(saveTime);
+ out->writeUint32LE(playTime);
+ // Header end
+
+ // TODO
+
+ out->finalize();
+ delete out;
+}
+
+void NeverhoodEngine::loadgame(const char *filename) {
+ Common::InSaveFile *in;
+ if (!(in = g_system->getSavefileManager()->openForLoading(filename))) {
+ warning("Can't open file '%s', game not loaded", filename);
+ return;
+ }
+
+ SaveHeader header;
+
+ kReadSaveHeaderError errorCode = readSaveHeader(in, false, header);
+
+ if (errorCode != kRSHENoError) {
+ warning("Error loading savegame '%s'", filename);
+ delete in;
+ return;
+ }
+
+ g_engine->setTotalPlayTime(header.playTime * 1000);
+
+ // TODO
+
+ delete in;
+
+}
+
+Common::Error NeverhoodEngine::loadGameState(int slot) {
+ const char *fileName = getSavegameFilename(slot);
+ loadgame(fileName);
+ return Common::kNoError;
+}
+
+Common::Error NeverhoodEngine::saveGameState(int slot, const Common::String &description) {
+ const char *fileName = getSavegameFilename(slot);
+ savegame(fileName, description.c_str());
+ return Common::kNoError;
+}
+
+const char *NeverhoodEngine::getSavegameFilename(int num) {
+ static Common::String filename;
+ filename = getSavegameFilename(_targetName, num);
+ return filename.c_str();
+}
+
+Common::String NeverhoodEngine::getSavegameFilename(const Common::String &target, int num) {
+ assert(num >= 0 && num <= 999);
+ return Common::String::format("%s.%03d", target.c_str(), num);
+}
+
+} // End of namespace Neverhood
Commit: 99e15e400537d85ff9f68cc10973b6d2c36c1776
https://github.com/scummvm/scummvm/commit/99e15e400537d85ff9f68cc10973b6d2c36c1776
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: More work on saveload, saving works, loading not yet (from the GMM, in-game isn't finished yet)
Changed paths:
engines/neverhood/detection.cpp
engines/neverhood/gamevars.cpp
engines/neverhood/gamevars.h
engines/neverhood/neverhood.cpp
engines/neverhood/saveload.cpp
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index df9eca3..ed7053a 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -126,12 +126,10 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
-#if 0 // Not used yet but let's keep it for later when it is
SaveStateList listSaves(const char *target) const;
virtual int getMaximumSaveSlot() const;
void removeSaveState(const char *target, int slot) const;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
-#endif
const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const;
@@ -139,20 +137,20 @@ public:
bool NeverhoodMetaEngine::hasFeature(MetaEngineFeature f) const {
return
- false; // Nothing yet :(
-// (f == kSupportsListSaves) ||
-// (f == kSupportsLoadingDuringStartup) ||
+ (f == kSupportsListSaves) ||
+ (f == kSupportsLoadingDuringStartup) ||
// (f == kSupportsDeleteSave) ||
-// (f == kSavesSupportMetaInfo) ||
-// (f == kSavesSupportThumbnail);
+ (f == kSavesSupportMetaInfo) ||
+ (f == kSavesSupportThumbnail) ||
+ (f == kSavesSupportCreationDate) ||
+ (f == kSavesSupportPlayTime);
}
bool Neverhood::NeverhoodEngine::hasFeature(EngineFeature f) const {
return
- false; // Nothing yet :(
// (f == kSupportsRTL) || // TODO: Not yet...
-// (f == kSupportsLoadingDuringRuntime) ||
-// (f == kSupportsSavingDuringRuntime);
+ (f == kSupportsLoadingDuringRuntime) ||
+ (f == kSupportsSavingDuringRuntime);
}
bool NeverhoodMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
@@ -177,8 +175,6 @@ const ADGameDescription *NeverhoodMetaEngine::fallbackDetect(const Common::FSLis
return NULL;
}
-#if 0 // Not used yet but let's keep it for later when it is
-
SaveStateList NeverhoodMetaEngine::listSaves(const char *target) const {
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
Neverhood::NeverhoodEngine::SaveHeader header;
@@ -213,9 +209,6 @@ int NeverhoodMetaEngine::getMaximumSaveSlot() const {
}
void NeverhoodMetaEngine::removeSaveState(const char *target, int slot) const {
- // Slot 0 can't be deleted, it's for restarting the game(s)
- if (slot == 0)
- return;
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, slot);
@@ -235,11 +228,6 @@ void NeverhoodMetaEngine::removeSaveState(const char *target, int slot) const {
// Rename every slot greater than the deleted slot,
// Also do not rename quicksaves.
if (slotNum > slot && slotNum < 990) {
- // FIXME: Our savefile renaming done here is inconsitent with what we do in
- // GUI_v2::deleteMenu. While here we rename every slot with a greater equal
- // number of the deleted slot to deleted slot, deleted slot + 1 etc.,
- // we only rename the following slots in GUI_v2::deleteMenu until a slot
- // is missing.
saveFileMan->renameSavefile(file->c_str(), filename.c_str());
filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, ++slot);
@@ -265,7 +253,14 @@ SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target,
desc.setDeletableFlag(false);
desc.setWriteProtectedFlag(false);
desc.setThumbnail(header.thumbnail);
-
+ int day = (header.saveDate >> 24) & 0xFF;
+ int month = (header.saveDate >> 16) & 0xFF;
+ int year = header.saveDate & 0xFFFF;
+ desc.setSaveDate(year, month, day);
+ int hour = (header.saveTime >> 16) & 0xFF;
+ int minutes = (header.saveTime >> 8) & 0xFF;
+ desc.setSaveTime(hour, minutes);
+ desc.setPlayTime(header.playTime * 1000);
return desc;
}
}
@@ -273,8 +268,6 @@ SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target,
return SaveStateDescriptor();
}
-#endif
-
#if PLUGIN_ENABLED_DYNAMIC(NEVERHOOD)
REGISTER_PLUGIN_DYNAMIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
#else
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index e56ec1e..558543f 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -31,6 +31,30 @@ GameVars::GameVars() {
GameVars::~GameVars() {
}
+void GameVars::loadState(Common::InSaveFile *in) {
+ uint varCount;
+ _vars.clear();
+ varCount = in->readUint32LE();
+ for (uint i = 0; i < varCount; ++i) {
+ GameVar var;
+ var.nameHash = in->readUint32LE();
+ var.value = in->readUint32LE();
+ var.firstIndex = in->readUint16LE();
+ var.nextIndex = in->readUint16LE();
+ }
+}
+
+void GameVars::saveState(Common::OutSaveFile *out) {
+ out->writeUint32LE(_vars.size());
+ for (uint i = 0; i < _vars.size(); ++i) {
+ GameVar &var = _vars[i];
+ out->writeUint32LE(var.nameHash);
+ out->writeUint32LE(var.value);
+ out->writeUint16LE(var.firstIndex);
+ out->writeUint16LE(var.nextIndex);
+ }
+}
+
uint32 GameVars::getGlobalVar(uint32 nameHash) {
int16 varIndex = findSubVarIndex(0, nameHash);
return varIndex != -1 ? _vars[varIndex].value : 0;
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 623e5b5..36fcebc 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -24,6 +24,7 @@
#define NEVERHOOD_GAMEVARS_H
#include "common/array.h"
+#include "common/savefile.h"
#include "neverhood/neverhood.h"
namespace Neverhood {
@@ -170,8 +171,8 @@ class GameVars {
public:
GameVars();
~GameVars();
- // TODO void load(???);
- // TODO void save(???);
+ void loadState(Common::InSaveFile *in);
+ void saveState(Common::OutSaveFile *out);
uint32 getGlobalVar(uint32 nameHash);
void setGlobalVar(uint32 nameHash, uint32 value);
uint32 getSubVar(uint32 nameHash, uint32 subNameHash);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index c29cc7b..fbb8df3 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -86,13 +86,6 @@ Common::Error NeverhoodEngine::run() {
CursorMan.showMouse(true);
-#if 0
- // TODO: This should probably be implemented as debug command later
- dumpAllResources();
-#endif
-
-#if 1
-
_soundMan = new SoundMan(this);
_audioResourceMan = new AudioResourceMan(this);
@@ -101,6 +94,9 @@ Common::Error NeverhoodEngine::run() {
_gameModule->startup();
+ // TODO Check if this can actually be false...
+ _isSaveAllowed = true;
+
uint32 nextFrameTime = 0;
// Preliminary main loop, needs some more work but works for testing
@@ -145,25 +141,19 @@ Common::Error NeverhoodEngine::run() {
_gameModule->draw();
_screen->update();
nextFrameTime = _screen->getNextFrameTime();
- //_gameVars->dumpVars();
};
_soundMan->update();
_audioResourceMan->update();
- //_screen->update();
_system->updateScreen();
_system->delayMillis(10);
- debug(0, "---------------------------------------");
-
}
delete _gameModule;
delete _collisionMan;
delete _soundMan;
delete _audioResourceMan;
-#endif
-
delete _res;
delete _screen;
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
index 96d7fdd..851943d 100644
--- a/engines/neverhood/saveload.cpp
+++ b/engines/neverhood/saveload.cpp
@@ -26,6 +26,7 @@
#include "graphics/thumbnail.h"
#include "neverhood/neverhood.h"
+#include "neverhood/gamevars.h"
namespace Neverhood {
@@ -90,7 +91,10 @@ void NeverhoodEngine::savegame(const char *filename, const char *description) {
out->writeUint32LE(playTime);
// Header end
- // TODO
+ _gameVars->setGlobalVar(0x108A4870, _gameState.sceneNum);
+ _gameVars->setGlobalVar(0x82C80875, _gameState.which);
+
+ _gameVars->saveState(out);
out->finalize();
delete out;
@@ -115,7 +119,7 @@ void NeverhoodEngine::loadgame(const char *filename) {
g_engine->setTotalPlayTime(header.playTime * 1000);
- // TODO
+ _gameVars->loadState(in);
delete in;
Commit: 060287a4f85189cce3bb3b1b864b85cd81ee5c2f
https://github.com/scummvm/scummvm/commit/060287a4f85189cce3bb3b1b864b85cd81ee5c2f
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Improve frame-exact seeking for Scene2802
Thanks to clone2727 for his help!
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module2800.cpp
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerplayer.h
video/smk_decoder.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index dacac98..7d5932b 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -362,7 +362,7 @@ void GameModule::startup() {
setGlobalVar(V_SHRINK_LIGHTS_ON, 0);
// <<<DEBUG
-#if 1
+#if 0
/*
//DEBUG>>>
createScene(_vm->gameState().sceneNum, _vm->gameState().which);
@@ -417,8 +417,8 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
-#if 0
- _vm->gameState().sceneNum = 2;
+#if 1
+ _vm->gameState().sceneNum = 1;
createModule(2800, -1);
#endif
#if 0
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index f97d071..e40890a 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -540,6 +540,9 @@ Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x008810A8, 20, 620);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x8284C100, true, true, true));
_currRadioMusicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
+ // Need to go to the first frame first to load up the palette
+ _smackerPlayer->gotoFrame(0);
+ // Now we can actually set the current radio frame
_smackerPlayer->gotoFrame(_currRadioMusicIndex);
_vm->_soundMan->addSound(0x04360A18, 0x422630C2);
_vm->_soundMan->addSound(0x04360A18, 0x00632252);
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 85319dc..7c14edf 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -62,6 +62,28 @@ void SmackerDoubleSurface::draw() {
_vm->_screen->drawDoubleSurface2(_smackerFrame, _drawRect);
}
+void NeverhoodSmackerDecoder::forceSeekToFrame(uint frame) {
+ if (!isVideoLoaded())
+ return;
+
+ if (frame >= getFrameCount())
+ error("Can't force Smacker seek to invalid frame %d", frame);
+
+ if (_header.audioInfo[0].hasAudio)
+ error("Can't force Smacker frame seek with audio");
+ if (!rewind())
+ error("Failed to rewind");
+
+ SmackerVideoTrack *videoTrack = (SmackerVideoTrack *)getTrack(0);
+ uint32 offset = 0;
+ for (uint32 i = 0; i < frame; i++) {
+ videoTrack->increaseCurFrame();
+ offset += _frameSizes[i] & ~3;
+ }
+
+ _fileStream->seek(offset, SEEK_CUR);
+}
+
// SmackerPlayer
SmackerPlayer::SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag, bool paused)
@@ -95,7 +117,7 @@ void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
_stream = _vm->_res->createStream(fileHash);
- _smackerDecoder = new Video::SmackerDecoder();
+ _smackerDecoder = new NeverhoodSmackerDecoder();
_smackerDecoder->loadStream(_stream);
_palette = new Palette(_vm);
@@ -120,12 +142,9 @@ void SmackerPlayer::close() {
}
void SmackerPlayer::gotoFrame(int frameNumber) {
- // NOTE Slow as hell but only used in Scene2802
- if (frameNumber != _smackerDecoder->getCurFrame()) {
- if (frameNumber < _smackerDecoder->getCurFrame())
- rewind();
- while (_smackerDecoder->getCurFrame() != frameNumber)
- _smackerDecoder->decodeNextFrame();
+ if (_smackerDecoder) {
+ _smackerDecoder->forceSeekToFrame(frameNumber);
+ _smackerDecoder->decodeNextFrame();
}
}
@@ -156,7 +175,6 @@ void SmackerPlayer::rewind() {
}
void SmackerPlayer::update() {
- debug(8, "SmackerPlayer::update()");
if (!_smackerDecoder)
return;
diff --git a/engines/neverhood/smackerplayer.h b/engines/neverhood/smackerplayer.h
index b4d8ddb..26ebff5 100644
--- a/engines/neverhood/smackerplayer.h
+++ b/engines/neverhood/smackerplayer.h
@@ -47,6 +47,11 @@ public:
virtual void draw();
};
+class NeverhoodSmackerDecoder : public Video::SmackerDecoder {
+public:
+ void forceSeekToFrame(uint frame);
+};
+
class SmackerPlayer : public Entity {
public:
SmackerPlayer(NeverhoodEngine *vm, Scene *scene, uint32 fileHash, bool doubleSurface, bool flag, bool paused = false);
@@ -61,11 +66,11 @@ public:
void setDrawPos(int16 x, int16 y);
void rewind();
bool isDone() { return getFrameNumber() + 1 == getFrameCount(); }
- Video::SmackerDecoder *getSmackerDecoder() const { return _smackerDecoder; }
+ NeverhoodSmackerDecoder *getSmackerDecoder() const { return _smackerDecoder; }
protected:
Scene *_scene;
Palette *_palette;
- Video::SmackerDecoder *_smackerDecoder;
+ NeverhoodSmackerDecoder *_smackerDecoder;
SmackerSurface *_smackerSurface;
uint32 _fileHash;
bool _smackerFirst;
diff --git a/video/smk_decoder.h b/video/smk_decoder.h
index 7227238..e4bc9ba 100644
--- a/video/smk_decoder.h
+++ b/video/smk_decoder.h
@@ -122,7 +122,6 @@ protected:
Common::SeekableReadStream *_fileStream;
-private:
enum AudioCompression {
kCompressionNone,
kCompressionDPCM,
@@ -151,6 +150,10 @@ private:
uint32 dummy;
} _header;
+ uint32 *_frameSizes;
+
+private:
+
class SmackerAudioTrack : public AudioTrack {
public:
SmackerAudioTrack(const AudioInfo &audioInfo, Audio::Mixer::SoundType soundType);
@@ -173,7 +176,6 @@ private:
AudioInfo _audioInfo;
};
- uint32 *_frameSizes;
// The FrameTypes section of a Smacker file contains an array of bytes, where
// the 8 bits of each byte describe the contents of the corresponding frame.
// The highest 7 bits correspond to audio frames (bit 7 is track 6, bit 6 track 5
Commit: 0f1aa64fd0172c374c491bcfba4ac7baa2394d2e
https://github.com/scummvm/scummvm/commit/0f1aa64fd0172c374c491bcfba4ac7baa2394d2e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:38-07:00
Commit Message:
NEVERHOOD: Add support for the demo version
- Remove debug resource dumping code
- Fix Scene1501 (pictures without sound weren't displayed/too fast)
- Move main loop to mainLoop method
Changed paths:
engines/neverhood/detection.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1000.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2600.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/resourceman.cpp
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index ed7053a..c40b9e7 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -55,6 +55,10 @@ uint16 NeverhoodEngine::getVersion() const {
return _gameDescription->version;
}
+bool NeverhoodEngine::isDemo() const {
+ return _gameDescription->desc.flags & ADGF_DEMO;
+}
+
}
static const PlainGameDescriptor neverhoodGames[] = {
@@ -84,6 +88,23 @@ static const NeverhoodGameDescription gameDescriptions[] = {
0,
},
+ {
+ // Neverhood English demo version
+ {
+ "neverhood",
+ "Demo",
+ AD_ENTRY1s("nevdemo.blb", "05b735cfb1086892bec79b54dca5545b", 22564568),
+ Common::EN_ANY,
+ Common::kPlatformWindows,
+ ADGF_DEMO,
+ GUIO1(GUIO_NONE)
+ },
+ 0,
+ 0,
+ 0,
+ 0,
+ },
+
{ AD_TABLE_END_MARKER, 0, 0, 0, 0 }
};
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 7d5932b..548b358 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -149,7 +149,9 @@ void GameModule::handleKeyDown(Common::KeyCode keyCode) {
}
void GameModule::handleEscapeKey() {
- if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
+ if (_vm->isDemo())
+ _vm->quitGame();
+ else if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
_mainMenuRequested = true;
else if (_childObject)
sendMessage(_childObject, 0x000C, 0);
@@ -316,8 +318,9 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
-// createModule(1500, 0); // Logos and intro video //Real
-
+#if 1
+ createModule(1500, 0); // Logos and intro video //Real
+#else
// DEBUG>>>
/*
setGlobalVar(V_SEEN_MUSIC_BOX, 1);
@@ -417,7 +420,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 1;
createModule(2800, -1);
#endif
@@ -426,9 +429,11 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2500, -1);
#endif
-#if 0
+#if 1
_vm->gameState().sceneNum = 1;
- createModule(2400, -1);
+ createModule(2300, -1);
+#endif
+
#endif
}
@@ -528,6 +533,9 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(V_MODULE_NAME, 0x81293110);
_childObject = new Module3000(_vm, this, which);
break;
+ case 9999:
+ createDemoScene();
+ break;
default:
error("GameModule::createModule() Could not create module %d", moduleNum);
}
@@ -689,17 +697,18 @@ void GameModule::updateModule() {
createModule(2300, 1);
break;
case 2300:
- if (_moduleResult == 1) {
- createModule(2200, 0);
- } else if (_moduleResult == 2) {
+ if (_moduleResult == 2)
createModule(1200, 0);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 0)
+ createModule(1000, 1);
+ else if (_vm->isDemo())
+ createModule(9999, -1);
+ else if (_moduleResult == 1)
+ createModule(2200, 0);
+ else if (_moduleResult == 3)
createModule(2400, 0);
- } else if (_moduleResult == 4) {
+ else if (_moduleResult == 4)
createModule(3000, 0);
- } else {
- createModule(1000, 1);
- }
break;
case 2400:
createModule(2300, 3);
@@ -708,21 +717,19 @@ void GameModule::updateModule() {
createModule(2600, 1);
break;
case 2600:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createModule(2500, 0);
- } else {
+ else
createModule(1200, 1);
- }
break;
case 2700:
createModule(1800, 2);
break;
case 2800:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createModule(2900, 5);
- } else {
+ else
createModule(1800, 0);
- }
break;
case 2900:
if (_moduleResult != 0xFFFFFFFF) {
@@ -786,6 +793,9 @@ void GameModule::updateModule() {
createModule(2300, 4);
}
break;
+ case 9999:
+ createModuleByHash(getGlobalVar(V_MODULE_NAME));
+ break;
}
}
}
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 1cd6c0d..aeeb62f 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -24,6 +24,7 @@
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
#include "neverhood/module1000.h"
+#include "neverhood/module1500.h"
namespace Neverhood {
@@ -98,6 +99,10 @@ void Module::createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash)
_childObject = new StaticScene(_vm, this, backgroundFileHash, cursorFileHash);
}
+void Module::createDemoScene() {
+ _childObject = new Scene1501(_vm, this, 0x0009B624, 0, 288, 0);
+}
+
bool Module::updateChild() {
if (_childObject) {
_childObject->handleUpdate();
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index bb01218..576a5a4 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -62,6 +62,7 @@ protected:
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort);
void createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash);
+ void createDemoScene();
bool updateChild();
void leaveModule(uint32 result);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index caa4466..1aaa0c2 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -95,9 +95,13 @@ void Module1000::updateScene() {
case 1:
if (_moduleResult == 1)
leaveModule(0);
- else if (_moduleResult == 2)
- createScene(3, 0);
- else
+ else if (_moduleResult == 2) {
+ if (_vm->isDemo())
+ // Demo version returns to the same scene
+ createScene(1, 2);
+ else
+ createScene(3, 0);
+ } else
createScene(0, 1);
break;
case 2:
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 98c55bc..328bda3 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -106,7 +106,7 @@ void Scene1501::update() {
_vm->_screen->clear();
leaveScene(0);
}
- } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !isSoundPlaying(0)) {
+ } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || (_countdown2 == 0 && !isSoundPlaying(0))) {
_countdown1 = 12;
_palette->startFadeToBlack(11);
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 2c43afe..937ba9a 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -105,6 +105,9 @@ void Module2300::createScene(int sceneNum, int which) {
_vm->_soundMan->setTwoSoundsPlayFlag(true);
createSmackerScene(0x20080A0B, true, true, false);
break;
+ case 9999:
+ createDemoScene();
+ break;
}
SetUpdateHandler(&Module2300::updateScene);
_childObject->handleUpdate();
@@ -122,6 +125,8 @@ void Module2300::updateScene() {
case 1:
if (_moduleResult == 1)
createScene(0, 0);
+ else if (_vm->isDemo())
+ createScene(9999, 0);
else if (_moduleResult == 2)
createScene(2, 1);
else if (_moduleResult == 3)
@@ -149,6 +154,9 @@ void Module2300::updateScene() {
_vm->_soundMan->setTwoSoundsPlayFlag(false);
createScene(1, 2);
break;
+ case 9999:
+ createScene(1, -1);
+ break;
}
} else {
switch (_sceneNum) {
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 4ddcc38..741f413 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -124,6 +124,9 @@ void Module2600::createScene(int sceneNum, int which) {
else
createSmackerScene(0x42980941, true, true, false);
break;
+ case 9999:
+ createDemoScene();
+ break;
}
SetUpdateHandler(&Module2600::updateScene);
_childObject->handleUpdate();
@@ -151,8 +154,12 @@ void Module2600::updateScene() {
case 2:
if (_moduleResult == 0)
createScene(1, 0);
- else if (_moduleResult == 1)
- createScene(1002, -1);
+ else if (_moduleResult == 1) {
+ if (_vm->isDemo())
+ createScene(9999, -1);
+ else
+ createScene(1002, -1);
+ }
break;
case 3:
if (_moduleResult == 0) {
@@ -178,8 +185,12 @@ void Module2600::updateScene() {
createScene(3, 1);
break;
case 6:
- if (_moduleResult == 0)
- createScene(1006, -1);
+ if (_moduleResult == 0) {
+ if (_vm->isDemo())
+ createScene(9999, -1);
+ else
+ createScene(1006, -1);
+ }
else if (_moduleResult == 1)
createScene(1, 2);
break;
@@ -201,6 +212,9 @@ void Module2600::updateScene() {
case 1008:
createScene(6, 0);
break;
+ case 9999:
+ createScene(_vm->gameState().sceneNum, -1);
+ break;
}
}
}
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index fbb8df3..ae181ff 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -76,13 +76,19 @@ Common::Error NeverhoodEngine::run() {
_screen = new Screen(this);
_res = new ResourceMan();
- _res->addArchive("a.blb");
- _res->addArchive("c.blb");
- _res->addArchive("hd.blb");
- _res->addArchive("i.blb");
- _res->addArchive("m.blb");
- _res->addArchive("s.blb");
- _res->addArchive("t.blb");
+
+ if (isDemo()) {
+ _res->addArchive("a.blb");
+ _res->addArchive("nevdemo.blb");
+ } else {
+ _res->addArchive("a.blb");
+ _res->addArchive("c.blb");
+ _res->addArchive("hd.blb");
+ _res->addArchive("i.blb");
+ _res->addArchive("m.blb");
+ _res->addArchive("s.blb");
+ _res->addArchive("t.blb");
+ }
CursorMan.showMouse(true);
@@ -97,13 +103,42 @@ Common::Error NeverhoodEngine::run() {
// TODO Check if this can actually be false...
_isSaveAllowed = true;
- uint32 nextFrameTime = 0;
+ if (isDemo()) {
+ // Adjust some navigation lists for the demo version...
+ NavigationList *navigationList = _staticData->getNavigationList(0x004B67E8);
+ (*navigationList)[0].middleSmackerFileHash = 0;
+ (*navigationList)[0].middleFlag = 1;
+ (*navigationList)[2].middleSmackerFileHash = 0;
+ (*navigationList)[2].middleFlag = 1;
+ (*navigationList)[4].middleSmackerFileHash = 0;
+ (*navigationList)[4].middleFlag = 1;
+ (*navigationList)[5].middleSmackerFileHash = 0;
+ (*navigationList)[5].middleFlag = 1;
+ }
+
+ mainLoop();
+
+ delete _gameModule;
+ delete _collisionMan;
+ delete _soundMan;
+ delete _audioResourceMan;
+
+ delete _res;
+ delete _screen;
- // Preliminary main loop, needs some more work but works for testing
+ delete _gameVars;
+ delete _staticData;
+
+ debug("Ok.");
+
+ return Common::kNoError;
+}
+
+void NeverhoodEngine::mainLoop() {
+ uint32 nextFrameTime = 0;
while (!shouldQuit()) {
Common::Event event;
Common::EventManager *eventMan = _system->getEventManager();
-
while (eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
@@ -134,7 +169,6 @@ Common::Error NeverhoodEngine::run() {
break;
}
}
-
if (_system->getMillis() >= nextFrameTime) {
_gameModule->checkMainMenu();
_gameModule->handleUpdate();
@@ -142,28 +176,11 @@ Common::Error NeverhoodEngine::run() {
_screen->update();
nextFrameTime = _screen->getNextFrameTime();
};
-
_soundMan->update();
_audioResourceMan->update();
_system->updateScreen();
_system->delayMillis(10);
-
}
-
- delete _gameModule;
- delete _collisionMan;
- delete _soundMan;
- delete _audioResourceMan;
-
- delete _res;
- delete _screen;
-
- delete _gameVars;
- delete _staticData;
-
- debug("Ok.");
-
- return Common::kNoError;
}
NPoint NeverhoodEngine::getMousePos() {
@@ -173,82 +190,4 @@ NPoint NeverhoodEngine::getMousePos() {
return pt;
}
-void writeTga(const char *filename, byte *pixels, byte *palette, int16 width, int16 height) {
- byte identsize = 0;
- byte colourmaptype = 1;
- byte imagetype = 1;
- uint16 colourmapstart = 0;
- uint16 colourmaplength = 256;
- byte colourmapbits = 24;
- uint16 xstart = 0;
- uint16 ystart = 0;
- byte bits = 8;
- byte descriptor = 0x20;
- Common::DumpFile tga;
- tga.open(filename);
- tga.writeByte(identsize);
- tga.writeByte(colourmaptype);
- tga.writeByte(imagetype);
- tga.writeUint16LE(colourmapstart);
- tga.writeUint16LE(colourmaplength);
- tga.writeByte(colourmapbits);
- tga.writeUint16LE(xstart);
- tga.writeUint16LE(ystart);
- tga.writeUint16LE(width);
- tga.writeUint16LE(height);
- tga.writeByte(bits);
- tga.writeByte(descriptor);
- tga.write(palette, 768);
- tga.write(pixels, width * height);
- tga.close();
-}
-
-void NeverhoodEngine::dumpAllResources() {
-#if 0
- PaletteResource paletteResource(this);
- byte *vgaPalette = new byte[768];
- //paletteResource.load(0x4086520E);
- paletteResource.load(0x12C23307);
- byte *srcpalette = paletteResource.palette();
- for (int i = 0; i < 256; i++) {
- vgaPalette[i * 3 + 2] = srcpalette[i * 4 + 0];
- vgaPalette[i * 3 + 1] = srcpalette[i * 4 + 1];
- vgaPalette[i * 3 + 0] = srcpalette[i * 4 + 2];
- }
-
-#if 0
- for (int i = 0; i < 768; i++)
- vgaPalette[i] <<= 2;
-#endif
-
- uint entriesCount = _res->getEntryCount();
- debug("%d entries", entriesCount);
-
- for (uint i = 0; i < entriesCount; i++) {
- const ResourceFileEntry &entry = _res->getEntry(i);
- int type = _res->getResourceTypeByHash(entry.archiveEntry->fileHash);
- debug("hash: %08X; type: %d", entry.archiveEntry->fileHash, type);
- if (type == 4) {
- AnimResource anim(this);
- anim.load(entry.archiveEntry->fileHash);
- for (uint frameIndex = 0; frameIndex < anim.getFrameCount(); frameIndex++) {
- const AnimFrameInfo &frameInfo = anim.getFrameInfo(frameIndex);
- int16 width = (frameInfo.drawOffset.width + 3) & 0xFFFC;
- byte *pixels = new byte[width * frameInfo.drawOffset.height];
- memset(pixels, 0, width * frameInfo.drawOffset.height);
- anim.draw(frameIndex, pixels, width, false, false);
- Common::String filename =
- frameInfo.frameHash != 0
- ? Common::String::format("%08X_%03d_%08X.tga", entry.archiveEntry->fileHash, frameIndex, frameInfo.frameHash)
- : Common::String::format("%08X_%03d.tga", entry.archiveEntry->fileHash, frameIndex);
- writeTga(filename.c_str(), pixels, vgaPalette, width, frameInfo.drawOffset.height);
- delete[] pixels;
- }
- }
- }
-
- delete[] vgaPalette;
-#endif
-}
-
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index a66bdb3..b0f9abb 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -59,6 +59,7 @@ class NeverhoodEngine : public ::Engine {
protected:
Common::Error run();
+ void mainLoop();
public:
NeverhoodEngine(OSystem *syst, const NeverhoodGameDescription *gameDesc);
@@ -71,6 +72,7 @@ public:
uint16 getVersion() const;
Common::Platform getPlatform() const;
bool hasFeature(EngineFeature f) const;
+ bool isDemo() const;
Common::RandomSource *_rnd;
@@ -130,8 +132,6 @@ public:
int16 getMouseY() const { return _mouseY; }
NPoint getMousePos();
- void dumpAllResources();
-
public:
};
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index c30e272..7b7d5cf 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -77,7 +77,7 @@ ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash, ResourceFileEntry **f
Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
- return entry->archive->createStream(entry->archiveEntry);
+ return entry ? entry->archive->createStream(entry->archiveEntry) : NULL;
}
void ResourceMan::queryResource(uint32 fileHash, ResourceHandle &resourceHandle) {
Commit: a35cd088e52eced55d5c0f8253773e9d940b8373
https://github.com/scummvm/scummvm/commit/a35cd088e52eced55d5c0f8253773e9d940b8373
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Remove obsolete _keyState
Changed paths:
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index ae181ff..4ee801b 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -70,11 +70,8 @@ Common::Error NeverhoodEngine::run() {
_staticData = new StaticData();
_staticData->load("neverhood.dat");
-
_gameVars = new GameVars();
-
_screen = new Screen(this);
-
_res = new ResourceMan();
if (isDemo()) {
@@ -98,13 +95,11 @@ Common::Error NeverhoodEngine::run() {
_collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
- _gameModule->startup();
-
// TODO Check if this can actually be false...
_isSaveAllowed = true;
if (isDemo()) {
- // Adjust some navigation lists for the demo version...
+ // Adjust this navigation list for the demo version
NavigationList *navigationList = _staticData->getNavigationList(0x004B67E8);
(*navigationList)[0].middleSmackerFileHash = 0;
(*navigationList)[0].middleFlag = 1;
@@ -116,6 +111,8 @@ Common::Error NeverhoodEngine::run() {
(*navigationList)[5].middleFlag = 1;
}
+ _gameModule->startup();
+
mainLoop();
delete _gameModule;
@@ -142,12 +139,10 @@ void NeverhoodEngine::mainLoop() {
while (eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
- _keyState = event.kbd.keycode;
_gameModule->handleKeyDown(event.kbd.keycode);
_gameModule->handleAsciiKey(event.kbd.ascii);
break;
case Common::EVENT_KEYUP:
- _keyState = Common::KEYCODE_INVALID;
break;
case Common::EVENT_MOUSEMOVE:
_mouseX = event.mouse.x;
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index b0f9abb..ef0f16c 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -77,7 +77,6 @@ public:
Common::RandomSource *_rnd;
int16 _mouseX, _mouseY;
- Common::KeyCode _keyState;
uint16 _buttonState;
GameState _gameState;
Commit: 30178e46e522c6d741e82e282f3f3edc1fab4825
https://github.com/scummvm/scummvm/commit/30178e46e522c6d741e82e282f3f3edc1fab4825
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Implement savegame loading via GMM (in-game saving/loading still TODO)
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.cpp
engines/neverhood/gamevars.h
engines/neverhood/module1200.cpp
engines/neverhood/saveload.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 548b358..823f89a 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -437,6 +437,15 @@ void GameModule::startup() {
#endif
}
+void GameModule::restoreGame() {
+ delete _childObject;
+ delete _prevChildObject;
+ _childObject = NULL;
+ _prevChildObject = NULL;
+ _prevModuleNum = 0;
+ createModuleByHash(getGlobalVar(V_MODULE_NAME));
+}
+
void GameModule::checkMainMenu() {
if (_mainMenuRequested)
openMainMenu();
@@ -544,6 +553,7 @@ void GameModule::createModule(int moduleNum, int which) {
}
void GameModule::createModuleByHash(uint32 nameHash) {
+ debug("GameModule::createModuleByHash(%08X)", nameHash);
switch (nameHash) {
case 0x03294419:
createModule(1000, -1);
@@ -833,7 +843,7 @@ void GameModule::updateMenuModule() {
_moduleNum = _prevModuleNum;
SetUpdateHandler(&GameModule::updateModule);
} else if (_gameWasLoaded) {
- debug("_gameWasLoaded!");
+#if 0 // TODO Handle this in some other way...
_gameWasLoaded = false;
delete _childObject;
delete _prevChildObject;
@@ -842,6 +852,7 @@ void GameModule::updateMenuModule() {
_prevModuleNum = 0;
// TODO Create module from savegame values...
// TODO createModuleByHash(...);
+#endif
}
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 53adb85..93373a1 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -33,6 +33,7 @@ public:
GameModule(NeverhoodEngine *vm);
virtual ~GameModule();
void startup();
+ void restoreGame();
void checkMainMenu();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index 558543f..7bf9f30 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -41,6 +41,7 @@ void GameVars::loadState(Common::InSaveFile *in) {
var.value = in->readUint32LE();
var.firstIndex = in->readUint16LE();
var.nextIndex = in->readUint16LE();
+ _vars.push_back(var);
}
}
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 36fcebc..a62b33c 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -32,6 +32,8 @@ namespace Neverhood {
enum {
// Misc
V_MODULE_NAME = 0x91080831, // Currently active module name hash
+ V_CURRENT_SCENE = 0x108A4870, // Current scene in the current module
+ V_CURRENT_SCENE_WHICH = 0x82C80875,
V_DEBUG = 0xA4014072, // Original debug-flag, can probably be removed
V_SMACKER_CAN_ABORT = 0x06C02850, // Not set anywhere (yet), seems like a debug flag
V_KEY3_LOCATION = 0x13382860, // Location of the third key
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 98ec012..e86aa00 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -1025,7 +1025,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule)
playSound(0, 0x40106542);
loadSound(1, 0x40005446);
- loadSound(2, 0x40005446);
+ loadSound(2, 0x40005446); // Same sound as slot 1
loadSound(3, 0x68E25540);
}
@@ -1049,6 +1049,7 @@ void Scene1202::update() {
playSound(3);
_isPuzzleSolved = true;
} else if (_clickedIndex >= 0 && _counter == 0) {
+ // Swap TNT positions
int destIndex = kScene1202Table[_clickedIndex];
sendMessage(_asTntItems[_clickedIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, destIndex));
sendMessage(_asTntItems[destIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, _clickedIndex));
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
index 851943d..e1ef954 100644
--- a/engines/neverhood/saveload.cpp
+++ b/engines/neverhood/saveload.cpp
@@ -26,6 +26,7 @@
#include "graphics/thumbnail.h"
#include "neverhood/neverhood.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/gamevars.h"
namespace Neverhood {
@@ -91,8 +92,8 @@ void NeverhoodEngine::savegame(const char *filename, const char *description) {
out->writeUint32LE(playTime);
// Header end
- _gameVars->setGlobalVar(0x108A4870, _gameState.sceneNum);
- _gameVars->setGlobalVar(0x82C80875, _gameState.which);
+ _gameVars->setGlobalVar(V_CURRENT_SCENE, _gameState.sceneNum);
+ _gameVars->setGlobalVar(V_CURRENT_SCENE_WHICH, _gameState.which);
_gameVars->saveState(out);
@@ -121,6 +122,11 @@ void NeverhoodEngine::loadgame(const char *filename) {
_gameVars->loadState(in);
+ _gameState.sceneNum = _gameVars->getGlobalVar(V_CURRENT_SCENE);
+ _gameState.which = _gameVars->getGlobalVar(V_CURRENT_SCENE_WHICH);
+
+ _gameModule->restoreGame();
+
delete in;
}
Commit: fec1d7816a3e9924db7eb617eda1a6f3fd7b8978
https://github.com/scummvm/scummvm/commit/fec1d7816a3e9924db7eb617eda1a6f3fd7b8978
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Implement resource cache purging and purge it after each scene
Changed paths:
engines/neverhood/resourceman.cpp
engines/neverhood/resourceman.h
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 7b7d5cf..9e5f9ae 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -116,4 +116,14 @@ void ResourceMan::unloadResource(ResourceHandle &resourceHandle) {
}
}
+void ResourceMan::purgeResources() {
+ for (Common::HashMap<uint32, ResourceData*>::iterator it = _data.begin(); it != _data.end(); ++it) {
+ ResourceData *resourceData = (*it)._value;
+ if (resourceData->dataRefCount == 0) {
+ delete resourceData->data;
+ resourceData->data = NULL;
+ }
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h
index e83de24..5a3697f 100644
--- a/engines/neverhood/resourceman.h
+++ b/engines/neverhood/resourceman.h
@@ -80,6 +80,7 @@ public:
void queryResource(uint32 fileHash, ResourceHandle &resourceHandle);
void loadResource(ResourceHandle &resourceHandle);
void unloadResource(ResourceHandle &resourceHandle);
+ void purgeResources();
protected:
typedef Common::HashMap<uint32, ResourceFileEntry> EntriesMap;
Common::Array<BlbArchive*> _archives;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 6141ee4..c899a59 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -70,6 +70,9 @@ Scene::~Scene() {
delete *iter;
// Don't delete surfaces since they always belong to an entity
+
+ // Purge the resources after each scene
+ _vm->_res->purgeResources();
}
Commit: 4b7ad48ca8857fd0c597ae1cc1ce599a3286bd57
https://github.com/scummvm/scummvm/commit/4b7ad48ca8857fd0c597ae1cc1ce599a3286bd57
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Rename some CollisionMan methods/fields
- Remove fallback detector (I think it's not needed)
- Rename Scene insertMouse methods
Changed paths:
engines/neverhood/collisionman.cpp
engines/neverhood/collisionman.h
engines/neverhood/detection.cpp
engines/neverhood/diskplayerscene.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/module3000.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index 973c0fe..bafa1e3 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -39,16 +39,6 @@ void CollisionMan::setHitRects(uint32 id) {
void CollisionMan::setHitRects(HitRectList *hitRects) {
_hitRects = hitRects;
-
- // DEBUG
- if (_hitRects) {
- debug("CollisionMan::setHitRects() count = %d", _hitRects->size());
- for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++) {
- HitRect *hitRect = &(*it);
- debug("(%d, %d, %d, %d) -> %04X", hitRect->rect.x1, hitRect->rect.y1, hitRect->rect.x2, hitRect->rect.y2, hitRect->type);
- }
- }
-
}
void CollisionMan::clearHitRects() {
@@ -63,9 +53,9 @@ HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
return &defaultHitRect;
}
-void CollisionMan::addSprite(Sprite *sprite) {
+void CollisionMan::addCollisionSprite(Sprite *sprite) {
int index = 0, insertIndex = -1;
- for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
+ for (Common::Array<Sprite*>::iterator iter = _collisionSprites.begin(); iter != _collisionSprites.end(); iter++) {
if ((*iter)->getPriority() > sprite->getPriority()) {
insertIndex = index;
break;
@@ -73,26 +63,26 @@ void CollisionMan::addSprite(Sprite *sprite) {
index++;
}
if (insertIndex >= 0)
- _sprites.insert_at(insertIndex, sprite);
+ _collisionSprites.insert_at(insertIndex, sprite);
else
- _sprites.push_back(sprite);
+ _collisionSprites.push_back(sprite);
}
-void CollisionMan::removeSprite(Sprite *sprite) {
- for (uint index = 0; index < _sprites.size(); index++) {
- if (_sprites[index] == sprite) {
- _sprites.remove_at(index);
+void CollisionMan::removeCollisionSprite(Sprite *sprite) {
+ for (uint index = 0; index < _collisionSprites.size(); index++) {
+ if (_collisionSprites[index] == sprite) {
+ _collisionSprites.remove_at(index);
break;
}
}
}
-void CollisionMan::clearSprites() {
- _sprites.clear();
+void CollisionMan::clearCollisionSprites() {
+ _collisionSprites.clear();
}
void CollisionMan::checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam) {
- for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
+ for (Common::Array<Sprite*>::iterator iter = _collisionSprites.begin(); iter != _collisionSprites.end(); iter++) {
Sprite *collSprite = *iter;
if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getCollisionBounds())) {
sprite->sendMessage(collSprite, messageNum, messageParam);
@@ -100,12 +90,4 @@ void CollisionMan::checkCollision(Sprite *sprite, uint16 flags, int messageNum,
}
}
-void CollisionMan::save() {
- // TODO
-}
-
-void CollisionMan::restore() {
- // TODO
-}
-
} // End of namespace Neverhood
diff --git a/engines/neverhood/collisionman.h b/engines/neverhood/collisionman.h
index 8635952..36bb2a5 100644
--- a/engines/neverhood/collisionman.h
+++ b/engines/neverhood/collisionman.h
@@ -37,18 +37,16 @@ public:
void setHitRects(HitRectList *hitRects);
void clearHitRects();
HitRect *findHitRectAtPos(int16 x, int16 y);
- void addSprite(Sprite *sprite);
- void removeSprite(Sprite *sprite);
- void clearSprites();
+ void addCollisionSprite(Sprite *sprite);
+ void removeCollisionSprite(Sprite *sprite);
+ void clearCollisionSprites();
void checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam);
- void save();
- void restore();
- uint getSpriteCount() const { return _sprites.size(); }
- Sprite *getSprite(uint index) const { return _sprites[index]; }
+ uint getCollisionSpritesCount() const { return _collisionSprites.size(); }
+ Sprite *getCollisionSprite(uint index) const { return _collisionSprites[index]; }
protected:
NeverhoodEngine *_vm;
HitRectList *_hitRects;
- Common::Array<Sprite*> _sprites;
+ Common::Array<Sprite*> _collisionSprites;
};
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index c40b9e7..9dc4582 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -108,26 +108,6 @@ static const NeverhoodGameDescription gameDescriptions[] = {
{ AD_TABLE_END_MARKER, 0, 0, 0, 0 }
};
-/**
- * The fallback game descriptor used by the Neverhood engine's fallbackDetector.
- * Contents of this struct are to be overwritten by the fallbackDetector.
- */
-static NeverhoodGameDescription g_fallbackDesc = {
- {
- "",
- "",
- AD_ENTRY1(0, 0), // This should always be AD_ENTRY1(0, 0) in the fallback descriptor
- Common::UNK_LANG,
- Common::kPlatformPC,
- ADGF_NO_FLAGS,
- GUIO_NONE
- },
- 0,
- 0,
- 0,
- 0,
-};
-
} // End of namespace Neverhood
class NeverhoodMetaEngine : public AdvancedMetaEngine {
@@ -152,8 +132,6 @@ public:
void removeSaveState(const char *target, int slot) const;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
- const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const;
-
};
bool NeverhoodMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -182,20 +160,6 @@ bool NeverhoodMetaEngine::createInstance(OSystem *syst, Engine **engine, const A
return gd != 0;
}
-const ADGameDescription *NeverhoodMetaEngine::fallbackDetect(const Common::FSList &fslist) const {
- // Set the default values for the fallback descriptor's ADGameDescription part.
- Neverhood::g_fallbackDesc.desc.language = Common::UNK_LANG;
- Neverhood::g_fallbackDesc.desc.platform = Common::kPlatformPC;
- Neverhood::g_fallbackDesc.desc.flags = ADGF_NO_FLAGS;
-
- // Set default values for the fallback descriptor's NeverhoodGameDescription part.
- Neverhood::g_fallbackDesc.gameID = 0;
- Neverhood::g_fallbackDesc.features = 0;
- Neverhood::g_fallbackDesc.version = 3;
-
- return NULL;
-}
-
SaveStateList NeverhoodMetaEngine::listSaves(const char *target) const {
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
Neverhood::NeverhoodEngine::SaveHeader header;
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index d6d4de1..fbef600 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -325,7 +325,7 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
setPalette(kDiskplayerPaletteFileHashes[paletteIndex]);
_ssPlayButton = insertSprite<DiskplayerPlayButton>(this);
- _vm->_collisionMan->addSprite(_ssPlayButton);
+ _vm->_collisionMan->addCollisionSprite(_ssPlayButton);
_asKey = insertSprite<AsDiskplayerSceneKey>();
@@ -351,7 +351,7 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_finalDiskSlot = new DiskplayerSlot(_vm, this, 20, 0);
addEntity(_finalDiskSlot);
- insertMouse435(0x000408A8, 20, 620);
+ insertPuzzleMouse(0x000408A8, 20, 620);
showMouse(false);
_diskSmackerPlayer = new SmackerPlayer(_vm, this, 0x08288103, false, true);
@@ -442,7 +442,6 @@ void DiskplayerScene::update() {
}
uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
Scene::handleMessage(messageNum, param, sender);
if (!_inputDisabled) {
switch (messageNum) {
@@ -473,7 +472,7 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
break;
}
}
- return messageResult;
+ return 0;
}
void DiskplayerScene::stop() {
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 528d303..521c0e0 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -240,7 +240,7 @@ MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
setBackground(0x08C0020C);
setPalette(0x08C0020C);
- insertMouse433(0x00208084);
+ insertScreenMouse(0x00208084);
insertStaticSprite(0x41137051, 100);
insertStaticSprite(0xC10B2015, 100);
@@ -251,7 +251,7 @@ MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
for (uint buttonIndex = 0; buttonIndex < 9; ++buttonIndex) {
Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
kMenuButtonFileHashes[buttonIndex], kMenuButtonCollisionBounds[buttonIndex]);
- _vm->_collisionMan->addSprite(menuButton);
+ _vm->_collisionMan->addCollisionSprite(menuButton);
}
SetUpdateHandler(&Scene::update);
@@ -466,7 +466,7 @@ TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 it
void TextLabelWidget::addSprite() {
_parentScene->addSprite(this);
- _vm->_collisionMan->addSprite(this);
+ _vm->_collisionMan->addCollisionSprite(this);
}
int16 TextLabelWidget::getWidth() {
@@ -544,7 +544,7 @@ void TextEditWidget::addSprite() {
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
- _vm->_collisionMan->addSprite(this);
+ _vm->_collisionMan->addCollisionSprite(this);
_surface->setVisible(true);
_textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _textSurface->getCharHeight()) / 2,
0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
@@ -708,7 +708,7 @@ void SavegameListBox::addSprite() {
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
- _vm->_collisionMan->addSprite(this);
+ _vm->_collisionMan->addCollisionSprite(this);
_surface->setVisible(true);
buildItems();
_firstVisibleItem = 0;
@@ -809,7 +809,7 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
setBackground(0x30084E25);
setPalette(0x30084E25);
- insertMouse433(0x84E21308, &kMouseRect);
+ insertScreenMouse(0x84E21308, &kMouseRect);
insertStaticSprite(0x1340A5C2, 200);
insertStaticSprite(0x1301A7EA, 200);
@@ -826,7 +826,7 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
kSaveGameMenuButtonFileHashes[buttonIndex], kSaveGameMenuButtonCollisionBounds[buttonIndex]);
- _vm->_collisionMan->addSprite(menuButton);
+ _vm->_collisionMan->addCollisionSprite(menuButton);
}
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 1aaa0c2..6c5cc28 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -344,7 +344,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B4860);
setBackground(0x4086520E);
setPalette(0x4086520E);
- insertMouse433(0x6520A400);
+ insertScreenMouse(0x6520A400);
if (which < 0) {
// Restoring game
@@ -1226,7 +1226,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.which = 0;
}
- insertMouse433(0x23303124);
+ insertScreenMouse(0x23303124);
tempSprite = insertStaticSprite(0xB3242310, 825);
tempClipRect.set(tempSprite->getDrawRect().x, tempSprite->getDrawRect().y,
@@ -1243,7 +1243,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asDoorSpy = insertSprite<AsScene1002DoorSpy>(tempClipRect, this, _asDoor, tempSprite);
_ssPressButton = insertSprite<SsCommonPressButton>(this, 0x00412692, 0x140B60BE, 800, 0);
_asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, false);
- _vm->_collisionMan->addSprite(_asVenusFlyTrap);
+ _vm->_collisionMan->addCollisionSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
@@ -1395,7 +1395,7 @@ StaticScene::StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backg
setBackground(backgroundFileHash);
setPalette(backgroundFileHash);
- insertMouse435(cursorFileHash, 20, 620);
+ insertPuzzleMouse(cursorFileHash, 20, 620);
}
uint32 StaticScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -1460,7 +1460,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
}
addEntity(_palette);
- insertMouse433(0x03001504);
+ insertScreenMouse(0x03001504);
if (which < 0) {
// Restoring game
@@ -1550,13 +1550,13 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x2800E011);
setPalette(0x2800E011);
insertStaticSprite(0x492D5AD7, 100);
- insertMouse435(0x0E015288, 20, 620);
+ insertPuzzleMouse(0x0E015288, 20, 620);
} else {
setBackground(0x8870A546);
setPalette(0x8870A546);
insertStaticSprite(0x40D1E0A9, 100);
insertStaticSprite(0x149C00A6, 100);
- insertMouse435(0x0A54288F, 20, 620);
+ insertPuzzleMouse(0x0A54288F, 20, 620);
}
drawTextToBackground();
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index cc6284b..4b8a8ba 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -444,8 +444,8 @@ Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule)
_asTeddyBear = insertSprite<AsScene1105TeddyBear>(this);
ssOpenButton = insertSprite<SsScene1105OpenButton>(this);
- _vm->_collisionMan->addSprite(ssOpenButton);
- insertMouse435(0x10006208, 20, 620);
+ _vm->_collisionMan->addCollisionSprite(ssOpenButton);
+ insertPuzzleMouse(0x10006208, 20, 620);
loadSound(0, 0x48442057);
loadSound(1, 0xC025014F);
@@ -555,19 +555,19 @@ void Scene1105::createObjects() {
_ssSymbolDice[2] = insertSprite<SsScene1105SymbolDie>(2, 485, 304);
_ssSymbol1UpButton = insertSprite<SsScene1105Button>(this, 0x08002860, NRect(146, 362, 192, 403));
- _vm->_collisionMan->addSprite(_ssSymbol1UpButton);
+ _vm->_collisionMan->addCollisionSprite(_ssSymbol1UpButton);
_ssSymbol1DownButton = insertSprite<SsScene1105Button>(this, 0x42012460, NRect(147, 404, 191, 442));
- _vm->_collisionMan->addSprite(_ssSymbol1DownButton);
+ _vm->_collisionMan->addCollisionSprite(_ssSymbol1DownButton);
_ssSymbol2UpButton = insertSprite<SsScene1105Button>(this, 0x100030A0, NRect(308, 361, 355, 402));
- _vm->_collisionMan->addSprite(_ssSymbol2UpButton);
+ _vm->_collisionMan->addCollisionSprite(_ssSymbol2UpButton);
_ssSymbol2DownButton = insertSprite<SsScene1105Button>(this, 0x840228A0, NRect(306, 406, 352, 445));
- _vm->_collisionMan->addSprite(_ssSymbol2DownButton);
+ _vm->_collisionMan->addCollisionSprite(_ssSymbol2DownButton);
_ssSymbol3UpButton = insertSprite<SsScene1105Button>(this, 0x20000120, NRect(476, 358, 509, 394));
- _vm->_collisionMan->addSprite(_ssSymbol3UpButton);
+ _vm->_collisionMan->addCollisionSprite(_ssSymbol3UpButton);
_ssSymbol3DownButton = insertSprite<SsScene1105Button>(this, 0x08043121, NRect(463, 401, 508, 438));
- _vm->_collisionMan->addSprite(_ssSymbol3DownButton);
+ _vm->_collisionMan->addCollisionSprite(_ssSymbol3DownButton);
_ssActionButton = insertSprite<SsScene1105Button>(this, 0x8248AD35, NRect(280, 170, 354, 245));
- _vm->_collisionMan->addSprite(_ssActionButton);
+ _vm->_collisionMan->addCollisionSprite(_ssActionButton);
_isPanelOpen = true;
@@ -575,7 +575,7 @@ void Scene1105::createObjects() {
// TODO: Find a nicer way
deleteSprite((Sprite**)&_mouseCursor);
- insertMouse435(0x18666208, 20, 620);
+ insertPuzzleMouse(0x18666208, 20, 620);
}
@@ -652,7 +652,7 @@ Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x8449E02F);
setPalette(0x8449E02F);
- insertMouse433(0x9E02B84C);
+ insertScreenMouse(0x9E02B84C);
_sprite1 = insertStaticSprite(0x600CEF01, 1100);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index e86aa00..11e29fd 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -671,10 +671,10 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
setSubVar(VA_TNT_POSITIONS, index, kScene1201InitArray[index]);
}
- insertMouse433(0x9A2C0409);
+ insertScreenMouse(0x9A2C0409);
_asTape = insertSprite<AsScene1201Tape>(this, 3, 1100, 243, 340, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
tempSprite = insertStaticSprite(0x03C82530, 100);
topY1 = tempSprite->getY() + tempSprite->getDrawRect().height;
@@ -752,7 +752,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
_asTntMan->setClipRect(x1, 0, x2, 480);
_asTntMan->setRepl(64, 0);
- _vm->_collisionMan->addSprite(_asTntMan);
+ _vm->_collisionMan->addCollisionSprite(_asTntMan);
tempSprite = insertSprite<AsScene1201TntManFlame>(_asTntMan);
tempSprite->setClipRect(x1, 0, x2, 480);
}
@@ -826,7 +826,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_MATCH_STATUS) < 3) {
_asMatch = insertSprite<AsScene1201Match>(this);
- _vm->_collisionMan->addSprite(_asMatch);
+ _vm->_collisionMan->addCollisionSprite(_asMatch);
}
if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_CREATURE_EXPLODED) == 0) {
@@ -1011,11 +1011,11 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule)
_paletteResource.load(0x60250EB5);
_paletteResource.copyPalette(_paletteData);
- insertMouse435(0x10ED160A, 20, 620);
+ insertPuzzleMouse(0x10ED160A, 20, 620);
for (int tntIndex = 0; tntIndex < 18; tntIndex++) {
_asTntItems[tntIndex] = insertSprite<AsScene1202TntItem>(this, tntIndex);
- _vm->_collisionMan->addSprite(_asTntItems[tntIndex]);
+ _vm->_collisionMan->addCollisionSprite(_asTntItems[tntIndex]);
}
insertStaticSprite(0x8E8419C1, 1100);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index feebd78..989ada5 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -427,7 +427,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B0A38);
setBackground(0x420643C4);
setPalette(0x420643C4);
- insertMouse433(0x643C0428);
+ insertScreenMouse(0x643C0428);
_class595 = insertStaticSprite(0xB0420130, 1015);
_sprite1 = insertStaticSprite(0x942FC224, 300);
@@ -456,7 +456,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480);
_asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, true);
- _vm->_collisionMan->addSprite(_asVenusFlyTrap);
+ _vm->_collisionMan->addCollisionSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
@@ -637,11 +637,11 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule)
setRectList(0x004AF9E8);
setBackground(0x01581A9C);
setPalette(0x01581A9C);
- insertMouse433(0x81A9801D);
+ insertScreenMouse(0x81A9801D);
if (!getGlobalVar(V_BALLOON_POPPED)) {
_asBalloon = insertSprite<AsScene1303Balloon>(this);
- _vm->_collisionMan->addSprite(_asBalloon);
+ _vm->_collisionMan->addCollisionSprite(_asBalloon);
}
_sprite1 = insertStaticSprite(0xA014216B, 1100);
@@ -699,18 +699,18 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B91A8);
setBackground(0x062C0214);
setPalette(0x062C0214);
- insertMouse433(0xC021006A);
+ insertScreenMouse(0xC021006A);
if (getGlobalVar(V_BALLOON_POPPED)) {
_asKey = insertSprite<AsCommonKey>(this, 0, 1100, 278, 347);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
} else {
_asKey = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
}
if (!getGlobalVar(V_HAS_NEEDLE)) {
_asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347);
- _vm->_collisionMan->addSprite(_asNeedle);
+ _vm->_collisionMan->addCollisionSprite(_asNeedle);
}
_sprite1 = insertStaticSprite(0x0562E621, 1100);
@@ -763,7 +763,7 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B6E98);
setBackground(0x28801B64);
setPalette(0x28801B64);
- insertMouse433(0x01B60280);
+ insertScreenMouse(0x01B60280);
if (which < 0) {
// Restoring game
@@ -876,11 +876,11 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x05303114);
setPalette(0x05303114);
- insertMouse433(0x0311005B);
+ insertScreenMouse(0x0311005B);
if (getGlobalVar(V_KEY3_LOCATION) == 4) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 435, 445);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
}
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
@@ -897,14 +897,14 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1306>(380, 440);
setMessageList(0x004AFAD0);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else if (which == 1) {
// Klaymen teleporting in
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
sendMessage(this, 0x2000, 1);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else if (which == 2) {
// Klaymen returning from diskplayer
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
@@ -915,27 +915,27 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
}
setMessageList(0x004AFBC8);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else if (which == 3) {
// Klaymen returning from window
insertKlayman<KmScene1306>(534, 440);
setMessageList(0x004AFC30);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else if (which == 4) {
// Klaymen teleporting out
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
sendMessage(this, 0x2000, 1);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else if (which == 5) {
// Klaymen returning from teleporter
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
sendMessage(this, 0x2000, 1);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else {
// Klaymen coming up in elevator
insertKlayman<KmScene1306>(286, 408);
@@ -1007,7 +1007,7 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
setSurfacePriority(_asElevatorDoor->getSurface(), 90);
setSurfacePriority(_sprite1->getSurface(), 80);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
break;
}
return 0;
@@ -1033,7 +1033,7 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
setSurfacePriority(_asElevatorDoor->getSurface(), 90);
setSurfacePriority(_sprite1->getSurface(), 80);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
break;
}
return 0;
@@ -1246,7 +1246,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule)
setBackground(0xA8006200);
setPalette(0xA8006200);
addEntity(_palette);
- insertMouse435(0x06204A88, 20, 620);
+ insertPuzzleMouse(0x06204A88, 20, 620);
tempSprite = insertStaticSprite(0x00A3621C, 800);
_clipRects[0].set(tempSprite->getDrawRect().x, 0, 640, 480);
@@ -1260,7 +1260,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule)
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(VA_IS_KEY_INSERTED, keyIndex)) {
_asKeys[keyIndex] = insertSprite<AsScene1307Key>(this, keyIndex, _clipRects);
- _vm->_collisionMan->addSprite(_asKeys[keyIndex]);
+ _vm->_collisionMan->addCollisionSprite(_asKeys[keyIndex]);
} else {
_asKeys[keyIndex] = NULL;
}
@@ -1527,10 +1527,10 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x41024202);
setPalette(0x41024202);
- insertMouse433(0x24206418);
+ insertScreenMouse(0x24206418);
_asTape = insertSprite<AsScene1201Tape>(this, 17, 1100, 502, 445, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
if (getGlobalVar(V_MOUSE_SUCKED_IN)) {
insertSprite<AsScene1308Mouse>();
@@ -1603,7 +1603,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_asProjector);
+ _vm->_collisionMan->addCollisionSprite(_asProjector);
_asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_asProjector->setRepl(64, 0);
}
@@ -1701,7 +1701,7 @@ Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule)
SetMessageHandler(&Scene1317::handleMessage);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false));
- insertMouse433(0x08284011);
+ insertScreenMouse(0x08284011);
showMouse(false);
_smackerFileHash = 0;
_keepLastSmackerFrame = false;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index e0cf2c5..521981e 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -637,7 +637,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B6758);
setBackground(0x08221FA5);
setPalette(0x08221FA5);
- insertMouse433(0x21FA108A);
+ insertScreenMouse(0x21FA108A);
_ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x980F3124, 0x12192892, 100, 0);
_asPipe = insertSprite<AsScene1401Pipe>();
@@ -678,7 +678,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 2) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, _asPipe);
- _vm->_collisionMan->addSprite(_asProjector);
+ _vm->_collisionMan->addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 6) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
@@ -850,7 +850,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setBackgroundY(-10);
setPalette(0x231482F0);
_palette->addPalette(0x91D3A391, 0, 64, 0);
- insertMouse433(0x482F4239);
+ insertScreenMouse(0x482F4239);
_ssBridgePart1 = insertSprite<SsScene1402BridgePart>(0x15402D64, 1100);
_ssBridgePart2 = insertSprite<SsScene1402BridgePart>(0x10A02120, 1100);
@@ -898,7 +898,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 1) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_asProjector);
+ _vm->_collisionMan->addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
@@ -1227,7 +1227,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule)
setBackground(0x00442225);
setPalette(0x00442225);
- insertMouse435(0x4222100C, 20, 620);
+ insertPuzzleMouse(0x4222100C, 20, 620);
_asMouse = insertSprite<AsScene1407Mouse>(this);
_ssResetButton = insertStaticSprite(0x12006600, 100);
@@ -1285,17 +1285,17 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B1FF8);
setBackground(0x2110A234);
setPalette(0x2110A234);
- insertMouse433(0x0A230219);
+ insertScreenMouse(0x0A230219);
_sprite1 = insertStaticSprite(0x01102A33, 100);
_sprite1->setVisible(false);
_sprite2 = insertStaticSprite(0x04442520, 995);
_sprite3 = insertStaticSprite(0x08742271, 995);
_asTape1 = insertSprite<AsScene1201Tape>(this, 12, 1100, 201, 468, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape1);
+ _vm->_collisionMan->addCollisionSprite(_asTape1);
_asTape1->setRepl(64, 0);
_asTape2 = insertSprite<AsScene1201Tape>(this, 16, 1100, 498, 468, 0x9048A093);
- _vm->_collisionMan->addSprite(_asTape2);
+ _vm->_collisionMan->addCollisionSprite(_asTape2);
_asTape2->setRepl(64, 0);
if (which < 0) {
@@ -1311,7 +1311,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_asProjector);
+ _vm->_collisionMan->addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
@@ -1393,16 +1393,16 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xAC0B006F);
setPalette(0xAC0B006F);
_palette->addPalette(0x00801510, 0, 65, 0);
- insertMouse433(0xB006BAC8);
+ insertScreenMouse(0xB006BAC8);
if (getGlobalVar(V_KEY3_LOCATION) == 5) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 267, 411);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
}
_sprite1 = insertStaticSprite(0x1900A1F8, 1100);
_asTape = insertSprite<AsScene1201Tape>(this, 14, 1100, 281, 411, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
if (which < 0) {
// Restoring game
@@ -1429,7 +1429,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 3) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addSprite(_asProjector);
+ _vm->_collisionMan->addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
@@ -1561,11 +1561,11 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule)
setBackground(0x0C0C007D);
setPalette(0x0C0C007D);
- insertMouse435(0xC00790C8, 20, 620);
+ insertPuzzleMouse(0xC00790C8, 20, 620);
for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
_tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
- _vm->_collisionMan->addSprite(_tiles[tileIndex]);
+ _vm->_collisionMan->addCollisionSprite(_tiles[tileIndex]);
if (getSubVar(VA_IS_TILE_MATCH, tileIndex))
_tilesLeft--;
}
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 41fc415..b40d580 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -996,7 +996,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1608::hmLowerFloor);
_asKey = insertSprite<AsCommonKey>(this, 1, 1100, 198, 220);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
if (which < 0) {
// Restoring game
@@ -1014,10 +1014,10 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x10080E01);
setPalette(0x10080E01);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
SetUpdateHandler(&Scene1608::upLowerFloor);
- insertMouse433(0x80E05108);
+ insertScreenMouse(0x80E05108);
insertStaticSprite(0x4B18F868, 1200);
}
} else if (which == 0) {
@@ -1031,8 +1031,8 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x10080E01);
setPalette(0x10080E01);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
- insertMouse433(0x80E05108);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
+ insertScreenMouse(0x80E05108);
_sprite1 = insertStaticSprite(0x7D0404E8, 1100);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
SetUpdateHandler(&Scene1608::upLowerFloor);
@@ -1045,7 +1045,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x98001604);
setPalette(0x98001604);
_palette->addPalette("paPodRed", 65, 31, 65);
- insertMouse433(0x01600988);
+ insertScreenMouse(0x01600988);
_sprite2 = insertStaticSprite(0x491F38A8, 1100);
_asCar = createSprite<AsCommonCar>(this, 375, 227); // Create but don't add to the sprite list yet
_asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
@@ -1072,7 +1072,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarLower->setClipRect(_clipRect1);
_asIdleCarFull->setClipRect(_clipRect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
_klaymanInCar = false;
_carClipFlag = false;
@@ -1089,7 +1089,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x98001604);
setPalette(0x98001604);
_palette->addPalette("paPodRed", 65, 31, 65);
- insertMouse433(0x01600988);
+ insertScreenMouse(0x01600988);
_asCar = insertSprite<AsCommonCar>(this, 375, 227);
_asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
_asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
@@ -1114,7 +1114,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarLower->setClipRect(_clipRect1);
_asIdleCarFull->setClipRect(_clipRect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- // ... _vm->_collisionMan->addSprite(_asTape);
+ // ... _vm->_collisionMan->addCollisionSprite(_asTape);
insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
_klaymanInCar = true;
_carClipFlag = true;
@@ -1313,13 +1313,13 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule)
setBackground(0x92124A14);
setPalette(0x92124A14);
- insertMouse435(0x24A10929, 20, 620);
+ insertPuzzleMouse(0x24A10929, 20, 620);
for (int symbolPosition = 0; symbolPosition < 12; symbolPosition++)
_asSymbols[symbolPosition] = insertSprite<AsScene3011Symbol>(symbolPosition, false);
_ssButton = insertSprite<SsScene3011Button>(this, true);
- _vm->_collisionMan->addSprite(_ssButton);
+ _vm->_collisionMan->addCollisionSprite(_ssButton);
loadSound(0, 0x68E25540);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index aa14529..cf2fe63 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -193,14 +193,14 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(0x91D3A391, 0, 64, 0);
_palette->copyBasePalette(0, 256, 0);
addEntity(_palette);
- insertMouse433(0x18222039);
+ insertScreenMouse(0x18222039);
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 0)], 0);
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 1)], 1);
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 2)], 2);
_sprite = insertStaticSprite(0x31313A22, 1100);
_ssTape = insertSprite<SsScene1705Tape>(this, 15, 1100, 238, 439, 0x02363852);
- _vm->_collisionMan->addSprite(_ssTape);
+ _vm->_collisionMan->addCollisionSprite(_ssTape);
if (which < 0) {
// Restoring game
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 269fd84..2557121 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -95,7 +95,7 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x01303227);
setPalette(0x01303227);
- insertMouse433(0x0322301B);
+ insertScreenMouse(0x0322301B);
insertStaticSprite(0x42213133, 1100);
@@ -358,8 +358,8 @@ void AsScene1907Symbol::stFallOffHitGround() {
playSound(1);
sendMessage(_parentScene, 0x1022, 1000 + _newPositionIndex);
Entity::_priority = 1000 - _newPositionIndex;
- _vm->_collisionMan->removeSprite(this);
- _vm->_collisionMan->addSprite(this);
+ _vm->_collisionMan->removeCollisionSprite(this);
+ _vm->_collisionMan->addCollisionSprite(this);
SetSpriteUpdate(&AsScene1907Symbol::suFallOffHitGround);
NextState(&AsScene1907Symbol::cbFallOffHitGroundEvent);
_newStickFrameIndex = 0;
@@ -527,15 +527,15 @@ Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule)
for (int i = 0; i < 9; i++) {
_asSymbols[i] = insertSprite<AsScene1907Symbol>(this, i, getRandomPositionIndex());
- _vm->_collisionMan->addSprite(_asSymbols[i]);
+ _vm->_collisionMan->addCollisionSprite(_asSymbols[i]);
}
_ssUpDownButton = insertSprite<SsScene1907UpDownButton>(this, _asSymbols[8]);
- _vm->_collisionMan->addSprite(_ssUpDownButton);
+ _vm->_collisionMan->addCollisionSprite(_ssUpDownButton);
_asWaterHint = insertSprite<AsScene1907WaterHint>();
- insertMouse435(0x28E0120E, 20, 620);
+ insertPuzzleMouse(0x28E0120E, 20, 620);
SetMessageHandler(&Scene1907::handleMessage);
SetUpdateHandler(&Scene1907::update);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index ce871de..643bec4 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -103,7 +103,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xA6417244);
setPalette(0xA6417244);
- insertMouse433(0x17240A6C);
+ insertScreenMouse(0x17240A6C);
tempSprite = insertStaticSprite(0x0D641724, 1100);
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 7bbb9e8..12b10b4 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -203,15 +203,15 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x44242305);
setPalette(0x44242305);
- insertMouse433(0x4230144A);
+ insertScreenMouse(0x4230144A);
insertStaticSprite(0x00502330, 1100);
tempSprite = insertStaticSprite(0x78492010, 1100);
_ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x72427010, 0x32423010, 200, 0);
_asTape1 = insertSprite<AsScene1201Tape>(this, 18, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape1);
+ _vm->_collisionMan->addCollisionSprite(_asTape1);
_asTape2 = insertSprite<AsScene1201Tape>(this, 11, 1100, 441, 443, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape2);
+ _vm->_collisionMan->addCollisionSprite(_asTape2);
if (which < 0) {
insertKlayman<KmScene2101>(380, 438);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 8061e97..dc77a5e 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -548,10 +548,10 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
loadHitRectList();
setBackground(0x40008208);
setPalette(0x40008208);
- insertMouse433(0x0820C408);
+ insertScreenMouse(0x0820C408);
_asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++)
@@ -881,13 +881,13 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x08100A0C);
setPalette(0x08100A0C);
addEntity(_palette);
- insertMouse435(0x00A08089, 20, 620);
+ insertPuzzleMouse(0x00A08089, 20, 620);
for (uint32 cubePosition = 0; cubePosition < 9; cubePosition++) {
int16 cubeSymbol = (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition);
if (cubeSymbol >= 0) {
Sprite *puzzleCubeSprite = insertSprite<SsScene2202PuzzleCube>(this, cubePosition, cubeSymbol);
- _vm->_collisionMan->addSprite(puzzleCubeSprite);
+ _vm->_collisionMan->addCollisionSprite(puzzleCubeSprite);
}
}
@@ -1094,17 +1094,17 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x82C80334);
setPalette(0x82C80334);
- insertMouse433(0x80330824);
+ insertScreenMouse(0x80330824);
setHitRects(0x004B8320);
setRectList(0x004B8420);
if (getGlobalVar(V_KEY3_LOCATION) == 1) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
}
_asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
_asLeftDoor = insertSprite<AsScene2203Door>(this, 0);
_asRightDoor = insertSprite<AsScene2203Door>(this, 1);
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
@@ -1113,8 +1113,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_rightDoorClipRect.set(0, 0, _ssSmallRightDoor->getDrawRect().x2(), 480);
sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);
sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor);
- _vm->_collisionMan->addSprite(_asLeftDoor);
- _vm->_collisionMan->addSprite(_asRightDoor);
+ _vm->_collisionMan->addCollisionSprite(_asLeftDoor);
+ _vm->_collisionMan->addCollisionSprite(_asRightDoor);
if (which < 0) {
// Restoring game
@@ -1227,14 +1227,14 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x0008028D);
setPalette(0x0008028D);
addEntity(_palette);
- insertMouse433(0x80289008);
+ insertScreenMouse(0x80289008);
_ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0x2D309030, 100, 0);
} else {
_isLightOn = false;
setBackground(0xD00A028D);
setPalette(0xD00A028D);
addEntity(_palette);
- insertMouse433(0xA0289D08);
+ insertScreenMouse(0xA0289D08);
_ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0xDAC86E84, 100, 0);
}
_palette->addBasePalette(0xD00A028D, 0, 256, 0);
@@ -1467,7 +1467,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_asDoorSpikes->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8AF8);
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x0E038022, 100, 0);
- insertMouse433(0x83212411);
+ insertScreenMouse(0x83212411);
_ssTestTube = insertSprite<SsScene2206TestTube>(this, 1100, /*464, 433, */0x5E00E262);
_asPlatform = insertSprite<AsScene2206Platform>(0x085E25E0);
} else {
@@ -1479,7 +1479,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_asDoorSpikes->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8B58);
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x16882608, 100, 0);
- insertMouse433(0x02A41E09);
+ insertScreenMouse(0x02A41E09);
_ssTestTube = insertSprite<SsScene2206TestTube>(this, 1100, /*464, 433, */0x52032563);
_asPlatform = insertSprite<AsScene2206Platform>(0x317831A0);
}
@@ -1491,7 +1491,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(fileHash, 0, 256, 0);
if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x0263D144, 0, 65, 0);
- _vm->_collisionMan->addSprite(_ssTestTube);
+ _vm->_collisionMan->addCollisionSprite(_ssTestTube);
if (which < 0) {
// Restoring game
@@ -1944,14 +1944,14 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)
if (getGlobalVar(V_LIGHTS_ON)) {
setBackground(0x88C00241);
setPalette(0x88C00241);
- insertMouse433(0x00245884);
+ insertScreenMouse(0x00245884);
_ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
_asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
_asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);
- _vm->_collisionMan->addSprite(_asLever);
+ _vm->_collisionMan->addCollisionSprite(_asLever);
_asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);
_asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>();
_asWallRobotAnimation->setVisible(false);
@@ -1964,7 +1964,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)
setGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT, 1);
setBackground(0x05C02A55);
setPalette(0x05C02A55);
- insertMouse433(0x02A51054);
+ insertScreenMouse(0x02A51054);
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 0)], 0);
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 1)], 1);
@@ -2134,7 +2134,7 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
addBackground(_background);
setPalette(0x08100289);
addEntity(_palette);
- insertMouse435(0x0028D089, 40, 600);
+ insertPuzzleMouse(0x0028D089, 40, 600);
createFontSurface();
_backgroundSurface = new BaseSurface(_vm, 0, 640, 480);
@@ -2296,7 +2296,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_LIGHTS_ON)) {
setBackground(0x11840E24);
setPalette(0x11840E24);
- insertMouse433(0x40E20110);
+ insertScreenMouse(0x40E20110);
setRectList(0x004B3DC8);
} else {
setBackground(0x25848E24);
@@ -2304,12 +2304,12 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
_palette->copyBasePalette(0, 256, 0);
_palette->addPalette(0x68033B1C, 0, 65, 0);
- insertMouse433(0x48E20250);
+ insertScreenMouse(0x48E20250);
setRectList(0x004B3E18);
}
_asTape = insertSprite<AsScene1201Tape>(this, 10, 1100, 464, 435, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
if (which < 0) {
// Restoring game
@@ -2418,12 +2418,12 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
setRectList(0x004B2BF8);
setBackground(_hallOfRecordsInfo->bgFilename2);
setPalette(_hallOfRecordsInfo->bgFilename2);
- insertMouse433(0x14320138);
+ insertScreenMouse(0x14320138);
} else {
setRectList(0x004B2BB8);
setBackground(_hallOfRecordsInfo->bgFilename1);
setPalette(_hallOfRecordsInfo->bgFilename1);
- insertMouse433(0x63A40028);
+ insertScreenMouse(0x63A40028);
}
if (which < 0) {
@@ -2507,12 +2507,12 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5588);
setBackground(0x40339414);
setPalette(0x40339414);
- insertMouse433(0x3941040B);
+ insertScreenMouse(0x3941040B);
} else {
setRectList(0x004B55C8);
setBackground(0x071963E5);
setPalette(0x071963E5);
- insertMouse433(0x14320138);
+ insertScreenMouse(0x14320138);
}
if (which < 0) {
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index 3acb8b4..ed9e231 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -382,7 +382,7 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
_palette->addBasePalette(0x8C030206, 0, 256, 0);
_palette->addPalette(0x91D3A391, 0, 65, 0);
- insertMouse433(0x302028C8);
+ insertScreenMouse(0x302028C8);
_sprite1 = insertStaticSprite(0x2E068A23, 200);
insertStaticSprite(0x401410A6, 200);
@@ -694,9 +694,9 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004AF900);
setBackground(0x81660220);
setPalette(0x81660220);
- insertMouse433(0x6022481E);
+ insertScreenMouse(0x6022481E);
_asTape = insertSprite<AsScene1201Tape>(this, 9, 1100, 286, 409, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
if (which < 0) {
@@ -794,9 +794,9 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x0C05060C);
setPalette(0x0C05060C);
_palette->addPalette(0x414364B0, 0, 65, 0);
- insertMouse433(0x506080C8);
+ insertScreenMouse(0x506080C8);
_asTape = insertSprite<AsScene1201Tape>(this, 2, 1100, 480, 454, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
_asLightCord = insertSprite<AsScene2803LightCord>(this, 0xA1095A10, 0x836D3813, 368, 200);
_asLightCord->setClipRect(0, 25, 640, 480);
@@ -889,15 +889,15 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2406::handleMessage);
setRectList(0x004B78C8);
- insertMouse433(0xB03001A8);
+ insertScreenMouse(0xB03001A8);
if (getGlobalVar(V_KEY3_LOCATION) == 2) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 560, 409);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
}
_asTape = insertSprite<AsScene1201Tape>(this, 5, 1100, 456, 409, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
tempSprite2 = insertStaticSprite(0x19625293, 1100);
_clipRects[0].x1 = 0;
_clipRects[0].y1 = 0;
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 3479387..3fc508a 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -232,7 +232,7 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x1B8E8115);
_palette->addPalette(0x00128842, 65, 31, 65);
_palette->addPalette("paKlayRed", 0, 64, 0);
- insertMouse433(0xE81111B0);
+ insertScreenMouse(0xE81111B0);
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x99BE9015); // Don't add this to the sprite list
addEntity(_ssTrackShadowBackground);
@@ -542,8 +542,8 @@ Scene2504::Scene2504(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x90791B80);
setPalette(0x90791B80);
ssButton = insertSprite<SsScene2504Button>();
- _vm->_collisionMan->addSprite(ssButton);
- insertMouse435(0x91B8490F, 20, 620);
+ _vm->_collisionMan->addCollisionSprite(ssButton);
+ insertPuzzleMouse(0x91B8490F, 20, 620);
SetMessageHandler(&Scene2504::handleMessage);
SetUpdateHandler(&Scene::update);
}
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 741f413..91132c0 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -317,8 +317,8 @@ Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x51409A16);
_asWater = insertSprite<AsScene2609Water>();
_ssButton = insertSprite<SsScene2609Button>(this);
- _vm->_collisionMan->addSprite(_ssButton);
- insertMouse435(0x09A1251C, 20, 620);
+ _vm->_collisionMan->addCollisionSprite(_ssButton);
+ insertPuzzleMouse(0x09A1251C, 20, 620);
insertStaticSprite(0x02138002, 1200);
insertStaticSprite(0x825E2827, 1200);
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 50b4b24..b22da94 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -626,7 +626,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(sceneInfo->bgFilename);
_palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
- insertMouse433(0x08B08180);
+ insertScreenMouse(0x08B08180);
tempSprite = insertStaticSprite(0x1E086325, 1200);
clipRect.set(0, 0, 640, tempSprite->getDrawRect().y2());
@@ -734,7 +734,7 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
addEntity(_palette);
- insertMouse433(0x08B04180);
+ insertScreenMouse(0x08B04180);
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x12002035);
addEntity(_ssTrackShadowBackground);
@@ -894,7 +894,7 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
addEntity(_palette);
- insertMouse433(sceneInfo->mouseCursorFilename);
+ insertScreenMouse(sceneInfo->mouseCursorFilename);
_palStatus = 2;
@@ -1015,7 +1015,7 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
while (staticSprites && *staticSprites)
insertStaticSprite(*staticSprites++, 1100);
- insertMouse433(sceneInfo->mouseCursorFilename);
+ insertScreenMouse(sceneInfo->mouseCursorFilename);
if (sceneInfo->bgShadowFilename) {
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
@@ -1111,7 +1111,7 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
- insertMouse433(0x08B8C180);
+ insertScreenMouse(0x08B8C180);
_ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x18808B88);
addEntity(_ssTrackShadowBackground);
@@ -1224,7 +1224,7 @@ Scene2732::Scene2732(NeverhoodEngine *vm, Module *parentModule)
setBackground(0x0220C041);
setPalette(0x0220C041);
- insertMouse433(0x0C04502A);
+ insertScreenMouse(0x0C04502A);
setRectList(0x004AE360);
insertKlayman<KmScene2732>(108, 331);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index e40890a..25360ac 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -468,9 +468,9 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x100CA0A8, 1100);
_sprite2 = insertStaticSprite(0x287C21A4, 1100);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480);
- insertMouse433(0x0066201C);
+ insertScreenMouse(0x0066201C);
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else if (getGlobalVar(V_RADIO_ROOM_RIGHT_DOOR)) {
setRectList(0x004B6CD0);
setBackground(0x11E00684);
@@ -479,9 +479,9 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(0x11E00684, 0, 256, 0);
_sprite2 = insertStaticSprite(0x061601C8, 1100);
_klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
- insertMouse433(0x00680116);
+ insertScreenMouse(0x00680116);
_asTape = insertSprite<SsScene1705Tape>(this, 8, 1100, 302, 437, 0x01142428);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else {
setRectList(0x004B6CF0);
setBackground(0x030006E6);
@@ -490,9 +490,9 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(0x030006E6, 0, 256, 0);
_sprite2 = insertStaticSprite(0x273801CE, 1100);
_klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
- insertMouse433(0x006E2038);
+ insertScreenMouse(0x006E2038);
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
}
addEntity(_palette);
@@ -537,7 +537,7 @@ Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2802::handleMessage);
SetUpdateHandler(&Scene2802::update);
- insertMouse435(0x008810A8, 20, 620);
+ insertPuzzleMouse(0x008810A8, 20, 620);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x8284C100, true, true, true));
_currRadioMusicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
// Need to go to the first frame first to load up the palette
@@ -871,7 +871,7 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x412A423E);
addEntity(_palette);
- insertMouse433(0xA423A41A);
+ insertScreenMouse(0xA423A41A);
if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) {
_asTestTubeOne = (StaticSprite*)insertStaticSprite(0x66121222, 100);
@@ -1121,7 +1121,7 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh
SetMessageHandler(&Scene2803Small::handleMessage);
loadDataResource(0x81120132);
- insertMouse433(0x00A05290);
+ insertScreenMouse(0x00A05290);
insertSprite<AsScene2803LightCord>(this, 0xAFAD591A, 0x276E321D, 578, 200);
@@ -1743,7 +1743,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xA1D03005);
setPalette(0xA1D03005);
addEntity(_palette);
- insertMouse435(0x03001A15, 20, 620);
+ insertPuzzleMouse(0x03001A15, 20, 620);
_asCoil = insertSprite<SsScene2804LightCoil>();
_asTarget = insertSprite<SsScene2804LightTarget>();
} else {
@@ -1751,7 +1751,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x01C01414);
setPalette(0x01C01414);
addEntity(_palette);
- insertMouse435(0x01410014, 20, 620);
+ insertPuzzleMouse(0x01410014, 20, 620);
ssBeamCoilBody = insertSprite<SsScene2804BeamCoilBody>();
_asCoil = insertSprite<AsScene2804BeamCoil>(this, ssBeamCoilBody);
_asTarget = insertSprite<AsScene2804BeamTarget>();
@@ -1759,7 +1759,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
}
_ssRedButton = insertSprite<SsScene2804RedButton>(this);
- _vm->_collisionMan->addSprite(_ssRedButton);
+ _vm->_collisionMan->addCollisionSprite(_ssRedButton);
for (uint crystalIndex = 0; crystalIndex < 5; crystalIndex++) {
AsScene2804CrystalWaves *asCrystalWaves = NULL;
@@ -1767,7 +1767,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
asCrystalWaves = insertSprite<AsScene2804CrystalWaves>(crystalIndex);
_asCrystals[crystalIndex] = insertSprite<AsScene2804Crystal>(asCrystalWaves, crystalIndex);
_ssCrystalButtons[crystalIndex] = insertSprite<SsScene2804CrystalButton>(this, _asCrystals[crystalIndex], crystalIndex);
- _vm->_collisionMan->addSprite(_ssCrystalButtons[crystalIndex]);
+ _vm->_collisionMan->addCollisionSprite(_ssCrystalButtons[crystalIndex]);
}
}
@@ -1889,7 +1889,7 @@ Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x08021E04);
setPalette(0x08021E04);
_palette->addPalette(0x8A6B1F91, 0, 65, 0);
- insertMouse433(0x21E00088);
+ insertScreenMouse(0x21E00088);
_sprite1 = insertStaticSprite(0x008261E7, 1100);
_sprite2 = insertStaticSprite(0x020CE421, 1100);
@@ -1982,7 +1982,7 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
_pointList = _dataResource.getPointArray(0x3606A422);
- insertMouse433(0x22114C13);
+ insertScreenMouse(0x22114C13);
setBackground(0xC1B22110);
setPalette(0xC1B22110);
@@ -2119,7 +2119,7 @@ Scene2807::Scene2807(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x3E049A95);
setPalette(0x3E049A95);
- insertMouse435(0x49A913E8, 20, 620);
+ insertPuzzleMouse(0x49A913E8, 20, 620);
}
@@ -2438,19 +2438,19 @@ Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(kScene2808FileHashes1[which]);
asHandle = insertSprite<AsScene2808Handle>(this, which);
- _vm->_collisionMan->addSprite(asHandle);
+ _vm->_collisionMan->addCollisionSprite(asHandle);
_asFlow = insertSprite<AsScene2808Flow>(this, which);
insertSprite<AsScene2808LightEffect>(which);
for (int testTubeIndex = 0; testTubeIndex < 3; testTubeIndex++) {
SsScene2808Dispenser *ssDispenser = insertSprite<SsScene2808Dispenser>(this, which, testTubeIndex);
- _vm->_collisionMan->addSprite(ssDispenser);
+ _vm->_collisionMan->addCollisionSprite(ssDispenser);
_asTestTubes[testTubeIndex] = insertSprite<AsScene2808TestTube>(which, testTubeIndex, ssDispenser);
- _vm->_collisionMan->addSprite(_asTestTubes[testTubeIndex]);
+ _vm->_collisionMan->addCollisionSprite(_asTestTubes[testTubeIndex]);
}
- insertMouse433(kScene2808FileHashes2[which]);
+ insertScreenMouse(kScene2808FileHashes2[which]);
}
@@ -2570,7 +2570,7 @@ Scene2809::Scene2809(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xB22116C5);
setPalette(0xB22116C5);
- insertMouse433(0x116C1B2A);
+ insertScreenMouse(0x116C1B2A);
_sprite1 = insertStaticSprite(0x1FA2EB82, 1100);
@@ -2711,7 +2711,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x26508804);
setPalette(0x26508804);
- insertMouse433(0x0880026D);
+ insertScreenMouse(0x0880026D);
_sprite6 = insertStaticSprite(0x03615227, 1100);
_sprite5 = insertStaticSprite(0xE059A224, 1100);
@@ -2727,10 +2727,10 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KLAYMAN_SMALL)) {
_asTape = insertSprite<AsScene1201Tape>(this, 0, 900, 245, 429, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
} else {
_asTape = insertSprite<AsScene1201Tape>(this, 0, 1100, 245, 429, 0x9148A011);
- _vm->_collisionMan->addSprite(_asTape);
+ _vm->_collisionMan->addCollisionSprite(_asTape);
}
_sprite1 = insertStaticSprite(0x430001C4, 1200);
@@ -2752,7 +2752,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE438);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeSprite(_asTape);
+ _vm->_collisionMan->removeCollisionSprite(_asTape);
} else {
insertKlayman<KmScene2810>(300, 424, _clipRects, 2);
setMessageList(0x004AE438);
@@ -2796,7 +2796,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE6D8);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeSprite(_asTape);
+ _vm->_collisionMan->removeCollisionSprite(_asTape);
} else {
insertKlaymanLadder();
if (getGlobalVar(V_LADDER_DOWN_ACTION)) {
@@ -2819,7 +2819,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE428);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeSprite(_asTape);
+ _vm->_collisionMan->removeCollisionSprite(_asTape);
} else {
insertKlayman<KmScene2810>(450, 424, _clipRects, 2);
setMessageList(0x004AE418);
@@ -2838,7 +2838,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE410);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeSprite(_asTape);
+ _vm->_collisionMan->removeCollisionSprite(_asTape);
}
}
@@ -3035,15 +3035,15 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(0x03600606, 0, 256, 0);
_sprite1 = insertStaticSprite(0x0C06C860, 1100);
- insertMouse433(0x0060203E);
+ insertScreenMouse(0x0060203E);
if (getGlobalVar(V_KEY3_LOCATION) == 3) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 474, 437);
- _vm->_collisionMan->addSprite(_asKey);
+ _vm->_collisionMan->addCollisionSprite(_asKey);
}
_ssTape = insertSprite<SsScene1705Tape>(this, 6, 1100, 513, 437, 0xA1361863);
- _vm->_collisionMan->addSprite(_ssTape);
+ _vm->_collisionMan->addCollisionSprite(_ssTape);
_asWinch = insertSprite<AsScene2812Winch>();
_asTrapDoor = insertSprite<AsScene2812TrapDoor>();
@@ -3181,7 +3181,7 @@ Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
addBackground(_background);
_background->getSurface()->getDrawRect().y = -10;
setPalette(0xD542022E);
- insertMouse435(0x0028D089, 20, 620);
+ insertPuzzleMouse(0x0028D089, 20, 620);
_ssButton = insertStaticSprite(0x1A4D4120, 1100);
_ssButton->setVisible(false);
loadSound(2, 0x19044E72);
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 4b8f28e..551d6cb 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -365,7 +365,7 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint i = 0; i < 6; ++i) {
if (i != 2 || !_isButton2Broken) {
_ssLocationButtons[i] = insertSprite<SsScene2901LocationButton>(this, _currLocationButtonNum, i);
- _vm->_collisionMan->addSprite(_ssLocationButtons[i]);
+ _vm->_collisionMan->addCollisionSprite(_ssLocationButtons[i]);
_ssLocationButtonLights[i] = insertSprite<SsScene2901LocationButtonLight>(_currLocationButtonNum, i);
}
}
@@ -374,9 +374,9 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
insertSprite<SsScene2901BrokenButton>(_currLocationButtonNum);
_ssBigButton = insertSprite<SsScene2901BigButton>(this, _currLocationButtonNum);
- _vm->_collisionMan->addSprite(_ssBigButton);
+ _vm->_collisionMan->addCollisionSprite(_ssBigButton);
- insertMouse435(kScene2901FileHashes2[_currLocationButtonNum], 20, 620);
+ insertPuzzleMouse(kScene2901FileHashes2[_currLocationButtonNum], 20, 620);
SetUpdateHandler(&Scene2901::update);
SetMessageHandler(&Scene2901::handleMessage);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 1fc1f53..6767aa5 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -712,9 +712,9 @@ AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009Symbol::handleMessage);
_ssArrowPrev = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _symbolPosition * 2 + 0);
- _vm->_collisionMan->addSprite(_ssArrowPrev);
+ _vm->_collisionMan->addCollisionSprite(_ssArrowPrev);
_ssArrowNext = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _symbolPosition * 2 + 1);
- _vm->_collisionMan->addSprite(_ssArrowNext);
+ _vm->_collisionMan->addCollisionSprite(_ssArrowNext);
}
uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -766,16 +766,16 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0xD000420C);
setPalette(0xD000420C);
- insertMouse435(0x04208D08, 20, 620);
+ insertPuzzleMouse(0x04208D08, 20, 620);
_ssFireCannonButton = insertSprite<SsScene3009FireCannonButton>(this);
- _vm->_collisionMan->addSprite(_ssFireCannonButton);
+ _vm->_collisionMan->addCollisionSprite(_ssFireCannonButton);
_asVerticalIndicator = insertSprite<AsScene3009VerticalIndicator>(this, _cannonTargetStatus);
- _vm->_collisionMan->addSprite(_asVerticalIndicator);
+ _vm->_collisionMan->addCollisionSprite(_asVerticalIndicator);
_asHorizontalIndicator = insertSprite<AsScene3009HorizontalIndicator>(this, _cannonTargetStatus);
- _vm->_collisionMan->addSprite(_asHorizontalIndicator);
+ _vm->_collisionMan->addCollisionSprite(_asHorizontalIndicator);
if (_cannonTargetStatus != kCTSNull && _cannonTargetStatus != kCTSRightRobotNoTarget && _cannonTargetStatus != kCTSRightRobotIsTarget && _cannonTargetStatus != kCTSRightNoRobot) {
_keepVideo = true;
@@ -1235,7 +1235,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
for (int i = 0; i < 3; i++) {
_asDeadBolts[i] = insertSprite<AsScene3010DeadBolt>(this, i, which == 1);//CHECKME
_ssDeadBoltButtons[i] = insertSprite<SsScene3010DeadBoltButton>(this, i, initCountdown, which == 1);//CHECKME
- _vm->_collisionMan->addSprite(_ssDeadBoltButtons[i]);
+ _vm->_collisionMan->addCollisionSprite(_ssDeadBoltButtons[i]);
if (getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[i]))
initCountdown++;
_boltUnlocking[i] = false;
@@ -1243,7 +1243,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which == 0) {
- insertMouse435(0x02622800, 20, 620);
+ insertPuzzleMouse(0x02622800, 20, 620);
}
loadSound(0, 0x68E25540);
@@ -1460,13 +1460,13 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0xA4070114);
addEntity(_palette);
- insertMouse435(0x24A00929, 20, 620);
+ insertPuzzleMouse(0x24A00929, 20, 620);
for (int symbolIndex = 0; symbolIndex < 12; symbolIndex++)
_asSymbols[symbolIndex] = insertSprite<AsScene3011Symbol>(symbolIndex, true);
_ssButton = insertSprite<SsScene3011Button>(this, true);
- _vm->_collisionMan->addSprite(_ssButton);
+ _vm->_collisionMan->addCollisionSprite(_ssButton);
}
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index c899a59..3f0c92f 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -42,7 +42,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_background = NULL;
if (clearHitRects) {
_vm->_collisionMan->clearHitRects();
- _vm->_collisionMan->clearSprites();
+ _vm->_collisionMan->clearCollisionSprites();
}
_vm->_screen->setFps(24);
_vm->_screen->setSmackerDecoder(NULL);
@@ -160,7 +160,7 @@ void Scene::setSpriteSurfacePriority(Sprite *sprite, int priority) {
}
void Scene::deleteSprite(Sprite **sprite) {
- _vm->_collisionMan->removeSprite(*sprite);
+ _vm->_collisionMan->removeCollisionSprite(*sprite);
removeSurface((*sprite)->getSurface());
removeEntity(*sprite);
delete *sprite;
@@ -194,7 +194,7 @@ Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
}
-void Scene::insertMouse433(uint32 fileHash, const NRect *mouseRect) {
+void Scene::insertScreenMouse(uint32 fileHash, const NRect *mouseRect) {
NRect rect(-1, -1, -1, -1);
if (mouseRect)
rect = *mouseRect;
@@ -202,7 +202,7 @@ void Scene::insertMouse433(uint32 fileHash, const NRect *mouseRect) {
addEntity(_mouseCursor);
}
-void Scene::insertMouse435(uint32 fileHash, int16 x1, int16 x2) {
+void Scene::insertPuzzleMouse(uint32 fileHash, int16 x1, int16 x2) {
_mouseCursor = new Mouse(_vm, fileHash, x1, x2);
addEntity(_mouseCursor);
}
@@ -317,8 +317,8 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
}
bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
- for (uint i = 0; i < _vm->_collisionMan->getSpriteCount(); i++) {
- Sprite *sprite = _vm->_collisionMan->getSprite(i);
+ for (uint i = 0; i < _vm->_collisionMan->getCollisionSpritesCount(); i++) {
+ Sprite *sprite = _vm->_collisionMan->getCollisionSprite(i);
if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
sendPointMessage(sprite, 0x1011, _mouseClickPos) != 0) {
return true;
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index b531796..a9e1674 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -59,8 +59,8 @@ public:
void setPalette(uint32 fileHash = 0);
void setHitRects(uint32 id);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
- void insertMouse433(uint32 fileHash, const NRect *mouseRect = NULL);
- void insertMouse435(uint32 fileHash, int16 x1, int16 x2);
+ void insertScreenMouse(uint32 fileHash, const NRect *mouseRect = NULL);
+ void insertPuzzleMouse(uint32 fileHash, int16 x1, int16 x2);
void insertNavigationMouse(uint32 fileHash, int type);
void showMouse(bool visible);
void changeMouseCursor(uint32 fileHash);
Commit: 9963ce41ea5f2c733873f16fd47be9b060dd2d16
https://github.com/scummvm/scummvm/commit/9963ce41ea5f2c733873f16fd47be9b060dd2d16
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Merge CollisionMan into Scene class
Changed paths:
R engines/neverhood/collisionman.cpp
R engines/neverhood/collisionman.h
engines/neverhood/diskplayerscene.cpp
engines/neverhood/klayman.cpp
engines/neverhood/klayman.h
engines/neverhood/menumodule.cpp
engines/neverhood/module.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module1500.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1700.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2400.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2600.cpp
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2900.cpp
engines/neverhood/module3000.cpp
engines/neverhood/navigationscene.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
engines/neverhood/smackerscene.cpp
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
deleted file mode 100644
index bafa1e3..0000000
--- a/engines/neverhood/collisionman.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/collisionman.h"
-
-namespace Neverhood {
-
-static HitRect defaultHitRect = {NRect(), 0x5000};
-
-CollisionMan::CollisionMan(NeverhoodEngine *vm)
- : _vm(vm), _hitRects(NULL) {
-}
-
-CollisionMan::~CollisionMan() {
-}
-
-void CollisionMan::setHitRects(uint32 id) {
- setHitRects(_vm->_staticData->getHitRectList(id));
-}
-
-void CollisionMan::setHitRects(HitRectList *hitRects) {
- _hitRects = hitRects;
-}
-
-void CollisionMan::clearHitRects() {
- _hitRects = NULL;
-}
-
-HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
- if (_hitRects)
- for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++)
- if ((*it).rect.contains(x, y))
- return &(*it);
- return &defaultHitRect;
-}
-
-void CollisionMan::addCollisionSprite(Sprite *sprite) {
- int index = 0, insertIndex = -1;
- for (Common::Array<Sprite*>::iterator iter = _collisionSprites.begin(); iter != _collisionSprites.end(); iter++) {
- if ((*iter)->getPriority() > sprite->getPriority()) {
- insertIndex = index;
- break;
- }
- index++;
- }
- if (insertIndex >= 0)
- _collisionSprites.insert_at(insertIndex, sprite);
- else
- _collisionSprites.push_back(sprite);
-}
-
-void CollisionMan::removeCollisionSprite(Sprite *sprite) {
- for (uint index = 0; index < _collisionSprites.size(); index++) {
- if (_collisionSprites[index] == sprite) {
- _collisionSprites.remove_at(index);
- break;
- }
- }
-}
-
-void CollisionMan::clearCollisionSprites() {
- _collisionSprites.clear();
-}
-
-void CollisionMan::checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam) {
- for (Common::Array<Sprite*>::iterator iter = _collisionSprites.begin(); iter != _collisionSprites.end(); iter++) {
- Sprite *collSprite = *iter;
- if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getCollisionBounds())) {
- sprite->sendMessage(collSprite, messageNum, messageParam);
- }
- }
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/collisionman.h b/engines/neverhood/collisionman.h
deleted file mode 100644
index 36bb2a5..0000000
--- a/engines/neverhood/collisionman.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_COLLISIONMAN_H
-#define NEVERHOOD_COLLISIONMAN_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/sprite.h"
-#include "neverhood/staticdata.h"
-
-namespace Neverhood {
-
-class CollisionMan {
-public:
- CollisionMan(NeverhoodEngine *vm);
- ~CollisionMan();
- void setHitRects(uint32 id);
- void setHitRects(HitRectList *hitRects);
- void clearHitRects();
- HitRect *findHitRectAtPos(int16 x, int16 y);
- void addCollisionSprite(Sprite *sprite);
- void removeCollisionSprite(Sprite *sprite);
- void clearCollisionSprites();
- void checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam);
- uint getCollisionSpritesCount() const { return _collisionSprites.size(); }
- Sprite *getCollisionSprite(uint index) const { return _collisionSprites[index]; }
-protected:
- NeverhoodEngine *_vm;
- HitRectList *_hitRects;
- Common::Array<Sprite*> _collisionSprites;
-};
-
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_COLLISIONMAN_H */
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index fbef600..907e027 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -316,7 +316,7 @@ void DiskplayerSlot::stop() {
}
DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int paletteIndex)
- : Scene(vm, parentModule, true), _diskIndex(0), _appearCountdown(0), _tuneInCountdown(0),
+ : Scene(vm, parentModule), _diskIndex(0), _appearCountdown(0), _tuneInCountdown(0),
_hasAllDisks(false), _dropKey(false), _inputDisabled(true), _updateStatus(kUSStopped) {
int availableDisksCount = 0;
@@ -325,7 +325,7 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
setPalette(kDiskplayerPaletteFileHashes[paletteIndex]);
_ssPlayButton = insertSprite<DiskplayerPlayButton>(this);
- _vm->_collisionMan->addCollisionSprite(_ssPlayButton);
+ addCollisionSprite(_ssPlayButton);
_asKey = insertSprite<AsDiskplayerSceneKey>();
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 39d38c3..0dfd29b 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -21,8 +21,8 @@
*/
#include "neverhood/klayman.h"
-#include "neverhood/collisionman.h"
#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
#include "neverhood/staticdata.h"
namespace Neverhood {
@@ -60,7 +60,7 @@ static const KlaymanIdleTableItem klaymanIdleTable1002[] = {
// Klayman
-Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
+Klayman::Klayman(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
: AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
_isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
_attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
@@ -744,12 +744,12 @@ void Klayman::suSneaking() {
_deltaX = 0;
if (_destX != _x) {
- HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
_x += xdiff;
if (_pathPoints) {
walkAlongPathPoints();
} else {
- HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
_y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
} else if (hitRectNext->type == 0x5003) {
@@ -925,12 +925,12 @@ void Klayman::suWalkingTestExit() {
(_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) {
sendMessage(this, 0x1019, 0);
} else {
- HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
_x += xdelta;
if (_pathPoints) {
walkAlongPathPoints();
} else {
- HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
_y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
} else if (hitRectNext->type == 0x5003) {
@@ -1408,12 +1408,12 @@ void Klayman::suLargeStep() {
_deltaX = 0;
if (_x != _destX) {
- HitRect *hitRectPrev = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
_x += xdiff;
if (_pathPoints) {
walkAlongPathPoints();
} else {
- HitRect *hitRectNext = _vm->_collisionMan->findHitRectAtPos(_x, _y);
+ HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
if (hitRectNext->type == 0x5002) {
_y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
} else if (hitRectNext->type == 0x5003) {
@@ -2868,13 +2868,13 @@ uint32 Klayman::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity
void Klayman::suFallDown() {
AnimatedSprite::updateDeltaXY();
- HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
+ HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
updateBounds();
sendMessage(this, 0x1019, 0);
}
- _vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
+ _parentScene->checkCollision(this, 0xFFFF, 0x4810, 0);
}
void Klayman::stJumpToRingVenusFlyTrap() {
@@ -3028,7 +3028,7 @@ void Klayman::evMoveVenusFlyTrapDone() {
void Klayman::suFallSkipJump() {
updateDeltaXY();
- HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
+ HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
_y = hitRect->rect.y1;
updateBounds();
@@ -3348,7 +3348,7 @@ void Klayman::stPeekInsideBlink() {
// KmScene1001
-KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1001::KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
}
@@ -3426,7 +3426,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1002
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
setKlaymanIdleTable1();
@@ -3548,7 +3548,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1004
-KmScene1004::KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1004::KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_dataResource.load(0x01900A04);
@@ -3614,7 +3614,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1109::KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -3682,7 +3682,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1201
-KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1201::KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
@@ -3753,7 +3753,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1303::KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -3774,7 +3774,7 @@ uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1304::KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -3828,7 +3828,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene1305::KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1305::KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -3854,7 +3854,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1306::KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
}
@@ -3980,7 +3980,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene1308::KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1308::KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4056,7 +4056,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1401
-KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1401::KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4131,7 +4131,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1402
-KmScene1402::KmScene1402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1402::KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
SetFilterY(&Sprite::defFilterY);
@@ -4176,7 +4176,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1403
-KmScene1403::KmScene1403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1403::KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
@@ -4236,7 +4236,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1404
-KmScene1404::KmScene1404(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1404::KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4314,7 +4314,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene1608::KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1608::KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
}
@@ -4405,7 +4405,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1705
-KmScene1705::KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1705::KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4498,7 +4498,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene1901::KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene1901::KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4537,7 +4537,7 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2001::KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2001::KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4603,7 +4603,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2101::KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2101::KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -4689,7 +4689,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
+KmScene2201::KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -4763,7 +4763,7 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2203::KmScene2203(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2203::KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -4835,7 +4835,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2205::KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2205::KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -4883,7 +4883,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2206::KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_walkResumeFrameIncr = 1;
@@ -4989,7 +4989,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2207::KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5053,7 +5053,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2242::KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5123,7 +5123,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5177,7 +5177,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
return 0;
}
-KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2247::KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5231,7 +5231,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5314,7 +5314,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2402::KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2402::KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5386,7 +5386,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2403::KmScene2403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2403::KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5472,7 +5472,7 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2406::KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
+KmScene2406::KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -5565,7 +5565,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2501::KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2501::KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5616,7 +5616,7 @@ uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2732::KmScene2732(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2732::KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5633,7 +5633,7 @@ uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2801::KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2801::KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5705,7 +5705,7 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2803::KmScene2803(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
+KmScene2803::KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -5769,7 +5769,7 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_dataResource.load(0x81120132);
@@ -5822,7 +5822,7 @@ uint32 KmScene2803Small::xHandleMessage(int messageNum, const MessageParam ¶
return 0;
}
-KmScene2805::KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2805::KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5879,7 +5879,7 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
return messageResult;
}
-KmScene2806::KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+KmScene2806::KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -5940,7 +5940,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2809::KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -6001,7 +6001,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -6051,7 +6051,7 @@ uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶
return 0;
}
-KmScene2810::KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount)
+KmScene2810::KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -6146,7 +6146,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
return 0;
}
-KmScene2812::KmScene2812(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2812::KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3b08108..99fcceb 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -34,6 +34,7 @@ namespace Neverhood {
// TODO Also the methods should probably rearranged and be grouped together more consistently
class Klayman;
+class Scene;
const uint32 kKlaymanSpeedUpHash = 0x004A2148;
@@ -48,7 +49,7 @@ struct KlaymanIdleTableItem {
class Klayman : public AnimatedSprite {
public:
- Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
+ Klayman(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
void update();
@@ -385,7 +386,7 @@ public:
void stWaitLeverDown();
protected:
- Entity *_parentScene;
+ Scene *_parentScene;
Sprite *_attachedSprite;
int _ladderStatus;
bool _isWalking;
@@ -456,14 +457,14 @@ protected:
class KmScene1001 : public Klayman {
public:
- KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1002 : public Klayman {
public:
- KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -471,140 +472,140 @@ protected:
class KmScene1004 : public Klayman {
public:
- KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1109 : public Klayman {
public:
- KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1201 : public Klayman {
public:
- KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1303 : public Klayman {
public:
- KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1304 : public Klayman {
public:
- KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1305 : public Klayman {
public:
- KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1306 : public Klayman {
public:
- KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1308 : public Klayman {
public:
- KmScene1308(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1401 : public Klayman {
public:
- KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1402 : public Klayman {
public:
- KmScene1402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1403 : public Klayman {
public:
- KmScene1403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1404 : public Klayman {
public:
- KmScene1404(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1608 : public Klayman {
public:
- KmScene1608(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1705 : public Klayman {
public:
- KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene1901 : public Klayman {
public:
- KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2001 : public Klayman {
public:
- KmScene2001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2101 : public Klayman {
public:
- KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2201 : public Klayman {
public:
- KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
+ KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2203 : public Klayman {
public:
- KmScene2203(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2205 : public Klayman {
public:
- KmScene2205(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -612,7 +613,7 @@ protected:
class KmScene2206 : public Klayman {
public:
- KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
~KmScene2206();
protected:
void xUpdate();
@@ -621,14 +622,14 @@ protected:
class KmScene2207 : public Klayman {
public:
- KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2242 : public Klayman {
public:
- KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -636,7 +637,7 @@ protected:
class KmHallOfRecords : public Klayman {
public:
- KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -644,7 +645,7 @@ protected:
class KmScene2247 : public Klayman {
public:
- KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -652,77 +653,77 @@ protected:
class KmScene2401 : public Klayman {
public:
- KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2402 : public Klayman {
public:
- KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2403 : public Klayman {
public:
- KmScene2403(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2406 : public Klayman {
public:
- KmScene2406(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
+ KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2501 : public Klayman {
public:
- KmScene2501(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2732 : public Klayman {
public:
- KmScene2732(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2801 : public Klayman {
public:
- KmScene2801(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2803 : public Klayman {
public:
- KmScene2803(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
+ KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2803Small : public Klayman {
public:
- KmScene2803Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2805 : public Klayman {
public:
- KmScene2805(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2806 : public Klayman {
public:
- KmScene2806(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -730,7 +731,7 @@ protected:
class KmScene2809 : public Klayman {
public:
- KmScene2809(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -738,14 +739,14 @@ protected:
class KmScene2810Small : public Klayman {
public:
- KmScene2810Small(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
class KmScene2810 : public Klayman {
public:
- KmScene2810(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y,
+ KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
NRect *clipRects, uint clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
@@ -753,7 +754,7 @@ protected:
class KmScene2812 : public Klayman {
public:
- KmScene2812(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+ KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 521c0e0..a1489fc 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -212,7 +212,7 @@ uint32 MenuButton::handleMessage(int messageNum, const MessageParam ¶m, Enti
}
MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
static const uint32 kMenuButtonFileHashes[] = {
0x36C62120,
@@ -251,7 +251,7 @@ MainMenu::MainMenu(NeverhoodEngine *vm, Module *parentModule)
for (uint buttonIndex = 0; buttonIndex < 9; ++buttonIndex) {
Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
kMenuButtonFileHashes[buttonIndex], kMenuButtonCollisionBounds[buttonIndex]);
- _vm->_collisionMan->addCollisionSprite(menuButton);
+ addCollisionSprite(menuButton);
}
SetUpdateHandler(&Scene::update);
@@ -298,7 +298,7 @@ static const uint32 kCreditsSceneFileHashes[] = {
};
CreditsScene::CreditsScene(NeverhoodEngine *vm, Module *parentModule, bool canAbort)
- : Scene(vm, parentModule, true), _canAbort(canAbort), _screenIndex(0), _ticksDuration(0),
+ : Scene(vm, parentModule), _canAbort(canAbort), _screenIndex(0), _ticksDuration(0),
_countdown(216) {
SetUpdateHandler(&CreditsScene::update);
@@ -368,7 +368,7 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, En
}
WidgetScene::WidgetScene(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _currWidget(NULL) {
+ : Scene(vm, parentModule), _currWidget(NULL) {
}
NPoint WidgetScene::getMousePos() {
@@ -466,7 +466,7 @@ TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 it
void TextLabelWidget::addSprite() {
_parentScene->addSprite(this);
- _vm->_collisionMan->addCollisionSprite(this);
+ _parentScene->addCollisionSprite(this);
}
int16 TextLabelWidget::getWidth() {
@@ -544,7 +544,7 @@ void TextEditWidget::addSprite() {
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
- _vm->_collisionMan->addCollisionSprite(this);
+ _parentScene->addCollisionSprite(this);
_surface->setVisible(true);
_textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _textSurface->getCharHeight()) / 2,
0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
@@ -708,7 +708,7 @@ void SavegameListBox::addSprite() {
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
- _vm->_collisionMan->addCollisionSprite(this);
+ _parentScene->addCollisionSprite(this);
_surface->setVisible(true);
buildItems();
_firstVisibleItem = 0;
@@ -826,7 +826,7 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
kSaveGameMenuButtonFileHashes[buttonIndex], kSaveGameMenuButtonCollisionBounds[buttonIndex]);
- _vm->_collisionMan->addCollisionSprite(menuButton);
+ addCollisionSprite(menuButton);
}
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 576a5a4..b91b9de 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -27,7 +27,6 @@
#include "neverhood/neverhood.h"
#include "neverhood/background.h"
-#include "neverhood/collisionman.h"
#include "neverhood/entity.h"
#include "neverhood/graphics.h"
#include "neverhood/mouse.h"
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index b3deb6f..d9486d9 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -3,7 +3,6 @@ MODULE := engines/neverhood
MODULE_OBJS = \
background.o \
blbarchive.o \
- collisionman.o \
detection.o \
diskplayerscene.o \
entity.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 6c5cc28..7033caf 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -335,7 +335,7 @@ uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam &p
}
Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asDoor(NULL), _asWindow(NULL) {
+ : Scene(vm, parentModule), _asDoor(NULL), _asWindow(NULL) {
Sprite *tempSprite;
@@ -1156,7 +1156,7 @@ uint32 AsScene1002KlaymanPeekHand::handleMessage(int messageNum, const MessagePa
}
Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isKlaymanFloor(false), _isClimbingLadder(false) {
+ : Scene(vm, parentModule), _isKlaymanFloor(false), _isClimbingLadder(false) {
NRect tempClipRect;
Sprite *tempSprite;
@@ -1243,7 +1243,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_asDoorSpy = insertSprite<AsScene1002DoorSpy>(tempClipRect, this, _asDoor, tempSprite);
_ssPressButton = insertSprite<SsCommonPressButton>(this, 0x00412692, 0x140B60BE, 800, 0);
_asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, false);
- _vm->_collisionMan->addCollisionSprite(_asVenusFlyTrap);
+ addCollisionSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
@@ -1389,7 +1389,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
// StaticScene
StaticScene::StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&StaticScene::handleMessage);
@@ -1442,7 +1442,7 @@ uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam &pa
}
Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _paletteAreaStatus(-1) {
+ : Scene(vm, parentModule), _paletteAreaStatus(-1) {
Sprite *tempSprite;
@@ -1542,7 +1542,7 @@ void Scene1004::updatePaletteArea() {
// Scene1005
Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene1005::handleMessage);
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index 4b8a8ba..c39845e 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -429,7 +429,7 @@ uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam &
}
Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _countdown(0), _isPanelOpen(false), _isActionButtonClicked(false), _doMoveTeddy(false),
+ : Scene(vm, parentModule), _countdown(0), _isPanelOpen(false), _isActionButtonClicked(false), _doMoveTeddy(false),
_isClosePanelDone(false), _leaveResult(0), _backgroundIndex(0) {
Sprite *ssOpenButton;
@@ -444,7 +444,7 @@ Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule)
_asTeddyBear = insertSprite<AsScene1105TeddyBear>(this);
ssOpenButton = insertSprite<SsScene1105OpenButton>(this);
- _vm->_collisionMan->addCollisionSprite(ssOpenButton);
+ addCollisionSprite(ssOpenButton);
insertPuzzleMouse(0x10006208, 20, 620);
loadSound(0, 0x48442057);
@@ -555,19 +555,19 @@ void Scene1105::createObjects() {
_ssSymbolDice[2] = insertSprite<SsScene1105SymbolDie>(2, 485, 304);
_ssSymbol1UpButton = insertSprite<SsScene1105Button>(this, 0x08002860, NRect(146, 362, 192, 403));
- _vm->_collisionMan->addCollisionSprite(_ssSymbol1UpButton);
+ addCollisionSprite(_ssSymbol1UpButton);
_ssSymbol1DownButton = insertSprite<SsScene1105Button>(this, 0x42012460, NRect(147, 404, 191, 442));
- _vm->_collisionMan->addCollisionSprite(_ssSymbol1DownButton);
+ addCollisionSprite(_ssSymbol1DownButton);
_ssSymbol2UpButton = insertSprite<SsScene1105Button>(this, 0x100030A0, NRect(308, 361, 355, 402));
- _vm->_collisionMan->addCollisionSprite(_ssSymbol2UpButton);
+ addCollisionSprite(_ssSymbol2UpButton);
_ssSymbol2DownButton = insertSprite<SsScene1105Button>(this, 0x840228A0, NRect(306, 406, 352, 445));
- _vm->_collisionMan->addCollisionSprite(_ssSymbol2DownButton);
+ addCollisionSprite(_ssSymbol2DownButton);
_ssSymbol3UpButton = insertSprite<SsScene1105Button>(this, 0x20000120, NRect(476, 358, 509, 394));
- _vm->_collisionMan->addCollisionSprite(_ssSymbol3UpButton);
+ addCollisionSprite(_ssSymbol3UpButton);
_ssSymbol3DownButton = insertSprite<SsScene1105Button>(this, 0x08043121, NRect(463, 401, 508, 438));
- _vm->_collisionMan->addCollisionSprite(_ssSymbol3DownButton);
+ addCollisionSprite(_ssSymbol3DownButton);
_ssActionButton = insertSprite<SsScene1105Button>(this, 0x8248AD35, NRect(280, 170, 354, 245));
- _vm->_collisionMan->addCollisionSprite(_ssActionButton);
+ addCollisionSprite(_ssActionButton);
_isPanelOpen = true;
@@ -646,7 +646,7 @@ void Scene1105::update() {
}
Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, which) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene1109::handleMessage);
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 11e29fd..844d07f 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -653,7 +653,7 @@ void AsScene1201LeftDoor::stCloseDoor() {
}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _creatureExploded(false), _asMatch(NULL), _asTntMan(NULL),
+ : Scene(vm, parentModule), _creatureExploded(false), _asMatch(NULL), _asTntMan(NULL),
_asCreature(NULL), _asTntManRope(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
int16 topY1, topY2, topY3, topY4;
@@ -674,7 +674,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
insertScreenMouse(0x9A2C0409);
_asTape = insertSprite<AsScene1201Tape>(this, 3, 1100, 243, 340, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
tempSprite = insertStaticSprite(0x03C82530, 100);
topY1 = tempSprite->getY() + tempSprite->getDrawRect().height;
@@ -752,7 +752,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
_asTntMan->setClipRect(x1, 0, x2, 480);
_asTntMan->setRepl(64, 0);
- _vm->_collisionMan->addCollisionSprite(_asTntMan);
+ addCollisionSprite(_asTntMan);
tempSprite = insertSprite<AsScene1201TntManFlame>(_asTntMan);
tempSprite->setClipRect(x1, 0, x2, 480);
}
@@ -826,7 +826,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_MATCH_STATUS) < 3) {
_asMatch = insertSprite<AsScene1201Match>(this);
- _vm->_collisionMan->addCollisionSprite(_asMatch);
+ addCollisionSprite(_asMatch);
}
if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_CREATURE_EXPLODED) == 0) {
@@ -998,7 +998,7 @@ void AsScene1202TntItem::stChangePositionDone() {
}
Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _paletteResource(vm),
+ : Scene(vm, parentModule), _paletteResource(vm),
_soundToggle(true), _isPuzzleSolved(false), _counter(0), _clickedIndex(-1) {
SetMessageHandler(&Scene1202::handleMessage);
@@ -1015,7 +1015,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule)
for (int tntIndex = 0; tntIndex < 18; tntIndex++) {
_asTntItems[tntIndex] = insertSprite<AsScene1202TntItem>(this, tntIndex);
- _vm->_collisionMan->addCollisionSprite(_asTntItems[tntIndex]);
+ addCollisionSprite(_asTntItems[tntIndex]);
}
insertStaticSprite(0x8E8419C1, 1100);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 989ada5..a0a1167 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -419,7 +419,7 @@ void SsScene1302Fence::suMoveUp() {
}
Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene1302::handleMessage);
@@ -456,7 +456,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480);
_asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, true);
- _vm->_collisionMan->addCollisionSprite(_asVenusFlyTrap);
+ addCollisionSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
@@ -630,7 +630,7 @@ void AsScene1303Balloon::stPopBalloon() {
}
Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene1303::handleMessage);
@@ -641,7 +641,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule)
if (!getGlobalVar(V_BALLOON_POPPED)) {
_asBalloon = insertSprite<AsScene1303Balloon>(this);
- _vm->_collisionMan->addCollisionSprite(_asBalloon);
+ addCollisionSprite(_asBalloon);
}
_sprite1 = insertStaticSprite(0xA014216B, 1100);
@@ -692,7 +692,7 @@ uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶
}
Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asNeedle(NULL) {
+ : Scene(vm, parentModule), _asNeedle(NULL) {
SetMessageHandler(&Scene1304::handleMessage);
@@ -703,14 +703,14 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_BALLOON_POPPED)) {
_asKey = insertSprite<AsCommonKey>(this, 0, 1100, 278, 347);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
} else {
_asKey = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
}
if (!getGlobalVar(V_HAS_NEEDLE)) {
_asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347);
- _vm->_collisionMan->addCollisionSprite(_asNeedle);
+ addCollisionSprite(_asNeedle);
}
_sprite1 = insertStaticSprite(0x0562E621, 1100);
@@ -756,7 +756,7 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene1305::handleMessage);
@@ -867,7 +867,7 @@ void AsScene1306Elevator::cbGoingDownEvent() {
}
Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 4);
@@ -880,7 +880,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KEY3_LOCATION) == 4) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 435, 445);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
}
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
@@ -897,14 +897,14 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1306>(380, 440);
setMessageList(0x004AFAD0);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else if (which == 1) {
// Klaymen teleporting in
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
sendMessage(this, 0x2000, 1);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else if (which == 2) {
// Klaymen returning from diskplayer
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
@@ -915,27 +915,27 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
}
setMessageList(0x004AFBC8);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else if (which == 3) {
// Klaymen returning from window
insertKlayman<KmScene1306>(534, 440);
setMessageList(0x004AFC30);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else if (which == 4) {
// Klaymen teleporting out
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
sendMessage(this, 0x2000, 1);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else if (which == 5) {
// Klaymen returning from teleporter
insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
sendMessage(this, 0x2000, 1);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else {
// Klaymen coming up in elevator
insertKlayman<KmScene1306>(286, 408);
@@ -1007,7 +1007,7 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit
setSurfacePriority(_asElevatorDoor->getSurface(), 90);
setSurfacePriority(_sprite1->getSurface(), 80);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
break;
}
return 0;
@@ -1033,7 +1033,7 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m,
setSurfacePriority(_asElevatorDoor->getSurface(), 90);
setSurfacePriority(_sprite1->getSurface(), 80);
sendMessage(this, 0x2000, 0);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
break;
}
return 0;
@@ -1222,7 +1222,7 @@ void AsScene1307Key::stInsert() {
}
Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _countdown(0), _asCurrKey(NULL),
+ : Scene(vm, parentModule), _countdown(0), _asCurrKey(NULL),
_isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
Sprite *tempSprite;
@@ -1260,7 +1260,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule)
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(VA_IS_KEY_INSERTED, keyIndex)) {
_asKeys[keyIndex] = insertSprite<AsScene1307Key>(this, keyIndex, _clipRects);
- _vm->_collisionMan->addCollisionSprite(_asKeys[keyIndex]);
+ addCollisionSprite(_asKeys[keyIndex]);
} else {
_asKeys[keyIndex] = NULL;
}
@@ -1519,7 +1519,7 @@ uint32 AsScene1308Mouse::handleMessage(int messageNum, const MessageParam ¶m
}
Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isProjecting(false), _asProjector(NULL) {
+ : Scene(vm, parentModule), _isProjecting(false), _asProjector(NULL) {
_vm->gameModule()->initKeySlotsPuzzle();
@@ -1530,7 +1530,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
insertScreenMouse(0x24206418);
_asTape = insertSprite<AsScene1201Tape>(this, 17, 1100, 502, 445, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
if (getGlobalVar(V_MOUSE_SUCKED_IN)) {
insertSprite<AsScene1308Mouse>();
@@ -1603,7 +1603,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addCollisionSprite(_asProjector);
+ addCollisionSprite(_asProjector);
_asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_asProjector->setRepl(64, 0);
}
@@ -1697,7 +1697,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene1317::handleMessage);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false));
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 521981e..5febe8f 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -627,7 +627,7 @@ void AsCommonProjector::stStartSuckedIn() {
}
Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _projectorBorderFlag(false), _ssFloorButton(NULL), _asProjector(NULL),
+ : Scene(vm, parentModule), _projectorBorderFlag(false), _ssFloorButton(NULL), _asProjector(NULL),
_asPipe(NULL), _asMouse(NULL), _asCheese(NULL), _asBackDoor(NULL),
_sprite1(NULL), _sprite2(NULL), _sprite3(NULL), _ssButton(NULL) {
@@ -678,7 +678,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 2) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, _asPipe);
- _vm->_collisionMan->addCollisionSprite(_asProjector);
+ addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 6) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
@@ -840,7 +840,7 @@ void AsScene1402PuzzleBox::stMoveDownSolvedDone() {
}
Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isShaking(false), _asPuzzleBox(NULL), _asProjector(NULL) {
+ : Scene(vm, parentModule), _isShaking(false), _asPuzzleBox(NULL), _asProjector(NULL) {
SetMessageHandler(&Scene1402::handleMessage);
@@ -898,7 +898,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 1) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addCollisionSprite(_asProjector);
+ addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
@@ -1220,7 +1220,7 @@ void AsScene1407Mouse::stArriveAtHole() {
}
Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _puzzleSolvedCountdown(0), _resetButtonCountdown(0) {
+ : Scene(vm, parentModule), _puzzleSolvedCountdown(0), _resetButtonCountdown(0) {
SetMessageHandler(&Scene1407::handleMessage);
SetUpdateHandler(&Scene1407::update);
@@ -1278,7 +1278,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1403
Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asProjector(NULL), _isProjecting(false) {
+ : Scene(vm, parentModule), _asProjector(NULL), _isProjecting(false) {
SetMessageHandler(&Scene1403::handleMessage);
@@ -1292,10 +1292,10 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2 = insertStaticSprite(0x04442520, 995);
_sprite3 = insertStaticSprite(0x08742271, 995);
_asTape1 = insertSprite<AsScene1201Tape>(this, 12, 1100, 201, 468, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape1);
+ addCollisionSprite(_asTape1);
_asTape1->setRepl(64, 0);
_asTape2 = insertSprite<AsScene1201Tape>(this, 16, 1100, 498, 468, 0x9048A093);
- _vm->_collisionMan->addCollisionSprite(_asTape2);
+ addCollisionSprite(_asTape2);
_asTape2->setRepl(64, 0);
if (which < 0) {
@@ -1311,7 +1311,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addCollisionSprite(_asProjector);
+ addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
@@ -1382,7 +1382,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit
// Scene1404
Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asProjector(NULL), _asKey(NULL) {
+ : Scene(vm, parentModule), _asProjector(NULL), _asKey(NULL) {
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 5);
@@ -1397,12 +1397,12 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KEY3_LOCATION) == 5) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 267, 411);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
}
_sprite1 = insertStaticSprite(0x1900A1F8, 1100);
_asTape = insertSprite<AsScene1201Tape>(this, 14, 1100, 281, 411, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
if (which < 0) {
// Restoring game
@@ -1429,7 +1429,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_PROJECTOR_LOCATION) == 3) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
- _vm->_collisionMan->addCollisionSprite(_asProjector);
+ addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
@@ -1552,7 +1552,7 @@ void AsScene1405Tile::hide() {
}
Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
+ : Scene(vm, parentModule), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
_vm->gameModule()->initMemoryPuzzle();
@@ -1565,7 +1565,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule)
for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
_tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
- _vm->_collisionMan->addCollisionSprite(_tiles[tileIndex]);
+ addCollisionSprite(_tiles[tileIndex]);
if (getSubVar(VA_IS_TILE_MATCH, tileIndex))
_tilesLeft--;
}
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 328bda3..c49e968 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -82,7 +82,7 @@ void Module1500::updateScene() {
// Scene1501
Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
- : Scene(vm, parentModule, true), _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _skip(false) {
+ : Scene(vm, parentModule), _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _skip(false) {
SetUpdateHandler(&Scene1501::update);
SetMessageHandler(&Scene1501::handleMessage);
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index b40d580..a2f06e1 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -989,14 +989,14 @@ void AsCommonCarConnector::update() {
}
Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _asCar(NULL), _countdown1(0) {
+ : Scene(vm, parentModule), _asCar(NULL), _countdown1(0) {
setGlobalVar(V_CAR_DELTA_X, 1);
SetMessageHandler(&Scene1608::hmLowerFloor);
_asKey = insertSprite<AsCommonKey>(this, 1, 1100, 198, 220);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
if (which < 0) {
// Restoring game
@@ -1014,7 +1014,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x10080E01);
setPalette(0x10080E01);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
SetUpdateHandler(&Scene1608::upLowerFloor);
insertScreenMouse(0x80E05108);
@@ -1031,7 +1031,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x10080E01);
setPalette(0x10080E01);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
insertScreenMouse(0x80E05108);
_sprite1 = insertStaticSprite(0x7D0404E8, 1100);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
@@ -1072,7 +1072,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarLower->setClipRect(_clipRect1);
_asIdleCarFull->setClipRect(_clipRect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
_klaymanInCar = false;
_carClipFlag = false;
@@ -1114,7 +1114,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
_asIdleCarLower->setClipRect(_clipRect1);
_asIdleCarFull->setClipRect(_clipRect1);
_asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- // ... _vm->_collisionMan->addCollisionSprite(_asTape);
+ // ... addCollisionSprite(_asTape);
insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
_klaymanInCar = true;
_carClipFlag = true;
@@ -1303,7 +1303,7 @@ void Scene1608::updateKlaymanCliprect() {
}
Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
+ : Scene(vm, parentModule), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
_vm->gameModule()->initCodeSymbolsPuzzle();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
@@ -1319,7 +1319,7 @@ Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule)
_asSymbols[symbolPosition] = insertSprite<AsScene3011Symbol>(symbolPosition, false);
_ssButton = insertSprite<SsScene3011Button>(this, true);
- _vm->_collisionMan->addCollisionSprite(_ssButton);
+ addCollisionSprite(_ssButton);
loadSound(0, 0x68E25540);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index cf2fe63..39bc49b 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -177,7 +177,7 @@ uint32 SsScene1705Tape::handleMessage(int messageNum, const MessageParam ¶m,
}
Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _paletteArea(1) {
+ : Scene(vm, parentModule), _paletteArea(1) {
Sprite *tempSprite;
@@ -200,7 +200,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
insertSprite<SsScene1705WallSymbol>(kScene1705FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_2, 2)], 2);
_sprite = insertStaticSprite(0x31313A22, 1100);
_ssTape = insertSprite<SsScene1705Tape>(this, 15, 1100, 238, 439, 0x02363852);
- _vm->_collisionMan->addCollisionSprite(_ssTape);
+ addCollisionSprite(_ssTape);
if (which < 0) {
// Restoring game
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 2557121..629cfd9 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -87,7 +87,7 @@ void Module1900::updateScene() {
// Scene1901
Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
@@ -358,8 +358,8 @@ void AsScene1907Symbol::stFallOffHitGround() {
playSound(1);
sendMessage(_parentScene, 0x1022, 1000 + _newPositionIndex);
Entity::_priority = 1000 - _newPositionIndex;
- _vm->_collisionMan->removeCollisionSprite(this);
- _vm->_collisionMan->addCollisionSprite(this);
+ _parentScene->removeCollisionSprite(this);
+ _parentScene->addCollisionSprite(this);
SetSpriteUpdate(&AsScene1907Symbol::suFallOffHitGround);
NextState(&AsScene1907Symbol::cbFallOffHitGroundEvent);
_newStickFrameIndex = 0;
@@ -516,7 +516,7 @@ void AsScene1907WaterHint::hide() {
}
Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _currMovingSymbolIndex(0), _pluggedInCount(0),
+ : Scene(vm, parentModule), _currMovingSymbolIndex(0), _pluggedInCount(0),
_moveDownCountdown(0), _moveUpCountdown(0), _countdown3(0), _hasPlugInFailed(false) {
setBackground(0x20628E05);
@@ -527,11 +527,11 @@ Scene1907::Scene1907(NeverhoodEngine *vm, Module *parentModule)
for (int i = 0; i < 9; i++) {
_asSymbols[i] = insertSprite<AsScene1907Symbol>(this, i, getRandomPositionIndex());
- _vm->_collisionMan->addCollisionSprite(_asSymbols[i]);
+ addCollisionSprite(_asSymbols[i]);
}
_ssUpDownButton = insertSprite<SsScene1907UpDownButton>(this, _asSymbols[8]);
- _vm->_collisionMan->addCollisionSprite(_ssUpDownButton);
+ addCollisionSprite(_ssUpDownButton);
_asWaterHint = insertSprite<AsScene1907WaterHint>();
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 643bec4..f08b620 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -95,7 +95,7 @@ void Module2000::updateScene() {
// Scene2001
Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 12b10b4..423f93c 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -194,7 +194,7 @@ uint32 SsCommonFloorButton::handleMessage(int messageNum, const MessageParam &pa
}
Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
@@ -209,9 +209,9 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x78492010, 1100);
_ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x72427010, 0x32423010, 200, 0);
_asTape1 = insertSprite<AsScene1201Tape>(this, 18, 1100, 412, 443, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape1);
+ addCollisionSprite(_asTape1);
_asTape2 = insertSprite<AsScene1201Tape>(this, 11, 1100, 441, 443, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape2);
+ addCollisionSprite(_asTape2);
if (which < 0) {
insertKlayman<KmScene2101>(380, 438);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index dc77a5e..889af37 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -535,7 +535,7 @@ SsScene2201PuzzleCube::SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positio
}
Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isSoundPlaying(false) {
+ : Scene(vm, parentModule), _isSoundPlaying(false) {
Sprite *tempSprite;
@@ -551,7 +551,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
insertScreenMouse(0x0820C408);
_asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++)
@@ -870,7 +870,7 @@ void SsScene2202PuzzleCube::stopMoving() {
}
Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isCubeMoving(false),
+ : Scene(vm, parentModule), _isSolved(false), _leaveScene(false), _isCubeMoving(false),
_ssMovingCube(NULL), _ssDoneMovingCube(NULL) {
_vm->gameModule()->initCubeSymbolsPuzzle();
@@ -887,7 +887,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
int16 cubeSymbol = (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition);
if (cubeSymbol >= 0) {
Sprite *puzzleCubeSprite = insertSprite<SsScene2202PuzzleCube>(this, cubePosition, cubeSymbol);
- _vm->_collisionMan->addCollisionSprite(puzzleCubeSprite);
+ addCollisionSprite(puzzleCubeSprite);
}
}
@@ -1085,7 +1085,7 @@ void AsScene2203Door::closeDoor() {
}
Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 1);
@@ -1100,11 +1100,11 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KEY3_LOCATION) == 1) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
}
_asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
_asLeftDoor = insertSprite<AsScene2203Door>(this, 0);
_asRightDoor = insertSprite<AsScene2203Door>(this, 1);
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
@@ -1113,8 +1113,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_rightDoorClipRect.set(0, 0, _ssSmallRightDoor->getDrawRect().x2(), 480);
sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);
sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor);
- _vm->_collisionMan->addCollisionSprite(_asLeftDoor);
- _vm->_collisionMan->addCollisionSprite(_asRightDoor);
+ addCollisionSprite(_asLeftDoor);
+ addCollisionSprite(_asRightDoor);
if (which < 0) {
// Restoring game
@@ -1215,7 +1215,7 @@ uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam &p
}
Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene2205::handleMessage);
SetUpdateHandler(&Scene2205::update);
@@ -1451,7 +1451,7 @@ uint32 SsScene2206TestTube::handleMessage(int messageNum, const MessageParam &pa
}
Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
uint32 fileHash;
@@ -1491,7 +1491,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addBasePalette(fileHash, 0, 256, 0);
if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x0263D144, 0, 65, 0);
- _vm->_collisionMan->addCollisionSprite(_ssTestTube);
+ addCollisionSprite(_ssTestTube);
if (which < 0) {
// Restoring game
@@ -1926,7 +1926,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
}
Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
+ : Scene(vm, parentModule), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
_vm->gameModule()->initCannonSymbolsPuzzle();
@@ -1949,9 +1949,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
_asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
_asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);
- _vm->_collisionMan->addCollisionSprite(_asLever);
+ addCollisionSprite(_asLever);
_asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);
_asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>();
_asWallRobotAnimation->setVisible(false);
@@ -2110,7 +2110,7 @@ static const uint32 kScene2208FileHashes2[] = {
};
Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _textResource(vm) {
+ : Scene(vm, parentModule), _textResource(vm) {
SpriteResource spriteResource(_vm);
const char *textStart, *textEnd;
@@ -2288,7 +2288,7 @@ static const uint32 kScene2242MessageListIds1[] = {
};
Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isKlaymanInLight(false) {
+ : Scene(vm, parentModule), _isKlaymanInLight(false) {
SetMessageHandler(&Scene2242::handleMessage);
SetUpdateHandler(&Scene2242::update);
@@ -2309,7 +2309,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
}
_asTape = insertSprite<AsScene1201Tape>(this, 10, 1100, 464, 435, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
if (which < 0) {
// Restoring game
@@ -2407,7 +2407,7 @@ static const uint32 kHallOfRecordsSceneMessageListIds1[] = {
};
HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
_hallOfRecordsInfo = _vm->_staticData->getHallOfRecordsInfoItem(hallOfRecordsInfoId);
@@ -2498,7 +2498,7 @@ static const uint32 kScene2247MessageListIds1[] = {
};
Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene2247::handleMessage);
SetUpdateHandler(&Scene::update);
diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp
index ed9e231..6c007c4 100644
--- a/engines/neverhood/module2400.cpp
+++ b/engines/neverhood/module2400.cpp
@@ -368,7 +368,7 @@ void AsScene2401Door::stDoorOpenFinished() {
}
Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _unkFlag(false),
+ : Scene(vm, parentModule), _countdown1(0), _countdown2(0), _unkFlag(false),
_soundToggle(false), _asWaterSpitIndex(0) {
_vm->gameModule()->initWaterPipesPuzzle();
@@ -684,7 +684,7 @@ uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *
}
Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _soundToggle(false) {
+ : Scene(vm, parentModule), _countdown(0), _soundToggle(false) {
Sprite *tempSprite;
@@ -696,7 +696,7 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x81660220);
insertScreenMouse(0x6022481E);
_asTape = insertSprite<AsScene1201Tape>(this, 9, 1100, 286, 409, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
if (which < 0) {
@@ -786,7 +786,7 @@ void Scene2402::playPipeSound(uint32 fileHash) {
}
Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite1, *tempSprite2, *tempSprite3;
@@ -796,7 +796,7 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(0x414364B0, 0, 65, 0);
insertScreenMouse(0x506080C8);
_asTape = insertSprite<AsScene1201Tape>(this, 2, 1100, 480, 454, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
_asLightCord = insertSprite<AsScene2803LightCord>(this, 0xA1095A10, 0x836D3813, 368, 200);
_asLightCord->setClipRect(0, 25, 640, 480);
@@ -879,7 +879,7 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite1, *tempSprite2;
@@ -893,11 +893,11 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KEY3_LOCATION) == 2) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 560, 409);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
}
_asTape = insertSprite<AsScene1201Tape>(this, 5, 1100, 456, 409, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
tempSprite2 = insertStaticSprite(0x19625293, 1100);
_clipRects[0].x1 = 0;
_clipRects[0].y1 = 0;
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 3fc508a..4aefbfb 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -220,7 +220,7 @@ void Module2500::createScene2704(int which, uint32 sceneInfoId, int16 value, con
}
Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
_sceneInfos[0] = _vm->_staticData->getSceneInfo2700(0x004B2628);
_sceneInfos[1] = _vm->_staticData->getSceneInfo2700(0x004B264C);
@@ -535,14 +535,14 @@ uint32 SsScene2504Button::handleMessage(int messageNum, const MessageParam ¶
}
Scene2504::Scene2504(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *ssButton;
setBackground(0x90791B80);
setPalette(0x90791B80);
ssButton = insertSprite<SsScene2504Button>();
- _vm->_collisionMan->addCollisionSprite(ssButton);
+ addCollisionSprite(ssButton);
insertPuzzleMouse(0x91B8490F, 20, 620);
SetMessageHandler(&Scene2504::handleMessage);
SetUpdateHandler(&Scene::update);
diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp
index 91132c0..04a9147 100644
--- a/engines/neverhood/module2600.cpp
+++ b/engines/neverhood/module2600.cpp
@@ -308,7 +308,7 @@ uint32 AsScene2609Water::handleMessage(int messageNum, const MessageParam ¶m
}
Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isBusy(false) {
+ : Scene(vm, parentModule), _isBusy(false) {
SetUpdateHandler(&Scene::update);
SetMessageHandler(&Scene2609::handleMessage);
@@ -317,7 +317,7 @@ Scene2609::Scene2609(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x51409A16);
_asWater = insertSprite<AsScene2609Water>();
_ssButton = insertSprite<SsScene2609Button>(this);
- _vm->_collisionMan->addCollisionSprite(_ssButton);
+ addCollisionSprite(_ssButton);
insertPuzzleMouse(0x09A1251C, 20, 620);
insertStaticSprite(0x02138002, 1200);
insertStaticSprite(0x825E2827, 1200);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index b22da94..d4f46ea 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -614,7 +614,7 @@ void AsCommonCarTrackShadow::update() {
}
Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
@@ -720,7 +720,7 @@ static const uint32 kScene2702Infos[2][3] = {
Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isInLight(true), _newTrackIndex(-1), _count(3) {
+ : Scene(vm, parentModule), _isInLight(true), _newTrackIndex(-1), _count(3) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
@@ -882,7 +882,7 @@ void Scene2702::changeTrack() {
}
Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
@@ -996,7 +996,7 @@ uint32 Scene2703::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
const uint32 *staticSprites, const NRect *clipRect)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
@@ -1101,7 +1101,7 @@ static const struct { const char *pointListName; int which1, which2; } kSceneInf
};
Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _newTrackIndex(-1) {
+ : Scene(vm, parentModule), _newTrackIndex(-1) {
SetMessageHandler(&Scene2706::handleMessage);
@@ -1218,7 +1218,7 @@ void Scene2706::changeTrack() {
}
Scene2732::Scene2732(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 25360ac..7c7c097 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -426,7 +426,7 @@ void Module2800::updateMusic(bool halfVolume) {
}
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *_sprite1;
Sprite *_sprite2;
@@ -470,7 +470,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480);
insertScreenMouse(0x0066201C);
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else if (getGlobalVar(V_RADIO_ROOM_RIGHT_DOOR)) {
setRectList(0x004B6CD0);
setBackground(0x11E00684);
@@ -481,7 +481,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
insertScreenMouse(0x00680116);
_asTape = insertSprite<SsScene1705Tape>(this, 8, 1100, 302, 437, 0x01142428);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else {
setRectList(0x004B6CF0);
setBackground(0x030006E6);
@@ -492,7 +492,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480);
insertScreenMouse(0x006E2038);
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
}
addEntity(_palette);
@@ -533,7 +533,7 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit
}
Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _currTuneStatus(0), _countdown1(0), _countdown2(0) {
+ : Scene(vm, parentModule), _currTuneStatus(0), _countdown1(0), _countdown2(0) {
SetMessageHandler(&Scene2802::handleMessage);
SetUpdateHandler(&Scene2802::update);
@@ -841,7 +841,7 @@ void AsScene2803Rope::stHide() {
}
Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _paletteArea(0) {
+ : Scene(vm, parentModule), _paletteArea(0) {
static const uint32 kScene2803FileHashes1[] = {
0,
@@ -1108,7 +1108,7 @@ void Scene2803::updatePaletteArea() {
}
Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _paletteArea(0) {
+ : Scene(vm, parentModule), _paletteArea(0) {
static const uint32 kScene2803SmallFileHashes1[] = {
0, 0x081000F1, 0x08100171, 0x08100271
@@ -1731,7 +1731,7 @@ uint32 AsScene2804BeamTarget::handleMessage(int messageNum, const MessageParam &
}
Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown1(0), _countdown2(0), _countdown3(0),
+ : Scene(vm, parentModule), _countdown1(0), _countdown2(0), _countdown3(0),
_beamStatus(0), _isSolved(false), _isWorking(false) {
initCrystalColors();
@@ -1759,7 +1759,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
}
_ssRedButton = insertSprite<SsScene2804RedButton>(this);
- _vm->_collisionMan->addCollisionSprite(_ssRedButton);
+ addCollisionSprite(_ssRedButton);
for (uint crystalIndex = 0; crystalIndex < 5; crystalIndex++) {
AsScene2804CrystalWaves *asCrystalWaves = NULL;
@@ -1767,7 +1767,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
asCrystalWaves = insertSprite<AsScene2804CrystalWaves>(crystalIndex);
_asCrystals[crystalIndex] = insertSprite<AsScene2804Crystal>(asCrystalWaves, crystalIndex);
_ssCrystalButtons[crystalIndex] = insertSprite<SsScene2804CrystalButton>(this, _asCrystals[crystalIndex], crystalIndex);
- _vm->_collisionMan->addCollisionSprite(_ssCrystalButtons[crystalIndex]);
+ addCollisionSprite(_ssCrystalButtons[crystalIndex]);
}
}
@@ -1882,7 +1882,7 @@ void Scene2804::initCrystalColors() {
}
Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene2805::handleMessage);
@@ -1968,7 +1968,7 @@ uint32 AsScene2806Spew::handleMessage(int messageNum, const MessageParam ¶m,
}
Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
@@ -2089,7 +2089,7 @@ void Scene2806::findClosestPoint() {
}
Scene2807::Scene2807(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
SetMessageHandler(&Scene2807::handleMessage);
@@ -2422,7 +2422,7 @@ void AsScene2808LightEffect::update() {
}
Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _testTubeSetNum(which), _leaveResult(0), _isFlowing(false) {
+ : Scene(vm, parentModule), _countdown(0), _testTubeSetNum(which), _leaveResult(0), _isFlowing(false) {
Sprite *asHandle;
@@ -2438,16 +2438,16 @@ Scene2808::Scene2808(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(kScene2808FileHashes1[which]);
asHandle = insertSprite<AsScene2808Handle>(this, which);
- _vm->_collisionMan->addCollisionSprite(asHandle);
+ addCollisionSprite(asHandle);
_asFlow = insertSprite<AsScene2808Flow>(this, which);
insertSprite<AsScene2808LightEffect>(which);
for (int testTubeIndex = 0; testTubeIndex < 3; testTubeIndex++) {
SsScene2808Dispenser *ssDispenser = insertSprite<SsScene2808Dispenser>(this, which, testTubeIndex);
- _vm->_collisionMan->addCollisionSprite(ssDispenser);
+ addCollisionSprite(ssDispenser);
_asTestTubes[testTubeIndex] = insertSprite<AsScene2808TestTube>(which, testTubeIndex, ssDispenser);
- _vm->_collisionMan->addCollisionSprite(_asTestTubes[testTubeIndex]);
+ addCollisionSprite(_asTestTubes[testTubeIndex]);
}
insertScreenMouse(kScene2808FileHashes2[which]);
@@ -2556,7 +2556,7 @@ uint32 AsScene2809Spew::handleMessage(int messageNum, const MessageParam ¶m,
}
Scene2809::Scene2809(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
@@ -2703,7 +2703,7 @@ uint32 AsScene2810Rope::handleMessage(int messageNum, const MessageParam ¶m,
}
Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true) {
+ : Scene(vm, parentModule) {
Sprite *tempSprite;
@@ -2727,10 +2727,10 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KLAYMAN_SMALL)) {
_asTape = insertSprite<AsScene1201Tape>(this, 0, 900, 245, 429, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
} else {
_asTape = insertSprite<AsScene1201Tape>(this, 0, 1100, 245, 429, 0x9148A011);
- _vm->_collisionMan->addCollisionSprite(_asTape);
+ addCollisionSprite(_asTape);
}
_sprite1 = insertStaticSprite(0x430001C4, 1200);
@@ -2752,7 +2752,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE438);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeCollisionSprite(_asTape);
+ removeCollisionSprite(_asTape);
} else {
insertKlayman<KmScene2810>(300, 424, _clipRects, 2);
setMessageList(0x004AE438);
@@ -2796,7 +2796,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE6D8);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeCollisionSprite(_asTape);
+ removeCollisionSprite(_asTape);
} else {
insertKlaymanLadder();
if (getGlobalVar(V_LADDER_DOWN_ACTION)) {
@@ -2819,7 +2819,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE428);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeCollisionSprite(_asTape);
+ removeCollisionSprite(_asTape);
} else {
insertKlayman<KmScene2810>(450, 424, _clipRects, 2);
setMessageList(0x004AE418);
@@ -2838,7 +2838,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004AE410);
setRectList(0x004AE810);
_isRopingDown = false;
- _vm->_collisionMan->removeCollisionSprite(_asTape);
+ removeCollisionSprite(_asTape);
}
}
@@ -3019,7 +3019,7 @@ uint32 AsScene2812TrapDoor::handleMessage(int messageNum, const MessageParam &pa
}
Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _paletteArea(0) {
+ : Scene(vm, parentModule), _paletteArea(0) {
if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
setGlobalVar(V_KEY3_LOCATION, 3);
@@ -3039,11 +3039,11 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_KEY3_LOCATION) == 3) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 474, 437);
- _vm->_collisionMan->addCollisionSprite(_asKey);
+ addCollisionSprite(_asKey);
}
_ssTape = insertSprite<SsScene1705Tape>(this, 6, 1100, 513, 437, 0xA1361863);
- _vm->_collisionMan->addCollisionSprite(_ssTape);
+ addCollisionSprite(_ssTape);
_asWinch = insertSprite<AsScene2812Winch>();
_asTrapDoor = insertSprite<AsScene2812TrapDoor>();
@@ -3173,7 +3173,7 @@ void Scene2812::updatePaletteArea(bool instantly) {
}
Scene2822::Scene2822(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _scrollIndex(0) {
+ : Scene(vm, parentModule), _countdown(0), _scrollIndex(0) {
SetMessageHandler(&Scene2822::handleMessage);
SetUpdateHandler(&Scene2822::update);
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 551d6cb..b5a6ab2 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -347,7 +347,7 @@ uint32 SsScene2901BigButton::handleMessage(int messageNum, const MessageParam &p
}
Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _currLocationButtonNum(which), _selectedButtonNum(which),
+ : Scene(vm, parentModule), _currLocationButtonNum(which), _selectedButtonNum(which),
_currWhirlButtonNum(0), _prevWhirlButtonNum(0), _countdown1(1), _skipCountdown(0), _blinkOn(0) {
_isButton2Broken = getGlobalVar(V_ENTRANCE_OPEN) != 0;
@@ -365,7 +365,7 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint i = 0; i < 6; ++i) {
if (i != 2 || !_isButton2Broken) {
_ssLocationButtons[i] = insertSprite<SsScene2901LocationButton>(this, _currLocationButtonNum, i);
- _vm->_collisionMan->addCollisionSprite(_ssLocationButtons[i]);
+ addCollisionSprite(_ssLocationButtons[i]);
_ssLocationButtonLights[i] = insertSprite<SsScene2901LocationButtonLight>(_currLocationButtonNum, i);
}
}
@@ -374,7 +374,7 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
insertSprite<SsScene2901BrokenButton>(_currLocationButtonNum);
_ssBigButton = insertSprite<SsScene2901BigButton>(this, _currLocationButtonNum);
- _vm->_collisionMan->addCollisionSprite(_ssBigButton);
+ addCollisionSprite(_ssBigButton);
insertPuzzleMouse(kScene2901FileHashes2[_currLocationButtonNum], 20, 620);
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 6767aa5..6bf95e3 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -712,9 +712,9 @@ AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009Symbol::handleMessage);
_ssArrowPrev = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _symbolPosition * 2 + 0);
- _vm->_collisionMan->addCollisionSprite(_ssArrowPrev);
+ _parentScene->addCollisionSprite(_ssArrowPrev);
_ssArrowNext = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _symbolPosition * 2 + 1);
- _vm->_collisionMan->addCollisionSprite(_ssArrowNext);
+ _parentScene->addCollisionSprite(_ssArrowNext);
}
uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -752,7 +752,7 @@ void AsScene3009Symbol::hide() {
}
Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _keepVideo(false), _moveCannonLeftFirst(false),
+ : Scene(vm, parentModule), _keepVideo(false), _moveCannonLeftFirst(false),
_isTurning(false), _lockSymbolsPart1Countdown(1), _lockSymbolsPart2Countdown(1) {
_cannonTargetStatus = getGlobalVar(V_CANNON_TARGET_STATUS);
@@ -769,13 +769,13 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
insertPuzzleMouse(0x04208D08, 20, 620);
_ssFireCannonButton = insertSprite<SsScene3009FireCannonButton>(this);
- _vm->_collisionMan->addCollisionSprite(_ssFireCannonButton);
+ addCollisionSprite(_ssFireCannonButton);
_asVerticalIndicator = insertSprite<AsScene3009VerticalIndicator>(this, _cannonTargetStatus);
- _vm->_collisionMan->addCollisionSprite(_asVerticalIndicator);
+ addCollisionSprite(_asVerticalIndicator);
_asHorizontalIndicator = insertSprite<AsScene3009HorizontalIndicator>(this, _cannonTargetStatus);
- _vm->_collisionMan->addCollisionSprite(_asHorizontalIndicator);
+ addCollisionSprite(_asHorizontalIndicator);
if (_cannonTargetStatus != kCTSNull && _cannonTargetStatus != kCTSRightRobotNoTarget && _cannonTargetStatus != kCTSRightRobotIsTarget && _cannonTargetStatus != kCTSRightNoRobot) {
_keepVideo = true;
@@ -1220,7 +1220,7 @@ void AsScene3010DeadBolt::stDisabledMessage() {
}
Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdown(0), _doorUnlocked(false), _checkUnlocked(false) {
+ : Scene(vm, parentModule), _countdown(0), _doorUnlocked(false), _checkUnlocked(false) {
int initCountdown = 0;
@@ -1235,7 +1235,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
for (int i = 0; i < 3; i++) {
_asDeadBolts[i] = insertSprite<AsScene3010DeadBolt>(this, i, which == 1);//CHECKME
_ssDeadBoltButtons[i] = insertSprite<SsScene3010DeadBoltButton>(this, i, initCountdown, which == 1);//CHECKME
- _vm->_collisionMan->addCollisionSprite(_ssDeadBoltButtons[i]);
+ addCollisionSprite(_ssDeadBoltButtons[i]);
if (getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[i]))
initCountdown++;
_boltUnlocking[i] = false;
@@ -1448,7 +1448,7 @@ void AsScene3011Symbol::change(int symbolIndex, bool isNoisy) {
}
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0) {
+ : Scene(vm, parentModule), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0) {
_vm->gameModule()->initCodeSymbolsPuzzle();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
@@ -1466,7 +1466,7 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
_asSymbols[symbolIndex] = insertSprite<AsScene3011Symbol>(symbolIndex, true);
_ssButton = insertSprite<SsScene3011Button>(this, true);
- _vm->_collisionMan->addCollisionSprite(_ssButton);
+ addCollisionSprite(_ssButton);
}
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index ffaa802..d802322 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -26,7 +26,7 @@
namespace Neverhood {
NavigationScene::NavigationScene(NeverhoodEngine *vm, Module *parentModule, uint32 navigationListId, int navigationIndex, const byte *itemsTypes)
- : Scene(vm, parentModule, true), _itemsTypes(itemsTypes), _navigationIndex(navigationIndex), _smackerDone(false),
+ : Scene(vm, parentModule), _itemsTypes(itemsTypes), _navigationIndex(navigationIndex), _smackerDone(false),
_isWalkingForward(false), _isTurning(false), _smackerFileHash(0), _interactive(true), _leaveSceneAfter(false) {
_navigationList = _vm->_staticData->getNavigationList(navigationListId);
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 4ee801b..c0c6185 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -28,7 +28,6 @@
#include "engines/util.h"
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
-#include "neverhood/collisionman.h"
#include "neverhood/gamemodule.h"
#include "neverhood/gamevars.h"
#include "neverhood/graphics.h"
@@ -92,7 +91,6 @@ Common::Error NeverhoodEngine::run() {
_soundMan = new SoundMan(this);
_audioResourceMan = new AudioResourceMan(this);
- _collisionMan = new CollisionMan(this);
_gameModule = new GameModule(this);
// TODO Check if this can actually be false...
@@ -116,7 +114,6 @@ Common::Error NeverhoodEngine::run() {
mainLoop();
delete _gameModule;
- delete _collisionMan;
delete _soundMan;
delete _audioResourceMan;
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index ef0f16c..3653127 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -40,7 +40,6 @@ enum NeverhoodGameFeatures {
struct NeverhoodGameDescription;
-class CollisionMan;
class GameModule;
class GameVars;
class ResourceMan;
@@ -85,7 +84,6 @@ public:
ResourceMan *_res;
GameModule *_gameModule;
StaticData *_staticData;
- CollisionMan *_collisionMan;
SoundMan *_soundMan;
AudioResourceMan *_audioResourceMan;
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 3f0c92f..e34f933 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -21,12 +21,11 @@
*/
#include "neverhood/scene.h"
-#include "neverhood/collisionman.h"
namespace Neverhood {
-Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
- : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm) {
+Scene::Scene(NeverhoodEngine *vm, Module *parentModule)
+ : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm), _hitRects(NULL) {
_isKlaymanBusy = false;
_doConvertMessages = false;
@@ -40,10 +39,8 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects)
_mouseCursor = NULL;
_palette = NULL;
_background = NULL;
- if (clearHitRects) {
- _vm->_collisionMan->clearHitRects();
- _vm->_collisionMan->clearCollisionSprites();
- }
+ clearHitRects();
+ clearCollisionSprites();
_vm->_screen->setFps(24);
_vm->_screen->setSmackerDecoder(NULL);
_canAcceptInput = true;
@@ -160,7 +157,7 @@ void Scene::setSpriteSurfacePriority(Sprite *sprite, int priority) {
}
void Scene::deleteSprite(Sprite **sprite) {
- _vm->_collisionMan->removeCollisionSprite(*sprite);
+ removeCollisionSprite(*sprite);
removeSurface((*sprite)->getSurface());
removeEntity(*sprite);
delete *sprite;
@@ -187,7 +184,11 @@ void Scene::setPalette(uint32 fileHash) {
}
void Scene::setHitRects(uint32 id) {
- _vm->_collisionMan->setHitRects(id);
+ setHitRects(_vm->_staticData->getHitRectList(id));
+}
+
+void Scene::setHitRects(HitRectList *hitRects) {
+ _hitRects = hitRects;
}
Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
@@ -317,8 +318,8 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
}
bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
- for (uint i = 0; i < _vm->_collisionMan->getCollisionSpritesCount(); i++) {
- Sprite *sprite = _vm->_collisionMan->getCollisionSprite(i);
+ for (uint i = 0; i < _collisionSprites.size(); i++) {
+ Sprite *sprite = _collisionSprites[i];
if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
sendPointMessage(sprite, 0x1011, _mouseClickPos) != 0) {
return true;
@@ -471,7 +472,7 @@ void Scene::loadHitRectList() {
HitRectList *hitRectList = _dataResource.getHitRectList();
if (hitRectList) {
_hitRectList = *hitRectList;
- _vm->_collisionMan->setHitRects(&_hitRectList);
+ setHitRects(&_hitRectList);
}
}
@@ -510,4 +511,54 @@ uint16 Scene::convertMessageNum(uint32 messageNum) {
return 0x1000;
}
+void Scene::clearHitRects() {
+ _hitRects = NULL;
+}
+
+HitRect *Scene::findHitRectAtPos(int16 x, int16 y) {
+ static HitRect kDefaultHitRect = {NRect(), 0x5000};
+ if (_hitRects)
+ for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++)
+ if ((*it).rect.contains(x, y))
+ return &(*it);
+ return &kDefaultHitRect;
+}
+
+void Scene::addCollisionSprite(Sprite *sprite) {
+ int index = 0, insertIndex = -1;
+ for (Common::Array<Sprite*>::iterator iter = _collisionSprites.begin(); iter != _collisionSprites.end(); iter++) {
+ if ((*iter)->getPriority() > sprite->getPriority()) {
+ insertIndex = index;
+ break;
+ }
+ index++;
+ }
+ if (insertIndex >= 0)
+ _collisionSprites.insert_at(insertIndex, sprite);
+ else
+ _collisionSprites.push_back(sprite);
+}
+
+void Scene::removeCollisionSprite(Sprite *sprite) {
+ for (uint index = 0; index < _collisionSprites.size(); index++) {
+ if (_collisionSprites[index] == sprite) {
+ _collisionSprites.remove_at(index);
+ break;
+ }
+ }
+}
+
+void Scene::clearCollisionSprites() {
+ _collisionSprites.clear();
+}
+
+void Scene::checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam) {
+ for (Common::Array<Sprite*>::iterator iter = _collisionSprites.begin(); iter != _collisionSprites.end(); iter++) {
+ Sprite *collSprite = *iter;
+ if ((sprite->getFlags() & flags) && collSprite->checkCollision(sprite->getCollisionBounds())) {
+ sprite->sendMessage(collSprite, messageNum, messageParam);
+ }
+ }
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index a9e1674..cb34567 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -39,7 +39,7 @@ namespace Neverhood {
class Scene : public Entity {
public:
- Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
+ Scene(NeverhoodEngine *vm, Module *parentModule);
virtual ~Scene();
virtual void draw();
void addEntity(Entity *entity);
@@ -67,6 +67,10 @@ public:
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
void leaveScene(uint32 result);
+ HitRect *findHitRectAtPos(int16 x, int16 y);
+ void addCollisionSprite(Sprite *sprite);
+ void removeCollisionSprite(Sprite *sprite);
+ void checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam);
// Some crazy templated functions to make the logic code smaller/simpler (imo!)
// insertKlayman
template<class T>
@@ -187,6 +191,9 @@ protected:
HitRectList _hitRectList;
+ HitRectList *_hitRects;
+ Common::Array<Sprite*> _collisionSprites;
+
void (Entity::*_savedUpdateHandlerCb)();
uint32 (Entity::*_savedMessageHandlerCb)(int messageNum, const MessageParam ¶m, Entity *sender);
int _messageValue;
@@ -205,6 +212,11 @@ protected:
void cancelMessageList();
void loadDataResource(uint32 fileHash);
uint16 convertMessageNum(uint32 messageNum);
+
+ void setHitRects(HitRectList *hitRects);
+ void clearHitRects();
+ void clearCollisionSprites();
+
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index a08aad4..7470acb 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -25,7 +25,7 @@
namespace Neverhood {
SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort)
- : Scene(vm, parentModule, true), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _videoPlayedBefore(false),
+ : Scene(vm, parentModule), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _videoPlayedBefore(false),
_fileHashListIndex(-1), _fileHashList(NULL), _playNextVideoFlag(false) {
debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, flag1, canAbort);
Commit: b875696fc7037d949200a714d1403d922714ed91
https://github.com/scummvm/scummvm/commit/b875696fc7037d949200a714d1403d922714ed91
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Update todo.txt
Changed paths:
engines/neverhood/todo.txt
diff --git a/engines/neverhood/todo.txt b/engines/neverhood/todo.txt
index 5561ead..c13d3f1 100644
--- a/engines/neverhood/todo.txt
+++ b/engines/neverhood/todo.txt
@@ -6,10 +6,6 @@ else the game disasm and reimplemtation code become even more different
TODOs which can be done any time:
-----------------------------------
-- Give placeholder stuff (e.g. sub?????, _flag??? etc.) better fitting names
-- Use CursorMan for the mouse cursor (instead of using it like a normal sprite)
- - This whould make it neccessary to call _system->updateScreen more often else
- the mouse movement would be choppy
- Cleanup
- Clean up staticdata structs to look more like the ones in create_neverhood
(e.g. by using template classes etc.)
@@ -17,15 +13,10 @@ TODOs which can be done any time:
TODOs which should be done only after the game logic is finished:
-------------------------------------------------------------------
-- Implement clever sprite redrawing code (dirty rectangles, microtiles etc.), only redraw what's neccessary
-- Rework the resource system
- - The current system can be simplified a lot
- - Also resource purging needs to be implemented
- Implement game menus
- Maybe rework organization of files (e.g. put ALL Sprites into one separate file, same with Modules and Scenes)
- This would solve the problem of how to organize stuff which is used several times, and less headers would have to be included
- The move special scenes (SmackerScene) into the scenes file
-- Maybe merge CollisionMan with Scene (since it's so far never used independently)
DONE:
-------
@@ -34,7 +25,15 @@ DONE:
- Play routine should fill the handle so it can be stopped/queried later
- Basically like ScummVM own sound handles
- RE and implement yet unknown music/sound stuff
-
+- Implement clever sprite redrawing code (dirty rectangles, microtiles etc.), only redraw what's neccessary
+- Rework the resource system
+ - The current system can be simplified a lot
+ - Also resource purging needs to be implemented
+- Maybe merge CollisionMan with Scene (since it's so far never used independently)
+- Give placeholder stuff (e.g. sub?????, _flag??? etc.) better fitting names
+- Use CursorMan for the mouse cursor (instead of using it like a normal sprite)
+ - This whould make it neccessary to call _system->updateScreen more often else
+ the mouse movement would be choppy
TODOs which are experimental:
-------------------------------
Commit: fa205be8924fe5b053d16fe27ffee9a5aaf39d36
https://github.com/scummvm/scummvm/commit/fa205be8924fe5b053d16fe27ffee9a5aaf39d36
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Remove some obsolete TODOs
Changed paths:
engines/neverhood/gamemodule.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 823f89a..be56c73 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -78,7 +78,6 @@ GameModule::GameModule(NeverhoodEngine *vm)
_mainMenuRequested(false), _gameWasLoaded(false) {
// Other initializations moved to actual engine class
- // TODO
_vm->_soundMan->playSoundThree(0x002D0031, 0x8861079);
SetMessageHandler(&GameModule::handleMessage);
}
@@ -88,9 +87,6 @@ GameModule::~GameModule() {
_vm->_soundMan->deleteSoundGroup(0x002D0031);
delete _childObject;
_childObject = NULL;
- // TODO: Set palette to black but probably not neccessary
- // TODO SoundMan_deinit();
- // TODO Set debug vars (maybe)
}
void GameModule::handleMouseMove(int16 x, int16 y) {
@@ -176,7 +172,7 @@ void GameModule::initMemoryPuzzle() {
for (uint32 i = 0; i < 3; i++)
setSubVar(VA_CURR_DICE_NUMBERS, i, 1);
// Set special symbols
- // Symbol 5 is always one the three special symbols
+ // Symbol 5 is always one of the three special symbols
setSubVar(VA_DICE_MEMORY_SYMBOLS, diceIndices.getNumber(), 5);
tileSymbols.removeNumber(5);
for (int i = 0; i < 2; i++)
Commit: 6ddedc955a5d04efda9b462154ccac2df4f8966a
https://github.com/scummvm/scummvm/commit/6ddedc955a5d04efda9b462154ccac2df4f8966a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Merge TextSurface into FontSurface
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 3b456a5..1c3769d 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -150,62 +150,70 @@ void ShadowSurface::draw() {
// FontSurface
-FontSurface::FontSurface(NeverhoodEngine *vm, NPointArray &tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
- : BaseSurface(vm, 0, charWidth * 16, charHeight * numRows), _tracking(tracking), _numRows(numRows), _firstChar(firstChar),
- _charWidth(charWidth), _charHeight(charHeight) {
-}
+FontSurface::FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint charsPerRow, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
+ : BaseSurface(vm, 0, charWidth * charsPerRow, charHeight * numRows), _charsPerRow(charsPerRow), _numRows(numRows),
+ _firstChar(firstChar), _charWidth(charWidth), _charHeight(charHeight), _tracking(NULL) {
+
+ _tracking = new NPointArray();
+ *_tracking = *tracking;
-void FontSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr) {
- NDrawRect sourceRect;
- chr -= _firstChar;
- sourceRect.x = (chr % 16) * _charWidth;
- sourceRect.y = (chr / 16) * _charHeight;
- sourceRect.width = _charWidth;
- sourceRect.height = _charHeight;
- destSurface->copyFrom(_surface, x, y, sourceRect, true);
}
-void FontSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string) {
- for (; *string != 0; string++) {
- drawChar(destSurface, x, y, *string);
- x += _tracking[*string - _firstChar].x;
- }
+FontSurface::FontSurface(NeverhoodEngine *vm, uint32 fileHash, uint charsPerRow, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight)
+ : BaseSurface(vm, 0, charWidth * charsPerRow, charHeight * numRows), _charsPerRow(charsPerRow), _numRows(numRows),
+ _firstChar(firstChar), _charWidth(charWidth), _charHeight(charHeight), _tracking(NULL) {
+
+ SpriteResource fontSpriteResource(_vm);
+ fontSpriteResource.load2(fileHash);
+ drawSpriteResourceEx(fontSpriteResource, false, false, 0, 0);
}
-// TextSurface
-
-TextSurface::TextSurface(NeverhoodEngine *vm, uint32 fileHash, uint16 numRows, uint charCount,
- byte firstChar, uint16 charWidth, uint16 charHeight)
- : BaseSurface(vm, 0, charWidth * charCount, charHeight * numRows),
- _numRows(numRows), _firstChar(firstChar), _charWidth(charWidth), _charHeight(charHeight),
- _fileHash(fileHash), _charCount(charCount) {
-
- SpriteResource spriteResource(_vm);
- spriteResource.load2(_fileHash);
- drawSpriteResourceEx(spriteResource, false, false, 0, 0);
+FontSurface::~FontSurface() {
+ delete _tracking;
}
-void TextSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr) {
+void FontSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr) {
NDrawRect sourceRect;
chr -= _firstChar;
- sourceRect.x = (chr % _charCount) * _charWidth;
- sourceRect.y = (chr / _charCount) * _charHeight;
+ sourceRect.x = (chr % _charsPerRow) * _charWidth;
+ sourceRect.y = (chr / _charsPerRow) * _charHeight;
sourceRect.width = _charWidth;
sourceRect.height = _charHeight;
destSurface->copyFrom(_surface, x, y, sourceRect, true);
}
-void TextSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen) {
- for (; stringLen > 0; stringLen--, string++) {
+void FontSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen) {
+
+ if (stringLen < 0)
+ stringLen = strlen((const char*)string);
+
+ for (; stringLen > 0; --stringLen, ++string) {
drawChar(destSurface, x, y, *string);
- x += _charWidth;
+ x += _tracking ? (*_tracking)[*string - _firstChar].x : _charWidth;
}
+
}
-int16 TextSurface::getStringWidth(const byte *string, int stringLen) {
+int16 FontSurface::getStringWidth(const byte *string, int stringLen) {
return string ? stringLen * _charWidth : 0;
}
+FontSurface *FontSurface::createFontSurface(NeverhoodEngine *vm, uint32 fileHash) {
+ FontSurface *fontSurface;
+ DataResource fontData(vm);
+ SpriteResource fontSprite(vm);
+ fontData.load(calcHash("asRecFont"));
+ uint16 numRows = fontData.getPoint(calcHash("meNumRows")).x;
+ uint16 firstChar = fontData.getPoint(calcHash("meFirstChar")).x;
+ uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
+ uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
+ NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
+ fontSprite.load2(fileHash);
+ fontSurface = new FontSurface(vm, tracking, 16, numRows, firstChar, charWidth, charHeight);
+ fontSurface->drawSpriteResourceEx(fontSprite, false, false, 0, 0);
+ return fontSurface;
+}
+
// Misc
enum BitmapFlags {
@@ -338,8 +346,8 @@ void unpackSpriteNormal(const byte *source, int width, int height, byte *dest, i
}
int calcDistance(int16 x1, int16 y1, int16 x2, int16 y2) {
- int16 deltaX = ABS(x1 - x2);
- int16 deltaY = ABS(y1 - y2);
+ const int16 deltaX = ABS(x1 - x2);
+ const int16 deltaY = ABS(y1 - y2);
return sqrt((double)(deltaX * deltaX + deltaY * deltaY));
}
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index 65d25c0..a900cea 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -81,8 +81,6 @@ class AnimResource;
class SpriteResource;
class MouseCursorResource;
-// NOTE: "Restore" methods aren't need in the reimplementation as they're DirectDraw-specific
-
class BaseSurface {
public:
BaseSurface(NeverhoodEngine *vm, int priority, int16 width, int16 height);
@@ -131,33 +129,22 @@ protected:
class FontSurface : public BaseSurface {
public:
- FontSurface(NeverhoodEngine *vm, NPointArray &tracking, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
- void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
- void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string);
-protected:
- NPointArray _tracking;
- uint16 _numRows;
- byte _firstChar;
- uint16 _charWidth;
- uint16 _charHeight;
-};
-
-class TextSurface : public BaseSurface {
-public:
- TextSurface(NeverhoodEngine *vm, uint32 fileHash, uint16 numRows, uint charCount,
- byte firstChar, uint16 charWidth, uint16 charHeight);
+ FontSurface(NeverhoodEngine *vm, NPointArray *tracking, uint charsPerRow, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
+ FontSurface(NeverhoodEngine *vm, uint32 fileHash, uint charsPerRow, uint16 numRows, byte firstChar, uint16 charWidth, uint16 charHeight);
+ virtual ~FontSurface();
void drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr);
- void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen);
+ void drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen = -1);
int16 getStringWidth(const byte *string, int stringLen);
uint16 getCharWidth() const { return _charWidth; }
uint16 getCharHeight() const { return _charHeight; }
+ static FontSurface *createFontSurface(NeverhoodEngine *vm, uint32 fileHash);
protected:
+ uint _charsPerRow;
uint16 _numRows;
byte _firstChar;
uint16 _charWidth;
uint16 _charHeight;
- uint32 _fileHash;
- uint _charCount;
+ NPointArray *_tracking;
};
// Misc
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index a1489fc..726ab91 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -458,9 +458,9 @@ uint32 Widget::handleMessage(int messageNum, const MessageParam ¶m, Entity *
TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
- const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, TextSurface *textSurface)
+ const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface)
: Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
- _string(string), _stringLen(stringLen), _drawSurface(drawSurface), _tx(tx), _ty(ty), _textSurface(textSurface) {
+ _string(string), _stringLen(stringLen), _drawSurface(drawSurface), _tx(tx), _ty(ty), _fontSurface(fontSurface) {
}
@@ -470,15 +470,15 @@ void TextLabelWidget::addSprite() {
}
int16 TextLabelWidget::getWidth() {
- return _textSurface->getStringWidth(_string, _stringLen);
+ return _fontSurface->getStringWidth(_string, _stringLen);
}
int16 TextLabelWidget::getHeight() {
- return _textSurface->getCharHeight();
+ return _fontSurface->getCharHeight();
}
void TextLabelWidget::drawString(int maxStringLength) {
- _textSurface->drawString(_drawSurface, _x, _y, _string, MIN(_stringLen, maxStringLength));
+ _fontSurface->drawString(_drawSurface, _x, _y, _string, MIN(_stringLen, maxStringLength));
_collisionBoundsOffset.set(_tx, _ty, getWidth(), getHeight());
updateBounds();
}
@@ -499,14 +499,14 @@ void TextLabelWidget::setString(const byte *string, int stringLen) {
}
TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, int maxStringLength, TextSurface *textSurface,
+ int baseObjectPriority, int baseSurfacePriority, int maxStringLength, FontSurface *fontSurface,
uint32 fileHash, const NRect &rect)
: Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
- _maxStringLength(maxStringLength), _textSurface(textSurface), _fileHash(fileHash), _rect(rect),
+ _maxStringLength(maxStringLength), _fontSurface(fontSurface), _fileHash(fileHash), _rect(rect),
_cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0),
_modified(false) {
- _maxVisibleChars = (_rect.x2 - _rect.x1) / _textSurface->getCharWidth();
+ _maxVisibleChars = (_rect.x2 - _rect.x1) / _fontSurface->getCharWidth();
_cursorPos = 0;
SetUpdateHandler(&TextEditWidget::update);
@@ -526,8 +526,8 @@ void TextEditWidget::onClick() {
if (_entryString.size() == 1)
_cursorPos = 0;
else {
- int newCursorPos = mousePos.x / _textSurface->getCharWidth();
- if (mousePos.x % _textSurface->getCharWidth() > _textSurface->getCharWidth() / 2 && newCursorPos <= (int)_entryString.size())//###
+ int newCursorPos = mousePos.x / _fontSurface->getCharWidth();
+ if (mousePos.x % _fontSurface->getCharWidth() > _fontSurface->getCharWidth() / 2 && newCursorPos <= (int)_entryString.size())//###
++newCursorPos;
_cursorPos = MIN((int)_entryString.size(), newCursorPos);
}
@@ -546,9 +546,9 @@ void TextEditWidget::addSprite() {
_parentScene->addSprite(this);
_parentScene->addCollisionSprite(this);
_surface->setVisible(true);
- _textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _textSurface->getCharHeight()) / 2,
+ _textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _fontSurface->getCharHeight()) / 2,
0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
- (const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _textSurface);
+ (const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _fontSurface);
_textLabelWidget->addSprite();
cursorSpriteResource.load2(_cursorFileHash);
_cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
@@ -576,7 +576,7 @@ void TextEditWidget::setCursor(uint32 cursorFileHash, int16 cursorWidth, int16 c
void TextEditWidget::drawCursor() {
if (_cursorSurface->getVisible() && _cursorPos >= 0 && _cursorPos <= _maxVisibleChars) {
NDrawRect sourceRect(0, 0, _cursorWidth, _cursorHeight);
- _surface->copyFrom(_cursorSurface->getSurface(), _rect.x1 + _cursorPos * _textSurface->getCharWidth(),
+ _surface->copyFrom(_cursorSurface->getSurface(), _rect.x1 + _cursorPos * _fontSurface->getCharWidth(),
_rect.y1 + (_rect.y2 - _cursorHeight - _rect.y1 + 1) / 2, sourceRect, true);
} else
_cursorSurface->setVisible(false);
@@ -677,13 +677,13 @@ uint32 TextEditWidget::handleMessage(int messageNum, const MessageParam ¶m,
SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
- StringArray *savegameList, TextSurface *textSurface, uint32 bgFileHash, const NRect &rect)
+ StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect)
: Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
- _savegameList(savegameList), _textSurface(textSurface), _bgFileHash(bgFileHash), _rect(rect),
+ _savegameList(savegameList), _fontSurface(fontSurface), _bgFileHash(bgFileHash), _rect(rect),
_maxStringLength(0), _firstVisibleItem(0), _lastVisibleItem(0), _currIndex(0) {
- _maxVisibleItemsCount = (_rect.y2 - _rect.y1) / _textSurface->getCharHeight();
- _maxStringLength = (_rect.x2 - _rect.x1) / _textSurface->getCharWidth();
+ _maxVisibleItemsCount = (_rect.y2 - _rect.y1) / _fontSurface->getCharHeight();
+ _maxStringLength = (_rect.x2 - _rect.x1) / _fontSurface->getCharWidth();
}
void SavegameListBox::onClick() {
@@ -692,7 +692,7 @@ void SavegameListBox::onClick() {
mousePos.y -= _y + _rect.y1;
if (mousePos.x >= 0 && mousePos.x <= _rect.x2 - _rect.x1 &&
mousePos.y >= 0 && mousePos.y <= _rect.y2 - _rect.y1) {
- int newIndex = _firstVisibleItem + mousePos.y / _textSurface->getCharHeight();
+ int newIndex = _firstVisibleItem + mousePos.y / _fontSurface->getCharHeight();
if (newIndex <= _lastVisibleItem) {
_currIndex = newIndex;
refresh();
@@ -723,7 +723,7 @@ void SavegameListBox::buildItems() {
const byte *string = (const byte*)savegameList[i].c_str();
int stringLen = (int)savegameList[i].size();
TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1,
- _baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _textSurface);
+ _baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _fontSurface);
label->addSprite();
_textLabelItems.push_back(label);
}
@@ -733,7 +733,7 @@ void SavegameListBox::drawItems() {
for (int i = 0; i < (int)_textLabelItems.size(); ++i) {
TextLabelWidget *label = _textLabelItems[i];
if (i >= _firstVisibleItem && i < _lastVisibleItem) {
- label->setY(_rect.y1 + (i - _firstVisibleItem) * _textSurface->getCharHeight());
+ label->setY(_rect.y1 + (i - _firstVisibleItem) * _fontSurface->getCharHeight());
label->updateBounds();
label->drawString(_maxStringLength);
} else
@@ -805,7 +805,7 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
static const NRect kTextEditRect(0, 0, 377, 17);
static const NRect kMouseRect(50, 47, 427, 64);
- _textSurface = new TextSurface(_vm, 0x2328121A, 7, 32, 32, 11, 17);
+ _fontSurface = new FontSurface(_vm, 0x2328121A, 32, 7, 32, 11, 17);
setBackground(0x30084E25);
setPalette(0x30084E25);
@@ -814,11 +814,11 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
insertStaticSprite(0x1301A7EA, 200);
_listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this, 1000, 1000,
- _savegameList, _textSurface, 0x1115A223, kListBoxRect);
+ _savegameList, _fontSurface, 0x1115A223, kListBoxRect);
_listBox->addSprite();
_textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 1000, 1000, 29,
- _textSurface, 0x3510A868, kTextEditRect);
+ _fontSurface, 0x3510A868, kTextEditRect);
_textEditWidget->setCursor(0x8290AC20, 2, 13);
_textEditWidget->addSprite();
setCurrWidget(_textEditWidget);
@@ -835,7 +835,7 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
}
SaveGameMenu::~SaveGameMenu() {
- delete _textSurface;
+ delete _fontSurface;
}
void SaveGameMenu::handleEvent(int16 itemID, int eventType) {
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 0f45795..51c32aa 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -123,7 +123,7 @@ class TextLabelWidget : public Widget {
public:
TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
- const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, TextSurface *textSurface);
+ const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface);
virtual void onClick();
virtual void addSprite();
virtual int16 getWidth();
@@ -131,11 +131,11 @@ public:
void drawString(int maxStringLength);
void clear();
void setString(const byte *string, int stringLen);
- TextSurface *getTextSurface() const { return _textSurface; }
+ FontSurface *getFontSurface() const { return _fontSurface; }
protected:
BaseSurface *_drawSurface;
int16 _tx, _ty;
- TextSurface *_textSurface;
+ FontSurface *_fontSurface;
const byte *_string;
int _stringLen;
};
@@ -143,7 +143,7 @@ protected:
class TextEditWidget : public Widget {
public:
TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, int maxStringLength, TextSurface *textSurface,
+ int baseObjectPriority, int baseSurfacePriority, int maxStringLength, FontSurface *fontSurface,
uint32 fileHash, const NRect &rect);
~TextEditWidget();
virtual void onClick();
@@ -167,7 +167,7 @@ protected:
int _cursorPos;
int _cursorTicks;
Common::String _entryString;
- TextSurface *_textSurface;
+ FontSurface *_fontSurface;
TextLabelWidget *_textLabelWidget;
BaseSurface *_cursorSurface;
uint32 _cursorFileHash;
@@ -181,7 +181,7 @@ class SavegameListBox : public Widget {
public:
SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
- StringArray *savegameList, TextSurface *textSurface, uint32 bgFileHash, const NRect &rect);
+ StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
virtual void onClick();
virtual void addSprite();
void buildItems();
@@ -200,7 +200,7 @@ protected:
int _firstVisibleItem;
int _lastVisibleItem;
StringArray *_savegameList;
- TextSurface *_textSurface;
+ FontSurface *_fontSurface;
uint _currIndex;
int _maxVisibleItemsCount;
};
@@ -212,7 +212,7 @@ public:
virtual void handleEvent(int16 itemID, int eventType);
protected:
StringArray *_savegameList;
- TextSurface *_textSurface;
+ FontSurface *_fontSurface;
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
Common::String _savegameDescription;
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 7033caf..44bb778 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1580,7 +1580,7 @@ void Scene1005::drawTextToBackground() {
const char *textStart, *textEnd;
int16 y = 36;
uint32 textIndex = getTextIndex();
- FontSurface *fontSurface = createFontSurface();
+ FontSurface *fontSurface = FontSurface::createFontSurface(_vm, getGlobalVar(V_ENTRANCE_OPEN) ? 0x283CE401 : 0xC6604282);
textResource.load(0x80283101);
textStart = textResource.getString(textIndex, textEnd);
while (textStart < textEnd) {
@@ -1591,26 +1591,6 @@ void Scene1005::drawTextToBackground() {
delete fontSurface;
}
-FontSurface *Scene1005::createFontSurface() {
- FontSurface *fontSurface;
- DataResource fontData(_vm);
- SpriteResource fontSprite(_vm);
- fontData.load(calcHash("asRecFont"));
- uint16 numRows = fontData.getPoint(calcHash("meNumRows")).x;
- uint16 firstChar = fontData.getPoint(calcHash("meFirstChar")).x;
- uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
- uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
- NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
- fontSurface = new FontSurface(_vm, *tracking, numRows, firstChar, charWidth, charHeight);
- if (getGlobalVar(V_ENTRANCE_OPEN)) {
- fontSprite.load2(0x283CE401);
- } else {
- fontSprite.load2(0xC6604282);
- }
- fontSurface->drawSpriteResourceEx(fontSprite, false, false, 0, 0);
- return fontSurface;
-}
-
uint32 Scene1005::getTextIndex() {
uint32 textIndex;
textIndex = getTextIndex1();
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 6f73326..32228a2 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -289,7 +289,6 @@ public:
protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void drawTextToBackground();
- FontSurface *createFontSurface();
uint32 getTextIndex();
uint32 getTextIndex1();
uint32 getTextIndex2();
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 889af37..6448955 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2135,8 +2135,9 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x08100289);
addEntity(_palette);
insertPuzzleMouse(0x0028D089, 40, 600);
-
- createFontSurface();
+
+ _fontSurface = FontSurface::createFontSurface(_vm, 0x0800090C);
+
_backgroundSurface = new BaseSurface(_vm, 0, 640, 480);
spriteResource.load2(0x08100289);
_backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
@@ -2232,20 +2233,6 @@ uint32 Scene2208::handleMessage(int messageNum, const MessageParam ¶m, Entit
return messageResult;
}
-void Scene2208::createFontSurface() {
- DataResource fontData(_vm);
- SpriteResource spriteResource(_vm);
- fontData.load(calcHash("asRecFont"));
- uint16 numRows = fontData.getPoint(calcHash("meNumRows")).x;
- uint16 firstChar = fontData.getPoint(calcHash("meFirstChar")).x;
- uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
- uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
- NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
- spriteResource.load2(0x0800090C);
- _fontSurface = new FontSurface(_vm, *tracking, numRows, firstChar, charWidth, charHeight);
- _fontSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
-}
-
void Scene2208::drawRow(int16 rowIndex) {
NDrawRect sourceRect;
int16 y = (rowIndex * 48) % 528;
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 34be267..30cc681 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -336,7 +336,6 @@ protected:
Common::Array<const char*> _strings;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createFontSurface();
void drawRow(int16 rowIndex);
};
Commit: a98d9aa58afb4dd944616e7f194c09ff28456e1b
https://github.com/scummvm/scummvm/commit/a98d9aa58afb4dd944616e7f194c09ff28456e1b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:39-07:00
Commit Message:
NEVERHOOD: Clean up DiskplayerScene
- Enable return to launcher
- Remove obsolete comments
- Remove braces in single-line statements
- Remove unused non-transparent drawing code in BaseSurface::copyFrom
- Clean up mouse cursor insertion code in Scene class
Changed paths:
engines/neverhood/detection.cpp
engines/neverhood/diskplayerscene.cpp
engines/neverhood/diskplayerscene.h
engines/neverhood/entity.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/gamevars.cpp
engines/neverhood/gamevars.h
engines/neverhood/graphics.cpp
engines/neverhood/graphics.h
engines/neverhood/menumodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module1000.cpp
engines/neverhood/module1100.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2900.cpp
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index 9dc4582..043cf02 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -72,7 +72,6 @@ static const NeverhoodGameDescription gameDescriptions[] = {
{
// Neverhood English version
- // TODO: Maybe additional files are needed to properly detect different versions
{
"neverhood",
0,
@@ -147,7 +146,7 @@ bool NeverhoodMetaEngine::hasFeature(MetaEngineFeature f) const {
bool Neverhood::NeverhoodEngine::hasFeature(EngineFeature f) const {
return
-// (f == kSupportsRTL) || // TODO: Not yet...
+ (f == kSupportsRTL) ||
(f == kSupportsLoadingDuringRuntime) ||
(f == kSupportsSavingDuringRuntime);
}
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index 907e027..d972943 100644
--- a/engines/neverhood/diskplayerscene.cpp
+++ b/engines/neverhood/diskplayerscene.cpp
@@ -240,40 +240,40 @@ void DiskplayerPlayButton::release() {
}
}
-DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int elementIndex, int value)
- : Entity(vm, 0), _diskplayerScene(diskplayerScene), _elementIndex(elementIndex), _value(value),
- _isLocked(false), _isBlinking(false), _countdown(0), _initialCountdown(2), _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
-
- if (value != 0 && elementIndex < 20) {
- _inactiveSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes1[_elementIndex], 1100));
- _appearSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes2[_elementIndex], 1000));
- _activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes3[_elementIndex], 1100));
+DiskplayerSlot::DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int slotIndex, bool isAvailable)
+ : Entity(vm, 0), _diskplayerScene(diskplayerScene), _isLocked(false), _isBlinking(false),
+ _blinkCountdown(0), _initialBlinkCountdown(2), _inactiveSlot(NULL), _appearSlot(NULL), _activeSlot(NULL) {
+
+ if (isAvailable && slotIndex < 20) {
+ _inactiveSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes1[slotIndex], 1100));
+ _appearSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes2[slotIndex], 1000));
+ _activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes3[slotIndex], 1100));
_inactiveSlot->setVisible(false);
_appearSlot->setVisible(false);
_activeSlot->setVisible(false);
loadSound(0, 0x46210074);
- setSoundPan(0, elementIndex * 100 / 19);
- } else if (elementIndex != 20) {
- _activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes4[_elementIndex], 1100));
+ setSoundPan(0, slotIndex * 100 / 19);
+ } else if (slotIndex != 20) {
+ _activeSlot = _diskplayerScene->addSprite(new StaticSprite(_vm, kDiskplayerSlotFileHashes4[slotIndex], 1100));
_activeSlot->setVisible(false);
}
SetUpdateHandler(&DiskplayerSlot::update);
}
void DiskplayerSlot::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
+ if (_blinkCountdown != 0 && (--_blinkCountdown == 0)) {
if (_isBlinking) {
if (_inactiveSlot)
_inactiveSlot->setVisible(true);
if (_activeSlot)
_activeSlot->setVisible(false);
- _countdown = _initialCountdown / 2;
+ _blinkCountdown = _initialBlinkCountdown / 2;
} else {
if (_inactiveSlot)
_inactiveSlot->setVisible(false);
if (_activeSlot)
_activeSlot->setVisible(true);
- _countdown = _initialCountdown;
+ _blinkCountdown = _initialBlinkCountdown;
}
_isBlinking = !_isBlinking;
}
@@ -295,13 +295,13 @@ void DiskplayerSlot::play() {
if (_activeSlot)
_activeSlot->setVisible(true);
_isBlinking = true;
- _countdown = 0;
+ _blinkCountdown = 0;
}
}
void DiskplayerSlot::activate() {
if (!_isLocked)
- _countdown = _initialCountdown;
+ _blinkCountdown = _initialBlinkCountdown;
}
void DiskplayerSlot::stop() {
@@ -311,7 +311,7 @@ void DiskplayerSlot::stop() {
if (_activeSlot)
_activeSlot->setVisible(false);
_isBlinking = false;
- _countdown = 0;
+ _blinkCountdown = 0;
}
}
@@ -330,17 +330,17 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
_asKey = insertSprite<AsDiskplayerSceneKey>();
for (int i = 0; i < 20; i++) {
- _diskAvailable[i] = 0;
+ _diskAvailable[i] = false;
if (getSubVar(VA_IS_TAPE_INSERTED, i))
availableDisksCount++;
}
for (int i = 0; i < availableDisksCount; i++)
- _diskAvailable[kDiskplayerInitArray[i] - 1] = 1;
+ _diskAvailable[kDiskplayerInitArray[i] - 1] = true;
- for (int i = 0; i < 20; i++) {
- _diskSlots[i] = new DiskplayerSlot(_vm, this, i, _diskAvailable[i]);
- addEntity(_diskSlots[i]);
+ for (int slotIndex = 0; slotIndex < 20; slotIndex++) {
+ _diskSlots[slotIndex] = new DiskplayerSlot(_vm, this, slotIndex, _diskAvailable[slotIndex]);
+ addEntity(_diskSlots[slotIndex]);
}
_hasAllDisks = availableDisksCount == 20;
@@ -348,7 +348,7 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int
if (_hasAllDisks && !getGlobalVar(V_HAS_FINAL_KEY))
_dropKey = true;
- _finalDiskSlot = new DiskplayerSlot(_vm, this, 20, 0);
+ _finalDiskSlot = new DiskplayerSlot(_vm, this, 20, false);
addEntity(_finalDiskSlot);
insertPuzzleMouse(0x000408A8, 20, 620);
@@ -372,11 +372,10 @@ void DiskplayerScene::update() {
Scene::update();
if (_updateStatus == kUSTuningIn && _diskSmackerPlayer->isDone()) {
- if (_diskAvailable[_diskIndex]) {
+ if (_diskAvailable[_diskIndex])
playDisk();
- } else {
+ else
playStatic();
- }
} else if (_updateStatus == kUSPlaying && _diskSmackerPlayer->isDone()) {
_diskSlots[_diskIndex]->stop();
_diskIndex++;
@@ -456,11 +455,10 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m,
_diskIndex = (param.asPoint().x - 38) / 28;
_diskSlots[_diskIndex]->activate();
if (_updateStatus == kUSPlaying) {
- if (_diskAvailable[_diskIndex]) {
+ if (_diskAvailable[_diskIndex])
playDisk();
- } else {
+ else
playStatic();
- }
}
}
break;
diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h
index 7225ff6..f3fd9ea 100644
--- a/engines/neverhood/diskplayerscene.h
+++ b/engines/neverhood/diskplayerscene.h
@@ -54,7 +54,7 @@ protected:
class DiskplayerSlot : public Entity {
public:
- DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int elementIndex, int value);
+ DiskplayerSlot(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene, int slotIndex, bool isAvailable);
void activate();
void stop();
void appear();
@@ -65,11 +65,9 @@ protected:
Sprite *_inactiveSlot;
Sprite *_appearSlot;
Sprite *_activeSlot;
- int _elementIndex;
- int _initialCountdown;
- int _countdown;
+ int _initialBlinkCountdown;
+ int _blinkCountdown;
bool _isLocked;
- int _value;
bool _isBlinking;
void update();
};
@@ -92,7 +90,7 @@ protected:
DiskplayerSlot *_diskSlots[20];
DiskplayerSlot *_finalDiskSlot;
int _updateStatus;
- byte _diskAvailable[20];
+ bool _diskAvailable[20];
int _diskIndex;
int _appearCountdown;
int _tuneInCountdown;
diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp
index c7f1659..8b12989 100644
--- a/engines/neverhood/entity.cpp
+++ b/engines/neverhood/entity.cpp
@@ -55,6 +55,7 @@ Entity::~Entity() {
}
void Entity::draw() {
+ // Empty
}
void Entity::handleUpdate() {
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index be56c73..c931057 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -195,8 +195,7 @@ void GameModule::initMemoryPuzzle() {
}
setSubVar(VA_IS_PUZZLE_INIT, 0xC8606803, 1);
- // DEBUG>>>
- // TODO: Some debug code: Leave two matching tiles open
+ // DEBUG>>> Some debug code: Leave two matching tiles open
for (int i = 0; i < 48; i++)
setSubVar(VA_IS_TILE_MATCH, i, 1);
int debugIndex = 0;
@@ -313,9 +312,8 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
}
void GameModule::startup() {
- // TODO: Displaying of error text probably not needed in ScummVM
-#if 1
- createModule(1500, 0); // Logos and intro video //Real
+#if 0
+ createModule(1500, 0); // Logos and intro video // Real game start
#else
// DEBUG>>>
/*
@@ -362,13 +360,6 @@ void GameModule::startup() {
// <<<DEBUG
#if 0
- /*
- //DEBUG>>>
- createScene(_vm->gameState().sceneNum, _vm->gameState().which);
- return;
- //DEBUG<<<
- */
-
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 14;
createModule(2700, -1);
@@ -386,9 +377,9 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
-#if 0
- _vm->gameState().sceneNum = 1;
- createModule(1000, -1);
+#if 1
+ _vm->gameState().sceneNum = 7;
+ createModule(2200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 1;
@@ -425,7 +416,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2500, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 1;
createModule(2300, -1);
#endif
@@ -626,65 +617,60 @@ void GameModule::updateModule() {
createModule(2300, 0);
break;
case 1200:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createModule(2600, 0);
- } else {
+ else
createModule(2300, 2);
- }
break;
case 1100:
- if (_moduleResult == 0) {
+ if (_moduleResult == 0)
createModule(2900, 2);
- } else {
+ else {
setGlobalVar(V_ENTRANCE_OPEN, 1);
createModule(1300, 0);
}
break;
case 1300:
if (_moduleResult == 1) {
+ // The game was successfully finished
+ // TODO Restart the game/show main menu
// TODO _gameState.clear();
// TODO GameModule_handleKeyEscape
- } else {
+ } else
createModule(2900, 0);
- }
break;
case 1400:
- if (_moduleResult == 1) {
- error("WEIRD!");
- } else {
- createModule(1600, 1);
- }
+ createModule(1600, 1);
break;
case 1500:
createModule(1000, 0);
break;
case 1600:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createModule(1400, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createModule(1700, 0);
- } else {
+ else
createModule(2100, 0);
- }
break;
case 1700:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createModule(2900, 3);
- } else {
+ else
createModule(1600, 2);
- }
break;
case 1800:
if (_moduleResult == 1) {
- // TODO GameState_clear();
- // TODO GameModule_handleKeyEscape();
- } else if (_moduleResult == 2) {
+ // Game over, Klaymen jumped into the hole
+ // TODO Restart the game/show main menu
+ // TODO _gameState.clear();
+ // TODO GameModule_handleKeyEscape
+ } else if (_moduleResult == 2)
createModule(2700, 0);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createModule(3000, 3);
- } else {
+ else
createModule(2800, 0);
- }
break;
case 1900:
createModule(3000, 1);
@@ -693,11 +679,10 @@ void GameModule::updateModule() {
createModule(2900, 4);
break;
case 2100:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createModule(2900, 1);
- } else {
+ else
createModule(1600, 0);
- }
break;
case 2200:
createModule(2300, 1);
@@ -738,7 +723,7 @@ void GameModule::updateModule() {
createModule(1800, 0);
break;
case 2900:
- if (_moduleResult != 0xFFFFFFFF) {
+ if (_moduleResult != (uint32)-1) {
switch (_moduleResult) {
case 0:
createModule(1300, 5);
@@ -787,17 +772,16 @@ void GameModule::updateModule() {
setGlobalVar(V_TELEPORTER_CURR_LOCATION, 0);
break;
case 3000:
- if (_moduleResult == 1) {
+ // NOTE _moduleResult 2 never used
+ // TODO Check if _moduleResult 4 is used
+ if (_moduleResult == 1)
createModule(1900, 0);
- } else if (_moduleResult == 2) {
- // WEIRD: Sets the errorFlag
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createModule(1800, 3);
- } else if (_moduleResult == 4) {
+ else if (_moduleResult == 4)
createModule(3000, 0);
- } else {
+ else
createModule(2300, 4);
- }
break;
case 9999:
createModuleByHash(getGlobalVar(V_MODULE_NAME));
@@ -814,7 +798,7 @@ void GameModule::openMainMenu() {
// If there's no module, create one so there's something to return to
createModule(1000, 0);
}
- // TODO Save FPS, Smacker handle, screen offsets, collisition sprites
+ // TODO Save FPS, Smacker handle, screen offsets
_mainMenuRequested = false;
createMenuModule();
}
@@ -833,7 +817,7 @@ void GameModule::updateMenuModule() {
if (!updateChild()) {
// TODO Restore FPS?
_childObject = _prevChildObject;
- // TODO Restore Smacker handle, screen offsets, collision sprites
+ // TODO Restore Smacker handle, screen offsets
sendMessage(_childObject, 0x101E, 0); // TODO CHECKME Is this needed?
_prevChildObject = NULL;
_moduleNum = _prevModuleNum;
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index 7bf9f30..57d9547 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -28,9 +28,6 @@ GameVars::GameVars() {
addVar(0, 0);
}
-GameVars::~GameVars() {
-}
-
void GameVars::loadState(Common::InSaveFile *in) {
uint varCount;
_vars.clear();
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index a62b33c..d3fe15f 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -172,7 +172,6 @@ struct GameVar {
class GameVars {
public:
GameVars();
- ~GameVars();
void loadState(Common::InSaveFile *in);
void saveState(Common::OutSaveFile *out);
uint32 getGlobalVar(uint32 nameHash);
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 1c3769d..5426821 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -112,25 +112,17 @@ void BaseSurface::drawMouseCursorResource(MouseCursorResource &mouseCursorResour
}
}
-void BaseSurface::copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, NDrawRect &sourceRect, bool transparent) {
- // TODO: Clipping
+void BaseSurface::copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, NDrawRect &sourceRect) {
+ // Copy a rectangle from sourceSurface, no clipping is performed, 0 is the transparent color
byte *source = (byte*)sourceSurface->getBasePtr(sourceRect.x, sourceRect.y);
byte *dest = (byte*)_surface->getBasePtr(x, y);
int height = sourceRect.height;
- if (!transparent) {
- while (height--) {
- memcpy(dest, source, sourceRect.width);
- source += sourceSurface->pitch;
- dest += _surface->pitch;
- }
- } else {
- while (height--) {
- for (int xc = 0; xc < sourceRect.width; xc++)
- if (source[xc] != 0)
- dest[xc] = source[xc];
- source += sourceSurface->pitch;
- dest += _surface->pitch;
- }
+ while (height--) {
+ for (int xc = 0; xc < sourceRect.width; xc++)
+ if (source[xc] != 0)
+ dest[xc] = source[xc];
+ source += sourceSurface->pitch;
+ dest += _surface->pitch;
}
++_version;
}
@@ -179,7 +171,7 @@ void FontSurface::drawChar(BaseSurface *destSurface, int16 x, int16 y, byte chr)
sourceRect.y = (chr / _charsPerRow) * _charHeight;
sourceRect.width = _charWidth;
sourceRect.height = _charHeight;
- destSurface->copyFrom(_surface, x, y, sourceRect, true);
+ destSurface->copyFrom(_surface, x, y, sourceRect);
}
void FontSurface::drawString(BaseSurface *destSurface, int16 x, int16 y, const byte *string, int stringLen) {
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h
index a900cea..a0ac1f0 100644
--- a/engines/neverhood/graphics.h
+++ b/engines/neverhood/graphics.h
@@ -91,7 +91,7 @@ public:
void drawSpriteResourceEx(SpriteResource &spriteResource, bool flipX, bool flipY, int16 width, int16 height);
void drawAnimResource(AnimResource &animResource, uint frameIndex, bool flipX, bool flipY, int16 width, int16 height);
void drawMouseCursorResource(MouseCursorResource &mouseCursorResource, int frameNum);
- void copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, NDrawRect &sourceRect, bool transparent);
+ void copyFrom(Graphics::Surface *sourceSurface, int16 x, int16 y, NDrawRect &sourceRect);
int getPriority() const { return _priority; }
void setPriority(int priority) { _priority = priority; }
NDrawRect& getDrawRect() { return _drawRect; }
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 726ab91..2b7561c 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -577,7 +577,7 @@ void TextEditWidget::drawCursor() {
if (_cursorSurface->getVisible() && _cursorPos >= 0 && _cursorPos <= _maxVisibleChars) {
NDrawRect sourceRect(0, 0, _cursorWidth, _cursorHeight);
_surface->copyFrom(_cursorSurface->getSurface(), _rect.x1 + _cursorPos * _fontSurface->getCharWidth(),
- _rect.y1 + (_rect.y2 - _cursorHeight - _rect.y1 + 1) / 2, sourceRect, true);
+ _rect.y1 + (_rect.y2 - _cursorHeight - _rect.y1 + 1) / 2, sourceRect);
} else
_cursorSurface->setVisible(false);
}
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index aeeb62f..36607d7 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -48,8 +48,7 @@ void Module::draw() {
uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
case 0x0008:
- if (_parentModule)
- sendMessage(_parentModule, 8, 0);
+ sendMessage(_parentModule, 8, 0);
return 0;
case 0x1009:
_moduleResult = param.asInteger();
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 44bb778..12fe408 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -34,13 +34,12 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addMusic(0x03294419, 0x061880C6);
_vm->_soundMan->addMusic(0x03294419, _musicFileHash);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 0) {
+ else if (which == 0)
createScene(0, 0);
- } else if (which == 1) {
+ else if (which == 1)
createScene(1, 1);
- }
}
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
index c39845e..2ee3897 100644
--- a/engines/neverhood/module1100.cpp
+++ b/engines/neverhood/module1100.cpp
@@ -573,8 +573,6 @@ void Scene1105::createObjects() {
_asTeddyBear->show();
- // TODO: Find a nicer way
- deleteSprite((Sprite**)&_mouseCursor);
insertPuzzleMouse(0x18666208, 20, 620);
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 6448955..a53bd46 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2241,20 +2241,20 @@ void Scene2208::drawRow(int16 rowIndex) {
sourceRect.y = y;
sourceRect.width = 640;
sourceRect.height = 48;
- _background->getSurface()->copyFrom(_topBackgroundSurface->getSurface(), 0, y, sourceRect, true);
+ _background->getSurface()->copyFrom(_topBackgroundSurface->getSurface(), 0, y, sourceRect);
} else if (rowIndex > _maxRowIndex - 5) {
sourceRect.x = 0;
sourceRect.y = (rowIndex - _maxRowIndex + 4) * 48;
sourceRect.width = 640;
sourceRect.height = 48;
- _background->getSurface()->copyFrom(_bottomBackgroundSurface->getSurface(), 0, y, sourceRect, true);
+ _background->getSurface()->copyFrom(_bottomBackgroundSurface->getSurface(), 0, y, sourceRect);
} else {
rowIndex -= 4;
sourceRect.x = 0;
sourceRect.y = (rowIndex * 48) % 480;
sourceRect.width = 640;
sourceRect.height = 48;
- _background->getSurface()->copyFrom(_backgroundSurface->getSurface(), 0, y, sourceRect, true);
+ _background->getSurface()->copyFrom(_backgroundSurface->getSurface(), 0, y, sourceRect);
if (rowIndex < (int)_strings.size()) {
const char *text = _strings[rowIndex];
_fontSurface->drawString(_background->getSurface(), 95, y, (const byte*)text);
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index b5a6ab2..1e14d37 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -82,8 +82,8 @@ void Module2900::updateScene() {
if (!updateChild()) {
switch (_sceneNum) {
case 0:
- if (_moduleResult == 0xFFFFFFFF) {
- leaveModule(0xFFFFFFFF);
+ if (_moduleResult == (uint32)-1) {
+ leaveModule((uint32)-1);
} else {
_teleporterModuleResult = _moduleResult;
switch (getGlobalVar(V_TELEPORTER_WHICH)) {
@@ -417,14 +417,12 @@ uint32 Scene2901::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- leaveScene(0xFFFFFFFF);
- }
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
+ leaveScene((uint32)-1);
break;
case 0x2000:
- if (_currLocationButtonNum != _selectedButtonNum) {
+ if (_currLocationButtonNum != _selectedButtonNum)
leaveScene(_selectedButtonNum);
- }
break;
case 0x2001:
if (_currLocationButtonNum == _selectedButtonNum)
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index e34f933..c22683a 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -199,18 +199,15 @@ void Scene::insertScreenMouse(uint32 fileHash, const NRect *mouseRect) {
NRect rect(-1, -1, -1, -1);
if (mouseRect)
rect = *mouseRect;
- _mouseCursor = new Mouse(_vm, fileHash, rect);
- addEntity(_mouseCursor);
+ insertMouse(new Mouse(_vm, fileHash, rect));
}
void Scene::insertPuzzleMouse(uint32 fileHash, int16 x1, int16 x2) {
- _mouseCursor = new Mouse(_vm, fileHash, x1, x2);
- addEntity(_mouseCursor);
+ insertMouse(new Mouse(_vm, fileHash, x1, x2));
}
void Scene::insertNavigationMouse(uint32 fileHash, int type) {
- _mouseCursor = new Mouse(_vm, fileHash, type);
- addEntity(_mouseCursor);
+ insertMouse(new Mouse(_vm, fileHash, type));
}
void Scene::showMouse(bool visible) {
@@ -561,4 +558,11 @@ void Scene::checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32
}
}
+void Scene::insertMouse(Mouse *mouseCursor) {
+ if (_mouseCursor)
+ deleteSprite((Sprite**)&_mouseCursor);
+ _mouseCursor = mouseCursor;
+ addEntity(_mouseCursor);
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index cb34567..f03275f 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -217,6 +217,7 @@ protected:
void clearHitRects();
void clearCollisionSprites();
+ void insertMouse(Mouse *mouseCursor);
};
} // End of namespace Neverhood
Commit: 57497817e1f086a62471587e3601d8f0f7d7f13b
https://github.com/scummvm/scummvm/commit/57497817e1f086a62471587e3601d8f0f7d7f13b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Add enum for the resource types
Changed paths:
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/smackerscene.cpp
engines/neverhood/sound.cpp
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 7f897a4..6cbbf12 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -27,10 +27,6 @@
namespace Neverhood {
-// TODO: Since the load() methods are similar in most cases some of the code therein
-// can probably be copied into another method (e.g. inside the resource manager)
-// to reduce code.
-
// SpriteResource
SpriteResource::SpriteResource(NeverhoodEngine *vm)
@@ -55,7 +51,7 @@ bool SpriteResource::load(uint32 fileHash) {
// TODO: Later merge with load2 and make the mode a parameter
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
- if (_resourceHandle.isValid() && _resourceHandle.type() == 2) {
+ if (_resourceHandle.isValid() && _resourceHandle.type() == kResTypeBitmap) {
_vm->_res->loadResource(_resourceHandle);
const byte *spriteData = _resourceHandle.data();
parseBitmapResource(spriteData, &_rle, &_dimensions, NULL, NULL, &_pixels);
@@ -67,7 +63,7 @@ bool SpriteResource::load2(uint32 fileHash) {
debug(2, "SpriteResource::load2(%08X)", fileHash);
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
- if (_resourceHandle.isValid() && _resourceHandle.type() == 2) {
+ if (_resourceHandle.isValid() && _resourceHandle.type() == kResTypeBitmap) {
_vm->_res->loadResource(_resourceHandle);
const byte *spriteData = _resourceHandle.data();
parseBitmapResource(spriteData, &_rle, &_dimensions, &_position, NULL, &_pixels);
@@ -97,11 +93,11 @@ bool PaletteResource::load(uint32 fileHash) {
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
if (_resourceHandle.isValid() &&
- (_resourceHandle.type() == 2 || _resourceHandle.type() == 3)) {
+ (_resourceHandle.type() == kResTypeBitmap || _resourceHandle.type() == kResTypePalette)) {
_vm->_res->loadResource(_resourceHandle);
_palette = _resourceHandle.data();
// Check if the palette is stored in a bitmap
- if (_resourceHandle.type() == 2)
+ if (_resourceHandle.type() == kResTypeBitmap)
parseBitmapResource(_palette, NULL, NULL, NULL, &_palette, NULL);
}
@@ -152,7 +148,7 @@ bool AnimResource::load(uint32 fileHash) {
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
- if (!_resourceHandle.isValid() || _resourceHandle.type() != 4)
+ if (!_resourceHandle.isValid() || _resourceHandle.type() != kResTypeAnimation)
return false;
const byte *resourceData, *animList, *frameList;
@@ -336,7 +332,7 @@ void TextResource::load(uint32 fileHash) {
debug(2, "TextResource::load(%08X)", fileHash);
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
- if (_resourceHandle.isValid() && _resourceHandle.type() == 6) {
+ if (_resourceHandle.isValid() && _resourceHandle.type() == kResTypeText) {
_vm->_res->loadResource(_resourceHandle);
_textData = _resourceHandle.data();
_count = READ_LE_UINT32(_textData);
@@ -371,7 +367,7 @@ void DataResource::load(uint32 fileHash) {
uint32 dataSize = 0;
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
- if (_resourceHandle.isValid() && _resourceHandle.type() == 5) {
+ if (_resourceHandle.isValid() && _resourceHandle.type() == kResTypeData) {
_vm->_res->loadResource(_resourceHandle);
data = _resourceHandle.data();
dataSize = _resourceHandle.size();
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 996579b..c6f63bf 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -31,6 +31,17 @@
namespace Neverhood {
+enum {
+ kResTypeBitmap = 2,
+ kResTypePalette = 3,
+ kResTypeAnimation = 4,
+ kResTypeData = 5,
+ kResTypeText = 6,
+ kResTypeSound = 7,
+ kResTypeMusic = 8,
+ kResTypeVideo = 10
+};
+
class SpriteResource {
public:
SpriteResource(NeverhoodEngine *vm);
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 7470acb..290b8fa 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -72,7 +72,7 @@ void SmackerScene::nextVideo() {
uint32 smackerFileHash = _fileHashList[_fileHashListIndex];
ResourceHandle resourceHandle;
_vm->_res->queryResource(smackerFileHash, resourceHandle);
- if (resourceHandle.type() != 10) {
+ if (resourceHandle.type() != kResTypeVideo) {
// Not a Smacker file
_vm->_screen->setSmackerDecoder(NULL);
sendMessage(_parentModule, 0x1009, 0);
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 3cbcf96..13ac87f 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -128,8 +128,8 @@ MusicItem::~MusicItem() {
}
SoundItem::SoundItem(NeverhoodEngine *vm, uint32 nameHash, uint32 soundFileHash,
- bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
- bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown)
+ bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
+ bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown)
: _soundResource(NULL), _nameHash(nameHash), _soundFileHash(soundFileHash),
_playOnceAfterRandomCountdown(false), _minCountdown(0), _maxCountdown(0),
_playOnceAfterCountdown(_playOnceAfterCountdown), _initialCountdown(initialCountdown),
@@ -546,7 +546,8 @@ void AudioResourceMan::removeSound(int16 soundIndex) {
void AudioResourceMan::loadSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (!soundItem->_data && soundItem->_resourceHandle.isValid()) {
+ if (!soundItem->_data && soundItem->_resourceHandle.isValid() &&
+ (soundItem->_resourceHandle.type() == kResTypeSound || soundItem->_resourceHandle.type() == kResTypeMusic)) {
// TODO Check if it's a sound resource
_vm->_res->loadResource(soundItem->_resourceHandle);
soundItem->_data = soundItem->_resourceHandle.data();
Commit: f945448c7ba3884cded68314a13aa2132603121d
https://github.com/scummvm/scummvm/commit/f945448c7ba3884cded68314a13aa2132603121d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Change graphic resource draw method to get a Surface instead of separate pixels/pitch
- Merge SpriteResource::load and load2
Changed paths:
engines/neverhood/graphics.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/module2200.cpp
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/sprite.cpp
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 5426821..9139545 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -71,7 +71,7 @@ void BaseSurface::drawSpriteResource(SpriteResource &spriteResource) {
if (spriteResource.getDimensions().width <= _drawRect.width &&
spriteResource.getDimensions().height <= _drawRect.height) {
clear();
- spriteResource.draw((byte*)_surface->pixels, _surface->pitch, false, false);
+ spriteResource.draw(_surface, false, false);
++_version;
}
}
@@ -85,7 +85,7 @@ void BaseSurface::drawSpriteResourceEx(SpriteResource &spriteResource, bool flip
_drawRect.height = height;
if (_surface) {
clear();
- spriteResource.draw((byte*)_surface->pixels, _surface->pitch, flipX, flipY);
+ spriteResource.draw(_surface, flipX, flipY);
++_version;
}
}
@@ -99,7 +99,7 @@ void BaseSurface::drawAnimResource(AnimResource &animResource, uint frameIndex,
if (_surface) {
clear();
if (frameIndex < animResource.getFrameCount()) {
- animResource.draw(frameIndex, (byte*)_surface->pixels, _surface->pitch, flipX, flipY);
+ animResource.draw(frameIndex, _surface, flipX, flipY);
++_version;
}
}
@@ -107,7 +107,7 @@ void BaseSurface::drawAnimResource(AnimResource &animResource, uint frameIndex,
void BaseSurface::drawMouseCursorResource(MouseCursorResource &mouseCursorResource, int frameNum) {
if (frameNum < 3) {
- mouseCursorResource.draw(frameNum, (byte*)_surface->pixels, _surface->pitch);
+ mouseCursorResource.draw(frameNum, _surface);
++_version;
}
}
@@ -156,7 +156,7 @@ FontSurface::FontSurface(NeverhoodEngine *vm, uint32 fileHash, uint charsPerRow,
_firstChar(firstChar), _charWidth(charWidth), _charHeight(charHeight), _tracking(NULL) {
SpriteResource fontSpriteResource(_vm);
- fontSpriteResource.load2(fileHash);
+ fontSpriteResource.load(fileHash, true);
drawSpriteResourceEx(fontSpriteResource, false, false, 0, 0);
}
@@ -200,7 +200,7 @@ FontSurface *FontSurface::createFontSurface(NeverhoodEngine *vm, uint32 fileHash
uint16 charWidth = fontData.getPoint(calcHash("meCharWidth")).x;
uint16 charHeight = fontData.getPoint(calcHash("meCharHeight")).x;
NPointArray *tracking = fontData.getPointArray(calcHash("meTracking"));
- fontSprite.load2(fileHash);
+ fontSprite.load(fileHash, true);
fontSurface = new FontSurface(vm, tracking, 16, numRows, firstChar, charWidth, charHeight);
fontSurface->drawSpriteResourceEx(fontSprite, false, false, 0, 0);
return fontSurface;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 2b7561c..71b216b 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -540,7 +540,7 @@ void TextEditWidget::onClick() {
void TextEditWidget::addSprite() {
SpriteResource cursorSpriteResource(_vm);
- _spriteResource.load2(_fileHash);
+ _spriteResource.load(_fileHash, true);
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
@@ -550,7 +550,7 @@ void TextEditWidget::addSprite() {
0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
(const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _fontSurface);
_textLabelWidget->addSprite();
- cursorSpriteResource.load2(_cursorFileHash);
+ cursorSpriteResource.load(_cursorFileHash, true);
_cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
_cursorSurface->drawSpriteResourceEx(cursorSpriteResource, false, false, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
_cursorSurface->setVisible(true);
@@ -704,7 +704,7 @@ void SavegameListBox::onClick() {
}
void SavegameListBox::addSprite() {
- _spriteResource.load2(_bgFileHash);
+ _spriteResource.load(_bgFileHash, true);
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
_parentScene->addSprite(this);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index a53bd46..9f5f7fb 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2139,15 +2139,17 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_fontSurface = FontSurface::createFontSurface(_vm, 0x0800090C);
_backgroundSurface = new BaseSurface(_vm, 0, 640, 480);
- spriteResource.load2(0x08100289);
+ spriteResource.load(0x08100289, true);
_backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
_topBackgroundSurface = new BaseSurface(_vm, 0, 640, 192);
- spriteResource.load2(!getGlobalVar(V_COLUMN_BACK_NAME) ? kScene2208FileHashes1[getGlobalVar(V_CLICKED_COLUMN_INDEX) % 6] : getGlobalVar(V_COLUMN_BACK_NAME));
+ spriteResource.load(!getGlobalVar(V_COLUMN_BACK_NAME)
+ ? kScene2208FileHashes1[getGlobalVar(V_CLICKED_COLUMN_INDEX) % 6]
+ : getGlobalVar(V_COLUMN_BACK_NAME), true);
_topBackgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
_bottomBackgroundSurface = new BaseSurface(_vm, 0, 640, 192);
- spriteResource.load2(kScene2208FileHashes2[getGlobalVar(V_CLICKED_COLUMN_INDEX) % 6]);
+ spriteResource.load(kScene2208FileHashes2[getGlobalVar(V_CLICKED_COLUMN_INDEX) % 6], true);
_bottomBackgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
SetUpdateHandler(&Scene2208::update);
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 6cbbf12..3350b80 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -37,8 +37,10 @@ SpriteResource::~SpriteResource() {
unload();
}
-void SpriteResource::draw(byte *dest, int destPitch, bool flipX, bool flipY) {
+void SpriteResource::draw(Graphics::Surface *destSurface, bool flipX, bool flipY) {
if (_pixels) {
+ byte *dest = (byte*)destSurface->pixels;
+ const int destPitch = destSurface->pitch;
if (_rle)
unpackSpriteRle(_pixels, _dimensions.width, _dimensions.height, dest, destPitch, flipX, flipY);
else
@@ -46,27 +48,15 @@ void SpriteResource::draw(byte *dest, int destPitch, bool flipX, bool flipY) {
}
}
-bool SpriteResource::load(uint32 fileHash) {
+bool SpriteResource::load(uint32 fileHash, bool doLoadPosition) {
debug(2, "SpriteResource::load(%08X)", fileHash);
- // TODO: Later merge with load2 and make the mode a parameter
unload();
_vm->_res->queryResource(fileHash, _resourceHandle);
if (_resourceHandle.isValid() && _resourceHandle.type() == kResTypeBitmap) {
_vm->_res->loadResource(_resourceHandle);
const byte *spriteData = _resourceHandle.data();
- parseBitmapResource(spriteData, &_rle, &_dimensions, NULL, NULL, &_pixels);
- }
- return _pixels != NULL;
-}
-
-bool SpriteResource::load2(uint32 fileHash) {
- debug(2, "SpriteResource::load2(%08X)", fileHash);
- unload();
- _vm->_res->queryResource(fileHash, _resourceHandle);
- if (_resourceHandle.isValid() && _resourceHandle.type() == kResTypeBitmap) {
- _vm->_res->loadResource(_resourceHandle);
- const byte *spriteData = _resourceHandle.data();
- parseBitmapResource(spriteData, &_rle, &_dimensions, &_position, NULL, &_pixels);
+ NPoint *position = doLoadPosition ? &_position : NULL;
+ parseBitmapResource(spriteData, &_rle, &_dimensions, position, NULL, &_pixels);
}
return _pixels != NULL;
}
@@ -128,8 +118,10 @@ AnimResource::~AnimResource() {
unload();
}
-void AnimResource::draw(uint frameIndex, byte *dest, int destPitch, bool flipX, bool flipY) {
+void AnimResource::draw(uint frameIndex, Graphics::Surface *destSurface, bool flipX, bool flipY) {
const AnimFrameInfo frameInfo = _frames[frameIndex];
+ byte *dest = (byte*)destSurface->pixels;
+ const int destPitch = destSurface->pitch;
_currSpriteData = _spriteData + frameInfo.spriteDataOffs;
_width = frameInfo.drawOffset.width;
_height = frameInfo.drawOffset.height;
@@ -305,10 +297,12 @@ NDrawRect& MouseCursorResource::getRect() {
return _rect;
}
-void MouseCursorResource::draw(int frameNum, byte *dest, int destPitch) {
+void MouseCursorResource::draw(int frameNum, Graphics::Surface *destSurface) {
if (_cursorSprite.getPixels()) {
- int sourcePitch = (_cursorSprite.getDimensions().width + 3) & 0xFFFC; // 4 byte alignment
+ const int sourcePitch = (_cursorSprite.getDimensions().width + 3) & 0xFFFC; // 4 byte alignment
+ const int destPitch = destSurface->pitch;
const byte *source = _cursorSprite.getPixels() + _cursorNum * (sourcePitch * 32) + frameNum * 32;
+ byte *dest = (byte*)destSurface->pixels;
for (int16 yc = 0; yc < 32; yc++) {
memcpy(dest, source, 32);
source += sourcePitch;
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index c6f63bf..e2609b6 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -46,9 +46,8 @@ class SpriteResource {
public:
SpriteResource(NeverhoodEngine *vm);
~SpriteResource();
- void draw(byte *dest, int destPitch, bool flipX, bool flipY);
- bool load(uint32 fileHash);
- bool load2(uint32 fileHash);
+ void draw(Graphics::Surface *destSurface, bool flipX, bool flipY);
+ bool load(uint32 fileHash, bool doLoadPosition = false);
void unload();
const NDimensions& getDimensions() { return _dimensions; }
NPoint& getPosition() { return _position; }
@@ -90,7 +89,7 @@ class AnimResource {
public:
AnimResource(NeverhoodEngine *vm);
~AnimResource();
- void draw(uint frameIndex, byte *dest, int destPitch, bool flipX, bool flipY);
+ void draw(uint frameIndex, Graphics::Surface *destSurface, bool flipX, bool flipY);
bool load(uint32 fileHash);
void unload();
void clear();
@@ -120,7 +119,7 @@ public:
void load(uint32 fileHash);
void unload();
NDrawRect& getRect();
- void draw(int frameNum, byte *dest, int destPitch);
+ void draw(int frameNum, Graphics::Surface *destSurface);
int getCursorNum() const { return _cursorNum; }
void setCursorNum(int cursorNum) { _cursorNum = cursorNum; }
protected:
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 2419122..45d131f 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -116,7 +116,7 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority)
StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y)
: Sprite(vm, 0), _spriteResource(vm) {
- _spriteResource.load2(fileHash);
+ _spriteResource.load(fileHash, true);
createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_x = x == kDefPosition ? _spriteResource.getPosition().x : x;
_y = y == kDefPosition ? _spriteResource.getPosition().y : y;
@@ -126,7 +126,7 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePrio
}
void StaticSprite::loadSprite(uint32 fileHash, uint flags, int surfacePriority, int16 x, int16 y) {
- _spriteResource.load2(fileHash);
+ _spriteResource.load(fileHash, true);
if (!_surface)
createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
if (flags & kSLFDefDrawOffset)
Commit: df43b8bd6889ebf39c1642b9648b10d64cc5fcdd
https://github.com/scummvm/scummvm/commit/df43b8bd6889ebf39c1642b9648b10d64cc5fcdd
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Move Scene2804::initCrystalColors() to GameModule::initCrystalColorsPuzzle()
- Add Scene::isMessageList2, only used in Scene2101
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/module2100.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index c931057..6ba3e98 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -284,6 +284,46 @@ void GameModule::initCubeSymbolsPuzzle() {
}
}
+void GameModule::initCrystalColorsPuzzle() {
+ // TODO Maybe move this into the GameModule so all puzzle init code is together
+ if (getGlobalVar(V_CRYSTAL_COLORS_INIT) == 0) {
+ TextResource textResource(_vm);
+ const char *textStart, *textEnd;
+ textResource.load(0x46691611);
+ textStart = textResource.getString(0, textEnd);
+ for (uint index = 0; index < 5; index++) {
+ char colorLetter = (byte)textStart[index];
+ byte correctColorNum = 0, misalignedColorNum;
+ switch (colorLetter) {
+ case 'B':
+ correctColorNum = 4;
+ break;
+ case 'G':
+ correctColorNum = 3;
+ break;
+ case 'O':
+ correctColorNum = 1;
+ break;
+ case 'R':
+ correctColorNum = 0;
+ break;
+ case 'V':
+ correctColorNum = 5;
+ break;
+ case 'Y':
+ correctColorNum = 2;
+ break;
+ }
+ do {
+ misalignedColorNum = _vm->_rnd->getRandomNumber(6 - 1);
+ } while (misalignedColorNum == correctColorNum);
+ setSubVar(VA_GOOD_CRYSTAL_COLORS, index, correctColorNum);
+ setSubVar(VA_CURR_CRYSTAL_COLORS, index, misalignedColorNum);
+ }
+ setGlobalVar(V_CRYSTAL_COLORS_INIT, 1);
+ }
+}
+
uint32 GameModule::getCurrRadioMusicFileHash() {
uint musicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
return (musicIndex % 5 != 0) ? 0 : kRadioMusicFileHashes[CLIP<uint>(musicIndex / 5, 0, 17)];
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 93373a1..ee6b000 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -51,6 +51,7 @@ public:
void initCannonSymbolsPuzzle();
void initCodeSymbolsPuzzle();
void initCubeSymbolsPuzzle();
+ void initCrystalColorsPuzzle();
uint32 getCurrRadioMusicFileHash();
protected:
Entity *_prevChildObject;
diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp
index 423f93c..5b5f5af 100644
--- a/engines/neverhood/module2100.cpp
+++ b/engines/neverhood/module2100.cpp
@@ -285,7 +285,7 @@ void Scene2101::update() {
}
}
}
- } else if (_doorStatus == 1 && _messageValue >= 0 && _klayman->getX() > 470 /* TODO ! && _messageList2 != 0x004B8F48*/)
+ } else if (_doorStatus == 1 && _messageValue >= 0 && _klayman->getX() > 470 && !isMessageList2(0x004B8F48))
setMessageList2(0x004B8F50);
Scene::update();
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 7c7c097..214e65e 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -1734,7 +1734,7 @@ Scene2804::Scene2804(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule), _countdown1(0), _countdown2(0), _countdown3(0),
_beamStatus(0), _isSolved(false), _isWorking(false) {
- initCrystalColors();
+ _vm->gameModule()->initCrystalColorsPuzzle();
SetMessageHandler(&Scene2804::handleMessage);
SetUpdateHandler(&Scene2804::update);
@@ -1841,46 +1841,6 @@ void Scene2804::update() {
}
-void Scene2804::initCrystalColors() {
- // TODO Maybe move this into the GameModule so all puzzle init code is together
- if (getGlobalVar(V_CRYSTAL_COLORS_INIT) == 0) {
- TextResource textResource(_vm);
- const char *textStart, *textEnd;
- textResource.load(0x46691611);
- textStart = textResource.getString(0, textEnd);
- for (uint index = 0; index < 5; index++) {
- char colorLetter = (byte)textStart[index];
- byte correctColorNum = 0, misalignedColorNum;
- switch (colorLetter) {
- case 'B':
- correctColorNum = 4;
- break;
- case 'G':
- correctColorNum = 3;
- break;
- case 'O':
- correctColorNum = 1;
- break;
- case 'R':
- correctColorNum = 0;
- break;
- case 'V':
- correctColorNum = 5;
- break;
- case 'Y':
- correctColorNum = 2;
- break;
- }
- do {
- misalignedColorNum = _vm->_rnd->getRandomNumber(6 - 1);
- } while (misalignedColorNum == correctColorNum);
- setSubVar(VA_GOOD_CRYSTAL_COLORS, index, correctColorNum);
- setSubVar(VA_CURR_CRYSTAL_COLORS, index, misalignedColorNum);
- }
- setGlobalVar(V_CRYSTAL_COLORS_INIT, 1);
- }
-}
-
Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule) {
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index 1dd7bca..a341c23 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -273,7 +273,6 @@ protected:
Sprite *_ssCrystalButtons[5];
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void initCrystalColors();
};
class Scene2805 : public Scene {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index c22683a..1f2f479 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -381,6 +381,10 @@ bool Scene::setMessageList2(MessageList *messageList, bool canAcceptInput, bool
return false;
}
+bool Scene::isMessageList2(uint32 id) {
+ return _messageList2 == _vm->_staticData->getMessageList(id);
+}
+
void Scene::processMessageList() {
debug(7, "Scene::processMessageList() _isMessageListBusy = %d; _isKlaymanBusy = %d", _isMessageListBusy, _isKlaymanBusy);
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index f03275f..39455c7 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -204,6 +204,7 @@ protected:
void setMessageList(MessageList *messageList, bool canAcceptInput = true, bool doConvertMessages = false);
bool setMessageList2(uint32 id, bool canAcceptInput = true, bool doConvertMessages = false);
bool setMessageList2(MessageList *messageList, bool canAcceptInput = true, bool doConvertMessages = false);
+ bool isMessageList2(uint32 id);
void processMessageList();
void setRectList(uint32 id);
void setRectList(RectList *rectList);
Commit: e43184f4f248b38a19d67f1b1b427e19fcd56de5
https://github.com/scummvm/scummvm/commit/e43184f4f248b38a19d67f1b1b427e19fcd56de5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Remove obsolete TODOs
Changed paths:
engines/neverhood/module2200.cpp
engines/neverhood/module2500.cpp
engines/neverhood/module2800.cpp
engines/neverhood/resource.cpp
engines/neverhood/sound.cpp
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 9f5f7fb..ebe0f81 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -2170,9 +2170,6 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_background->getSurface()->getSysRect().y = _backgroundScrollY;
- // TODO Screen.yOffset = _backgroundScrollY;
- // TODO Scene2208_sub409080 (creates background Sprites via the text, doesn't seem to be used?)
-
}
Scene2208::~Scene2208() {
@@ -2219,7 +2216,6 @@ void Scene2208::update() {
_background->getSurface()->getSysRect().y = _backgroundScrollY;
}
- // TODO Screen.yOffset = _backgroundScrollY;
Scene::update();
}
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 4aefbfb..ba5b140 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -25,8 +25,6 @@
namespace Neverhood {
-// TODO Maybe move these to the DAT
-
static const uint32 kScene2505StaticSprites[] = {
0x4000A226, 0
};
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 214e65e..dd02d59 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -1667,7 +1667,6 @@ uint32 AsScene2804BeamCoil::handleMessage(int messageNum, const MessageParam &pa
void AsScene2804BeamCoil::show() {
_ssBeamCoilBody->setVisible(true);
- // TODO _ssBeamCoilBody->updatePosition(); -> show()
setVisible(true);
startAnimation(0x00494891, 0, -1);
playSound(0);
@@ -1680,7 +1679,6 @@ void AsScene2804BeamCoil::hide() {
SetMessageHandler(&AsScene2804BeamCoil::handleMessage);
setVisible(false);
_ssBeamCoilBody->setVisible(false);
- // TODO _ssBeamCoilBody->updatePosition(); -> hide()
_vm->_soundMan->stopSound(0xEF56B094);
}
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 3350b80..869bebb 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -100,11 +100,8 @@ void PaletteResource::unload() {
}
void PaletteResource::copyPalette(byte *destPalette) {
- if (_palette) {
+ if (_palette)
memcpy(destPalette, _palette, 1024);
- } else {
- // TODO?: buildDefaultPalette(palette);
- }
}
// AnimResource
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 13ac87f..d055107 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -276,7 +276,6 @@ void SoundMan::setSoundVolume(uint32 soundFileHash, int volume) {
}
void SoundMan::update() {
- // TODO Check if active
for (uint i = 0; i < _soundItems.size(); ++i) {
SoundItem *soundItem = _soundItems[i];
@@ -548,7 +547,6 @@ void AudioResourceMan::loadSound(int16 soundIndex) {
AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
if (!soundItem->_data && soundItem->_resourceHandle.isValid() &&
(soundItem->_resourceHandle.type() == kResTypeSound || soundItem->_resourceHandle.type() == kResTypeMusic)) {
- // TODO Check if it's a sound resource
_vm->_res->loadResource(soundItem->_resourceHandle);
soundItem->_data = soundItem->_resourceHandle.data();
}
Commit: 9ea07e0925d679e8f3e33aa34c0403c3f58d5f1c
https://github.com/scummvm/scummvm/commit/9ea07e0925d679e8f3e33aa34c0403c3f58d5f1c
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Add tables for Scene2706
Changed paths:
devtools/create_neverhood/tables.h
dists/engine-data/neverhood.dat
diff --git a/devtools/create_neverhood/tables.h b/devtools/create_neverhood/tables.h
index 1218526..ea39aa8 100644
--- a/devtools/create_neverhood/tables.h
+++ b/devtools/create_neverhood/tables.h
@@ -710,5 +710,9 @@ static const uint32 sceneInfo2700Offsets[] = {
0x004B02A0,
// Scene2508
0x004B02C8,
+ // Scene2706
+ 0x004B22A0,
+ 0x004B22C4,
+ 0x004B22E8,
0
};
diff --git a/dists/engine-data/neverhood.dat b/dists/engine-data/neverhood.dat
index e384ee1..dc95c00 100644
Binary files a/dists/engine-data/neverhood.dat and b/dists/engine-data/neverhood.dat differ
Commit: 18ce1acc12fe0bd58b6b93b8accb840cd7244356
https://github.com/scummvm/scummvm/commit/18ce1acc12fe0bd58b6b93b8accb840cd7244356
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Rework the car track scenes in Module2500 and Module2700
- Move findClosestTrack code from several scenes to new Tracks::findTrackPoint
- Remove const kScene2706 arrays and use it from the dat instead
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
engines/neverhood/module2700.cpp
engines/neverhood/module2700.h
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 6ba3e98..d037cf5 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -399,10 +399,10 @@ void GameModule::startup() {
setGlobalVar(V_SHRINK_LIGHTS_ON, 0);
// <<<DEBUG
-#if 0
+#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 14;
- createModule(2700, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(2500, -1);
#endif
#if 0
_vm->gameState().sceneNum = 5;
@@ -417,7 +417,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 5;
createModule(2200, -1);
#endif
-#if 1
+#if 0
_vm->gameState().sceneNum = 7;
createModule(2200, -1);
#endif
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index a2f06e1..54f715a 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -988,6 +988,24 @@ void AsCommonCarConnector::update() {
AnimatedSprite::update();
}
+void Tracks::findTrackPoint(NPoint pt, int &minMatchTrackIndex, int &minMatchDistance,
+ DataResource &dataResource) {
+ const uint trackCount = size();
+ minMatchTrackIndex = -1;
+ minMatchDistance = 640;
+ for (uint trackIndex = 0; trackIndex < trackCount; trackIndex++) {
+ NPointArray *pointList = dataResource.getPointArray((*this)[trackIndex]->trackPointsName);
+ for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
+ NPoint testPt = (*pointList)[pointIndex];
+ int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
+ if (distance < minMatchDistance) {
+ minMatchTrackIndex = trackIndex;
+ minMatchDistance = distance;
+ }
+ }
+ }
+}
+
Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule), _asCar(NULL), _countdown1(0) {
@@ -1082,7 +1100,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
// NOTE: Not in the else because 'which' is set to 1 in the true branch
if (which == 1) {
- // Klaymen entering riding the car
+ // Klaymen riding the car
_vm->gameState().which = 1;
_dataResource.load(0x003C0492);
_roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 0c567e6..eaf8986 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -121,6 +121,12 @@ protected:
void update();
};
+class Tracks : public Common::Array<SceneInfo2700*> {
+public:
+ void findTrackPoint(NPoint pt, int &minMatchTrackIndex, int &minMatchDistance,
+ DataResource &dataResource);
+};
+
class Scene1608 : public Scene {
public:
Scene1608(NeverhoodEngine *vm, Module *parentModule, int which);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index ba5b140..851ee61 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -220,9 +220,9 @@ void Module2500::createScene2704(int which, uint32 sceneInfoId, int16 value, con
Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule) {
- _sceneInfos[0] = _vm->_staticData->getSceneInfo2700(0x004B2628);
- _sceneInfos[1] = _vm->_staticData->getSceneInfo2700(0x004B264C);
- _sceneInfos[2] = _vm->_staticData->getSceneInfo2700(0x004B2670);
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B2628));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B264C));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B2670));
setGlobalVar(V_CAR_DELTA_X, 1);
SetUpdateHandler(&Scene2501::update);
@@ -283,14 +283,13 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
_asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
insertSprite<AsCommonCarConnector>(_asCar);
- _pointListsCount = 3;
_newTrackIndex = -1;
_dataResource.load(calcHash("Ashooded"));
- _trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
+ _trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
_asCar->setPathPoints(_trackPoints);
- if (which >= 0 && _sceneInfos[_currTrackIndex]->which2 == which) {
+ if (which >= 0 && _tracks[_currTrackIndex]->which2 == which) {
NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1];
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480)
@@ -331,7 +330,7 @@ void Scene2501::update() {
_klayman = NULL;
_carStatus = 0;
}
- updateKlaymanCliprect();
+ updateKlaymanClipRect();
}
void Scene2501::upCarAtHome() {
@@ -341,13 +340,13 @@ void Scene2501::upCarAtHome() {
sendMessage(_asCar, 0x200A, 0);
SetUpdateHandler(&Scene2501::upGettingOutOfCar);
} else {
- findClosestTrack(_mouseClickPos);
+ moveCarToPoint(_mouseClickPos);
SetMessageHandler(&Scene2501::hmRidingCar);
SetUpdateHandler(&Scene2501::upRidingCar);
}
_mouseClicked = false;
}
- updateKlaymanCliprect();
+ updateKlaymanClipRect();
}
void Scene2501::upGettingOutOfCar() {
@@ -368,13 +367,13 @@ void Scene2501::upGettingOutOfCar() {
_klayman->handleUpdate();
_carStatus = 0;
}
- updateKlaymanCliprect();
+ updateKlaymanClipRect();
}
void Scene2501::upRidingCar() {
Scene::update();
if (_mouseClicked) {
- findClosestTrack(_mouseClickPos);
+ moveCarToPoint(_mouseClickPos);
_mouseClicked = false;
}
}
@@ -397,24 +396,24 @@ uint32 Scene2501::hmRidingCar(int messageNum, const MessageParam ¶m, Entity
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2005:
- if (_sceneInfos[_currTrackIndex]->which1 < 0 && _newTrackIndex >= 0)
+ if (_tracks[_currTrackIndex]->which1 < 0 && _newTrackIndex >= 0)
changeTrack();
- else if (_sceneInfos[_currTrackIndex]->which1 == 0) {
+ else if (_tracks[_currTrackIndex]->which1 == 0) {
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
sendMessage(_asCar, 0x200F, 1);
- } else if (_sceneInfos[_currTrackIndex]->which1 > 0)
- leaveScene(_sceneInfos[_currTrackIndex]->which1);
+ } else if (_tracks[_currTrackIndex]->which1 > 0)
+ leaveScene(_tracks[_currTrackIndex]->which1);
break;
case 0x2006:
- if (_sceneInfos[_currTrackIndex]->which2 < 0 && _newTrackIndex >= 0)
+ if (_tracks[_currTrackIndex]->which2 < 0 && _newTrackIndex >= 0)
changeTrack();
- else if (_sceneInfos[_currTrackIndex]->which2 == 0) {
+ else if (_tracks[_currTrackIndex]->which2 == 0) {
SetMessageHandler(&Scene2501::hmCarAtHome);
SetUpdateHandler(&Scene2501::upCarAtHome);
sendMessage(_asCar, 0x200F, 1);
- } else if (_sceneInfos[_currTrackIndex]->which2 > 0)
- leaveScene(_sceneInfos[_currTrackIndex]->which2);
+ } else if (_tracks[_currTrackIndex]->which2 > 0)
+ leaveScene(_tracks[_currTrackIndex]->which2);
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -436,34 +435,9 @@ uint32 Scene2501::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Scene2501::changeTrack() {
- _currTrackIndex = _newTrackIndex;
- _trackPoints = _dataResource.getPointArray(_sceneInfos[_currTrackIndex]->pointListName);
- _asCar->setPathPoints(_trackPoints);
- if (_currTrackIndex == 0)
- sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
- else
- sendMessage(_asCar, 0x2002, 0);
- sendPointMessage(_asCar, 0x2004, _clickPoint);
- _newTrackIndex = -1;
-}
-
-void Scene2501::findClosestTrack(NPoint &pt) {
- // TODO NOTE This is uses with minor variations in other scenes, maybe merge them?
- int minMatchDistance = 640;
- int minMatchTrackIndex = -1;
- // Find the track which contains a point closest to pt
- for (int infoIndex = 0; infoIndex < _pointListsCount; infoIndex++) {
- NPointArray *pointList = _dataResource.getPointArray(_sceneInfos[infoIndex]->pointListName);
- for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
- NPoint testPt = (*pointList)[pointIndex];
- int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
- if (distance < minMatchDistance) {
- minMatchTrackIndex = infoIndex;
- minMatchDistance = distance;
- }
- }
- }
+void Scene2501::moveCarToPoint(NPoint &pt) {
+ int minMatchTrackIndex, minMatchDistance;
+ _tracks.findTrackPoint(pt, minMatchTrackIndex, minMatchDistance, _dataResource);
if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
_newTrackIndex = minMatchTrackIndex;
_clickPoint = pt;
@@ -477,7 +451,19 @@ void Scene2501::findClosestTrack(NPoint &pt) {
}
}
-void Scene2501::updateKlaymanCliprect() {
+void Scene2501::changeTrack() {
+ _currTrackIndex = _newTrackIndex;
+ _trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
+ _asCar->setPathPoints(_trackPoints);
+ if (_currTrackIndex == 0)
+ sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
+ else
+ sendMessage(_asCar, 0x2002, 0);
+ sendPointMessage(_asCar, 0x2004, _clickPoint);
+ _newTrackIndex = -1;
+}
+
+void Scene2501::updateKlaymanClipRect() {
if (_kmScene2501->getX() <= 211)
_kmScene2501->setClipRect(0, 0, 640, 480);
else
diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h
index 38a1a43..9a7e944 100644
--- a/engines/neverhood/module2500.h
+++ b/engines/neverhood/module2500.h
@@ -60,11 +60,10 @@ protected:
Sprite *_asIdleCarLower;
Sprite *_asIdleCarFull;
Klayman *_kmScene2501;
+ Tracks _tracks;
NPointArray *_trackPoints;
- SceneInfo2700 *_sceneInfos[3];
int _currTrackIndex;
NPoint _clickPoint;
- int _pointListsCount;
int _newTrackIndex;
int _carStatus;
bool _klaymanInCar;
@@ -75,9 +74,9 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender);
- void findClosestTrack(NPoint &pt);
+ void moveCarToPoint(NPoint &pt);
void changeTrack();
- void updateKlaymanCliprect();
+ void updateKlaymanClipRect();
};
class SsScene2504Button : public StaticSprite {
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index d4f46ea..07273f9 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -528,12 +528,12 @@ uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Enti
return messageResult;
}
-void Module2700::createScene2703(int which, uint32 sceneInfoId) {
- _childObject = new Scene2703(_vm, this, which, sceneInfoId);
+void Module2700::createScene2703(int which, uint32 trackInfoId) {
+ _childObject = new Scene2703(_vm, this, which, trackInfoId);
}
-void Module2700::createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
- _childObject = new Scene2704(_vm, this, which, sceneInfoId, value, staticSprites, clipRect);
+void Module2700::createScene2704(int which, uint32 trackInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) {
+ _childObject = new Scene2704(_vm, this, which, trackInfoId, value, staticSprites, clipRect);
}
static const NPoint kCarShadowOffsets[] = {
@@ -619,11 +619,11 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
NRect clipRect;
- SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(0x004B2240);
+ SceneInfo2700 *tracks = _vm->_staticData->getSceneInfo2700(0x004B2240);
setGlobalVar(V_CAR_DELTA_X, 1);
- setBackground(sceneInfo->bgFilename);
- setPalette(sceneInfo->bgFilename);
+ setBackground(tracks->bgFilename);
+ setPalette(tracks->bgFilename);
_palette->addPalette(calcHash("paPodFloor"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0);
insertScreenMouse(0x08B08180);
@@ -631,8 +631,8 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x1E086325, 1200);
clipRect.set(0, 0, 640, tempSprite->getDrawRect().y2());
- if (sceneInfo->bgShadowFilename) {
- _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
+ if (tracks->bgShadowFilename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(tracks->bgShadowFilename);
addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -644,10 +644,10 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
}
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
- _which1 = sceneInfo->which1;
- _which2 = sceneInfo->which2;
- _dataResource.load(sceneInfo->dataResourceFilename);
- _trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
+ _which1 = tracks->which1;
+ _which2 = tracks->which2;
+ _dataResource.load(tracks->dataResourceFilename);
+ _trackPoints = _dataResource.getPointArray(tracks->trackPointsName);
_asCar->setPathPoints(_trackPoints);
if (which == _which2) {
@@ -713,18 +713,8 @@ uint32 Scene2701::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity
return 0;
}
-static const uint32 kScene2702Infos[2][3] = {
- {0x004B5F68, 0x004B5F8C, 0x004B5FB0},
- {0x004B5FD8, 0x004B5FFC, 0x004B6020}
-};
-
-
Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _isInLight(true), _newTrackIndex(-1), _count(3) {
-
- for (int i = 0; i < 2; i++)
- for (int j = 0; j < 3; j++)
- _sceneInfos[i][j] = _vm->_staticData->getSceneInfo2700(kScene2702Infos[i][j]);
+ : Scene(vm, parentModule), _isInLight(true), _newTrackIndex(-1) {
SetMessageHandler(&Scene2702::handleMessage);
SetUpdateHandler(&Scene2702::update);
@@ -746,38 +736,48 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
_dataResource.load(0x04310014);
if (which == 1) {
- _currSceneInfos = _sceneInfos[1];
+ _isUpperTrack = false;
_currTrackIndex = 1;
} else if (which == 2) {
- _currSceneInfos = _sceneInfos[1];
+ _isUpperTrack = false;
_currTrackIndex = 2;
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
_isInLight = false;
} else if (which == 3) {
- _currSceneInfos = _sceneInfos[0];
+ _isUpperTrack = true;
_currTrackIndex = 0;
} else if (which == 4) {
- _currSceneInfos = _sceneInfos[0];
+ _isUpperTrack = true;
_currTrackIndex = 2;
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
_isInLight = false;
} else if (which == 5) {
- _currSceneInfos = _sceneInfos[0];
+ _isUpperTrack = true;
_currTrackIndex = 1;
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
_isInLight = false;
} else {
- _currSceneInfos = _sceneInfos[1];
+ _isUpperTrack = false;
_currTrackIndex = 0;
}
- _trackPoints = _dataResource.getPointArray(_currSceneInfos[_currTrackIndex]->pointListName);
+ if (_isUpperTrack) {
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5F68));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5F8C));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5FB0));
+ } else {
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5FD8));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5FFC));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B6020));
+ }
+
+ _trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
_asCar->setPathPoints(_trackPoints);
- if (which == _currSceneInfos[_currTrackIndex]->which2) {
+ if (which == _tracks[_currTrackIndex]->which2) {
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
sendMessage(_asCar, 0x2007, 150);
} else {
@@ -808,21 +808,21 @@ uint32 Scene2702::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- findClosestTrack(param.asPoint());
+ moveCarToPoint(param.asPoint());
break;
case 0x2005:
if (_newTrackIndex >= 0) {
- if (_currSceneInfos[_currTrackIndex]->which1 < 0)
+ if (_tracks[_currTrackIndex]->which1 < 0)
changeTrack();
- } else if (_currSceneInfos[_currTrackIndex]->which1 >= 0)
- leaveScene(_currSceneInfos[_currTrackIndex]->which1);
+ } else if (_tracks[_currTrackIndex]->which1 >= 0)
+ leaveScene(_tracks[_currTrackIndex]->which1);
break;
case 0x2006:
if (_newTrackIndex >= 0) {
- if (_currSceneInfos[_currTrackIndex]->which2 < 0)
+ if (_tracks[_currTrackIndex]->which2 < 0)
changeTrack();
- } else if (_currSceneInfos[_currTrackIndex]->which2 >= 0)
- leaveScene(_currSceneInfos[_currTrackIndex]->which2);
+ } else if (_tracks[_currTrackIndex]->which2 >= 0)
+ leaveScene(_tracks[_currTrackIndex]->which2);
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -831,25 +831,13 @@ uint32 Scene2702::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-void Scene2702::findClosestTrack(NPoint pt) {
- int minMatchTrackIndex = -1;
- int minMatchDistance = 640;
- // Find the track which contains a point closest to pt
- for (int infoIndex = 0; infoIndex < _count; infoIndex++) {
- NPointArray *pointList = _dataResource.getPointArray(_currSceneInfos[infoIndex]->pointListName);
- for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
- NPoint testPt = (*pointList)[pointIndex];
- int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
- if (distance < minMatchDistance) {
- minMatchTrackIndex = infoIndex;
- minMatchDistance = distance;
- }
- }
- }
+void Scene2702::moveCarToPoint(NPoint pt) {
+ int minMatchTrackIndex, minMatchDistance;
+ _tracks.findTrackPoint(pt, minMatchTrackIndex, minMatchDistance, _dataResource);
if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
_newTrackIndex = minMatchTrackIndex;
_newTrackDestX = pt.x;
- if (_currSceneInfos == _sceneInfos[0]) {
+ if (_isUpperTrack) {
if (_currTrackIndex == 0)
sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
else
@@ -866,9 +854,9 @@ void Scene2702::findClosestTrack(NPoint pt) {
void Scene2702::changeTrack() {
_currTrackIndex = _newTrackIndex;
- _trackPoints = _dataResource.getPointArray(_currSceneInfos[_currTrackIndex]->pointListName);
+ _trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
_asCar->setPathPoints(_trackPoints);
- if (_currSceneInfos == _sceneInfos[0]) {
+ if (_isUpperTrack) {
if (_currTrackIndex == 0)
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
else
@@ -881,25 +869,25 @@ void Scene2702::changeTrack() {
_newTrackIndex = -1;
}
-Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId)
+Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 trackInfoId)
: Scene(vm, parentModule) {
- SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
+ SceneInfo2700 *tracks = _vm->_staticData->getSceneInfo2700(trackInfoId);
SetMessageHandler(&Scene2703::handleMessage);
SetUpdateHandler(&Scene2703::update);
- setBackground(sceneInfo->bgFilename);
- setPalette(sceneInfo->bgFilename);
+ setBackground(tracks->bgFilename);
+ setPalette(tracks->bgFilename);
_palette->addPalette(calcHash("paPodShade"), 65, 31, 65);
_palette->addPalette(calcHash("paKlayShade"), 0, 65, 0);
addEntity(_palette);
- insertScreenMouse(sceneInfo->mouseCursorFilename);
+ insertScreenMouse(tracks->mouseCursorFilename);
_palStatus = 2;
- if (sceneInfo->bgShadowFilename) {
- _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
+ if (tracks->bgShadowFilename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(tracks->bgShadowFilename);
addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -912,10 +900,10 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3
}
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
- _which1 = sceneInfo->which1;
- _which2 = sceneInfo->which2;
- _dataResource.load(sceneInfo->dataResourceFilename);
- _trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
+ _which1 = tracks->which1;
+ _which2 = tracks->which2;
+ _dataResource.load(tracks->dataResourceFilename);
+ _trackPoints = _dataResource.getPointArray(tracks->trackPointsName);
_asCar->setPathPoints(_trackPoints);
if (which == _which2) {
@@ -994,31 +982,31 @@ uint32 Scene2703::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
+Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 trackInfoId, int16 value,
const uint32 *staticSprites, const NRect *clipRect)
: Scene(vm, parentModule) {
- SceneInfo2700 *sceneInfo = _vm->_staticData->getSceneInfo2700(sceneInfoId);
+ SceneInfo2700 *tracks = _vm->_staticData->getSceneInfo2700(trackInfoId);
SetMessageHandler(&Scene2704::handleMessage);
SetUpdateHandler(&Scene2704::update);
- setBackground(sceneInfo->bgFilename);
- setPalette(sceneInfo->bgFilename);
+ setBackground(tracks->bgFilename);
+ setPalette(tracks->bgFilename);
- if (sceneInfo->exPaletteFilename1)
- _palette->addPalette(sceneInfo->exPaletteFilename1, 0, 65, 0);
+ if (tracks->exPaletteFilename1)
+ _palette->addPalette(tracks->exPaletteFilename1, 0, 65, 0);
- if (sceneInfo->exPaletteFilename2)
- _palette->addPalette(sceneInfo->exPaletteFilename2, 65, 31, 65);
+ if (tracks->exPaletteFilename2)
+ _palette->addPalette(tracks->exPaletteFilename2, 65, 31, 65);
while (staticSprites && *staticSprites)
insertStaticSprite(*staticSprites++, 1100);
- insertScreenMouse(sceneInfo->mouseCursorFilename);
+ insertScreenMouse(tracks->mouseCursorFilename);
- if (sceneInfo->bgShadowFilename) {
- _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(sceneInfo->bgShadowFilename);
+ if (tracks->bgShadowFilename) {
+ _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(tracks->bgShadowFilename);
addEntity(_ssTrackShadowBackground);
_asCar = insertSprite<AsCommonCar>(this, 320, 240);
_asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4);
@@ -1031,10 +1019,10 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
}
_asCarConnector = insertSprite<AsCommonCarConnector>(_asCar);
- _which1 = sceneInfo->which1;
- _which2 = sceneInfo->which2;
- _dataResource.load(sceneInfo->dataResourceFilename);
- _trackPoints = _dataResource.getPointArray(sceneInfo->pointListName);
+ _which1 = tracks->which1;
+ _which2 = tracks->which2;
+ _dataResource.load(tracks->dataResourceFilename);
+ _trackPoints = _dataResource.getPointArray(tracks->trackPointsName);
_asCar->setPathPoints(_trackPoints);
if (which == _which2) {
@@ -1093,17 +1081,14 @@ uint32 Scene2704::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-static const int kSceneInfo2706Count = 3;
-static const struct { const char *pointListName; int which1, which2; } kSceneInfo2706[] = {
- {"me06slotSlotPath2", 4, -1},
- {"me06slotSlotPath3", -1, 6},
- {"me06slotSlotPath4", -1, 5}
-};
-
Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule), _newTrackIndex(-1) {
SetMessageHandler(&Scene2706::handleMessage);
+
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B22A0));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B22C4));
+ _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B22E8));
setBackground(0x18808B88);
setPalette(0x18808B88);
@@ -1131,10 +1116,10 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
else
_currTrackIndex = 0;
- _trackPoints = _dataResource.getPointArray(calcHash(kSceneInfo2706[_currTrackIndex].pointListName));
+ _trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
_asCar->setPathPoints(_trackPoints);
- if (which == kSceneInfo2706[_currTrackIndex].which2) {
+ if (which == _tracks[_currTrackIndex]->which2) {
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
if (which == 5)
sendMessage(_asCar, 0x2007, 50);
@@ -1154,21 +1139,21 @@ uint32 Scene2706::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- findClosestTrack(param.asPoint());
+ moveCarToPoint(param.asPoint());
break;
case 0x2005:
if (_newTrackIndex >= 0) {
- if (kSceneInfo2706[_currTrackIndex].which1 < 0)
+ if (_tracks[_currTrackIndex]->which1 < 0)
changeTrack();
- } else if (kSceneInfo2706[_currTrackIndex].which1 >= 0)
- leaveScene(kSceneInfo2706[_currTrackIndex].which1);
+ } else if (_tracks[_currTrackIndex]->which1 >= 0)
+ leaveScene(_tracks[_currTrackIndex]->which1);
break;
case 0x2006:
if (_newTrackIndex >= 0) {
- if (kSceneInfo2706[_currTrackIndex].which2 < 0)
+ if (_tracks[_currTrackIndex]->which2 < 0)
changeTrack();
- } else if (kSceneInfo2706[_currTrackIndex].which2 >= 0)
- leaveScene(kSceneInfo2706[_currTrackIndex].which2);
+ } else if (_tracks[_currTrackIndex]->which2 >= 0)
+ leaveScene(_tracks[_currTrackIndex]->which2);
break;
case 0x200D:
sendMessage(_parentModule, 0x200D, 0);
@@ -1177,21 +1162,9 @@ uint32 Scene2706::handleMessage(int messageNum, const MessageParam ¶m, Entit
return 0;
}
-void Scene2706::findClosestTrack(NPoint pt) {
- int minMatchTrackIndex = -1;
- int minMatchDistance = 640;
- // Find the track which contains a point closest to pt
- for (int infoIndex = 0; infoIndex < kSceneInfo2706Count; infoIndex++) {
- NPointArray *pointList = _dataResource.getPointArray(calcHash(kSceneInfo2706[infoIndex].pointListName));
- for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
- NPoint testPt = (*pointList)[pointIndex];
- int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
- if (distance < minMatchDistance) {
- minMatchTrackIndex = infoIndex;
- minMatchDistance = distance;
- }
- }
- }
+void Scene2706::moveCarToPoint(NPoint pt) {
+ int minMatchTrackIndex, minMatchDistance;
+ _tracks.findTrackPoint(pt, minMatchTrackIndex, minMatchDistance, _dataResource);
if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
_newTrackIndex = minMatchTrackIndex;
_newTrackDestX = pt.x;
@@ -1207,7 +1180,7 @@ void Scene2706::findClosestTrack(NPoint pt) {
void Scene2706::changeTrack() {
_currTrackIndex = _newTrackIndex;
- _trackPoints = _dataResource.getPointArray(calcHash(kSceneInfo2706[_currTrackIndex].pointListName));
+ _trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
_asCar->setPathPoints(_trackPoints);
if (_currTrackIndex == 0)
sendMessage(_asCar, 0x2002, _trackPoints->size() - 1);
diff --git a/engines/neverhood/module2700.h b/engines/neverhood/module2700.h
index 68c471c..5861c2e 100644
--- a/engines/neverhood/module2700.h
+++ b/engines/neverhood/module2700.h
@@ -45,8 +45,8 @@ protected:
void createScene(int sceneNum, int which);
void updateScene();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createScene2703(int which, uint32 sceneInfoId);
- void createScene2704(int which, uint32 sceneInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
+ void createScene2703(int which, uint32 trackInfoId);
+ void createScene2704(int which, uint32 trackInfoId, int16 value, const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
};
class SsCommonTrackShadowBackground : public StaticSprite {
@@ -108,21 +108,20 @@ protected:
Sprite *_asCarTrackShadow;
Sprite *_asCarConnectorShadow;
int16 _newTrackDestX;
- int _currTrackIndex, _newTrackIndex;
- int _count;
bool _isInLight;
- SceneInfo2700 *_sceneInfos[2][3];
- SceneInfo2700 **_currSceneInfos;
+ int _currTrackIndex, _newTrackIndex;
+ bool _isUpperTrack;
+ Tracks _tracks;
NPointArray *_trackPoints;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void findClosestTrack(NPoint pt);
+ void moveCarToPoint(NPoint pt);
void changeTrack();
};
class Scene2703 : public Scene {
public:
- Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId);
+ Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 trackInfoId);
protected:
AsCommonCar *_asCar;
Sprite *_ssTrackShadowBackground;
@@ -139,7 +138,7 @@ protected:
class Scene2704 : public Scene {
public:
- Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfoId, int16 value,
+ Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 trackInfoId, int16 value,
const uint32 *staticSprites = NULL, const NRect *clipRect = NULL);
protected:
AsCommonCar *_asCar;
@@ -166,9 +165,10 @@ protected:
Sprite *_asCarConnectorShadow;
int16 _newTrackDestX;
int _currTrackIndex, _newTrackIndex;
+ Tracks _tracks;
NPointArray *_trackPoints;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void findClosestTrack(NPoint pt);
+ void moveCarToPoint(NPoint pt);
void changeTrack();
};
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 31f9f5e..cf272e5 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -149,7 +149,7 @@ void StaticData::load(const char *filename) {
sceneInfo2700->bgFilename = fd.readUint32LE();
sceneInfo2700->bgShadowFilename = fd.readUint32LE();
sceneInfo2700->dataResourceFilename = fd.readUint32LE();
- sceneInfo2700->pointListName = fd.readUint32LE();
+ sceneInfo2700->trackPointsName = fd.readUint32LE();
sceneInfo2700->rectListName = fd.readUint32LE();
sceneInfo2700->exPaletteFilename2 = fd.readUint32LE();
sceneInfo2700->exPaletteFilename1 = fd.readUint32LE();
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index f9a8b71..874a8a5 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -82,7 +82,7 @@ struct SceneInfo2700 {
uint32 bgFilename;
uint32 bgShadowFilename;
uint32 dataResourceFilename;
- uint32 pointListName;
+ uint32 trackPointsName;
uint32 rectListName;
uint32 exPaletteFilename2;
uint32 exPaletteFilename1;
Commit: 5bf8fb3e96506a758b59d67f68fa6c255e77456a
https://github.com/scummvm/scummvm/commit/5bf8fb3e96506a758b59d67f68fa6c255e77456a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Remove more old TODOs
Changed paths:
engines/neverhood/module2700.cpp
engines/neverhood/neverhood.cpp
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 07273f9..f1cb571 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -505,7 +505,7 @@ void Module2700::updateScene() {
_vm->gameModule()->initRadioPuzzle();
_musicFileHash = getGlobalVar(V_GOOD_RADIO_MUSIC_NAME);
_vm->_soundMan->addMusic(0x42212411, _musicFileHash);
- _vm->_soundMan->startMusic(_musicFileHash, 0, 2/*TODO ??? */);
+ _vm->_soundMan->startMusic(_musicFileHash, 0, 2);
_vm->_soundMan->addSound(0x42212411, 0x44014282);
_vm->_soundMan->setSoundParams(0x44014282, true, 120, 360, 72, 0);
_raidoMusicInitialized = true;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index c0c6185..fcaf756 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -93,7 +93,6 @@ Common::Error NeverhoodEngine::run() {
_gameModule = new GameModule(this);
- // TODO Check if this can actually be false...
_isSaveAllowed = true;
if (isDemo()) {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 1f2f479..30b93bd 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -302,8 +302,7 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s
case 0x101E:
// Show the mouse cursor
if (_mouseCursorWasVisible && _mouseCursor) {
- _mouseCursor->getSurface()->setVisible(true);//CHECKME?!?
- // TODO sendMessage(_mouseCursor, 0x4002, g_Screen->_mousePos);
+ _mouseCursor->getSurface()->setVisible(true);
}
break;
case 0x1022:
Commit: 51979c4f3f522c6d98290b93de7ecad141980b42
https://github.com/scummvm/scummvm/commit/51979c4f3f522c6d98290b93de7ecad141980b42
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Rename SceneInfo2700 to TrackInfo
Changed paths:
engines/neverhood/module1600.h
engines/neverhood/module2500.cpp
engines/neverhood/module2700.cpp
engines/neverhood/staticdata.cpp
engines/neverhood/staticdata.h
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index eaf8986..6bffb2d 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -121,7 +121,7 @@ protected:
void update();
};
-class Tracks : public Common::Array<SceneInfo2700*> {
+class Tracks : public Common::Array<TrackInfo*> {
public:
void findTrackPoint(NPoint pt, int &minMatchTrackIndex, int &minMatchDistance,
DataResource &dataResource);
diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp
index 851ee61..f5894e9 100644
--- a/engines/neverhood/module2500.cpp
+++ b/engines/neverhood/module2500.cpp
@@ -220,9 +220,9 @@ void Module2500::createScene2704(int which, uint32 sceneInfoId, int16 value, con
Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule) {
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B2628));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B264C));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B2670));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B2628));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B264C));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B2670));
setGlobalVar(V_CAR_DELTA_X, 1);
SetUpdateHandler(&Scene2501::update);
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index f1cb571..b5db911 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -619,7 +619,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which)
Sprite *tempSprite;
NRect clipRect;
- SceneInfo2700 *tracks = _vm->_staticData->getSceneInfo2700(0x004B2240);
+ TrackInfo *tracks = _vm->_staticData->getTrackInfo(0x004B2240);
setGlobalVar(V_CAR_DELTA_X, 1);
setBackground(tracks->bgFilename);
@@ -765,13 +765,13 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (_isUpperTrack) {
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5F68));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5F8C));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5FB0));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5F68));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5F8C));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FB0));
} else {
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5FD8));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B5FFC));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B6020));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FD8));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FFC));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B6020));
}
_trackPoints = _dataResource.getPointArray(_tracks[_currTrackIndex]->trackPointsName);
@@ -872,7 +872,7 @@ void Scene2702::changeTrack() {
Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint32 trackInfoId)
: Scene(vm, parentModule) {
- SceneInfo2700 *tracks = _vm->_staticData->getSceneInfo2700(trackInfoId);
+ TrackInfo *tracks = _vm->_staticData->getTrackInfo(trackInfoId);
SetMessageHandler(&Scene2703::handleMessage);
SetUpdateHandler(&Scene2703::update);
@@ -986,7 +986,7 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3
const uint32 *staticSprites, const NRect *clipRect)
: Scene(vm, parentModule) {
- SceneInfo2700 *tracks = _vm->_staticData->getSceneInfo2700(trackInfoId);
+ TrackInfo *tracks = _vm->_staticData->getTrackInfo(trackInfoId);
SetMessageHandler(&Scene2704::handleMessage);
SetUpdateHandler(&Scene2704::update);
@@ -1086,9 +1086,9 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2706::handleMessage);
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B22A0));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B22C4));
- _tracks.push_back(_vm->_staticData->getSceneInfo2700(0x004B22E8));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22A0));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22C4));
+ _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22E8));
setBackground(0x18808B88);
setPalette(0x18808B88);
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index cf272e5..4593594 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -140,23 +140,23 @@ void StaticData::load(const char *filename) {
_hallOfRecordsInfoItems[id] = hallOfRecordsInfo;
}
- // Load SceneInfo2700 items
- uint32 sceneInfo2700ItemsCount = fd.readUint32LE();
- debug("sceneInfo2700ItemsCount: %d", sceneInfo2700ItemsCount);
- for (uint32 i = 0; i < sceneInfo2700ItemsCount; i++) {
- SceneInfo2700 *sceneInfo2700 = new SceneInfo2700();
+ // Load TrackInfo items
+ uint32 trackInfoItemsCount = fd.readUint32LE();
+ debug("trackInfoItemsCount: %d", trackInfoItemsCount);
+ for (uint32 i = 0; i < trackInfoItemsCount; i++) {
+ TrackInfo *trackInfo = new TrackInfo();
uint32 id = fd.readUint32LE();
- sceneInfo2700->bgFilename = fd.readUint32LE();
- sceneInfo2700->bgShadowFilename = fd.readUint32LE();
- sceneInfo2700->dataResourceFilename = fd.readUint32LE();
- sceneInfo2700->trackPointsName = fd.readUint32LE();
- sceneInfo2700->rectListName = fd.readUint32LE();
- sceneInfo2700->exPaletteFilename2 = fd.readUint32LE();
- sceneInfo2700->exPaletteFilename1 = fd.readUint32LE();
- sceneInfo2700->mouseCursorFilename = fd.readUint32LE();
- sceneInfo2700->which1 = fd.readUint16LE();
- sceneInfo2700->which2 = fd.readUint16LE();
- _sceneInfo2700Items[id] = sceneInfo2700;
+ trackInfo->bgFilename = fd.readUint32LE();
+ trackInfo->bgShadowFilename = fd.readUint32LE();
+ trackInfo->dataResourceFilename = fd.readUint32LE();
+ trackInfo->trackPointsName = fd.readUint32LE();
+ trackInfo->rectListName = fd.readUint32LE();
+ trackInfo->exPaletteFilename2 = fd.readUint32LE();
+ trackInfo->exPaletteFilename1 = fd.readUint32LE();
+ trackInfo->mouseCursorFilename = fd.readUint32LE();
+ trackInfo->which1 = fd.readUint16LE();
+ trackInfo->which2 = fd.readUint16LE();
+ _trackInfoItems[id] = trackInfo;
}
}
@@ -191,10 +191,10 @@ HallOfRecordsInfo *StaticData::getHallOfRecordsInfoItem(uint32 id) {
return _hallOfRecordsInfoItems[id];
}
-SceneInfo2700 *StaticData::getSceneInfo2700(uint32 id) {
- if (!_sceneInfo2700Items[id])
- error("StaticData::getSceneInfo2700() SceneInfo2700 with id %08X not found", id);
- return _sceneInfo2700Items[id];
+TrackInfo *StaticData::getTrackInfo(uint32 id) {
+ if (!_trackInfoItems[id])
+ error("StaticData::getTrackInfo() TrackInfo with id %08X not found", id);
+ return _trackInfoItems[id];
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index 874a8a5..b1cab3b 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -77,7 +77,7 @@ struct HallOfRecordsInfo {
byte count;
};
-struct SceneInfo2700 {
+struct TrackInfo {
uint32 id;
uint32 bgFilename;
uint32 bgShadowFilename;
@@ -101,14 +101,14 @@ public:
MessageList *getMessageList(uint32 id);
NavigationList *getNavigationList(uint32 id);
HallOfRecordsInfo *getHallOfRecordsInfoItem(uint32 id);
- SceneInfo2700 *getSceneInfo2700(uint32 id);
+ TrackInfo *getTrackInfo(uint32 id);
protected:
Common::HashMap<uint32, HitRectList*> _hitRectLists;
Common::HashMap<uint32, RectList*> _rectLists;
Common::HashMap<uint32, MessageList*> _messageLists;
Common::HashMap<uint32, NavigationList*> _navigationLists;
Common::HashMap<uint32, HallOfRecordsInfo*> _hallOfRecordsInfoItems;
- Common::HashMap<uint32, SceneInfo2700*> _sceneInfo2700Items;
+ Common::HashMap<uint32, TrackInfo*> _trackInfoItems;
};
} // End of namespace Neverhood
Commit: eea9dbe2da9c6195431f234e89671fffd1e1ac29
https://github.com/scummvm/scummvm/commit/eea9dbe2da9c6195431f234e89671fffd1e1ac29
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Minor renaming and cleanup
Changed paths:
engines/neverhood/module.cpp
engines/neverhood/module.h
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/smackerscene.cpp
engines/neverhood/smackerscene.h
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 36607d7..93b4134 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -67,7 +67,6 @@ uint32 Module::handleMessage(int messageNum, const MessageParam ¶m, Entity *
}
NavigationScene *Module::navigationScene() {
- // Not so nice
return (NavigationScene*)_childObject;
}
@@ -76,19 +75,17 @@ void Module::createNavigationScene(uint32 navigationListId, int navigationIndex,
_childObject = new NavigationScene(_vm, this, navigationListId, navigationIndex, itemsTypes);
}
-void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort) {
- SmackerScene *smackerScene;
+void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool canSkip, bool canAbort) {
_sceneType = kSceneTypeSmacker;
- smackerScene = new SmackerScene(_vm, this, doubleSurface, flag1, canAbort);
+ SmackerScene *smackerScene = new SmackerScene(_vm, this, doubleSurface, canSkip, canAbort);
smackerScene->setFileHash(fileHash);
smackerScene->nextVideo();
_childObject = smackerScene;
}
-void Module::createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort) {
- SmackerScene *smackerScene;
+void Module::createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool canSkip, bool canAbort) {
_sceneType = kSceneTypeSmacker;
- smackerScene = new SmackerScene(_vm, this, doubleSurface, flag1, canAbort);
+ SmackerScene *smackerScene = new SmackerScene(_vm, this, doubleSurface, canSkip, canAbort);
smackerScene->setFileHashList(fileHashList);
smackerScene->nextVideo();
_childObject = smackerScene;
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index b91b9de..e98012c 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -58,8 +58,8 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
- void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
- void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort);
+ void createSmackerScene(uint32 fileHash, bool doubleSurface, bool canSkip, bool canAbort);
+ void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool canSkip, bool canAbort);
void createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash);
void createDemoScene();
bool updateChild();
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 12fe408..0329f58 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1175,7 +1175,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_ssLadderArchPart2 = insertStaticSprite(0xB2A423B0, 1100);
_ssLadderArchPart3 = insertStaticSprite(0x316E0772, 1100);
- _class599 = insertStaticSprite(0x316C4BB4, 1015);
+ _ssCeiling = insertStaticSprite(0x316C4BB4, 1015);
if (which < 0) {
// Restoring game
@@ -1231,11 +1231,11 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
tempClipRect.set(tempSprite->getDrawRect().x, tempSprite->getDrawRect().y,
_ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart2->getDrawRect().y2());
- _asRing1 = insertSprite<AsScene1002Ring>(this, false, 258, 191, _class599->getDrawRect().y, false);
- _asRing2 = insertSprite<AsScene1002Ring>(this, false, 297, 189, _class599->getDrawRect().y, false);
- _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _class599->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_DOOR));
- _asRing4 = insertSprite<AsScene1002Ring>(this, false, 334, 191, _class599->getDrawRect().y, false);
- _asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _class599->getDrawRect().y, false);
+ _asRing1 = insertSprite<AsScene1002Ring>(this, false, 258, 191, _ssCeiling->getDrawRect().y, false);
+ _asRing2 = insertSprite<AsScene1002Ring>(this, false, 297, 189, _ssCeiling->getDrawRect().y, false);
+ _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _ssCeiling->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_DOOR));
+ _asRing4 = insertSprite<AsScene1002Ring>(this, false, 334, 191, _ssCeiling->getDrawRect().y, false);
+ _asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _ssCeiling->getDrawRect().y, false);
_asDoor = insertSprite<AsScene1002Door>(tempClipRect);
tempSprite = insertSprite<AsScene1002BoxingGloveHitEffect>();
@@ -1374,11 +1374,11 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit
sendMessage(_asOutsideDoorBackground, 0x4808, 0);
break;
case 0x8000:
- setSpriteSurfacePriority(_class599, 995);
+ setSpriteSurfacePriority(_ssCeiling, 995);
setSpriteSurfacePriority(_ssLadderArch, 995);
break;
case 0x8001:
- setSpriteSurfacePriority(_class599, 1015);
+ setSpriteSurfacePriority(_ssCeiling, 1015);
setSpriteSurfacePriority(_ssLadderArch, 1015);
break;
}
@@ -1566,9 +1566,8 @@ uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
- }
break;
}
return 0;
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
index 32228a2..2cc9a55 100644
--- a/engines/neverhood/module1000.h
+++ b/engines/neverhood/module1000.h
@@ -249,7 +249,7 @@ protected:
Sprite *_ssLadderArchPart1;
Sprite *_ssLadderArchPart2;
Sprite *_ssLadderArchPart3;
- Sprite *_class599;
+ Sprite *_ssCeiling;
Sprite *_asKlaymanLadderHands;
Sprite *_asKlaymanPeekHand;
Sprite *_asOutsideDoorBackground;
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 290b8fa..20eebe2 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -24,16 +24,16 @@
namespace Neverhood {
-SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort)
- : Scene(vm, parentModule), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _videoPlayedBefore(false),
+SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool canSkip, bool canAbort)
+ : Scene(vm, parentModule), _doubleSurface(doubleSurface), _canSkip(canSkip), _canAbort(canAbort), _videoPlayedBefore(false),
_fileHashListIndex(-1), _fileHashList(NULL), _playNextVideoFlag(false) {
- debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, flag1, canAbort);
+ debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, canSkip, canAbort);
// NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags)
if (getGlobalVar(V_SMACKER_CAN_ABORT)) {
- _flag1 = true;
+ _canSkip = true;
_canAbort = true;
}
@@ -105,7 +105,7 @@ uint32 SmackerScene::handleMessage(int messageNum, const MessageParam ¶m, En
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0009:
- if ((_videoPlayedBefore && _flag1) || (_canAbort && _flag1))
+ if ((_videoPlayedBefore && _canSkip) || (_canAbort && _canSkip))
_playNextVideoFlag = true;
break;
case 0x000C:
diff --git a/engines/neverhood/smackerscene.h b/engines/neverhood/smackerscene.h
index 54de28a..7ed2e02 100644
--- a/engines/neverhood/smackerscene.h
+++ b/engines/neverhood/smackerscene.h
@@ -31,14 +31,14 @@ namespace Neverhood {
class SmackerScene : public Scene {
public:
- SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort);
+ SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool canSkip, bool canAbort);
virtual ~SmackerScene();
void setFileHash(uint32 fileHash);
void setFileHashList(const uint32 *fileHashList);
void nextVideo();
protected:
bool _doubleSurface;
- bool _flag1;
+ bool _canSkip;
bool _canAbort;
bool _videoPlayedBefore;
bool _playNextVideoFlag;
Commit: e51bea9b4e4d2857b1225cdd7c0ebbe137b530ee
https://github.com/scummvm/scummvm/commit/e51bea9b4e4d2857b1225cdd7c0ebbe137b530ee
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:40-07:00
Commit Message:
NEVERHOOD: Don't load a DataResource if the same data is already loaded; this fixes a nasty bug in several scenes which use message lists from a DataResource
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/resource.cpp
engines/neverhood/scene.cpp
engines/neverhood/staticdata.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index d037cf5..f22a0d1 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -400,9 +400,9 @@ void GameModule::startup() {
// <<<DEBUG
#if 1
- _vm->gameState().which = 0;
- _vm->gameState().sceneNum = 0;
- createModule(2500, -1);
+ _vm->gameState().which = 1;
+ _vm->gameState().sceneNum = 1;
+ createModule(1000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 5;
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 869bebb..269d13d 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -353,7 +353,9 @@ DataResource::~DataResource() {
}
void DataResource::load(uint32 fileHash) {
- debug(2, "DataResource::load(%08X)", fileHash);
+ if (_resourceHandle.fileHash() == fileHash)
+ return;
+ debug("DataResource::load(%08X)", fileHash);
const byte *data = NULL;
uint32 dataSize = 0;
unload();
@@ -497,7 +499,6 @@ void DataResource::load(uint32 fileHash) {
}
void DataResource::unload() {
- _vm->_res->unloadResource(_resourceHandle);
_directory.clear();
_points.clear();
for (Common::Array<NPointArray*>::iterator it = _pointArrays.begin(); it != _pointArrays.end(); ++it)
@@ -516,6 +517,7 @@ void DataResource::unload() {
for (Common::Array<DRSubRectList*>::iterator it = _drSubRectLists.begin(); it != _drSubRectLists.end(); ++it)
delete (*it);
_drSubRectLists.clear();
+ _vm->_res->unloadResource(_resourceHandle);
}
NPoint DataResource::getPoint(uint32 nameHash) {
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 30b93bd..866b75d 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -397,7 +397,16 @@ void Scene::processMessageList() {
_messageListStatus = 0;
}
- if (_messageList && _klayman) {
+ if (_messageList && _klayman) {
+
+#if 0
+ debug("MessageList: %p, %d", (void*)_messageList, _messageList->size());
+ for (uint i = 0; i < _messageList->size(); ++i) {
+ if (i == _messageListIndex) debugN("**"); else debugN(" ");
+ debug("(%08X, %08X)", (*_messageList)[i].messageNum, (*_messageList)[i].messageValue);
+ }
+ debug("--------------------------------");
+#endif
while (_messageList && _messageListIndex < _messageListCount && !_isKlaymanBusy) {
uint32 messageNum = (*_messageList)[_messageListIndex].messageNum;
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 4593594..3f89c22 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -42,7 +42,7 @@ void StaticData::load(const char *filename) {
// Load message lists
uint32 messageListsCount = fd.readUint32LE();
- debug("messageListsCount: %d", messageListsCount);
+ debug(3, "messageListsCount: %d", messageListsCount);
for (uint32 i = 0; i < messageListsCount; i++) {
MessageList *messageList = new MessageList();
uint32 id = fd.readUint32LE();
@@ -58,7 +58,7 @@ void StaticData::load(const char *filename) {
// Load rect lists
uint32 rectListsCount = fd.readUint32LE();
- debug("rectListsCount: %d", rectListsCount);
+ debug(3, "rectListsCount: %d", rectListsCount);
for (uint32 i = 0; i < rectListsCount; i++) {
RectList *rectList = new RectList();
uint32 id = fd.readUint32LE();
@@ -87,7 +87,7 @@ void StaticData::load(const char *filename) {
// Load hit rects
uint32 hitRectListsCount = fd.readUint32LE();
- debug("hitRectListsCount: %d", hitRectListsCount);
+ debug(3, "hitRectListsCount: %d", hitRectListsCount);
for (uint32 i = 0; i < hitRectListsCount; i++) {
HitRectList *hitRectList = new HitRectList();
uint32 id = fd.readUint32LE();
@@ -106,7 +106,7 @@ void StaticData::load(const char *filename) {
// Load navigation lists
uint32 navigationListsCount = fd.readUint32LE();
- debug("navigationListsCount: %d", navigationListsCount);
+ debug(3, "navigationListsCount: %d", navigationListsCount);
for (uint32 i = 0; i < navigationListsCount; i++) {
NavigationList *navigationList = new NavigationList();
uint32 id = fd.readUint32LE();
@@ -127,7 +127,7 @@ void StaticData::load(const char *filename) {
// Load HallOfRecordsInfo items
uint32 hallOfRecordsInfoItemsCount = fd.readUint32LE();
- debug("hallOfRecordsInfoItemsCount: %d", hallOfRecordsInfoItemsCount);
+ debug(3, "hallOfRecordsInfoItemsCount: %d", hallOfRecordsInfoItemsCount);
for (uint32 i = 0; i < hallOfRecordsInfoItemsCount; i++) {
HallOfRecordsInfo *hallOfRecordsInfo = new HallOfRecordsInfo();
uint32 id = fd.readUint32LE();
@@ -142,7 +142,7 @@ void StaticData::load(const char *filename) {
// Load TrackInfo items
uint32 trackInfoItemsCount = fd.readUint32LE();
- debug("trackInfoItemsCount: %d", trackInfoItemsCount);
+ debug(3, "trackInfoItemsCount: %d", trackInfoItemsCount);
for (uint32 i = 0; i < trackInfoItemsCount; i++) {
TrackInfo *trackInfo = new TrackInfo();
uint32 id = fd.readUint32LE();
Commit: 5ff11f00413d1adf1a5abf11e0f5d3db19945064
https://github.com/scummvm/scummvm/commit/5ff11f00413d1adf1a5abf11e0f5d3db19945064
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:41-07:00
Commit Message:
NEVERHOOD: Rework the sound system
- Move code from the manager classes to the sound/music classes
Changed paths:
engines/neverhood/neverhood.cpp
engines/neverhood/sound.cpp
engines/neverhood/sound.h
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index fcaf756..d4b0984 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -168,7 +168,7 @@ void NeverhoodEngine::mainLoop() {
nextFrameTime = _screen->getNextFrameTime();
};
_soundMan->update();
- _audioResourceMan->update();
+ _audioResourceMan->updateMusic();
_system->updateScreen();
_system->delayMillis(10);
}
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index d055107..9e0e572 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -27,9 +27,6 @@
namespace Neverhood {
-// TODO Put more stuff into the constructors/destructors of the item structs
-// TODO Some parts are quite bad here, but my priority is to get sound working at all
-
SoundResource::SoundResource(NeverhoodEngine *vm)
: _vm(vm), _soundIndex(-1) {
}
@@ -39,14 +36,16 @@ SoundResource::~SoundResource() {
}
bool SoundResource::isPlaying() {
- return _soundIndex >= 0 &&
- _vm->_audioResourceMan->isSoundPlaying(_soundIndex);
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ return soundItem ? soundItem->isPlaying() : false;
}
void SoundResource::load(uint32 fileHash) {
unload();
_soundIndex = _vm->_audioResourceMan->addSound(fileHash);
- _vm->_audioResourceMan->loadSound(_soundIndex);
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ if (soundItem)
+ soundItem->loadSound();
}
void SoundResource::unload() {
@@ -62,32 +61,40 @@ void SoundResource::play(uint32 fileHash) {
}
void SoundResource::play() {
- if (_soundIndex >= 0)
- _vm->_audioResourceMan->playSound(_soundIndex, false);
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ if (soundItem)
+ soundItem->playSound(false);
}
void SoundResource::stop() {
- if (_soundIndex >= 0)
- _vm->_audioResourceMan->stopSound(_soundIndex);
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ if (soundItem)
+ soundItem->stopSound();
}
void SoundResource::setVolume(int16 volume) {
- if (_soundIndex >= 0)
- _vm->_audioResourceMan->setSoundVolume(_soundIndex, volume);
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ if (soundItem)
+ soundItem->setVolume(volume);
}
void SoundResource::setPan(int16 pan) {
- if (_soundIndex >= 0)
- _vm->_audioResourceMan->setSoundPan(_soundIndex, pan);
+ AudioResourceManSoundItem *soundItem = getSoundItem();
+ if (soundItem)
+ soundItem->setPan(pan);
+}
+
+AudioResourceManSoundItem *SoundResource::getSoundItem() {
+ return _vm->_audioResourceMan->getSoundItem(_soundIndex);
}
MusicResource::MusicResource(NeverhoodEngine *vm)
: _vm(vm), _musicIndex(-1) {
}
-bool MusicResource::isPlaying() {
- return _musicIndex >= 0 &&
- _vm->_audioResourceMan->isMusicPlaying(_musicIndex);
+bool MusicResource::isPlaying() {
+ AudioResourceManMusicItem *musicItem = getMusicItem();
+ return musicItem && musicItem->isPlaying();
}
void MusicResource::load(uint32 fileHash) {
@@ -96,29 +103,46 @@ void MusicResource::load(uint32 fileHash) {
}
void MusicResource::unload() {
- if (_musicIndex >= 0) {
- _vm->_audioResourceMan->unloadMusic(_musicIndex);
+ AudioResourceManMusicItem *musicItem = getMusicItem();
+ if (musicItem) {
+ musicItem->unloadMusic();
_musicIndex = -1;
}
}
void MusicResource::play(int16 fadeVolumeStep) {
- if (_musicIndex >= 0)
- _vm->_audioResourceMan->playMusic(_musicIndex, fadeVolumeStep);
+ AudioResourceManMusicItem *musicItem = getMusicItem();
+ if (musicItem)
+ musicItem->playMusic(fadeVolumeStep);
}
void MusicResource::stop(int16 fadeVolumeStep) {
- if (_musicIndex >= 0)
- _vm->_audioResourceMan->stopMusic(_musicIndex, fadeVolumeStep);
+ AudioResourceManMusicItem *musicItem = getMusicItem();
+ if (musicItem)
+ musicItem->stopMusic(fadeVolumeStep);
}
void MusicResource::setVolume(int16 volume) {
- if (_musicIndex >= 0)
- _vm->_audioResourceMan->setMusicVolume(_musicIndex, volume);
+ AudioResourceManMusicItem *musicItem = getMusicItem();
+ if (musicItem)
+ musicItem->setVolume(volume);
}
-MusicItem::MusicItem()
- : _musicResource(NULL) {
+AudioResourceManMusicItem *MusicResource::getMusicItem() {
+ return _vm->_audioResourceMan->getMusicItem(_musicIndex);
+}
+
+MusicItem::MusicItem(NeverhoodEngine *vm, uint32 groupNameHash, uint32 musicFileHash)
+ : _vm(vm), _musicResource(NULL) {
+
+ _groupNameHash = groupNameHash;
+ _fileHash = musicFileHash;
+ _play = false;
+ _stop = false;
+ _fadeVolumeStep = 0;
+ _countdown = 24;
+ _musicResource = new MusicResource(_vm);
+ _musicResource->load(musicFileHash);
}
MusicItem::~MusicItem() {
@@ -127,10 +151,39 @@ MusicItem::~MusicItem() {
delete _musicResource;
}
-SoundItem::SoundItem(NeverhoodEngine *vm, uint32 nameHash, uint32 soundFileHash,
+void MusicItem::startMusic(int16 countdown, int16 fadeVolumeStep) {
+ _play = true;
+ _stop = false;
+ _countdown = countdown;
+ _fadeVolumeStep = fadeVolumeStep;
+}
+
+void MusicItem::stopMusic(int16 countdown, int16 fadeVolumeStep) {
+ _play = false;
+ _stop = true;
+ _countdown = countdown;
+ _fadeVolumeStep = fadeVolumeStep;
+}
+
+void MusicItem::update() {
+ if (_countdown) {
+ --_countdown;
+ } else if (_play && !_musicResource->isPlaying()) {
+ debug(1, "MusicItem: play music %08X (fade %d)", _fileHash, _fadeVolumeStep);
+ _musicResource->play(_fadeVolumeStep);
+ _fadeVolumeStep = 0;
+ } else if (_stop) {
+ debug(1, "MusicItem: stop music %08X (fade %d)", _fileHash, _fadeVolumeStep);
+ _musicResource->stop(_fadeVolumeStep);
+ _fadeVolumeStep = 0;
+ _stop = false;
+ }
+}
+
+SoundItem::SoundItem(NeverhoodEngine *vm, uint32 groupNameHash, uint32 soundFileHash,
bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown)
- : _soundResource(NULL), _nameHash(nameHash), _soundFileHash(soundFileHash),
+ : _vm(vm), _soundResource(NULL), _groupNameHash(groupNameHash), _fileHash(soundFileHash),
_playOnceAfterRandomCountdown(false), _minCountdown(0), _maxCountdown(0),
_playOnceAfterCountdown(_playOnceAfterCountdown), _initialCountdown(initialCountdown),
_playLooping(false), _currCountdown(currCountdown) {
@@ -145,28 +198,70 @@ SoundItem::~SoundItem() {
delete _soundResource;
}
+void SoundItem::setSoundParams(bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
+ int16 firstMinCountdown, int16 firstMaxCountdown) {
+
+ _playOnceAfterCountdown = false;
+ _playLooping = false;
+ _playOnceAfterRandomCountdown = playOnceAfterRandomCountdown;
+ if (minCountdown > 0)
+ _minCountdown = minCountdown;
+ if (maxCountdown > 0)
+ _maxCountdown = maxCountdown;
+ if (firstMinCountdown >= firstMaxCountdown)
+ _currCountdown = firstMinCountdown;
+ else if (firstMinCountdown > 0 && firstMaxCountdown > 0 && firstMinCountdown < firstMaxCountdown)
+ _currCountdown = _vm->_rnd->getRandomNumberRng(firstMinCountdown, firstMaxCountdown);
+}
+
+void SoundItem::playSoundLooping() {
+ _playOnceAfterRandomCountdown = false;
+ _playOnceAfterCountdown = false;
+ _playLooping = true;
+}
+
+void SoundItem::stopSound() {
+ _playOnceAfterRandomCountdown = false;
+ _playOnceAfterCountdown = false;
+ _playLooping = false;
+ _soundResource->stop();
+}
+
+void SoundItem::setVolume(int volume) {
+ _soundResource->setVolume(volume);
+}
+
+void SoundItem::update() {
+ if (_playOnceAfterCountdown) {
+ if (_currCountdown == 0) {
+ _currCountdown = _initialCountdown;
+ } else if (--_currCountdown == 0) {
+ _soundResource->play();
+ }
+ } else if (_playOnceAfterRandomCountdown) {
+ if (_currCountdown == 0) {
+ if (_minCountdown > 0 && _maxCountdown > 0 && _minCountdown < _maxCountdown)
+ _currCountdown = _vm->_rnd->getRandomNumberRng(_minCountdown, _maxCountdown);
+ } else if (--_currCountdown == 0) {
+ _soundResource->play();
+ }
+ } else if (_playLooping && !_soundResource->isPlaying()) {
+ _soundResource->play(); // TODO Looping parameter?
+ }
+}
+
// SoundMan
SoundMan::SoundMan(NeverhoodEngine *vm)
- : _vm(vm),
- _soundIndex1(-1), _soundIndex2(-1), _soundIndex3(-1) {
+ : _vm(vm), _soundIndex1(-1), _soundIndex2(-1), _soundIndex3(-1) {
}
SoundMan::~SoundMan() {
// TODO Clean up
}
-void SoundMan::addMusic(uint32 nameHash, uint32 musicFileHash) {
- MusicItem *musicItem = new MusicItem();
- musicItem->_nameHash = nameHash;
- musicItem->_musicFileHash = musicFileHash;
- musicItem->_play = false;
- musicItem->_stop = false;
- musicItem->_fadeVolumeStep = 0;
- musicItem->_countdown = 24;
- musicItem->_musicResource = new MusicResource(_vm);
- musicItem->_musicResource->load(musicFileHash);
- addMusicItem(musicItem);
+void SoundMan::addMusic(uint32 groupNameHash, uint32 musicFileHash) {
+ addMusicItem(new MusicItem(_vm, groupNameHash, musicFileHash));
}
void SoundMan::deleteMusic(uint32 musicFileHash) {
@@ -183,32 +278,23 @@ void SoundMan::deleteMusic(uint32 musicFileHash) {
void SoundMan::startMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep) {
MusicItem *musicItem = getMusicItemByHash(musicFileHash);
- if (musicItem) {
- musicItem->_play = true;
- musicItem->_stop = false;
- musicItem->_countdown = countdown;
- musicItem->_fadeVolumeStep = fadeVolumeStep;
- }
+ if (musicItem)
+ musicItem->startMusic(countdown, fadeVolumeStep);
}
void SoundMan::stopMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep) {
MusicItem *musicItem = getMusicItemByHash(musicFileHash);
- if (musicItem) {
- musicItem->_play = false;
- musicItem->_stop = true;
- musicItem->_countdown = countdown;
- musicItem->_fadeVolumeStep = fadeVolumeStep;
- }
+ if (musicItem)
+ musicItem->stopMusic(countdown, fadeVolumeStep);
}
-void SoundMan::addSound(uint32 nameHash, uint32 soundFileHash) {
- SoundItem *soundItem = new SoundItem(_vm, nameHash, soundFileHash, false, 50, 600, false, 0, false, 0);
- addSoundItem(soundItem);
+void SoundMan::addSound(uint32 groupNameHash, uint32 soundFileHash) {
+ addSoundItem(new SoundItem(_vm, groupNameHash, soundFileHash, false, 50, 600, false, 0, false, 0));
}
-void SoundMan::addSoundList(uint32 nameHash, const uint32 *soundFileHashList) {
+void SoundMan::addSoundList(uint32 groupNameHash, const uint32 *soundFileHashList) {
while (*soundFileHashList)
- addSound(nameHash, *soundFileHashList++);
+ addSound(groupNameHash, *soundFileHashList++);
}
void SoundMan::deleteSound(uint32 soundFileHash) {
@@ -227,19 +313,9 @@ void SoundMan::setSoundParams(uint32 soundFileHash, bool playOnceAfterRandomCoun
int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown) {
SoundItem *soundItem = getSoundItemByHash(soundFileHash);
- if (soundItem) {
- soundItem->_playOnceAfterCountdown = false;
- soundItem->_playLooping = false;
- soundItem->_playOnceAfterRandomCountdown = playOnceAfterRandomCountdown;
- if (minCountdown > 0)
- soundItem->_minCountdown = minCountdown;
- if (maxCountdown > 0)
- soundItem->_maxCountdown = maxCountdown;
- if (firstMinCountdown >= firstMaxCountdown)
- soundItem->_currCountdown = firstMinCountdown;
- else if (firstMinCountdown > 0 && firstMaxCountdown > 0 && firstMinCountdown < firstMaxCountdown)
- soundItem->_currCountdown = _vm->_rnd->getRandomNumberRng(firstMinCountdown, firstMaxCountdown);
- }
+ if (soundItem)
+ soundItem->setSoundParams(playOnceAfterRandomCountdown, minCountdown, maxCountdown,
+ firstMinCountdown, firstMaxCountdown);
}
void SoundMan::setSoundListParams(const uint32 *soundFileHashList, bool playOnceAfterRandomCountdown,
@@ -252,120 +328,84 @@ void SoundMan::setSoundListParams(const uint32 *soundFileHashList, bool playOnce
void SoundMan::playSoundLooping(uint32 soundFileHash) {
SoundItem *soundItem = getSoundItemByHash(soundFileHash);
- if (soundItem) {
- soundItem->_playOnceAfterRandomCountdown = false;
- soundItem->_playOnceAfterCountdown = false;
- soundItem->_playLooping = true;
- }
+ if (soundItem)
+ soundItem->playSoundLooping();
}
void SoundMan::stopSound(uint32 soundFileHash) {
SoundItem *soundItem = getSoundItemByHash(soundFileHash);
- if (soundItem) {
- soundItem->_playOnceAfterRandomCountdown = false;
- soundItem->_playOnceAfterCountdown = false;
- soundItem->_playLooping = false;
- soundItem->_soundResource->stop();
- }
+ if (soundItem)
+ soundItem->stopSound();
}
void SoundMan::setSoundVolume(uint32 soundFileHash, int volume) {
SoundItem *soundItem = getSoundItemByHash(soundFileHash);
if (soundItem)
- soundItem->_soundResource->setVolume(volume);
+ soundItem->setVolume(volume);
}
void SoundMan::update() {
for (uint i = 0; i < _soundItems.size(); ++i) {
SoundItem *soundItem = _soundItems[i];
- if (soundItem) {
- if (soundItem->_playOnceAfterCountdown) {
- if (soundItem->_currCountdown == 0) {
- soundItem->_currCountdown = soundItem->_initialCountdown;
- } else if (--soundItem->_currCountdown == 0) {
- soundItem->_soundResource->play();
- }
- } else if (soundItem->_playOnceAfterRandomCountdown) {
- if (soundItem->_currCountdown == 0) {
- if (soundItem->_minCountdown > 0 && soundItem->_maxCountdown > 0 && soundItem->_minCountdown < soundItem->_maxCountdown)
- soundItem->_currCountdown = _vm->_rnd->getRandomNumberRng(soundItem->_minCountdown, soundItem->_maxCountdown);
- } else if (--soundItem->_currCountdown == 0) {
- soundItem->_soundResource->play();
- }
- } else if (soundItem->_playLooping && !soundItem->_soundResource->isPlaying()) {
- soundItem->_soundResource->play(); // TODO Looping parameter?
- }
- }
+ if (soundItem)
+ soundItem->update();
}
for (uint i = 0; i < _musicItems.size(); ++i) {
MusicItem *musicItem = _musicItems[i];
- if (musicItem) {
- if (musicItem->_countdown) {
- --musicItem->_countdown;
- } else if (musicItem->_play && !musicItem->_musicResource->isPlaying()) {
- debug(1, "SoundMan: play music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
- musicItem->_musicResource->play(musicItem->_fadeVolumeStep);
- musicItem->_fadeVolumeStep = 0;
- } else if (musicItem->_stop) {
- debug(1, "SoundMan: stop music %08X (fade %d)", musicItem->_musicFileHash, musicItem->_fadeVolumeStep);
- musicItem->_musicResource->stop(musicItem->_fadeVolumeStep);
- musicItem->_fadeVolumeStep = 0;
- musicItem->_stop = false;
- }
- }
+ if (musicItem)
+ musicItem->update();
}
}
-void SoundMan::deleteGroup(uint32 nameHash) {
- deleteMusicGroup(nameHash);
- deleteSoundGroup(nameHash);
+void SoundMan::deleteGroup(uint32 groupNameHash) {
+ deleteMusicGroup(groupNameHash);
+ deleteSoundGroup(groupNameHash);
}
-void SoundMan::deleteMusicGroup(uint32 nameHash) {
+void SoundMan::deleteMusicGroup(uint32 groupNameHash) {
for (uint index = 0; index < _musicItems.size(); ++index) {
MusicItem *musicItem = _musicItems[index];
- if (musicItem && musicItem->_nameHash == nameHash) {
+ if (musicItem && musicItem->getGroupNameHash() == groupNameHash) {
delete musicItem;
_musicItems[index] = NULL;
}
}
}
-void SoundMan::deleteSoundGroup(uint32 nameHash) {
+void SoundMan::deleteSoundGroup(uint32 groupNameHash) {
- if (_soundIndex1 != -1 && _soundItems[_soundIndex1]->_nameHash == nameHash) {
+ if (_soundIndex1 != -1 && _soundItems[_soundIndex1]->getGroupNameHash() == groupNameHash) {
deleteSoundByIndex(_soundIndex1);
_soundIndex1 = -1;
}
- if (_soundIndex2 != -1 && _soundItems[_soundIndex2]->_nameHash == nameHash) {
+ if (_soundIndex2 != -1 && _soundItems[_soundIndex2]->getGroupNameHash() == groupNameHash) {
deleteSoundByIndex(_soundIndex2);
_soundIndex2 = -1;
}
for (uint index = 0; index < _soundItems.size(); ++index)
- if (_soundItems[index] && _soundItems[index]->_nameHash == nameHash)
+ if (_soundItems[index] && _soundItems[index]->getGroupNameHash() == groupNameHash)
deleteSoundByIndex(index);
}
-void SoundMan::playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soundFileHash2, int16 initialCountdown) {
+void SoundMan::playTwoSounds(uint32 groupNameHash, uint32 soundFileHash1, uint32 soundFileHash2, int16 initialCountdown) {
- SoundItem *soundItem;
int16 currCountdown1 = _initialCountdown;
int16 currCountdown2 = _initialCountdown / 2;
if (_soundIndex1 != -1) {
- currCountdown1 = _soundItems[_soundIndex1]->_currCountdown;
+ currCountdown1 = _soundItems[_soundIndex1]->getCurrCountdown();
deleteSoundByIndex(_soundIndex1);
_soundIndex1 = -1;
}
if (_soundIndex2 != -1) {
- currCountdown2 = _soundItems[_soundIndex2]->_currCountdown;
+ currCountdown2 = _soundItems[_soundIndex2]->getCurrCountdown();
deleteSoundByIndex(_soundIndex2);
_soundIndex2 = -1;
}
@@ -374,24 +414,22 @@ void SoundMan::playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soun
_initialCountdown = initialCountdown;
if (soundFileHash1 != 0) {
- soundItem = new SoundItem(_vm, nameHash, soundFileHash1, false, 0, 0,
+ SoundItem *soundItem = new SoundItem(_vm, groupNameHash, soundFileHash1, false, 0, 0,
_playOnceAfterCountdown, _initialCountdown, false, currCountdown1);
- soundItem->_soundResource->setVolume(80);
+ soundItem->setVolume(80);
_soundIndex1 = addSoundItem(soundItem);
}
if (soundFileHash2 != 0) {
- soundItem = new SoundItem(_vm, nameHash, soundFileHash2, false, 0, 0,
+ SoundItem *soundItem = new SoundItem(_vm, groupNameHash, soundFileHash2, false, 0, 0,
_playOnceAfterCountdown, _initialCountdown, false, currCountdown2);
- soundItem->_soundResource->setVolume(80);
+ soundItem->setVolume(80);
_soundIndex2 = addSoundItem(soundItem);
}
}
-void SoundMan::playSoundThree(uint32 nameHash, uint32 soundFileHash) {
-
- SoundItem *soundItem;
+void SoundMan::playSoundThree(uint32 groupNameHash, uint32 soundFileHash) {
if (_soundIndex3 != -1) {
deleteSoundByIndex(_soundIndex3);
@@ -399,8 +437,7 @@ void SoundMan::playSoundThree(uint32 nameHash, uint32 soundFileHash) {
}
if (soundFileHash != 0) {
- soundItem = new SoundItem(_vm, nameHash, soundFileHash, false, 0, 0,
- false, _initialCountdown3, false, 0);
+ SoundItem *soundItem = new SoundItem(_vm, groupNameHash, soundFileHash, false, 0, 0, false, _initialCountdown3, false, 0);
_soundIndex3 = addSoundItem(soundItem);
}
@@ -408,28 +445,28 @@ void SoundMan::playSoundThree(uint32 nameHash, uint32 soundFileHash) {
void SoundMan::setTwoSoundsPlayFlag(bool playOnceAfterCountdown) {
if (_soundIndex1 != -1)
- _soundItems[_soundIndex1]->_playOnceAfterCountdown = playOnceAfterCountdown;
+ _soundItems[_soundIndex1]->setPlayOnceAfterCountdown(playOnceAfterCountdown);
if (_soundIndex2 != -1)
- _soundItems[_soundIndex2]->_playOnceAfterCountdown = playOnceAfterCountdown;
+ _soundItems[_soundIndex2]->setPlayOnceAfterCountdown(playOnceAfterCountdown);
_playOnceAfterCountdown = playOnceAfterCountdown;
}
void SoundMan::setSoundThreePlayFlag(bool playOnceAfterCountdown) {
if (_soundIndex3 != -1)
- _soundItems[_soundIndex3]->_playOnceAfterCountdown = playOnceAfterCountdown;
+ _soundItems[_soundIndex3]->setPlayOnceAfterCountdown(playOnceAfterCountdown);
_playOnceAfterCountdown3 = playOnceAfterCountdown;
}
MusicItem *SoundMan::getMusicItemByHash(uint32 musicFileHash) {
for (uint i = 0; i < _musicItems.size(); ++i)
- if (_musicItems[i] && _musicItems[i]->_musicFileHash == musicFileHash)
+ if (_musicItems[i] && _musicItems[i]->getFileHash() == musicFileHash)
return _musicItems[i];
return NULL;
}
SoundItem *SoundMan::getSoundItemByHash(uint32 soundFileHash) {
for (uint i = 0; i < _soundItems.size(); ++i)
- if (_soundItems[i] && _soundItems[i]->_soundFileHash == soundFileHash)
+ if (_soundItems[i] && _soundItems[i]->getFileHash() == soundFileHash)
return _soundItems[i];
return NULL;
}
@@ -510,128 +547,205 @@ int NeverhoodAudioStream::readBuffer(int16 *buffer, const int numSamples) {
return numSamples - samplesLeft;
}
-AudioResourceMan::AudioResourceMan(NeverhoodEngine *vm)
- : _vm(vm) {
+AudioResourceManSoundItem::AudioResourceManSoundItem(NeverhoodEngine *vm, uint32 fileHash)
+ : _vm(vm), _fileHash(fileHash), _data(NULL), _isLoaded(false), _isPlaying(false),
+ _volume(100), _panning(50) {
+
+ _vm->_res->queryResource(_fileHash, _resourceHandle);
}
-AudioResourceMan::~AudioResourceMan() {
+void AudioResourceManSoundItem::loadSound() {
+ if (!_data && _resourceHandle.isValid() &&
+ (_resourceHandle.type() == kResTypeSound || _resourceHandle.type() == kResTypeMusic)) {
+ _vm->_res->loadResource(_resourceHandle);
+ _data = _resourceHandle.data();
+ }
}
-int16 AudioResourceMan::addSound(uint32 fileHash) {
- AudioResourceManSoundItem *soundItem = new AudioResourceManSoundItem();
- _vm->_res->queryResource(fileHash, soundItem->_resourceHandle);
- soundItem->_fileHash = fileHash;
- soundItem->_data = NULL;
- soundItem->_isLoaded = false;
- soundItem->_isPlaying = false;
- soundItem->_volume = 100;
- soundItem->_panning = 50;
- for (uint i = 0; i < _soundItems.size(); ++i)
- if (!_soundItems[i]) {
- _soundItems[i] = soundItem;
- return i;
- }
- int16 soundIndex = (int16)_soundItems.size();
- _soundItems.push_back(soundItem);
- return soundIndex;
+void AudioResourceManSoundItem::unloadSound() {
+ if (_vm->_mixer->isSoundHandleActive(_soundHandle))
+ _vm->_mixer->stopHandle(_soundHandle);
+ _vm->_res->unloadResource(_resourceHandle);
+ _data = NULL;
}
-void AudioResourceMan::removeSound(int16 soundIndex) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- unloadSound(soundIndex);
- delete soundItem;
- _soundItems[soundIndex] = NULL;
-}
-
-void AudioResourceMan::loadSound(int16 soundIndex) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (!soundItem->_data && soundItem->_resourceHandle.isValid() &&
- (soundItem->_resourceHandle.type() == kResTypeSound || soundItem->_resourceHandle.type() == kResTypeMusic)) {
- _vm->_res->loadResource(soundItem->_resourceHandle);
- soundItem->_data = soundItem->_resourceHandle.data();
+void AudioResourceManSoundItem::setVolume(int16 volume) {
+ _volume = MIN<int16>(volume, 100);
+ if (_isPlaying && _vm->_mixer->isSoundHandleActive(_soundHandle))
+ _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_volume));
+}
+
+void AudioResourceManSoundItem::setPan(int16 pan) {
+ _panning = MIN<int16>(pan, 100);
+ if (_isPlaying && _vm->_mixer->isSoundHandleActive(_soundHandle))
+ _vm->_mixer->setChannelVolume(_soundHandle, PANNING(_panning));
+}
+
+void AudioResourceManSoundItem::playSound(bool looping) {
+ if (!_data)
+ loadSound();
+ if (_data) {
+ const byte *shiftValue = _resourceHandle.extData();
+ Common::MemoryReadStream *stream = new Common::MemoryReadStream(_data, _resourceHandle.size(), DisposeAfterUse::NO);
+ NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, false, DisposeAfterUse::YES, stream);
+ _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle,
+ audioStream, -1, VOLUME(_volume), PANNING(_panning));
+ debug(1, "playing sound %08X", _fileHash);
+ _isPlaying = true;
}
}
-void AudioResourceMan::unloadSound(int16 soundIndex) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
- _vm->_mixer->stopHandle(soundItem->_soundHandle);
- _vm->_res->unloadResource(soundItem->_resourceHandle);
- soundItem->_data = NULL;
+void AudioResourceManSoundItem::stopSound() {
+ if (_vm->_mixer->isSoundHandleActive(_soundHandle))
+ _vm->_mixer->stopHandle(_soundHandle);
+ _isPlaying = false;
}
-void AudioResourceMan::setSoundVolume(int16 soundIndex, int16 volume) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- soundItem->_volume = MIN<int16>(volume, 100);
- if (soundItem->_isPlaying && _vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
- _vm->_mixer->setChannelVolume(soundItem->_soundHandle, VOLUME(soundItem->_volume));
+bool AudioResourceManSoundItem::isPlaying() {
+ return _vm->_mixer->isSoundHandleActive(_soundHandle);
}
-void AudioResourceMan::setSoundPan(int16 soundIndex, int16 pan) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- soundItem->_panning = MIN<int16>(pan, 100);
- if (soundItem->_isPlaying && _vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
- _vm->_mixer->setChannelVolume(soundItem->_soundHandle, PANNING(soundItem->_panning));
+AudioResourceManMusicItem::AudioResourceManMusicItem(NeverhoodEngine *vm, uint32 fileHash)
+ : _vm(vm), _fileHash(fileHash), _terminate(false), _canRestart(false),
+ _volume(100), _panning(50), _start(false), _isFadingIn(false), _isFadingOut(false) {
+
}
-void AudioResourceMan::playSound(int16 soundIndex, bool looping) {
+void AudioResourceManMusicItem::playMusic(int16 fadeVolumeStep) {
+ if (!_isPlaying) {
+ _isFadingIn = false;
+ _isFadingOut = false;
+ if (fadeVolumeStep != 0) {
+ _isFadingIn = true;
+ _fadeVolume = 0;
+ _fadeVolumeStep = fadeVolumeStep;
+ }
+ _start = true;
+ _terminate = false;
+ }
+}
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (!soundItem->_data)
- loadSound(soundIndex);
+void AudioResourceManMusicItem::stopMusic(int16 fadeVolumeStep) {
+ if (_vm->_mixer->isSoundHandleActive(_soundHandle)) {
+ if (fadeVolumeStep != 0) {
+ if (_isFadingIn)
+ _isFadingIn = false;
+ else
+ _fadeVolume = _volume;
+ _isFadingOut = true;
+ _fadeVolumeStep = fadeVolumeStep;
+ } else {
+ _vm->_mixer->stopHandle(_soundHandle);
+ }
+ _isPlaying = false;
+ }
+}
- if (!soundItem->_data)
- return;
-
- const byte *shiftValue = soundItem->_resourceHandle.extData();
-
- Common::MemoryReadStream *stream = new Common::MemoryReadStream(soundItem->_data, soundItem->_resourceHandle.size(), DisposeAfterUse::NO);
- NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, false, DisposeAfterUse::YES, stream);
+void AudioResourceManMusicItem::unloadMusic() {
+ if (_isFadingOut) {
+ _canRestart = true;
+ } else {
+ if (_vm->_mixer->isSoundHandleActive(_soundHandle))
+ _vm->_mixer->stopHandle(_soundHandle);
+ _isPlaying = false;
+ _terminate = true;
+ }
+}
- _vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &soundItem->_soundHandle,
- audioStream, -1, VOLUME(soundItem->_volume), PANNING(soundItem->_panning));
-
- debug(1, "playing sound %08X", soundItem->_fileHash);
-
- soundItem->_isPlaying = true;
+void AudioResourceManMusicItem::setVolume(int16 volume) {
+ _volume = MIN<int16>(volume, 100);
+ if (_isPlaying && _vm->_mixer->isSoundHandleActive(_soundHandle))
+ _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_volume));
+}
+
+void AudioResourceManMusicItem::restart() {
+ _canRestart = false;
+ _isFadingOut = false;
+ _isFadingIn = true;
+}
+
+void AudioResourceManMusicItem::update() {
+
+ if (_start && !_vm->_mixer->isSoundHandleActive(_soundHandle)) {
+ ResourceHandle resourceHandle;
+ _vm->_res->queryResource(_fileHash, resourceHandle);
+ Common::SeekableReadStream *stream = _vm->_res->createStream(_fileHash);
+ const byte *shiftValue = resourceHandle.extData();
+ NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, true, DisposeAfterUse::YES, stream);
+ _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle,
+ audioStream, -1, VOLUME(_isFadingIn ? _fadeVolume : _volume),
+ PANNING(_panning));
+ _start = false;
+ _isPlaying = true;
+ }
+ if (_vm->_mixer->isSoundHandleActive(_soundHandle)) {
+ if (_isFadingIn) {
+ _fadeVolume += _fadeVolumeStep;
+ if (_fadeVolume >= _volume) {
+ _fadeVolume = _volume;
+ _isFadingIn = false;
+ }
+ _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_fadeVolume));
+ }
+ if (_isFadingOut) {
+ _fadeVolume -= _fadeVolumeStep;
+ if (_fadeVolume < 0)
+ _fadeVolume = 0;
+ _vm->_mixer->setChannelVolume(_soundHandle, VOLUME(_fadeVolume));
+ if (_fadeVolume == 0) {
+ _isFadingOut = false;
+ stopMusic(0);
+ if (_canRestart)
+ unloadMusic();
+ }
+ }
+ }
+
}
-void AudioResourceMan::stopSound(int16 soundIndex) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- if (_vm->_mixer->isSoundHandleActive(soundItem->_soundHandle))
- _vm->_mixer->stopHandle(soundItem->_soundHandle);
- soundItem->_isPlaying = false;
+AudioResourceMan::AudioResourceMan(NeverhoodEngine *vm)
+ : _vm(vm) {
}
-bool AudioResourceMan::isSoundPlaying(int16 soundIndex) {
- AudioResourceManSoundItem *soundItem = _soundItems[soundIndex];
- return _vm->_mixer->isSoundHandleActive(soundItem->_soundHandle);
+AudioResourceMan::~AudioResourceMan() {
}
-int16 AudioResourceMan::loadMusic(uint32 fileHash) {
+int16 AudioResourceMan::addSound(uint32 fileHash) {
+ AudioResourceManSoundItem *soundItem = new AudioResourceManSoundItem(_vm, fileHash);
+
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ if (!_soundItems[i]) {
+ _soundItems[i] = soundItem;
+ return i;
+ }
+ int16 soundIndex = (int16)_soundItems.size();
+ _soundItems.push_back(soundItem);
+ return soundIndex;
+}
+
+void AudioResourceMan::removeSound(int16 soundIndex) {
+ AudioResourceManSoundItem *soundItem = getSoundItem(soundIndex);
+ if (soundItem) {
+ soundItem->unloadSound();
+ delete soundItem;
+ _soundItems[soundIndex] = NULL;
+ }
+}
+
+int16 AudioResourceMan::loadMusic(uint32 fileHash) {
AudioResourceManMusicItem *musicItem;
for (uint i = 0; i < _musicItems.size(); ++i) {
musicItem = _musicItems[i];
- if (musicItem && musicItem->_fileHash == fileHash && musicItem->_remove) {
- musicItem->_remove = false;
- musicItem->_isFadingOut = false;
- musicItem->_isFadingIn = true;
+ if (musicItem && musicItem->getFileHash() == fileHash && musicItem->canRestart()) {
+ musicItem->restart();
return i;
}
}
-
- musicItem = new AudioResourceManMusicItem();
- musicItem->_fileHash = fileHash;
- musicItem->_isPlaying = false;
- musicItem->_remove = false;
- musicItem->_volume = 100;
- musicItem->_panning = 50;
- musicItem->_start = false;
- musicItem->_isFadingIn = false;
- musicItem->_isFadingOut = false;
+
+ musicItem = new AudioResourceManMusicItem(_vm, fileHash);
for (uint i = 0; i < _musicItems.size(); ++i) {
if (!_musicItems[i]) {
@@ -646,106 +760,25 @@ int16 AudioResourceMan::loadMusic(uint32 fileHash) {
}
-void AudioResourceMan::unloadMusic(int16 musicIndex) {
- AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
- if (musicItem->_isFadingOut) {
- musicItem->_remove = true;
- } else {
- if (_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle))
- _vm->_mixer->stopHandle(musicItem->_soundHandle);
- musicItem->_isPlaying = false;
- _musicItems[musicIndex] = NULL;
- }
-}
-
-void AudioResourceMan::setMusicVolume(int16 musicIndex, int16 volume) {
- AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
- musicItem->_volume = MIN<int16>(volume, 100);
- if (musicItem->_isPlaying && _vm->_mixer->isSoundHandleActive(musicItem->_soundHandle))
- _vm->_mixer->setChannelVolume(musicItem->_soundHandle, VOLUME(musicItem->_volume));
-}
-
-void AudioResourceMan::playMusic(int16 musicIndex, int16 fadeVolumeStep) {
- AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
- if (!musicItem->_isPlaying) {
- musicItem->_isFadingIn = false;
- musicItem->_isFadingOut = false;
- if (fadeVolumeStep != 0) {
- musicItem->_isFadingIn = true;
- musicItem->_fadeVolume = 0;
- musicItem->_fadeVolumeStep = fadeVolumeStep;
- }
- musicItem->_start = true;
- }
-}
-
-void AudioResourceMan::stopMusic(int16 musicIndex, int16 fadeVolumeStep) {
- AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
- if (_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
- if (fadeVolumeStep != 0) {
- if (musicItem->_isFadingIn)
- musicItem->_isFadingIn = false;
- else
- musicItem->_fadeVolume = musicItem->_volume;
- musicItem->_isFadingOut = true;
- musicItem->_fadeVolumeStep = fadeVolumeStep;
- } else {
- _vm->_mixer->stopHandle(musicItem->_soundHandle);
- }
- musicItem->_isPlaying = false;
- }
-}
-
-bool AudioResourceMan::isMusicPlaying(int16 musicIndex) {
- AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
- return musicItem->_isPlaying;
-}
-
-void AudioResourceMan::updateMusicItem(int16 musicIndex) {
- AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
-
- if (musicItem->_start && !_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
- ResourceHandle resourceHandle;
- _vm->_res->queryResource(musicItem->_fileHash, resourceHandle);
- Common::SeekableReadStream *stream = _vm->_res->createStream(musicItem->_fileHash);
- const byte *shiftValue = resourceHandle.extData();
- NeverhoodAudioStream *audioStream = new NeverhoodAudioStream(22050, *shiftValue, true, DisposeAfterUse::YES, stream);
- _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &musicItem->_soundHandle,
- audioStream, -1, VOLUME(musicItem->_isFadingIn ? musicItem->_fadeVolume : musicItem->_volume),
- PANNING(musicItem->_panning));
- musicItem->_start = false;
- musicItem->_isPlaying = true;
- }
-
- if (_vm->_mixer->isSoundHandleActive(musicItem->_soundHandle)) {
- if (musicItem->_isFadingIn) {
- musicItem->_fadeVolume += musicItem->_fadeVolumeStep;
- if (musicItem->_fadeVolume >= musicItem->_volume) {
- musicItem->_fadeVolume = musicItem->_volume;
- musicItem->_isFadingIn = false;
- }
- _vm->_mixer->setChannelVolume(musicItem->_soundHandle, VOLUME(musicItem->_fadeVolume));
- }
- if (musicItem->_isFadingOut) {
- musicItem->_fadeVolume -= musicItem->_fadeVolumeStep;
- if (musicItem->_fadeVolume < 0)
- musicItem->_fadeVolume = 0;
- _vm->_mixer->setChannelVolume(musicItem->_soundHandle, VOLUME(musicItem->_fadeVolume));
- if (musicItem->_fadeVolume == 0) {
- musicItem->_isFadingOut = false;
- stopMusic(musicIndex, 0);
- if (musicItem->_remove)
- unloadMusic(musicIndex);
+void AudioResourceMan::updateMusic() {
+ for (uint musicIndex = 0; musicIndex < _musicItems.size(); ++musicIndex) {
+ AudioResourceManMusicItem *musicItem = _musicItems[musicIndex];
+ if (musicItem) {
+ musicItem->update();
+ if (musicItem->isTerminated()) {
+ delete musicItem;
+ _musicItems[musicIndex] = NULL;
}
}
}
+}
+AudioResourceManSoundItem *AudioResourceMan::getSoundItem(int16 index) {
+ return (index >= 0 && index < (int16)_soundItems.size()) ? _soundItems[index] : NULL;
}
-void AudioResourceMan::update() {
- for (uint i = 0; i < _musicItems.size(); ++i)
- if (_musicItems[i])
- updateMusicItem(i);
+AudioResourceManMusicItem *AudioResourceMan::getMusicItem(int16 index) {
+ return (index >= 0 && index < (int16)_musicItems.size()) ? _musicItems[index] : NULL;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index 8bfd5af..e0e45e9 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -37,6 +37,10 @@ namespace Neverhood {
// Convert panning from percent (50% equals center) to -127..0..+127
#define PANNING(panning) (254 / 100 * (panning) - 127)
+class AudioResourceManSoundItem;
+class AudioResourceManMusicItem;
+class AudioResourceMan;
+
class SoundResource {
public:
SoundResource(NeverhoodEngine *vm);
@@ -51,7 +55,8 @@ public:
void setPan(int16 pan);
protected:
NeverhoodEngine *_vm;
- int16 _soundIndex;
+ int16 _soundIndex;
+ AudioResourceManSoundItem *getSoundItem();
};
class MusicResource {
@@ -66,23 +71,49 @@ public:
protected:
NeverhoodEngine *_vm;
int16 _musicIndex;
+ AudioResourceManMusicItem *getMusicItem();
};
-struct MusicItem {
- uint32 _nameHash;
- uint32 _musicFileHash;
+class MusicItem {
+public:
+ MusicItem(NeverhoodEngine *vm, uint32 groupNameHash, uint32 musicFileHash);
+ ~MusicItem();
+ void startMusic(int16 countdown, int16 fadeVolumeStep);
+ void stopMusic(int16 countdown, int16 fadeVolumeStep);
+ void update();
+ uint32 getGroupNameHash() const { return _groupNameHash; }
+ uint32 getFileHash() const { return _fileHash; }
+protected:
+ NeverhoodEngine *_vm;
+ uint32 _groupNameHash;
+ uint32 _fileHash;
bool _play;
bool _stop;
int16 _fadeVolumeStep;
int16 _countdown;
MusicResource *_musicResource;
- MusicItem();
- ~MusicItem();
};
-struct SoundItem {
- uint32 _nameHash;
- uint32 _soundFileHash;
+class SoundItem {
+public:
+ SoundItem(NeverhoodEngine *vm, uint32 groupNameHash, uint32 soundFileHash,
+ bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
+ bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown);
+ ~SoundItem();
+ void setSoundParams(bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
+ int16 firstMinCountdown, int16 firstMaxCountdown);
+ void playSoundLooping();
+ void stopSound();
+ void setVolume(int volume);
+ void update();
+ void setPlayOnceAfterCountdown(bool playOnceAfterCountdown) { _playOnceAfterCountdown = playOnceAfterCountdown; }
+ uint32 getGroupNameHash() const { return _groupNameHash; }
+ uint32 getFileHash() const { return _fileHash; }
+ int16 getCurrCountdown() const { return _currCountdown; }
+protected:
+ NeverhoodEngine *_vm;
+ uint32 _groupNameHash;
+ uint32 _fileHash;
bool _playOnceAfterRandomCountdown;
int16 _minCountdown;
int16 _maxCountdown;
@@ -91,29 +122,30 @@ struct SoundItem {
bool _playLooping;
int16 _currCountdown;
SoundResource *_soundResource;
-
- SoundItem(NeverhoodEngine *vm, uint32 nameHash, uint32 soundFileHash,
- bool playOnceAfterRandomCountdown, int16 minCountdown, int16 maxCountdown,
- bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown);
- ~SoundItem();
};
// TODO Give this a better name
+/*
+template<class T>
+class SoundManItems : public Common::Array<T> {
+};
+*/
+
class SoundMan {
public:
SoundMan(NeverhoodEngine *vm);
~SoundMan();
// Music
- void addMusic(uint32 nameHash, uint32 musicFileHash);
+ void addMusic(uint32 groupNameHash, uint32 musicFileHash);
void deleteMusic(uint32 musicFileHash);
void startMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep);
void stopMusic(uint32 musicFileHash, int16 countdown, int16 fadeVolumeStep);
// Sound
- void addSound(uint32 nameHash, uint32 soundFileHash);
- void addSoundList(uint32 nameHash, const uint32 *soundFileHashList);
+ void addSound(uint32 groupNameHash, uint32 soundFileHash);
+ void addSoundList(uint32 groupNameHash, const uint32 *soundFileHashList);
void deleteSound(uint32 soundFileHash);
void setSoundParams(uint32 soundFileHash, bool playOnceAfterRandomCountdown,
int16 minCountdown, int16 maxCountdown, int16 firstMinCountdown, int16 firstMaxCountdown);
@@ -125,11 +157,11 @@ public:
// Misc
void update();
- void deleteGroup(uint32 nameHash);
- void deleteMusicGroup(uint32 nameHash);
- void deleteSoundGroup(uint32 nameHash);
- void playTwoSounds(uint32 nameHash, uint32 soundFileHash1, uint32 soundFileHash2, int16 initialCountdown);
- void playSoundThree(uint32 nameHash, uint32 soundFileHash);
+ void deleteGroup(uint32 groupNameHash);
+ void deleteMusicGroup(uint32 groupNameHash);
+ void deleteSoundGroup(uint32 groupNameHash);
+ void playTwoSounds(uint32 groupNameHash, uint32 soundFileHash1, uint32 soundFileHash2, int16 initialCountdown);
+ void playSoundThree(uint32 groupNameHash, uint32 soundFileHash);
void setTwoSoundsPlayFlag(bool playOnceAfterCountdown);
void setSoundThreePlayFlag(bool playOnceAfterCountdown);
@@ -182,7 +214,18 @@ private:
// TODO Rename these
-struct AudioResourceManSoundItem {
+class AudioResourceManSoundItem {
+public:
+ AudioResourceManSoundItem(NeverhoodEngine *vm, uint32 fileHash);
+ void loadSound();
+ void unloadSound();
+ void setVolume(int16 volume);
+ void setPan(int16 pan);
+ void playSound(bool looping);
+ void stopSound();
+ bool isPlaying();
+protected:
+ NeverhoodEngine *_vm;
uint32 _fileHash;
ResourceHandle _resourceHandle;
const byte *_data;
@@ -193,10 +236,25 @@ struct AudioResourceManSoundItem {
Audio::SoundHandle _soundHandle;
};
-struct AudioResourceManMusicItem {
+class AudioResourceManMusicItem {
+public:
+ AudioResourceManMusicItem(NeverhoodEngine *vm, uint32 fileHash);
+ void playMusic(int16 fadeVolumeStep);
+ void stopMusic(int16 fadeVolumeStep);
+ void unloadMusic();
+ void setVolume(int16 volume);
+ void restart();
+ void update();
+ bool isPlaying() const { return _isPlaying; }
+ bool canRestart() const { return _canRestart; }
+ bool isTerminated() const { return _terminate; }
+ uint32 getFileHash() const { return _fileHash; }
+protected:
+ NeverhoodEngine *_vm;
uint32 _fileHash;
bool _isPlaying;
- bool _remove;
+ bool _canRestart;
+ bool _terminate;
int16 _volume;
int16 _panning;
bool _start;
@@ -214,23 +272,12 @@ public:
int16 addSound(uint32 fileHash);
void removeSound(int16 soundIndex);
- void loadSound(int16 soundIndex);
- void unloadSound(int16 soundIndex);
- void setSoundVolume(int16 soundIndex, int16 volume);
- void setSoundPan(int16 soundIndex, int16 pan);
- void playSound(int16 soundIndex, bool looping);
- void stopSound(int16 soundIndex);
- bool isSoundPlaying(int16 soundIndex);
-
+
int16 loadMusic(uint32 fileHash);
- void unloadMusic(int16 musicIndex);
- void setMusicVolume(int16 musicIndex, int16 volume);
- void playMusic(int16 musicIndex, int16 fadeVolumeStep);
- void stopMusic(int16 musicIndex, int16 fadeVolumeStep);
- bool isMusicPlaying(int16 musicIndex);
- void updateMusicItem(int16 musicIndex);
+ void updateMusic();
- void update();
+ AudioResourceManSoundItem *getSoundItem(int16 index);
+ AudioResourceManMusicItem *getMusicItem(int16 index);
protected:
NeverhoodEngine *_vm;
Commit: ac1dc3e4db23572b9a7d6855bfbdc20f9044a612
https://github.com/scummvm/scummvm/commit/ac1dc3e4db23572b9a7d6855bfbdc20f9044a612
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:41-07:00
Commit Message:
NEVERHOOD: Fix Module1300::createScene
Changed paths:
engines/neverhood/module1300.cpp
engines/neverhood/scene.cpp
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index a0a1167..690ca7c 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -111,7 +111,7 @@ Module1300::~Module1300() {
void Module1300::createScene(int sceneNum, int which) {
debug("Module1300::createScene(%d, %d)", sceneNum, which);
_sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 1:
_vm->gameState().sceneNum = 1;
_vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 866b75d..63242a4 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -258,15 +258,15 @@ void Scene::leaveScene(uint32 result) {
uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
switch (messageNum) {
- case 0: // mouse moved
+ case 0x0000: // mouse moved
if (_mouseCursor && _mouseCursor->hasMessageHandler())
sendMessage(_mouseCursor, 0x4002, param);
break;
- case 1: // mouse clicked
+ case 0x0001: // mouse clicked
_mouseClicked = true;
_mouseClickPos = param.asPoint();
break;
- case 6:
+ case 0x0006:
sendMessage(_parentModule, 0x1009, param);
break;
case 0x1006:
Commit: 4389d32974cd0965624d30b6566fcc8e1c2a72b4
https://github.com/scummvm/scummvm/commit/4389d32974cd0965624d30b6566fcc8e1c2a72b4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:41-07:00
Commit Message:
NEVERHOOD: Rename "Klayman" to "Klaymen" (the correct name of the game's hero)
Changed paths:
A engines/neverhood/klaymen.cpp
A engines/neverhood/klaymen.h
R engines/neverhood/klayman.cpp
R engines/neverhood/klayman.h
engines/neverhood/gamemodule.cpp
engines/neverhood/gamevars.h
engines/neverhood/messages.h
engines/neverhood/module.mk
engines/neverhood/module1000.cpp
engines/neverhood/module1000.h
engines/neverhood/module1100.cpp
engines/neverhood/module1200.cpp
engines/neverhood/module1200.h
engines/neverhood/module1300.cpp
engines/neverhood/module1300.h
engines/neverhood/module1400.cpp
engines/neverhood/module1400.h
engines/neverhood/module1600.cpp
engines/neverhood/module1600.h
engines/neverhood/module1700.cpp
engines/neverhood/module1800.cpp
engines/neverhood/module1900.cpp
engines/neverhood/module2000.cpp
engines/neverhood/module2100.cpp
engines/neverhood/module2100.h
engines/neverhood/module2200.cpp
engines/neverhood/module2200.h
engines/neverhood/module2400.cpp
engines/neverhood/module2400.h
engines/neverhood/module2500.cpp
engines/neverhood/module2500.h
engines/neverhood/module2700.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module2800.h
engines/neverhood/resource.cpp
engines/neverhood/resource.h
engines/neverhood/scene.cpp
engines/neverhood/scene.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index f22a0d1..cf56522 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -395,7 +395,7 @@ void GameModule::startup() {
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 2, 2);
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 3, 0);
setSubVar(VA_CURR_WATER_PIPES_LEVEL, 4, 4);
- setGlobalVar(V_KLAYMAN_SMALL, 1);
+ setGlobalVar(V_KLAYMEN_SMALL, 1);
setGlobalVar(V_SHRINK_LIGHTS_ON, 0);
// <<<DEBUG
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index d3fe15f..3672aa6 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -48,11 +48,11 @@ enum {
V_COLUMN_TEXT_NAME = 0xC8C28808,
V_CLICKED_COLUMN_INDEX = 0x48A68852,
V_CLICKED_COLUMN_ROW = 0x49C40058,
- // Klayman
- V_KLAYMAN_SMALL = 0x1860C990, // Is Klayman small?
- V_KLAYMAN_FRAMEINDEX = 0x18288913,
- V_KLAYMAN_IS_DELTA_X = 0xC0418A02,
- V_KLAYMAN_SAVED_X = 0x00D30138,
+ // Klaymen
+ V_KLAYMEN_SMALL = 0x1860C990, // Is Klaymen small?
+ V_KLAYMEN_FRAMEINDEX = 0x18288913,
+ V_KLAYMEN_IS_DELTA_X = 0xC0418A02,
+ V_KLAYMEN_SAVED_X = 0x00D30138,
V_CAR_DELTA_X = 0x21E60190,
// Flags
V_CRYSTAL_COLORS_INIT = 0xDE2EC914,
@@ -129,8 +129,8 @@ enum {
V_TELEPORTER_WHICH = 0x60826830,
V_TELEPORTER_DEST_AVAILABLE = 0x2C145A98,
// Inventory
- V_HAS_NEEDLE = 0x31C63C51, // Has Klayman the needle?
- V_HAS_FINAL_KEY = 0xC0780812, // Has Klayman the key from the diskplayer?
+ V_HAS_NEEDLE = 0x31C63C51, // Has Klaymen the needle?
+ V_HAS_FINAL_KEY = 0xC0780812, // Has Klaymen the key from the diskplayer?
V_HAS_TEST_TUBE = 0x45080C38,
// Arrays
// NOTE "GOOD" means the solution, "CURR" is the current setup of the puzzle variables
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
deleted file mode 100644
index 0dfd29b..0000000
--- a/engines/neverhood/klayman.cpp
+++ /dev/null
@@ -1,6240 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/klayman.h"
-#include "neverhood/resourceman.h"
-#include "neverhood/scene.h"
-#include "neverhood/staticdata.h"
-
-namespace Neverhood {
-
-static const KlaymanIdleTableItem klaymanTable1[] = {
- {1, &Klayman::stDoIdlePickEar},
- {1, &Klayman::stDoIdleSpinHead},
- {1, &Klayman::stDoIdleArms},
- {1, &Klayman::stDoIdleChest},
- {1, &Klayman::stDoIdleHeadOff}
-};
-
-static const KlaymanIdleTableItem klaymanTable2[] = {
- {1, &Klayman::stDoIdlePickEar},
- {1, &Klayman::stDoIdleSpinHead},
- {1, &Klayman::stDoIdleChest},
- {1, &Klayman::stDoIdleHeadOff}
-};
-
-static const KlaymanIdleTableItem klaymanTable3[] = {
- {1, &Klayman::stDoIdleTeleporterHands},
- {1, &Klayman::stDoIdleTeleporterHands2}
-};
-
-static const KlaymanIdleTableItem klaymanTable4[] = {
- {1, &Klayman::stDoIdleSpinHead},
- {1, &Klayman::stDoIdleChest},
- {1, &Klayman::stDoIdleHeadOff},
-};
-
-static const KlaymanIdleTableItem klaymanIdleTable1002[] = {
- {1, &Klayman::stDoIdlePickEar},
- {2, &Klayman::stIdleWonderAbout}
-};
-
-// Klayman
-
-Klayman::Klayman(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
- : AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
- _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
- _attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
- _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
- _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
-
- createSurface(surfacePriority, 320, 200);
- _x = x;
- _y = y;
- _destX = x;
- _destY = y;
- _flags = 2;
- setKlaymanIdleTable1();
- stTryStandIdle();
- SetUpdateHandler(&Klayman::update);
-}
-
-void Klayman::xUpdate() {
- // Empty
-}
-
-uint32 Klayman::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- }
- return 0;
-}
-
-void Klayman::update() {
- AnimatedSprite::update();
- xUpdate();
-}
-
-void Klayman::setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount) {
- _idleTable = table;
- _idleTableCount = tableCount;
- _idleTableMaxValue = 0;
- for (int i = 0; i < tableCount; i++)
- _idleTableMaxValue += table[i].value;
-}
-
-void Klayman::setKlaymanIdleTable1() {
- setKlaymanIdleTable(klaymanTable1, ARRAYSIZE(klaymanTable1));
-}
-
-void Klayman::setKlaymanIdleTable2() {
- setKlaymanIdleTable(klaymanTable2, ARRAYSIZE(klaymanTable2));
-}
-
-void Klayman::setKlaymanIdleTable3() {
- setKlaymanIdleTable(klaymanTable3, ARRAYSIZE(klaymanTable3));
-}
-
-void Klayman::stDoIdlePickEar() {
- startIdleAnimation(0x5B20C814, AnimationCallback(&Klayman::stIdlePickEar));
-}
-
-void Klayman::stIdlePickEar() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5B20C814, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmIdlePickEar);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
- FinalizeState(&Klayman::evIdlePickEarDone);
-}
-
-uint32 Klayman::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x04DBC02C) {
- playSound(0, 0x44528AA1);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::evIdlePickEarDone() {
- stopSound(0);
-}
-
-void Klayman::stDoIdleSpinHead() {
- startIdleAnimation(0xD122C137, AnimationCallback(&Klayman::stIdleSpinHead));
-}
-
-void Klayman::stIdleSpinHead() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0xD122C137, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmIdleSpinHead);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
-}
-
-uint32 Klayman::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x808A0008) {
- playSound(0, 0xD948A340);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stDoIdleArms() {
- startIdleAnimation(0x543CD054, AnimationCallback(&Klayman::stIdleArms));
-}
-
-void Klayman::stIdleArms() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x543CD054, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmIdleArms);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
- FinalizeState(&Klayman::evIdleArmsDone);
-}
-
-void Klayman::evIdleArmsDone() {
- stopSound(0);
-}
-
-uint32 Klayman::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x5A0F0104) {
- playSound(0, 0x7970A100);
- } else if (param.asInteger() == 0x9A9A0109) {
- playSound(0, 0xD170CF04);
- } else if (param.asInteger() == 0x989A2169) {
- playSound(0, 0xD073CF14);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stDoIdleChest() {
- startIdleAnimation(0x40A0C034, AnimationCallback(&Klayman::stIdleChest));
-}
-
-void Klayman::stIdleChest() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x40A0C034, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmIdleChest);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
-}
-
-uint32 Klayman::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x0D2A0288) {
- playSound(0, 0xD192A368);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stDoIdleHeadOff() {
- startIdleAnimation(0x5120E137, AnimationCallback(&Klayman::stIdleHeadOff));
-}
-
-void Klayman::stIdleHeadOff() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5120E137, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmIdleHeadOff);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
-}
-
-uint32 Klayman::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0xC006000C) {
- playSound(0, 0x9D406340);
- } else if (param.asInteger() == 0x2E4A2940) {
- playSound(0, 0x53A4A1D4);
- } else if (param.asInteger() == 0xAA0A0860) {
- playSound(0, 0x5BE0A3C6);
- } else if (param.asInteger() == 0xC0180260) {
- playSound(0, 0x5D418366);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stIdleWonderAbout() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0xD820A114, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
-}
-
-void Klayman::stSitIdleTeleporter() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x582EC138, 0, -1);
- SetUpdateHandler(&Klayman::upSitIdleTeleporter);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
- _idleCounter = 0;
- _blinkCounter = 0;
- _idleCounterMax = 8;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
-}
-
-void Klayman::upSitIdleTeleporter() {
- update();
- _idleCounter++;
- if (_idleCounter >= _idleCounterMax) {
- _idleCounter = 0;
- if (_idleTable) {
- int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
- for (int i = 0; i < _idleTableCount; i++) {
- if (randomValue < _idleTable[i].value) {
- (this->*(_idleTable[i].callback))();
- _idleCounterMax = _vm->_rnd->getRandomNumber(128 - 1) + 24;
- break;
- }
- randomValue -= _idleTable[i].value;
- }
- }
- } else if (++_blinkCounter >= _blinkCounterMax) {
- _blinkCounter = 0;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
- stSitIdleTeleporterBlink();
- }
-}
-
-void Klayman::stSitIdleTeleporterBlink() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x5C24C018, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stSitIdleTeleporterBlinkSecond);
-}
-
-void Klayman::stSitIdleTeleporterBlinkSecond() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x5C24C018, 0, -1);
- SetUpdateHandler(&Klayman::upSitIdleTeleporter);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stPickUpNeedle() {
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- if (!stStartAction(AnimationCallback(&Klayman::stPickUpNeedle))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x1449C169, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPickUpObject);
- SetSpriteUpdate(NULL);
- }
-}
-
-void Klayman::stPickUpTube() {
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- if (!stStartAction(AnimationCallback(&Klayman::stPickUpTube))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x0018C032, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPickUpTube);
- SetSpriteUpdate(NULL);
- }
-}
-
-uint32 Klayman::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0xC1380080) {
- sendMessage(_attachedSprite, 0x4806, 0);
- playSound(0, 0xC8004340);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x03020231) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0x67221A03) {
- playSound(0, 0x44051000);
- } else if (param.asInteger() == 0x925A0C1E) {
- playSound(0, 0x40E5884D);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stTurnToUseInTeleporter() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xD229823D, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stReturnFromUseInTeleporter() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x9A2801E0, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stStepOver() {
- if (!stStartAction(AnimationCallback(&Klayman::stStepOver))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x004AA310, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stSitInTeleporter() {
- if (!stStartAction(AnimationCallback(&Klayman::stSitInTeleporter))) {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x392A0330, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSitInTeleporter);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-uint32 Klayman::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x001A2832) {
- playSound(0, 0xC0E4884C);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stGetUpFromTeleporter() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x913AB120, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-/////////////////////////////////////////////////////////////////
-
-void Klayman::stopWalking() {
- _destX = _x;
- if (!_isWalking && !_isSneaking && !_isLargeStep) {
- gotoState(NULL);
- gotoNextStateExt();
- }
-}
-
-void Klayman::startIdleAnimation(uint32 fileHash, AnimationCb callback) {
- debug("startIdleAnimation(%08X)", fileHash);
- NextState(callback);
- SetUpdateHandler(&Klayman::upIdleAnimation);
-}
-
-void Klayman::upIdleAnimation() {
- gotoNextStateExt();
- update();
-}
-
-bool Klayman::stStartActionFromIdle(AnimationCb callback) {
- if (_status2 == 2) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x9A7020B8, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStartAction);
- SetSpriteUpdate(NULL);
- NextState(callback);
- return true;
- }
- return false;
-}
-
-void Klayman::gotoNextStateExt() {
- if (_finalizeStateCb) {
- AnimationCb cb = _finalizeStateCb;
- _finalizeStateCb = NULL;
- (this->*cb)();
- }
- if (_nextStateCb) {
- AnimationCb cb = _nextStateCb;
- _nextStateCb = NULL;
- (this->*cb)();
- } else {
- // Inform the scene that the current Klayman animation sequence has finished
- sendMessage(_parentScene, 0x1006, 0);
- }
-}
-
-void Klayman::sub41C770() {
- _flagFA = false;
- _status3 = 1;
-}
-
-void Klayman::sub41C790() {
- if (_flagFA)
- _status3 = 0;
-}
-
-void Klayman::stTryStandIdle() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTryStandIdle))) {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::upStandIdle);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
- _idleCounter = 0;
- _blinkCounter = 0;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
- }
-}
-
-void Klayman::upStandIdle() {
- update();
- if (++_idleCounter >= 720) {
- _idleCounter = 0;
- if (_idleTable) {
- int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue - 1);
- for (int i = 0; i < _idleTableCount; i++) {
- if (randomValue < _idleTable[i].value) {
- (this->*(_idleTable[i].callback))();
- break;
- }
- randomValue -= _idleTable[i].value;
- }
- }
- } else if (++_blinkCounter >= _blinkCounterMax) {
- _blinkCounter = 0;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
- stIdleBlink();
- }
-}
-
-uint32 Klayman::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender) {
- Sprite::handleMessage(messageNum, param, sender);
- uint32 messageResult = xHandleMessage(messageNum, param);
- switch (messageNum) {
- case 0x1008:
- messageResult = _acceptInput;
- break;
- case 0x1014:
- _attachedSprite = (Sprite*)(param.asEntity());
- break;
- case 0x1019:
- gotoNextStateExt();
- break;
- case 0x101C:
- sub41C770();
- break;
- case 0x1021:
- sub41C790();
- break;
- case 0x481C:
- _status3 = param.asInteger();
- _flagFA = true;
- messageResult = 1;
- break;
- case 0x482C:
- if (param.asInteger() != 0) {
- _pathPoints = _dataResource.getPointArray(param.asInteger());
- } else {
- _pathPoints = NULL;
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stIdleBlink() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5900C41E, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stStandAround);
-}
-
-uint32 Klayman::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextStateExt();
- break;
- }
- return messageResult;
-}
-
-void Klayman::stStandAround() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::upStandIdle);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x271AA210) {
- playSound(0, 0x4924AAC4);
- } else if (param.asInteger() == 0x2B22AA81) {
- playSound(0, 0x0A2AA8E0);
- }
- break;
- }
- return messageResult;
-}
-
-
-void Klayman::startWalkToX(int16 x, bool flag) {
- int16 xdiff = ABS(x - _x);
- if (x == _x) {
- _destX = x;
- if (!_isWalking && !_isSneaking && !_isLargeStep) {
- gotoState(NULL);
- gotoNextStateExt();
- }
- } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) {
- _destX = x;
- gotoState(NULL);
- gotoNextStateExt();
- } else if (xdiff <= 42 && _status3 != 3) {
- if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
- _destX = x;
- } else {
- _destX = x;
- GotoState(&Klayman::stSneak);
- }
- } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
- _destX = x;
- } else if (flag) {
- _destX = x;
- GotoState(&Klayman::stStartWalkingExt);
- } else {
- _destX = x;
- GotoState(&Klayman::stStartWalking);
- }
-}
-
-void Klayman::stWakeUp() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x527AC970, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stSleeping() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x5A38C110, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSleeping);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x03060012) {
- playSound(0, 0xC0238244);
- }
- break;
- }
- return messageResult;
-}
-
-bool Klayman::stStartAction(AnimationCb callback3) {
- if (_status2 == 1) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x5C7080D4, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStartAction);
- SetSpriteUpdate(&Klayman::suAction);
- NextState(callback3);
- return true;
- } else {
- _x = _destX;
- return false;
- }
-}
-
-void Klayman::suAction() {
-
- int16 xdiff = _destX - _x;
-
- if (_doDeltaX) {
- _x -= _deltaX;
- } else {
- _x += _deltaX;
- }
- _deltaX = 0;
-
- if (_doDeltaY) {
- _y -= _deltaY;
- } else {
- _y += _deltaY;
- }
- _deltaY = 0;
-
- if (_frameChanged) {
- if (xdiff > 6)
- _x += 6;
- else if (xdiff < -6)
- _x -= 6;
- else
- _x = _destX;
- }
-
- updateBounds();
-
-}
-
-void Klayman::suSneaking() {
-
- int16 xdiff = _destX - _x;
-
- if (_currFrameIndex == 9) {
- if (xdiff > 26)
- _deltaX += xdiff - 26;
- else if (xdiff < -26)
- _deltaX -= xdiff + 26;
- }
-
- if (xdiff > _deltaX)
- xdiff = _deltaX;
- else if (xdiff < -_deltaX)
- xdiff = -_deltaX;
- _deltaX = 0;
-
- if (_destX != _x) {
- HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
- _x += xdiff;
- if (_pathPoints) {
- walkAlongPathPoints();
- } else {
- HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
- if (hitRectNext->type == 0x5002) {
- _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
- } else if (hitRectNext->type == 0x5003) {
- _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
- } else if (hitRectPrev->type == 0x5002) {
- if (xdiff > 0) {
- _y = hitRectPrev->rect.y2;
- } else {
- _y = hitRectPrev->rect.y1;
- }
- } else if (hitRectPrev->type == 0x5003) {
- if (xdiff < 0) {
- _y = hitRectPrev->rect.y2;
- } else {
- _y = hitRectPrev->rect.y1;
- }
- }
- }
- updateBounds();
- }
-
-}
-
-void Klayman::stSneak() {
- _status2 = 1;
- _isSneaking = true;
- _acceptInput = true;
- setDoDeltaX(_destX < _x ? 1 : 0);
- startAnimation(0x5C48C506, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSneaking);
- SetSpriteUpdate(&Klayman::suSneaking);
- FinalizeState(&Klayman::evSneakingDone);
-}
-
-void Klayman::evSneakingDone() {
- _isSneaking = false;
-}
-
-uint32 Klayman::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101) {
- playSound(0, 0x4924AAC4);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0A2AA8E0);
- } else if (param.asInteger() == 0x32188010) {
- playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
- } else if (param.asInteger() == 0x02A2909C) {
- playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
- }
- break;
- case 0x3002:
- _x = _destX;
- gotoNextStateExt();
- break;
- }
- return messageResult;
-}
-
-void Klayman::stStartWalking() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalking))) {
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- setDoDeltaX(_destX < _x ? 1 : 0);
- startAnimation(0x242C0198, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteUpdate(&Klayman::suWalkingTestExit);
- NextState(&Klayman::stWalkingFirst);
- FinalizeState(&Klayman::evStartWalkingDone);
- }
-}
-
-void Klayman::evStartWalkingDone() {
- _isWalking = false;
-}
-
-uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101) {
- playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stWalkingFirst() {
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::suWalkingFirst);
- NextState(&Klayman::stUpdateWalkingFirst);
- FinalizeState(&Klayman::evStartWalkingDone);
-}
-
-void Klayman::suWalkingFirst() {
- SetSpriteUpdate(&Klayman::suWalkingTestExit);
- _deltaX = 0;
-}
-
-uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101) {
- playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stUpdateWalkingFirst() {
- if (_status3 == 2) {
- gotoNextStateExt();
- } else if (_status3 == 3) {
- stWalkingOpenDoor();
- } else {
- _isSneaking = true;
- _acceptInput = true;
- if (ABS(_destX - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
- if (_status3 == 0) {
- _status2 = 1;
- startAnimation(0xF234EE31, 0, -1);
- } else {
- _status2 = 2;
- startAnimation(0xF135CC21, 0, -1);
- }
- } else if (ABS(_destX - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
- if (_status3 == 0) {
- _status2 = 1;
- startAnimation(0x8604A152, 0, -1);
- } else {
- _status2 = 2;
- startAnimation(0xA246A132, 0, -1);
- }
- }
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSneaking);
- SetSpriteUpdate(&Klayman::suSneaking);
- FinalizeState(&Klayman::evSneakingDone);
- }
-}
-
-void Klayman::suWalkingTestExit() {
- int16 xdiff = ABS(_destX - _x);
- int16 xdelta = _destX - _x;
-
- if (xdelta > _deltaX)
- xdelta = _deltaX;
- else if (xdelta < -_deltaX)
- xdelta = -_deltaX;
-
- _deltaX = 0;
-
- if (xdiff == 0 ||
- (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) ||
- (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) ||
- (_status3 == 3 && xdiff < 30) ||
- (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) {
- sendMessage(this, 0x1019, 0);
- } else {
- HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
- _x += xdelta;
- if (_pathPoints) {
- walkAlongPathPoints();
- } else {
- HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
- if (hitRectNext->type == 0x5002) {
- _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
- } else if (hitRectNext->type == 0x5003) {
- _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
- } else if (hitRectPrev->type == 0x5002) {
- _y = xdelta > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
- } else if (hitRectPrev->type == 0x5003) {
- _y = xdelta < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
- } else if (_flagF6 && xdelta != 0) {
- if (hitRectNext->type == 0x5000) {
- _y++;
- } else if (hitRectNext->type == 0x5001 && _y > hitRectNext->rect.y1) {
- _y--;
- }
- }
- }
- updateBounds();
- }
-
-}
-
-uint32 Klayman::hmLever(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stPickUpGeneric() {
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- if (!stStartAction(AnimationCallback(&Klayman::stPickUpGeneric))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x1C28C178, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPickUpObject);
- SetSpriteUpdate(NULL);
- }
-}
-
-uint32 Klayman::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0xC1380080) {
- sendMessage(_attachedSprite, 0x4806, 0);
- playSound(0, 0x40208200);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x03020231) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0x67221A03) {
- playSound(0, 0x44051000);
- } else if (param.asInteger() == 0x2EAE0303) {
- playSound(0, 0x03630300);
- } else if (param.asInteger() == 0x61CE4467) {
- playSound(0, 0x03630300);
- }
- break;
- }
- return messageResult;
-
-}
-
-void Klayman::stPressButton() {
- if (!stStartAction(AnimationCallback(&Klayman::stPressButton))) {
- _status2 = 2;
- _acceptInput = true;
- startAnimation(0x1C02B03D, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteUpdate(NULL);
- }
-}
-
-uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x0D01B294) {
- sendMessage(_attachedSprite, 0x480B, 0);
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, 0x4924AAC4);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0A2AA8E0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stPressFloorButton() {
- if (!stStartAction(AnimationCallback(&Klayman::stPressFloorButton))) {
- _status2 = 2;
- _acceptInput = true;
- startAnimation(0x1C16B033, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteUpdate(NULL);
- }
-}
-
-void Klayman::stPressButtonSide() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stPressButtonSide))) {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x1CD89029, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPressButton);
- SetSpriteUpdate(&Klayman::suAction);
- }
-}
-
-void Klayman::startSpecialWalkRight(int16 x) {
- if (_x == x) {
- _destX = x;
- gotoState(NULL);
- gotoNextStateExt();
- } else if (_x < x) {
- startWalkToX(x, false);
- } else if (_x - x <= 105) {
- startWalkToXExt(x);
- } else {
- startWalkToX(x, false);
- }
-}
-
-void Klayman::startSpecialWalkLeft(int16 x) {
- if (x == _x) {
- _destX = x;
- gotoState(NULL);
- gotoNextStateExt();
- } else if (x < _x) {
- startWalkToX(x, false);
- } else if (x - _x <= 105) {
- startWalkToXExt(x);
- } else {
- startWalkToX(x, false);
- }
-}
-
-void Klayman::startWalkToXSmall(int16 x) {
- _status3 = 2;
- if (_x == x) {
- _destX = x;
- if (_isWalking) {
- GotoState(NULL);
- gotoNextStateExt();
- }
- } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
- _destX = x;
- } else {
- _destX = x;
- GotoState(&Klayman::stStartWalkingSmall);
- }
-}
-
-void Klayman::stStartWalkingSmall() {
- _isWalking = true;
- _acceptInput = true;
- _status3 = 2;
- setDoDeltaX(_destX < _x ? 1 : 0);
- startAnimation(0x3A4CD934, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkingSmall);
- SetSpriteUpdate(&Klayman::suWalkingTestExit);
- FinalizeState(&Klayman::evStartWalkingDone);
-}
-
-uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101)
- playSound(0, 0x4924AAC4);
- else if (param.asInteger() == 0x0A2A9098)
- playSound(0, 0x0A2AA8E0);
- }
- return messageResult;
-}
-
-void Klayman::stStandIdleSmall() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x90D0D1D0, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stWonderAboutAfterSmall() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x11C8D156, 30, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stWonderAboutHalfSmall() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x11C8D156, 0, 10);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stWonderAboutSmall() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x11C8D156, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stWalkToFrontNoStepSmall() {
- _status2 = 0;
- _acceptInput = false;
- startAnimationByHash(0x3F9CC394, 0x14884392, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-uint32 Klayman::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x80C110B5)
- sendMessage(_parentScene, 0x482A, 0);
- else if (param.asInteger() == 0x110010D1)
- sendMessage(_parentScene, 0x482B, 0);
- else if (param.asInteger() == 0x32180101)
- playSound(0, 0x4924AAC4);
- else if (param.asInteger() == 0x0A2A9098)
- playSound(0, 0x0A2AA8E0);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stWalkToFront2Small() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2F1C4694, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stWalkToFrontSmall() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x3F9CC394, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stTurnToBackHalfSmall() {
- _status2 = 0;
- _acceptInput = false;
- startAnimationByHash(0x37ECD436, 0, 0x8520108C);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stTurnToBackWalkSmall() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x16EDDE36, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stTurnToBackSmall() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x37ECD436, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkFrontBackSmall);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stPullCord() {
- if (!stStartAction(AnimationCallback(&Klayman::stPullCord))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x3F28E094, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPullReleaseCord);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stReleaseCord);
- }
-}
-
-void Klayman::stReleaseCord() {
- _acceptInput = false;
- startAnimation(0x3A28C094, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPullReleaseCord);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- sendMessage(_attachedSprite, 0x480F, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stUseTube() {
- if (!stStartAction(AnimationCallback(&Klayman::stUseTube))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x1A38A814, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmUseTube);
- SetSpriteUpdate(NULL);
- }
-}
-
-uint32 Klayman::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x02B20220)
- playSound(0, 0xC5408620);
- else if (param.asInteger() == 0x0A720138)
- playSound(0, 0xD4C08010);
- else if (param.asInteger() == 0x03020231)
- playSound(0, 0xD4C08010);
- else if (param.asInteger() == 0xB613A180)
- playSound(0, 0x44051000);
- else if (param.asInteger() == 0x67221A03)
- playSound(0, 0x44051000);
- else if (param.asInteger() == 0x038A010B)
- playSound(0, 0x00018040);
- else if (param.asInteger() == 0x422B0280)
- playSound(0, 0x166FC6E0);
- else if (param.asInteger() == 0x925A0C1E)
- playSound(0, 0x40E5884D);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stWalkingFirstExt() {
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x5A2CBC00, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::suWalkingFirst);
- NextState(&Klayman::stUpdateWalkingFirst);
- FinalizeState(&Klayman::evStartWalkingDone);
-}
-
-void Klayman::stStartWalkingExt() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalkingExt))) {
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- setDoDeltaX(_destX < _x ? 1 : 0);
- startAnimation(0x272C1199, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteUpdate(&Klayman::suWalkingTestExit);
- NextState(&Klayman::stWalkingFirstExt);
- FinalizeState(&Klayman::evStartWalkingDone);
- }
-}
-
-void Klayman::sub41CC40(int16 x1, int16 x2) {
- if (_x > x1) {
- if (_x == x1 + x2) {
- _destX = x1 + x2;
- gotoState(NULL);
- gotoNextStateExt();
- } else if (_x < x1 + x2) {
- startWalkToXExt(x1 + x2);
- } else {
- startWalkToX(x1 + x2, false);
- }
- } else {
- if (_x == x1 - x2) {
- _destX = x1 - x2;
- gotoState(NULL);
- gotoNextStateExt();
- } else if (_x > x1 - x2) {
- startWalkToXExt(x1 - x2);
- } else {
- startWalkToX(x1 - x2, false);
- }
- }
-}
-
-void Klayman::startWalkToXExt(int16 x) {
- int16 xdiff = ABS(x - _x);
- if (x == _x) {
- _destX = x;
- if (!_isWalking && !_isSneaking && !_isLargeStep) {
- gotoState(NULL);
- gotoNextStateExt();
- }
- } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) {
- _destX = x;
- gotoState(NULL);
- gotoNextStateExt();
- } else if (xdiff <= 42 && _status3 != 3) {
- if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
- _destX = x;
- } else {
- _destX = x;
- GotoState(&Klayman::stSneak);
- }
- } else if (_isLargeStep && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
- _destX = x;
- } else {
- _destX = x;
- GotoState(&Klayman::stLargeStep);
- }
-}
-
-void Klayman::stLargeStep() {
- _status2 = 2;
- _isLargeStep = true;
- _acceptInput = true;
- setDoDeltaX(_destX >= _x ? 1 : 0);
- startAnimation(0x08B28116, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLargeStep);
- SetSpriteUpdate(&Klayman::suLargeStep);
- FinalizeState(&Klayman::evLargeStepDone);
-}
-
-void Klayman::evLargeStepDone() {
- _isLargeStep = false;
-}
-
-void Klayman::suLargeStep() {
- int16 xdiff = _destX - _x;
-
- if (_doDeltaX) {
- _deltaX = -_deltaX;
- }
-
- if (_currFrameIndex == 7) {
- _deltaX = xdiff;
- }
-
- if ((xdiff > 0 && xdiff > _deltaX) || (xdiff < 0 && xdiff < _deltaX))
- xdiff = _deltaX;
-
- _deltaX = 0;
-
- if (_x != _destX) {
- HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
- _x += xdiff;
- if (_pathPoints) {
- walkAlongPathPoints();
- } else {
- HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
- if (hitRectNext->type == 0x5002) {
- _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
- } else if (hitRectNext->type == 0x5003) {
- _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
- } else if (hitRectPrev->type == 0x5002) {
- _y = xdiff > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
- } else if (hitRectPrev->type == 0x5003) {
- _y = xdiff < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
- }
- }
- updateBounds();
- }
-}
-
-uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101) {
- playSound(0, 0x4924AAC4);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0A2AA8E0);
- }
- break;
- case 0x3002:
- _x = _destX;
- gotoNextStateExt();
- break;
- }
- return messageResult;
-}
-
-void Klayman::stWonderAboutHalf() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xD820A114, 0, 10);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stWonderAboutAfter() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0xD820A114, 30, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stTurnToUseHalf() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x9B250AD2, 0, 7);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101) {
- playSound(0, 0x4924AAC4);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0A2AA8E0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stTurnAwayFromUse() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x98F88391, 4, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stWonderAbout() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0xD820A114, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stPeekWall() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0xAC20C012, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPeekWall);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender) {
- int16 speedUpFrameIndex;
- switch (messageNum) {
- case 0x1008:
- speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_currFrameIndex < speedUpFrameIndex)
- startAnimation(0xAC20C012, speedUpFrameIndex, -1);
- return 0;
- case 0x100D:
- if (param.asInteger() == 0x32180101) {
- playSound(0, 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0460E2FA);
- }
- break;
- }
- return hmLowLevelAnimation(messageNum, param, sender);
-}
-
-void Klayman::stJumpToRing1() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing1))) {
- _status2 = 0;
- startAnimation(0xD82890BA, 0, -1);
- setupJumpToRing();
- }
-}
-
-void Klayman::setupJumpToRing() {
- _acceptInput = false;
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmJumpToRing);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- NextState(&Klayman::stHangOnRing);
- sendMessage(_attachedSprite, 0x482B, 0);
-}
-
-uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x168050A0) {
- sendMessage(_attachedSprite, 0x4806, 0);
- _acceptInput = true;
- } else if (param.asInteger() == 0x320AC306) {
- playSound(0, 0x5860C640);
- } else if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::suUpdateDestX() {
- AnimatedSprite::updateDeltaXY();
- _destX = _x;
-}
-
-void Klayman::stHangOnRing() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x4829E0B8, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stJumpToRing2() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing2))) {
- _status2 = 0;
- startAnimation(0x900980B2, 0, -1);
- setupJumpToRing();
- }
-}
-
-void Klayman::stJumpToRing3() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing3))) {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0xBA1910B2, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::hmJumpToRing3);
- NextState(&Klayman::stHoldRing3);
- sendMessage(_attachedSprite, 0x482B, 0);
- }
-}
-
-uint32 Klayman::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x168050A0) {
- sendMessage(_attachedSprite, 0x4806, 0);
- } else if (param.asInteger() == 0x320AC306) {
- playSound(0, 0x5860C640);
- } else if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stHoldRing3() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x4A293FB0, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmHoldRing3);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
- if (messageNum == 0x1008) {
- stReleaseRing();
- return 0;
- }
- return hmLowLevel(messageNum, param, sender);
-}
-
-void Klayman::stReleaseRing() {
- _status2 = 1;
- _acceptInput = false;
- sendMessage(_attachedSprite, 0x4807, 0);
- _attachedSprite = NULL;
- startAnimation(0xB869A4B9, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stJumpToRing4() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing4))) {
- _status2 = 0;
- startAnimation(0xB8699832, 0, -1);
- setupJumpToRing();
- }
-}
-
-void Klayman::sub41CCE0(int16 x) {
- sub41CC40(_attachedSprite->getX(), x);
-}
-
-void Klayman::stContinueClimbLadderUp() {
- _status2 = 0;
- _acceptInput = true;
- _ladderStatus = 3;
- startAnimationByHash(0x3A292504, 0x01084280, 0);
- _newStickFrameHash = 0x01084280;
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
- gotoNextStateExt();
-}
-
-void Klayman::stStartClimbLadderDown() {
- if (!stStartAction(AnimationCallback(&Klayman::stStartClimbLadderDown))) {
- _status2 = 0;
- if (_destY < _y) {
- if (_ladderStatus == 1) {
- _ladderStatus = 2;
- stClimbLadderHalf();
- } else {
- gotoNextStateExt();
- }
- } else if (_ladderStatus == 0) {
- _ladderStatus = 2;
- _acceptInput = false;
- startAnimation(0x122D1505, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- } else if (_ladderStatus == 3) {
- _ladderStatus = 2;
- _acceptInput = true;
- startAnimationByHash(0x122D1505, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- } else if (_ladderStatus == 1) {
- _ladderStatus = 2;
- _acceptInput = true;
- startAnimation(0x122D1505, 29 - _currFrameIndex, -1);
- }
- }
-}
-
-void Klayman::stClimbLadderHalf() {
- _status2 = 2;
- if (_ladderStatus == 1) {
- _ladderStatus = 0;
- _acceptInput = false;
- startAnimationByHash(0x3A292504, 0x02421405, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClimbLadderHalf);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- } else if (_ladderStatus == 2) {
- _ladderStatus = 0;
- _acceptInput = false;
- startAnimationByHash(0x122D1505, 0x02421405, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClimbLadderHalf);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- } else {
- gotoNextStateExt();
- }
-}
-
-uint32 Klayman::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x489B025C) {
- playSound(0, 0x52C4C2D7);
- } else if (param.asInteger() == 0x400A0E64) {
- playSound(0, 0x50E081D9);
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0460E2FA);
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x01084280) {
- _acceptInput = true;
- } else if (param.asInteger() == 0x489B025C) {
- playSound(0, 0x52C4C2D7);
- } else if (param.asInteger() == 0x400A0E64) {
- playSound(0, 0x50E081D9);
- } else if (param.asInteger() == 0x02421405) {
- if (_ladderStatus == 1) {
- startAnimationByHash(0x3A292504, 0x01084280, 0);
- if (_destY >= _y - 30)
- sendMessage(this, 0x1019, 0);
- } else {
- startAnimationByHash(0x122D1505, 0x01084280, 0);
- if (_destY <= _y)
- sendMessage(this, 0x1019, 0);
- }
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stStartClimbLadderUp() {
- if (!stStartAction(AnimationCallback(&Klayman::stStartClimbLadderUp))) {
- _status2 = 0;
- if (_destY >= _y - 30) {
- gotoNextStateExt();
- } else if (_ladderStatus == 0) {
- _ladderStatus = 1;
- _acceptInput = false;
- startAnimation(0x3A292504, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- } else if (_ladderStatus == 3) {
- _ladderStatus = 1;
- _acceptInput = true;
- startAnimationByHash(0x3A292504, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClimbLadderUpDown);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- } else if (_ladderStatus == 2) {
- _ladderStatus = 1;
- _acceptInput = true;
- startAnimation(0x3A292504, 29 - _currFrameIndex, -1);
- }
- }
-}
-
-void Klayman::stWalkToFrontNoStep() {
- _status2 = 2;
- _acceptInput = false;
- startAnimationByHash(0xF229C003, 0x14884392, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x80C110B5) {
- sendMessage(_parentScene, 0x482A, 0);
- } else if (param.asInteger() == 0x110010D1) {
- sendMessage(_parentScene, 0x482B, 0);
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stWalkToFront() {
- if (!stStartAction(AnimationCallback(&Klayman::stWalkToFront))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0xF229C003, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stTurnToFront() {
- if (!stStartAction(AnimationCallback(&Klayman::stTurnToFront))) {
- _status2 = 0;
- _acceptInput = false;
- startAnimationByHash(0xCA221107, 0, 0x8520108C);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stTurnToBack() {
- if (!stStartAction(AnimationCallback(&Klayman::stTurnToBack))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0xCA221107, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalkToFront);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stLandOnFeet() {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x18118554, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLandOnFeet);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x320AC306) {
- playSound(0, 0x5860C640);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stTurnToBackToUse() {
- if (!stStartAction(AnimationCallback(&Klayman::stTurnToBackToUse))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x91540140, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTurnToBackToUse);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-uint32 Klayman::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0xC61A0119) {
- playSound(0, 0x402338C2);
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, 0x4924AAC4);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0A2AA8E0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stClayDoorOpen() {
- if (!stStartAction(AnimationCallback(&Klayman::stClayDoorOpen))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x5CCCB330, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmClayDoorOpen);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-uint32 Klayman::hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x040D4186) {
- sendMessage(_attachedSprite, 0x4808, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stTurnToUse() {
- if (!stStartAction(AnimationCallback(&Klayman::stTurnToUse))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x9B250AD2, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stReturnFromUse() {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x98F88391, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stWalkingOpenDoor() {
- _isWalkingOpenDoorNotified = false;
- _acceptInput = false;
- startAnimation(0x11A8E012, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStartWalking);
- SetSpriteUpdate(&Klayman::suWalkingOpenDoor);
-}
-
-void Klayman::suWalkingOpenDoor() {
- if (!_isWalkingOpenDoorNotified && ABS(_destX - _x) < 80) {
- sendMessage(_parentScene, 0x4829, 0);
- _isWalkingOpenDoorNotified = true;
- }
- AnimatedSprite::updateDeltaXY();
-}
-
-void Klayman::stMoveObjectSkipTurnFaceObject() {
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- _isMoveObjectRequested = false;
- _acceptInput = true;
- startAnimationByHash(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::hmMoveObjectTurn);
-}
-
-void Klayman::evMoveObjectTurnDone() {
- sendMessage(_attachedSprite, 0x4807, 0);
-}
-
-uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x01084280) {
- sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
- } else if (param.asInteger() == 0x02421405) {
- if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
- stMoveObjectSkipTurn();
- } else {
- FinalizeState(&Klayman::evMoveObjectTurnDone);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- }
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0460E2FA);
- }
- break;
- case 0x480A:
- _isMoveObjectRequested = true;
- return 0;
- }
- return hmLowLevelAnimation(messageNum, param, sender);
-}
-
-void Klayman::stMoveObjectSkipTurn() {
- _isMoveObjectRequested = false;
- _acceptInput = true;
- startAnimationByHash(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::hmMoveObjectTurn);
-}
-
-void Klayman::stMoveObjectFaceObject() {
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- if (!stStartAction(AnimationCallback(&Klayman::stMoveObjectFaceObject))) {
- _status2 = 2;
- _isMoveObjectRequested = false;
- _acceptInput = true;
- startAnimation(0x0C1CA072, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmMoveObjectTurn);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stUseLever() {
- if (!stStartAction(AnimationCallback(&Klayman::stUseLever))) {
- _status2 = 0;
- if (_isLeverDown) {
- stUseLeverRelease();
- } else {
- sendMessage(_attachedSprite, 0x482B, 0);
- startAnimation(0x0C303040, 0, -1);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::hmLever);
- SetUpdateHandler(&Klayman::update);
- NextState(&Klayman::stPullLeverDown);
- _acceptInput = false;
- }
- }
-}
-
-// Exactly the same code as sub420DA0 which was removed
-void Klayman::stPullLeverDown() {
- startAnimation(0x0D318140, 0, -1);
- sendMessage(_attachedSprite, 0x480F, 0);
- NextState(&Klayman::stHoldLeverDown);
-}
-
-void Klayman::stHoldLeverDown() {
- startAnimation(0x4464A440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- _isLeverDown = true;
- _acceptInput = true;
-}
-
-void Klayman::stUseLeverRelease() {
- startAnimation(0x09018068, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLever);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- sendMessage(_attachedSprite, 0x4807, 0);
- NextState(&Klayman::stPullLeverDown);
- _acceptInput = false;
-}
-
-void Klayman::stReleaseLever() {
- if (_isLeverDown) {
- _status2 = 2;
- startAnimation(0x09018068, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLever);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- sendMessage(_attachedSprite, 0x4807, 0);
- NextState(&Klayman::stLetGoOfLever);
- _acceptInput = false;
- _isLeverDown = false;
- } else {
- gotoNextStateExt();
- }
-}
-
-void Klayman::stLetGoOfLever() {
- startAnimation(0x0928C048, 0, -1);
- FinalizeState(&Klayman::evLeverReleasedEvent);
-}
-
-void Klayman::evLeverReleasedEvent() {
- sendMessage(_attachedSprite, 0x482A, 0);
-}
-
-void Klayman::stInsertDisk() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertDisk))) {
- _status2 = 2;
- _tapesToInsert = 0;
- for (uint32 i = 0; i < 20; i++) {
- if (getSubVar(VA_HAS_TAPE, i)) {
- setSubVar(VA_IS_TAPE_INSERTED, i, 1);
- setSubVar(VA_HAS_TAPE, i, 0);
- _tapesToInsert++;
- }
- }
- if (_tapesToInsert == 0) {
- GotoState(NULL);
- gotoNextStateExt();
- } else {
- startAnimation(0xD8C8D100, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmInsertDisk);
- SetSpriteUpdate(&Klayman::suAction);
- _acceptInput = false;
- _tapesToInsert--;
- }
- }
-}
-
-uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) {
- nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
- } else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
- _tapesToInsert--;
- startAnimationByHash(0xD8C8D100, 0x01084280, 0);
- } else if (param.asInteger() == 0x062A1510) {
- playSound(0, 0x41688704);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- playSound(0, 0x44051000);
- } else if (param.asInteger() == 0x0E040501) {
- playSound(1, 0xC6A129C1);
- }
- }
- return messageResult;
-}
-
-void Klayman::walkAlongPathPoints() {
- if (_x <= (*_pathPoints)[0].x)
- _y = (*_pathPoints)[0].y;
- else if (_x >= (*_pathPoints)[_pathPoints->size() - 1].x)
- _y = (*_pathPoints)[_pathPoints->size() - 1].y;
- else {
- int16 deltaX = _x - (*_pathPoints)[0].x, deltaXIncr = 0;
- uint index = 0;
- while (deltaX > 0) {
- NPoint pt2 = (*_pathPoints)[index];
- NPoint pt1 = index + 1 >= _pathPoints->size() ? (*_pathPoints)[0] : (*_pathPoints)[index + 1];
- int16 xd = ABS(pt1.x - pt2.x);
- int16 yd = ABS(pt1.y - pt2.y);
- if (deltaX + deltaXIncr >= xd) {
- deltaX -= xd;
- deltaX += deltaXIncr;
- ++index;
- if (index >= _pathPoints->size())
- index = 0;
- _y = (*_pathPoints)[index].y;
- } else {
- deltaXIncr += deltaX;
- if (pt1.y >= pt2.y) {
- _y = pt2.y + (yd * deltaXIncr) / xd;
- } else {
- _y = pt2.y - (yd * deltaXIncr) / xd;
- }
- deltaX = 0;
- }
- }
- }
-}
-
-void Klayman::stJumpToGrab() {
- _status2 = 0;
- _acceptInput = false;
- startAnimationByHash(0x00AB8C10, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suJumpToGrab);
- SetMessageHandler(&Klayman::hmJumpToGrab);
-}
-
-void Klayman::suJumpToGrab() {
- updateDeltaXY();
- if (_y >= _destY) {
- _y = _destY;
- updateBounds();
- gotoNextStateExt();
- }
-}
-
-uint32 Klayman::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x168050A0)
- sendMessage(_attachedSprite, 0x4806, 0);
- else if (param.asInteger() == 0x320AC306)
- startAnimationByHash(0x00AB8C10, 0x01084280, 0);
- else if (param.asInteger() == 0x4AB28209)
- sendMessage(_attachedSprite, 0x482A, 0);
- else if (param.asInteger() == 0x88001184)
- sendMessage(_attachedSprite, 0x482B, 0);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stFinishGrow() {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x38445000, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::hmFinishGrow);
-}
-
-uint32 Klayman::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x040C4C01)
- playSound(0, 0x01E11140);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stTurnToUseExt() {
- if (!stStartAction(AnimationCallback(&Klayman::stTurnToUseExt))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x1B3D8216, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTurnToUse);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- }
-}
-
-void Klayman::stJumpToGrabFall() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpToGrabFall))) {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x00AB8C10, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmJumpToGrab);
- SetSpriteUpdate(&Klayman::suJumpToGrab);
- sendMessage(_attachedSprite, 0x482B, 0);
- }
-}
-
-void Klayman::stJumpToGrabRelease() {
- _status2 = 1;
- _acceptInput = false;
- startAnimationByHash(0x00AB8C10, 0x320AC306, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmJumpToGrabRelease);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stReleaseRing);
-}
-
-uint32 Klayman::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x320AC306)
- playSound(0, 0x5860C640);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stDoIdleTeleporterHands() {
- startIdleAnimation(0x90EF8D38, AnimationCallback(&Klayman::stIdleTeleporterHands));
-}
-
-void Klayman::stIdleTeleporterHands() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x90EF8D38, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stSitIdleTeleporterBlinkSecond);
-}
-
-void Klayman::stDoIdleTeleporterHands2() {
- startIdleAnimation(0x900F0930, AnimationCallback(&Klayman::stIdleTeleporterHands2));
-}
-
-void Klayman::stIdleTeleporterHands2() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0x900F0930, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stSitIdleTeleporterBlinkSecond);
-}
-
-void Klayman::teleporterAppear(uint32 fileHash) {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(fileHash, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTeleporterAppearDisappear);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::teleporterDisappear(uint32 fileHash) {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(fileHash, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTeleporterAppearDisappear);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4E0A2C24) {
- playSound(0, 0x85B10BB8);
- } else if (param.asInteger() == 0x4E6A0CA0) {
- playSound(0, 0xC5B709B0);
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x80C110B5)
- sendMessage(_parentScene, 0x482A, 0);
- else if (param.asInteger() == 0x33288344)
- playSound(2, 0x10688664);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stShrink() {
- _status2 = 0;
- _acceptInput = false;
- playSound(0, 0x4C69EA53);
- startAnimation(0x1AE88904, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmShrink);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-void Klayman::stStandWonderAbout() {
- if (_x > 260)
- setDoDeltaX(1);
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xD820A114, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
- _newStickFrameIndex = 10;
-}
-
-uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x1008:
- if (_potionFlag1) {
- startAnimationByHash(0x1C388C04, 0x004A2148, 0);
- messageResult = 0;
- } else
- _potionFlag2 = true;
- break;
- case 0x100D:
- if (param.asInteger() == 0x0002418E)
- sendMessage(_parentScene, 0x2000, 0);
- else if (param.asInteger() == 0x924090C2) {
- _potionFlag1 = true;
- if (_potionFlag2) {
- startAnimationByHash(0x1C388C04, 0x004A2148, 0);
- messageResult = 0;
- }
- } else if (param.asInteger() == 0x004A2148)
- _potionFlag1 = false;
- else if (param.asInteger() == 0x02B20220)
- playSound(0, 0xC5408620);
- else if (param.asInteger() == 0x0A720138)
- playSound(0, 0xD4C08010);
- else if (param.asInteger() == 0x03020231)
- playSound(0, 0xD4C08010);
- else if (param.asInteger() == 0xB613A180)
- playSound(0, 0x44051000);
- else if (param.asInteger() == 0x67221A03)
- playSound(0, 0x44051000);
- else if (param.asInteger() == 0x038A010B)
- playSound(0, 0x00018040);
- else if (param.asInteger() == 0x422B0280)
- playSound(0, 0x166FC6E0);
- else if (param.asInteger() == 0x925A0C1E)
- playSound(0, 0x40E5884D);
- else if (param.asInteger() == 0x000F0082)
- playSound(0, 0x546CDCC1);
- else if (param.asInteger() == 0x00020814)
- playSound(0, 0x786CC6D0);
- else if (param.asInteger() == 0x06020500)
- playSound(0, 0x1069C0E1);
- else if (param.asInteger() == 0x02128C00)
- playSound(0, 0x5068C4C3);
- else if (param.asInteger() == 0x82022030)
- playSound(0, 0x5C48C0E8);
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x32180101)
- playSound(0, 0x405002D8);
- else if (param.asInteger() == 0x0A2A9098)
- playSound(0, 0x0460E2FA);
- else if (param.asInteger() == 0xD00A0C0C)
- playSound(3);
- else if (param.asInteger() == 0x04121920)
- playSound(4);
- else if (param.asInteger() == 0x030B4480)
- playSound(5);
- else if (param.asInteger() == 0x422B0280)
- playSound(6);
- else if (param.asInteger() == 0x038A010B)
- playSound(7);
- else if (param.asInteger() == 0x67221A03)
- playSound(0, 0x44051000);
- else if (param.asInteger() == 0x02B20220)
- playSound(0, 0xC5408620);
- else if (param.asInteger() == 0x925A0C1E)
- playSound(0, 0x40E5884D);
- else if (param.asInteger() == 0x03020231)
- playSound(0, 0xD4C08010);
- else if (param.asInteger() == 0x08040840)
- setDoDeltaX(2);
- break;
- }
- return messageResult;
-}
-
-void Klayman::stGrow() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2838C010, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmGrow);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-void Klayman::stDrinkPotion() {
- _status2 = 1;
- _acceptInput = false;
- _potionFlag1 = false;
- _potionFlag2 = false;
- startAnimation(0x1C388C04, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmDrinkPotion);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-uint32 Klayman::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (_keysToInsert == 0 && param.asInteger() == 0x06040580) {
- nextAnimationByHash(0xDC409440, 0x46431401, 0);
- } else if (_keysToInsert != 0 && param.asInteger() == 0x46431401) {
- _keysToInsert--;
- startAnimationByHash(0xDC409440, 0x01084280, 0);
- } else if (param.asInteger() == 0x062A1510) {
- playSound(0, 0x41688704);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- playSound(0, 0x44051000);
- } else if (param.asInteger() == 0x0E4C8141) {
- playSound(0, 0xDC4A1280);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stInsertKey() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertKey))) {
- _status2 = 2;
- _keysToInsert = 0;
- for (uint32 i = 0; i < 3; i++) {
- if (getSubVar(VA_HAS_KEY, i)) {
- bool more;
- setSubVar(VA_IS_KEY_INSERTED, i, 1);
- setSubVar(VA_HAS_KEY, i, 0);
- do {
- more = false;
- setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
- for (uint j = 0; j < i && !more; j++) {
- if (getSubVar(VA_IS_KEY_INSERTED, j) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i))
- more = true;
- }
- if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i))
- more = true;
- } while (more);
- _keysToInsert++;
- }
- }
- if (_keysToInsert == 0) {
- GotoState(NULL);
- gotoNextStateExt();
- } else {
- _acceptInput = false;
- startAnimation(0xDC409440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmInsertKey);
- SetSpriteUpdate(&Klayman::suAction);
- _keysToInsert--;
- }
- }
-}
-
-uint32 Klayman::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x04684052) {
- _acceptInput = true;
- sendMessage(_parentScene, 0x2002, 0);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stReadNote() {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x123E9C9F, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmReadNote);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-uint32 Klayman::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- int16 speedUpFrameIndex;
- switch (messageNum) {
- case 0x1008:
- speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_currFrameIndex < speedUpFrameIndex) {
- startAnimation(0x35AA8059, speedUpFrameIndex, -1);
- _y = 438;
- }
- messageResult = 0;
- break;
- case 0x100D:
- if (param.asInteger() == 0x1A1A0785) {
- playSound(0, 0x40F0A342);
- } else if (param.asInteger() == 0x60428026) {
- playSound(0, 0x40608A59);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stHitByDoor() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x35AA8059, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmHitByDoor);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- playSound(0, 0x402E82D4);
-}
-
-uint32 Klayman::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == calcHash("PopBalloon")) {
- sendMessage(_parentScene, 0x2000, 0);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- playSound(0, 0x44051000);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::upPeekWallBlink() {
- Klayman::update();
- _blinkCounter++;
- if (_blinkCounter >= _blinkCounterMax)
- stPeekWallBlink();
-}
-
-void Klayman::stPeekWall1() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xAC20C012, 8, 37);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stPeekWallBlink);
-}
-
-void Klayman::stPeekWall2() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0xAC20C012, 43, 49);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
-}
-
-void Klayman::stPeekWallBlink() {
- _blinkCounter = 0;
- _status2 = 0;
- _acceptInput = true;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
- startAnimation(0xAC20C012, 38, 42);
- SetUpdateHandler(&Klayman::upPeekWallBlink);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::hmLowLevel);
- _newStickFrameIndex = 42;
-}
-
-void Klayman::stPeekWallReturn() {
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x2426932E, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPeekWallReturn);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stPullHammerLever() {
- if (!stStartAction(AnimationCallback(&Klayman::stPullHammerLever))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x00648953, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPullHammerLever);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- }
-}
-
-uint32 Klayman::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::hmLever(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209)
- sendMessage(_attachedSprite, 0x480F, 0);
- break;
- }
- return messageResult;
-}
-
-void Klayman::suRidePlatformDown() {
- _platformDeltaY++;
- _y += _platformDeltaY;
- if (_y > 600)
- sendMessage(this, 0x1019, 0);
-}
-
-void Klayman::stRidePlatformDown() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatformDown))) {
- _status2 = 1;
- sendMessage(_parentScene, 0x4803, 0);
- _acceptInput = false;
- _platformDeltaY = 0;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(&Klayman::suRidePlatformDown);
- _vm->_soundMan->playSoundLooping(0xD3B02847);
- }
-}
-
-void Klayman::stCrashDown() {
- playSound(0, 0x41648271);
- _status2 = 1;
- _acceptInput = false;
- startAnimationByHash(0x000BAB02, 0x88003000, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- NextState(&Klayman::stCrashDownFinished);
-}
-
-void Klayman::stCrashDownFinished() {
- setDoDeltaX(2);
- stTryStandIdle();
-}
-
-void Klayman::upSpitOutFall() {
- Klayman::update();
- if (_countdown1 != 0 && (--_countdown1 == 0)) {
- _surface->setVisible(true);
- SetUpdateHandler(&Klayman::update);
- }
-}
-
-uint32 Klayman::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x168050A0) {
- sendMessage(_attachedSprite, 0x480F, 0);
- } else if (param.asInteger() == 0x586B0300) {
- sendMessage(_otherSprite, 0x480E, 1);
- } else if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x4811:
- playSound(0, 0x5252A0E4);
- setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
- if (_doDeltaX) {
- _x = ((Sprite*)sender)->getX() - 75;
- } else {
- _x = ((Sprite*)sender)->getX() + 75;
- }
- _y = ((Sprite*)sender)->getY() - 200;
- if (param.asInteger() == 0) {
- stSpitOutFall0();
- } else if (param.asInteger() == 1) {
- // NOTE This is never used and the code was removed
- // Also the animations used here in the original don't exist...
- } else if (param.asInteger() == 2) {
- stSpitOutFall2();
- }
- break;
- }
- return 0;
-}
-
-uint32 Klayman::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x942D2081) {
- _acceptInput = false;
- sendMessage(_attachedSprite, 0x2003, 0);
- } else if (param.asInteger() == 0xDA600012) {
- stHitByBoxingGlove();
- } else if (param.asInteger() == 0x0D01B294) {
- _acceptInput = false;
- sendMessage(_attachedSprite, 0x480B, 0);
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x01084280) {
- sendMessage(_attachedSprite, 0x480B, (uint32)_doDeltaX);
- } else if (param.asInteger() == 0x02421405) {
- if (_isMoveObjectRequested) {
- if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0)
- stContinueMovingVenusFlyTrap();
- } else {
- SetMessageHandler(&Klayman::hmFirstMoveVenusFlyTrap);
- }
- } else if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0460E2FA);
- }
- break;
- case 0x480A:
- _isMoveObjectRequested = true;
- return 0;
- }
- return hmLowLevelAnimation(messageNum, param, sender);
-}
-
-uint32 Klayman::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209) {
- sendMessage(_attachedSprite, 0x482A, 0);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_attachedSprite, 0x482B, 0);
- } else if (param.asInteger() == 0x32180101) {
- playSound(0, 0x405002D8);
- } else if (param.asInteger() == 0x0A2A9098) {
- playSound(0, 0x0460E2FA);
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) {
- int16 speedUpFrameIndex;
- uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x1008:
- speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
- if (_currFrameIndex < speedUpFrameIndex) {
- startAnimation(0x35AA8059, speedUpFrameIndex, -1);
- _y = 435;
- }
- messageResult = 0;
- break;
- case 0x100D:
- if (param.asInteger() == 0x1A1A0785) {
- playSound(0, 0x40F0A342);
- } else if (param.asInteger() == 0x60428026) {
- playSound(0, 0x40608A59);
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Klayman::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmLowLevel(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x1307050A) {
- playSound(0, 0x40428A09);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::suFallDown() {
- AnimatedSprite::updateDeltaXY();
- HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10);
- if (hitRect->type == 0x5001) {
- _y = hitRect->rect.y1;
- updateBounds();
- sendMessage(this, 0x1019, 0);
- }
- _parentScene->checkCollision(this, 0xFFFF, 0x4810, 0);
-}
-
-void Klayman::stJumpToRingVenusFlyTrap() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpToRingVenusFlyTrap))) {
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x584984B4, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmJumpToRingVenusFlyTrap);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- NextState(&Klayman::stLandOnFeet);
- sendMessage(_attachedSprite, 0x482B, 0);
- }
-}
-
-void Klayman::stStandIdleSpecial() {
- playSound(0, 0x56548280);
- _status2 = 0;
- _acceptInput = false;
- _surface->setVisible(false);
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmStandIdleSpecial);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stSpitOutFall0() {
- _countdown1 = 1;
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x000BAB02, 0, -1);
- SetUpdateHandler(&Klayman::upSpitOutFall);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(&Klayman::suFallDown);
- NextState(&Klayman::stFalling);
- sendMessage(_parentScene, 0x8000, 0);
-}
-
-void Klayman::stSpitOutFall2() {
- _countdown1 = 1;
- _status2 = 0;
- _acceptInput = false;
- startAnimation(0x9308C132, 0, -1);
- SetUpdateHandler(&Klayman::upSpitOutFall);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(&Klayman::suFallDown);
- NextState(&Klayman::stFalling);
- sendMessage(_parentScene, 0x8000, 0);
-}
-
-void Klayman::stFalling() {
- sendMessage(_parentScene, 0x1024, 1);
- playSound(0, 0x41648271);
- _status2 = 1;
- _acceptInput = false;
- _isWalking = false;
- startAnimationByHash(0x000BAB02, 0x88003000, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- NextState(&Klayman::stFallTouchdown);
- sendMessage(_parentScene, 0x2002, 0);
- _attachedSprite = NULL;
- sendMessage(_parentScene, 0x8001, 0);
-}
-
-void Klayman::stFallTouchdown() {
- setDoDeltaX(2);
- stTryStandIdle();
-}
-
-void Klayman::stJumpAndFall() {
- if (!stStartAction(AnimationCallback(&Klayman::stJumpAndFall))) {
- sendMessage(_parentScene, 0x1024, 3);
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0xB93AB151, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmJumpAndFall);
- SetSpriteUpdate(&Klayman::suFallDown);
- NextState(&Klayman::stLandOnFeet);
- }
-}
-
-void Klayman::stDropFromRing() {
- if (_attachedSprite) {
- _x = _attachedSprite->getX();
- sendMessage(_attachedSprite, 0x4807, 0);
- _attachedSprite = NULL;
- }
- _status2 = 2;
- _acceptInput = false;
- startAnimation(0x586984B1, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(&Klayman::suFallDown);
- NextState(&Klayman::stLandOnFeet);
-}
-
-void Klayman::stPressDoorButton() {
- _status2 = 2;
- _acceptInput = true;
- setDoDeltaX(0);
- startAnimation(0x1CD89029, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmPressDoorButton);
- SetSpriteUpdate(&Klayman::suAction);
-}
-
-void Klayman::stHitByBoxingGlove() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x35AA8059, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmHitByBoxingGlove);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&Klayman::evHitByBoxingGloveDone);
-}
-
-void Klayman::evHitByBoxingGloveDone() {
- sendMessage(_parentScene, 0x1024, 1);
-}
-
-void Klayman::stMoveVenusFlyTrap() {
- if (!stStartAction(AnimationCallback(&Klayman::stMoveVenusFlyTrap))) {
- _status2 = 2;
- _isMoveObjectRequested = false;
- _acceptInput = true;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x5C01A870, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&Klayman::evMoveVenusFlyTrapDone);
- }
-}
-
-void Klayman::stContinueMovingVenusFlyTrap() {
- _isMoveObjectRequested = false;
- _acceptInput = true;
- startAnimationByHash(0x5C01A870, 0x01084280, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&Klayman::evMoveVenusFlyTrapDone);
-}
-
-void Klayman::evMoveVenusFlyTrapDone() {
- sendMessage(_attachedSprite, 0x482A, 0);
-}
-
-void Klayman::suFallSkipJump() {
- updateDeltaXY();
- HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10);
- if (hitRect->type == 0x5001) {
- _y = hitRect->rect.y1;
- updateBounds();
- sendMessage(this, 0x1019, 0);
- }
-}
-
-void Klayman::stFallSkipJump() {
- _status2 = 2;
- _acceptInput = false;
- startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suFallSkipJump);
- SetMessageHandler(&Klayman::hmLowLevel);
- NextState(&Klayman::stLandOnFeet);
-}
-
-void Klayman::upMoveObject() {
- if (_x >= 380)
- gotoNextStateExt();
- Klayman::update();
-}
-
-uint32 Klayman::hmMatch(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x51281850) {
- setGlobalVar(V_TNT_DUMMY_FUSE_LIT, 1);
- } else if (param.asInteger() == 0x43000538) {
- playSound(0, 0x21043059);
- } else if (param.asInteger() == 0x02B20220) {
- playSound(0, 0xC5408620);
- } else if (param.asInteger() == 0x0A720138) {
- playSound(0, 0xD4C08010);
- } else if (param.asInteger() == 0xB613A180) {
- playSound(0, 0x44051000);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stFetchMatch() {
- if (!stStartAction(AnimationCallback(&Klayman::stFetchMatch))) {
- _status2 = 0;
- _acceptInput = false;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x9CAA0218, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmMatch);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stLightMatch);
- }
-}
-
-void Klayman::stLightMatch() {
- _status2 = 1;
- _acceptInput = false;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x1222A513, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmMatch);
- SetSpriteUpdate(NULL);
-}
-
-uint32 Klayman::hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x01084280) {
- playSound(0, 0x405002D8);
- sendMessage(_attachedSprite, 0x480B, 0);
- } else if (param.asInteger() == 0x02421405) {
- if (_moveObjectCountdown != 0) {
- _moveObjectCountdown--;
- stContinueMoveObject();
- } else {
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- }
- }
- break;
- }
- return Klayman::hmLowLevelAnimation(messageNum, param, sender);
-}
-
-uint32 Klayman::hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x000F0082) {
- playSound(0, 0x74E2810F);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stMoveObject() {
- if (!stStartAction(AnimationCallback(&Klayman::stMoveObject))) {
- _status2 = 2;
- _acceptInput = false;
- _moveObjectCountdown = 8;
- setDoDeltaX(0);
- startAnimation(0x0C1CA072, 0, -1);
- SetUpdateHandler(&Klayman::upMoveObject);
- SetMessageHandler(&Klayman::hmMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- }
-}
-
-void Klayman::stContinueMoveObject() {
- _acceptInput = false;
- startAnimationByHash(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&Klayman::upMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&Klayman::hmMoveObject);
-}
-
-void Klayman::stTumbleHeadless() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTumbleHeadless))) {
- _status2 = 1;
- _acceptInput = false;
- setDoDeltaX(0);
- startAnimation(0x2821C590, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmTumbleHeadless);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- NextState(&Klayman::stTryStandIdle);
- sendMessage(_parentScene, 0x8000, 0);
- playSound(0, 0x62E0A356);
- }
-}
-
-void Klayman::stCloseEyes() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stCloseEyes))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
- }
-}
-
-uint32 Klayman::hmSpit(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x16401CA6) {
- _canSpitPipe = true;
- if (_contSpitPipe)
- spitIntoPipe();
- } else if (param.asInteger() == 0xC11C0008) {
- _canSpitPipe = false;
- _acceptInput = false;
- _readyToSpit = false;
- } else if (param.asInteger() == 0x018A0001) {
- sendMessage(_parentScene, 0x2001, _spitDestPipeIndex);
- }
- break;
- }
- return messageResult;
-}
-
-void Klayman::stTrySpitIntoPipe() {
- if (_readyToSpit) {
- _contSpitPipe = true;
- _spitContDestPipeIndex = _spitPipeIndex;
- if (_canSpitPipe)
- spitIntoPipe();
- } else if (!stStartAction(AnimationCallback(&Klayman::stTrySpitIntoPipe))) {
- _status2 = 2;
- _acceptInput = true;
- _spitDestPipeIndex = _spitPipeIndex;
- _readyToSpit = true;
- _canSpitPipe = false;
- _contSpitPipe = false;
- startAnimation(0x1808B150, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSpit);
- SetSpriteUpdate(NULL);
- }
-}
-
-void Klayman::spitIntoPipe() {
- _contSpitPipe = false;
- _spitDestPipeIndex = _spitContDestPipeIndex;
- _canSpitPipe = false;
- _acceptInput = false;
- startAnimation(0x1B08B553, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSpit);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stContSpitIntoPipe);
-}
-
-void Klayman::stContSpitIntoPipe() {
- _canSpitPipe = true;
- _acceptInput = true;
- startAnimationByHash(0x1808B150, 0x16401CA6, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmSpit);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::suRidePlatform() {
- _x = _attachedSprite->getX() - 20;
- _y = _attachedSprite->getY() + 46;
- updateBounds();
-}
-
-void Klayman::stRidePlatform() {
- if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatform))) {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(&Klayman::suRidePlatform);
- }
-}
-
-void Klayman::stInteractLever() {
- if (!stStartAction(AnimationCallback(&Klayman::stInteractLever))) {
- _status2 = 0;
- if (_isLeverDown) {
- stUseLeverRelease();
- } else {
- _acceptInput = false;
- startAnimation(0x0C303040, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLever);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- NextState(&Klayman::stPullLever);
- }
- }
-}
-
-void Klayman::stPullLever() {
- startAnimation(0x0D318140, 0, -1);
- NextState(&Klayman::stLookLeverDown);
- sendMessage(_attachedSprite, 0x480F, 0);
-}
-
-void Klayman::stLookLeverDown() {
- _acceptInput = true;
- _isLeverDown = true;
- startAnimation(0x1564A2C0, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- NextState(&Klayman::stWaitLeverDown);
-}
-
-void Klayman::stWaitLeverDown() {
- _acceptInput = true;
- _isLeverDown = true;
- startAnimation(0x4464A440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
-}
-
-void Klayman::stStartWalkingResume() {
- int16 frameIndex = getGlobalVar(V_KLAYMAN_FRAMEINDEX) + _walkResumeFrameIncr;
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::suWalkingFirst);
- NextState(&Klayman::stUpdateWalkingFirst);
- FinalizeState(&Klayman::evStartWalkingDone);
-}
-
-void Klayman::upPeekInsideBlink() {
- update();
- ++_blinkCounter;
- if (_blinkCounter >= _blinkCounterMax)
- stPeekInsideBlink();
-}
-
-void Klayman::stPeekInside() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xAC20C012, 8, 37);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
- NextState(&Klayman::stPeekInsideBlink);
-}
-
-void Klayman::stPeekInsideReturn() {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0xAC20C012, 43, 49);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmLowLevelAnimation);
- SetSpriteUpdate(NULL);
-}
-
-void Klayman::stPeekInsideBlink() {
- _status2 = 0;
- _acceptInput = true;
- startAnimation(0xAC20C012, 38, 42);
- _newStickFrameIndex = 42;
- SetUpdateHandler(&Klayman::upPeekInsideBlink);
- SetMessageHandler(&Klayman::hmLowLevel);
- SetSpriteUpdate(NULL);
- _blinkCounter = 0;
- _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
-}
-
-//##############################################################################
-
-// KmScene1001
-
-KmScene1001::KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-}
-
-uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() == 2)
- GotoState(&Klayman::stSleeping);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullHammerLever);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4836:
- if (param.asInteger() == 1) {
- sendMessage(_parentScene, 0x2002, 0);
- GotoState(&Klayman::stWakeUp);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-// KmScene1002
-
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- setKlaymanIdleTable1();
-
-}
-
-void KmScene1002::xUpdate() {
- if (_x >= 250 && _x <= 435 && _y >= 420) {
- if (_idleTableNum == 0) {
- setKlaymanIdleTable(klaymanIdleTable1002, ARRAYSIZE(klaymanIdleTable1002));
- _idleTableNum = 1;
- }
- } else if (_idleTableNum == 1) {
- setKlaymanIdleTable1();
- _idleTableNum = 0;
- }
-}
-
-uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x2001:
- GotoState(&Klayman::stStandIdleSpecial);
- break;
- case 0x2007:
- _otherSprite = (Sprite*)param.asEntity();
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4803:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stJumpAndFall);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stDropFromRing);
- }
- break;
- case 0x4804:
- GotoState(&Klayman::stPeekWall);
- break;
- case 0x4805:
- switch (param.asInteger()) {
- case 1:
- GotoState(&Klayman::stJumpToRing1);
- break;
- case 2:
- GotoState(&Klayman::stJumpToRing2);
- break;
- case 3:
- GotoState(&Klayman::stJumpToRing3);
- break;
- case 4:
- GotoState(&Klayman::stJumpToRing4);
- break;
- }
- break;
- case 0x480A:
- GotoState(&Klayman::stMoveVenusFlyTrap);
- break;
- case 0x480D:
- GotoState(&Klayman::stJumpToRingVenusFlyTrap);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stPressDoorButton);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- sub41CCE0(param.asInteger());
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2005, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2005, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2005, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2006, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-// KmScene1004
-
-KmScene1004::KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _dataResource.load(0x01900A04);
-}
-
-uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x481E:
- GotoState(&Klayman::stReadNote);
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2000, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2001, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x4824:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = _dataResource.getPoint(param.asInteger()).y;
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4825:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = _dataResource.getPoint(param.asInteger()).y;
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4828:
- GotoState(&Klayman::stTurnToBackToUse);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene1109::KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stSitIdleTeleporter);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stWalkingFirst);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- break;
- case 0x481E:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483D:
- teleporterAppear(0x2C2A4A1C);
- break;
- case 0x483E:
- teleporterDisappear(0x3C2E4245);
- break;
- }
- return messageResult;
-}
-
-// KmScene1201
-
-KmScene1201::KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
- _flagF6 = true;
-
-}
-
-uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480A:
- GotoState(&Klayman::stMoveObject);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case 0x4813:
- GotoState(&Klayman::stFetchMatch);
- break;
- case 0x4814:
- GotoState(&Klayman::stTumbleHeadless);
- break;
- case 0x4815:
- GotoState(&Klayman::stCloseEyes);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x481F:
- GotoState(&Klayman::stWonderAbout);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene1303::KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4804:
- GotoState(&Klayman::stPeekWall1);
- break;
- case 0x483B:
- GotoState(&Klayman::stPeekWallReturn);
- break;
- case 0x483C:
- GotoState(&Klayman::stPeekWall2);
- break;
- }
- return 0;
-}
-
-KmScene1304::KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene1305::KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- GotoState(&Klayman::stCrashDown);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- }
- return 0;
-}
-
-KmScene1306::KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
-}
-
-uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stSitIdleTeleporter);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case NM_KLAYMAN_INSERT_DISK:
- GotoState(&Klayman::stInsertDisk);
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- else
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- else
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483D:
- teleporterAppear(0xEE084A04);
- break;
- case 0x483E:
- teleporterDisappear(0xB86A4274);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return messageResult;
-}
-
-KmScene1308::KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480A:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
- } else {
- GotoState(&Klayman::stMoveObjectFaceObject);
- }
- break;
- case 0x480D:
- GotoState(&Klayman::stUseLever);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case NM_KLAYMAN_INSERT_DISK:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stInsertKey);
- } else {
- GotoState(&Klayman::stInsertDisk);
- }
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case NM_KLAYMAN_RELEASE_LEVER:
- GotoState(&Klayman::stReleaseLever);
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-// KmScene1401
-
-KmScene1401::KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480A:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
- } else {
- GotoState(&Klayman::stMoveObjectFaceObject);
- }
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- }
- return 0;
-}
-
-// KmScene1402
-
-KmScene1402::KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- SetFilterY(&Sprite::defFilterY);
-}
-
-uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480A:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
- } else {
- GotoState(&Klayman::stMoveObjectFaceObject);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- }
- return 0;
-}
-
-// KmScene1403
-
-KmScene1403::KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4));
-}
-
-uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480A:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
- } else {
- GotoState(&Klayman::stMoveObjectFaceObject);
- }
- break;
- case 0x480D:
- GotoState(&Klayman::stUseLever);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case NM_KLAYMAN_RELEASE_LEVER:
- GotoState(&Klayman::stReleaseLever);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-// KmScene1404
-
-KmScene1404::KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480A:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stMoveObjectSkipTurnFaceObject);
- } else {
- GotoState(&Klayman::stMoveObjectFaceObject);
- }
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case NM_KLAYMAN_INSERT_DISK:
- GotoState(&Klayman::stInsertDisk);
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene1608::KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-}
-
-uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2032:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stSitIdleTeleporter);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- break;
- case 0x481E:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2032, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2032, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return messageResult;
-}
-
-// KmScene1705
-
-KmScene1705::KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter) {
- GotoState(&Klayman::stSitIdleTeleporter);
- } else {
- GotoState(&Klayman::stTryStandIdle);
- }
- break;
- case 0x4803:
- GotoState(&Klayman::stFallSkipJump);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- if (_isSittingInTeleporter) {
- GotoState(&Klayman::stTurnToUseInTeleporter);
- }
- break;
- case 0x481E:
- if (_isSittingInTeleporter) {
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483D:
- teleporterAppear(0x5E0A4905);
- break;
- case 0x483E:
- teleporterDisappear(0xD86E4477);
- break;
- }
- return messageResult;
-}
-
-KmScene1901::KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene2001::KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter) {
- GotoState(&Klayman::stSitIdleTeleporter);
- } else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stWalkingFirst);
- } else
- GotoState(&Klayman::stPeekWall);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- break;
- case 0x481E:
- if (_isSittingInTeleporter) {
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- }
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483D:
- teleporterAppear(0xBE68CC54);
- break;
- case 0x483E:
- teleporterDisappear(0x18AB4ED4);
- break;
- }
- return messageResult;
-}
-
-KmScene2101::KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- // Empty
-}
-
-uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stSitIdleTeleporter);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4811:
- GotoState(&Klayman::stHitByDoor);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- break;
- case 0x481E:
- if (_isSittingInTeleporter)//CHECKME
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483D:
- teleporterAppear(0xFF290E30);
- break;
- case 0x483E:
- teleporterDisappear(0x9A28CA1C);
- break;
- }
- return messageResult;
-}
-
-KmScene2201::KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _surface->setClipRects(clipRects, clipRectsCount);
-
- _dataResource.load(0x04104242);
- _flagF6 = false;
-}
-
-uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene2203::KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x4819:
- GotoState(&Klayman::stClayDoorOpen);
- break;
- case NM_KLAYMAN_INSERT_DISK:
- GotoState(&Klayman::stInsertDisk);
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene2205::KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-void KmScene2205::xUpdate() {
- setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
-}
-
-uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stStartWalkingResume);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene2206::KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _walkResumeFrameIncr = 1;
- _vm->_soundMan->addSound(0x80101800, 0xD3B02847);
-}
-
-KmScene2206::~KmScene2206() {
- _vm->_soundMan->deleteSoundGroup(0x80101800);
-}
-
-void KmScene2206::xUpdate() {
- setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
-}
-
-uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4803:
- GotoState(&Klayman::stRidePlatformDown);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stStartWalkingResume);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x4837:
- stopWalking();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene2207::KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x2001:
- GotoState(&Klayman::stRidePlatform);
- break;
- case 0x2005:
- suRidePlatform();
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480D:
- GotoState(&Klayman::stInteractLever);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case NM_KLAYMAN_RELEASE_LEVER:
- GotoState(&Klayman::stReleaseLever);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-KmScene2242::KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-void KmScene2242::xUpdate() {
- setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
-}
-
-uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stStartWalkingResume);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2) {
- GotoState(&Klayman::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stPickUpTube);
- } else {
- GotoState(&Klayman::stPickUpGeneric);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4837:
- stopWalking();
- break;
- }
- return 0;
-}
-
-KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-void KmHallOfRecords::xUpdate() {
- setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
-}
-
-uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stStartWalkingResume);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4837:
- stopWalking();
- break;
- }
- return 0;
-}
-
-KmScene2247::KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-void KmScene2247::xUpdate() {
- setGlobalVar(V_KLAYMAN_FRAMEINDEX, _currFrameIndex);
-}
-
-uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stStartWalkingResume);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4837:
- stopWalking();
- break;
- }
- return 0;
-}
-
-KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x4832:
- GotoState(&Klayman::stUseTube);
- break;
- case 0x4833:
- if (param.asInteger() == 1)
- GotoState(&Klayman::stWonderAbout);
- else {
- _spitPipeIndex = sendMessage(_parentScene, 0x2000, 0);
- GotoState(&Klayman::stTrySpitIntoPipe);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return messageResult;
-}
-
-KmScene2402::KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (!getGlobalVar(V_TV_JOKE_TOLD))
- GotoState(&Klayman::stStandWonderAbout);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stWalkingFirst);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return messageResult;
-}
-
-KmScene2403::KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullCord);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stPressFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2000, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2001, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return messageResult;
-}
-
-KmScene2406::KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _surface->setClipRects(clipRects, clipRectsCount);
-
-}
-
-uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() != 0) {
- _destX = param.asInteger();
- GotoState(&Klayman::stWalkingFirst);
- } else {
- GotoState(&Klayman::stPeekWall);
- }
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2)
- GotoState(&Klayman::stPickUpNeedle);
- else if (param.asInteger() == 1)
- GotoState(&Klayman::stPickUpTube);
- else
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481A:
- GotoState(&Klayman::stInsertDisk);
- break;
- case 0x481B:
- if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
- else
- sub41CCE0(param.asPoint().x);
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2000, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2001, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return messageResult;
-}
-
-KmScene2501::KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stSitIdleTeleporter);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- break;
- case 0x481E:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- }
- return messageResult;
-}
-
-KmScene2732::KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4804:
- GotoState(&Klayman::stPeekInside);
- break;
- case 0x483C:
- GotoState(&Klayman::stPeekInsideReturn);
- break;
- }
- return 0;
-}
-
-KmScene2801::KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x4837:
- stopWalking();
- break;
- }
- return 0;
-}
-
-KmScene2803::KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _surface->setClipRects(clipRects, clipRectsCount);
-
- _dataResource.load(0x00900849);
-}
-
-uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4803:
- _destY = param.asInteger();
- GotoState(&Klayman::stJumpToGrab);
- break;
- case 0x4804:
- if (param.asInteger() == 3)
- GotoState(&Klayman::stFinishGrow);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullCord);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x481F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else {
- GotoState(&Klayman::stWonderAboutHalf);
- }
- break;
- case 0x482E:
- GotoState(&Klayman::stWalkToFront);
- break;
- case 0x482F:
- GotoState(&Klayman::stTurnToBack);
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4838:
- GotoState(&Klayman::stJumpToGrabRelease);
- break;
- }
- return 0;
-}
-
-KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _dataResource.load(0x81120132);
-}
-
-uint32 KmScene2803Small::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToXSmall(param.asPoint().x);
- break;
- case 0x4004:
- GotoState(&Klayman::stStandIdleSmall);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToXSmall(_dataResource.getPoint(param.asInteger()).x);
- break;
- case 0x481F:
- if (param.asInteger() == 1)
- GotoState(&Klayman::stWonderAboutAfterSmall);
- else if (param.asInteger() == 0)
- GotoState(&Klayman::stWonderAboutHalfSmall);
- else
- GotoState(&Klayman::stWonderAboutSmall);
- break;
- case 0x482E:
- if (param.asInteger() == 1)
- GotoState(&Klayman::stWalkToFrontNoStepSmall);
- else if (param.asInteger() == 2)
- GotoState(&Klayman::stWalkToFront2Small);
- else
- GotoState(&Klayman::stWalkToFrontSmall);
- break;
- case 0x482F:
- if (param.asInteger() == 1)
- GotoState(&Klayman::stTurnToBackHalfSmall);
- else if (param.asInteger() == 2)
- GotoState(&Klayman::stTurnToBackWalkSmall);
- else
- GotoState(&Klayman::stTurnToBackSmall);
- break;
- case 0x4830:
- GotoState(&Klayman::stShrink);
- break;
- }
- return 0;
-}
-
-KmScene2805::KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
- uint32 messageResult = 0;
- switch (messageNum) {
- case 0x2000:
- _isSittingInTeleporter = param.asInteger() != 0;
- messageResult = 1;
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stSitIdleTeleporter);
- else
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481D:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stTurnToUseInTeleporter);
- break;
- case 0x481E:
- if (_isSittingInTeleporter)
- GotoState(&Klayman::stReturnFromUseInTeleporter);
- break;
- case 0x4834:
- GotoState(&Klayman::stStepOver);
- break;
- case 0x4835:
- sendMessage(_parentScene, 0x2000, 1);
- _isSittingInTeleporter = true;
- GotoState(&Klayman::stSitInTeleporter);
- break;
- case 0x4836:
- sendMessage(_parentScene, 0x2000, 0);
- _isSittingInTeleporter = false;
- GotoState(&Klayman::stGetUpFromTeleporter);
- break;
- case 0x483D:
- teleporterAppear(0xDE284B74);
- break;
- case 0x483E:
- teleporterDisappear(0xD82A4094);
- break;
- }
- return messageResult;
-}
-
-KmScene2806::KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- if (flag) {
- NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
- delete _surface;
- createSurface(1000, dimensions.width, dimensions.height);
- loadSound(3, 0x58E0C341);
- loadSound(4, 0x40A00342);
- loadSound(5, 0xD0A1C348);
- loadSound(6, 0x166FC6E0);
- loadSound(7, 0x00018040);
- }
-
- _dataResource.load(0x98182003);
- _surface->setClipRects(clipRects, clipRectsCount);
-
-}
-
-uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- startWalkToX(440, true);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullCord);
- break;
- case 0x4816:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x4831:
- GotoState(&Klayman::stGrow);
- break;
- case 0x4832:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stDrinkPotion);
- } else {
- GotoState(&Klayman::stUseTube);
- }
- break;
- }
- return 0;
-}
-
-KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- if (flag) {
- NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
- delete _surface;
- createSurface(1000, dimensions.width, dimensions.height);
- loadSound(3, 0x58E0C341);
- loadSound(4, 0x40A00342);
- loadSound(5, 0xD0A1C348);
- loadSound(6, 0x166FC6E0);
- loadSound(7, 0x00018040);
- }
-
- _dataResource.load(0x1830009A);
- _surface->setClipRects(clipRects, clipRectsCount);
-
-}
-
-uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- startWalkToX(226, true);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullCord);
- break;
- case 0x4816:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x4831:
- GotoState(&Klayman::stGrow);
- break;
- case 0x4832:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stDrinkPotion);
- } else {
- GotoState(&Klayman::stUseTube);
- }
- break;
- }
- return 0;
-}
-
-KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToXSmall(param.asPoint().x);
- break;
- case 0x4004:
- GotoState(&Klayman::stStandIdleSmall);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToXSmall(_dataResource.getPoint(param.asInteger()).x);
- break;
- case 0x481F:
- if (param.asInteger() == 1)
- GotoState(&Klayman::stWonderAboutAfterSmall);
- else if (param.asInteger() == 0)
- GotoState(&Klayman::stWonderAboutHalfSmall);
- else
- GotoState(&Klayman::stWonderAboutSmall);
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStepSmall);
- } else {
- GotoState(&Klayman::stWalkToFrontSmall);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToBackHalfSmall);
- } else {
- GotoState(&Klayman::stTurnToBackSmall);
- }
- break;
- case 0x4837:
- stopWalking();
- break;
- }
- return 0;
-}
-
-KmScene2810::KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-
- _surface->setClipRects(clipRects, clipRectsCount);
-
-}
-
-uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4803:
- _destY = param.asInteger();
- GotoState(&Klayman::stJumpToGrab);
- break;
- case 0x4804:
- if (param.asInteger() == 3)
- GotoState(&Klayman::stFinishGrow);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x4818:
- startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
- break;
- case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else if (param.asInteger() == 5) {
- GotoState(&Klayman::stTurnToUseExt);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2000, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2001, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x4824:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = _dataResource.getPoint(param.asInteger()).y;
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4825:
- sendMessage(_parentScene, 0x2000, 0);
- _destY = _dataResource.getPoint(param.asInteger()).y;
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4837:
- stopWalking();
- break;
- }
- return 0;
-}
-
-KmScene2812::KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
- // Empty
-}
-
-uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4805:
- _destY = param.asInteger();
- GotoState(&Klayman::stJumpToGrabFall);
- break;
- case NM_KLAYMAN_PICKUP:
- if (param.asInteger() == 2)
- GotoState(&Klayman::stPickUpNeedle);
- else if (param.asInteger() == 1)
- GotoState(&Klayman::stPickUpTube);
- else
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481A:
- GotoState(&Klayman::stInsertDisk);
- break;
- case 0x481B:
- if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
- else
- sub41CCE0(param.asPoint().x);
- break;
- case 0x481D:
- GotoState(&Klayman::stTurnToUse);
- break;
- case 0x481E:
- GotoState(&Klayman::stReturnFromUse);
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2001, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2001, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2001, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2002, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
deleted file mode 100644
index 99fcceb..0000000
--- a/engines/neverhood/klayman.h
+++ /dev/null
@@ -1,764 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_KLAYMAN_H
-#define NEVERHOOD_KLAYMAN_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/sprite.h"
-#include "neverhood/graphics.h"
-#include "neverhood/resource.h"
-
-namespace Neverhood {
-
-// TODO This code is horrible and weird and a lot of stuff needs renaming once a better name is found
-// TODO Also the methods should probably rearranged and be grouped together more consistently
-
-class Klayman;
-class Scene;
-
-const uint32 kKlaymanSpeedUpHash = 0x004A2148;
-
-#include "common/pack-start.h" // START STRUCT PACKING
-
-struct KlaymanIdleTableItem {
- int value;
- void (Klayman::*callback)();
-};
-
-#include "common/pack-end.h" // END STRUCT PACKING
-
-class Klayman : public AnimatedSprite {
-public:
- Klayman(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
-
- void update();
-
- void startIdleAnimation(uint32 fileHash, AnimationCb callback);
- void upIdleAnimation();
-
- void stDoIdlePickEar();
- void stIdlePickEar();
- void evIdlePickEarDone();
- uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stDoIdleSpinHead();
- void stIdleSpinHead();
- uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stDoIdleArms();
- void stIdleArms();
- void evIdleArmsDone();
- uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stDoIdleChest();
- void stIdleChest();
- uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stDoIdleHeadOff();
- void stIdleHeadOff();
- uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stIdleWonderAbout();
-
- void stDoIdleTeleporterHands();
- void stIdleTeleporterHands();
-
- void stDoIdleTeleporterHands2();
- void stIdleTeleporterHands2();
-
- void stTryStandIdle();
- void stStandAround();
- void upStandIdle();
- void stIdleBlink();
-
- bool stStartAction(AnimationCb callback3);
- bool stStartActionFromIdle(AnimationCb callback);
- uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stSneak();
- uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender);
- void suSneaking();
- void evSneakingDone();
-
- void stStartWalking();
- void stStartWalkingExt();
- void stWalkingOpenDoor();
- void suWalkingOpenDoor();
- void stStepOver();
- uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender);
- void evStartWalkingDone();
-
- void stWalkingFirst();
- void stWalkingFirstExt();
- void stStartWalkingResume();
- void stUpdateWalkingFirst();
- uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender);
- void suWalkingFirst();
-
- void stWalkToFrontNoStep();
- void stWalkToFront();
- void stTurnToFront();
- void stTurnToBack();
- uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stTurnToBackToUse();
- uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPickUpGeneric();
- void stPickUpNeedle();
- uint32 hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPickUpTube();
- uint32 hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stTurnToUse();
- void stTurnToUseHalf();
- void stTurnAwayFromUse();
- void stReturnFromUse();
- void stTurnToUseExt();
- uint32 hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stLargeStep();
- uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender);
- void suLargeStep();
- void evLargeStepDone();
-
- void stInsertKey();
- uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stReadNote();
- uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stHitByDoor();
- uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPeekWall();
- uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPeekWallReturn();
- uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPeekWallBlink();
- void upPeekWallBlink();
-
- void stPeekWall1();
-
- void stPeekWall2();
-
- void stPullHammerLever();
- uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stRidePlatformDown();
- void suRidePlatformDown();
-
- void stCrashDown();
- void stCrashDownFinished();
-
- void stShrink();
- uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stGrow();
- uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stDrinkPotion();
- uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPullCord();
- void stReleaseCord();
- uint32 hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stUseTube();
- uint32 hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stUseLever();
- void stUseLeverRelease();
- void stReleaseLever();
- void stInteractLever();
- uint32 hmLever(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stLetGoOfLever();
- void evLeverReleasedEvent();
-
- void stWakeUp();
-
- void stSleeping();
- uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPressButton();
- void stPressFloorButton();
- void stPressButtonSide();
- uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stWonderAbout();
- void stWonderAboutHalf();
- void stWonderAboutAfter();
-
- void stStandWonderAbout();
-
- void stStartClimbLadderUp();
- void stStartClimbLadderDown();
- uint32 hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stContinueClimbLadderUp();
-
- void stClimbLadderHalf();
- uint32 hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void setupJumpToRing();
- void stJumpToRing1();
- void stJumpToRing2();
- void stJumpToRing4();
- uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stHangOnRing();
-
- void stJumpToRing3();
- uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stHoldRing3();
- uint32 hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stReleaseRing();
-
- void stLandOnFeet();
- uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPullLeverDown();
- void stHoldLeverDown();
-
- void stInsertDisk();
- uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stMoveObjectSkipTurnFaceObject();
- void stMoveObjectSkipTurn();
- void stMoveObjectFaceObject();
- uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender);
- void evMoveObjectTurnDone();
-
- void stJumpToGrab();
- void stJumpToGrabFall();
- uint32 hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender);
- void suJumpToGrab();
-
- void stJumpToGrabRelease();
- uint32 hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stSitInTeleporter();
- uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stSitIdleTeleporter();
- void upSitIdleTeleporter();
-
- void stSitIdleTeleporterBlink();
-
- void stSitIdleTeleporterBlinkSecond();
-
- void stTurnToUseInTeleporter();
-
- void stReturnFromUseInTeleporter();
-
- void stGetUpFromTeleporter();
-
- void teleporterAppear(uint32 fileHash);
- void teleporterDisappear(uint32 fileHash);
- uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stClayDoorOpen();
- uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stFallSkipJump();
- void suFallSkipJump();
-
- void stMoveObject();
- void stContinueMoveObject();
- uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender);
- void upMoveObject();
-
- void stCloseEyes();
-
- void stTumbleHeadless();
- uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stFetchMatch();
- void stLightMatch();
- uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stHitByBoxingGlove();
- uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender);
- void evHitByBoxingGloveDone();
-
- void stStandIdleSmall();
- void stWonderAboutSmall();
- void stWonderAboutHalfSmall();
- void stWonderAboutAfterSmall();
-
- void stWalkToFrontNoStepSmall();
- void stWalkToFrontSmall();
- void stWalkToFront2Small();
- void stTurnToBackHalfSmall();
- void stTurnToBackWalkSmall();
- void stTurnToBackSmall();
- uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stFinishGrow();
- uint32 hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stJumpToRingVenusFlyTrap();
- uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stDropFromRing();
-
- void stStandIdleSpecial();
- uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stPressDoorButton();
- uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stSpitOutFall0();
- void stSpitOutFall2();
- void suFallDown();
- void upSpitOutFall();
-
- void stJumpAndFall();
- uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stFalling();
- void stFallTouchdown();
-
- void stMoveVenusFlyTrap();
- void stContinueMovingVenusFlyTrap();
- uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender);
- void evMoveVenusFlyTrapDone();
-
- void stPeekInside();
- void stPeekInsideReturn();
- void stPeekInsideBlink();
- void upPeekInsideBlink();
-
- ////////////////////////////////////////////////////////////////////////////
-
- void stopWalking();
-
- void suAction();
- void suUpdateDestX();
- void suWalkingTestExit();
-
- uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
- void setKlaymanIdleTable1();
- void setKlaymanIdleTable2();
- void setKlaymanIdleTable3();
-
- void setSoundFlag(bool value) { _soundFlag = value; }
-
- void spitIntoPipe();
- void stTrySpitIntoPipe();
- void stContSpitIntoPipe();
- uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void stRidePlatform();
- void suRidePlatform();
- void stPullLever();
- void stLookLeverDown();
- void stWaitLeverDown();
-
-protected:
- Scene *_parentScene;
- Sprite *_attachedSprite;
- int _ladderStatus;
- bool _isWalking;
- bool _isSneaking;
- bool _isLargeStep;
- bool _isMoveObjectRequested;
- bool _acceptInput;
- int16 _destX, _destY;
- int16 _idleCounter, _idleCounterMax;
- int16 _blinkCounter, _blinkCounterMax;
- int16 _countdown1;
- int16 _tapesToInsert, _keysToInsert;
- bool _flagF6;
- bool _isLeverDown;
- bool _isWalkingOpenDoorNotified;
- int _status2;
- bool _flagFA;
- int _status3;
- const KlaymanIdleTableItem *_idleTable;
- int _idleTableCount;
- int _idleTableMaxValue;
- NPointArray *_pathPoints;
- bool _soundFlag;
-
- bool _isSittingInTeleporter;
-
- bool _potionFlag1;
- bool _potionFlag2;
-
- int16 _platformDeltaY;
-
- Sprite *_otherSprite;
- int _idleTableNum;
-
- int16 _walkResumeFrameIncr;
-
- int _moveObjectCountdown;
-
- bool _canSpitPipe;
- bool _contSpitPipe;
- bool _readyToSpit;
- uint32 _spitPipeIndex;
- uint32 _spitDestPipeIndex;
- uint32 _spitContDestPipeIndex;
-
- virtual void xUpdate();
- // TODO Check if this can be turned into a void result
- virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-
- void startWalkToX(int16 x, bool flag);
- void startWalkToXExt(int16 x);
- void startWalkToXSmall(int16 x);
- void startSpecialWalkLeft(int16 x);
- void startSpecialWalkRight(int16 x);
- void sub41CC40(int16 x1, int16 x2);
- void sub41CCE0(int16 x);
-
- void gotoNextStateExt();
- void sub41C770();
- void sub41C790();
-
- void stStartWalkingSmall();
- uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
-
- void walkAlongPathPoints();
-
-};
-
-class KmScene1001 : public Klayman {
-public:
- KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1002 : public Klayman {
-public:
- KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- void xUpdate();
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1004 : public Klayman {
-public:
- KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1109 : public Klayman {
-public:
- KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1201 : public Klayman {
-public:
- KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1303 : public Klayman {
-public:
- KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1304 : public Klayman {
-public:
- KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1305 : public Klayman {
-public:
- KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1306 : public Klayman {
-public:
- KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1308 : public Klayman {
-public:
- KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1401 : public Klayman {
-public:
- KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1402 : public Klayman {
-public:
- KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1403 : public Klayman {
-public:
- KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1404 : public Klayman {
-public:
- KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1608 : public Klayman {
-public:
- KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1705 : public Klayman {
-public:
- KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene1901 : public Klayman {
-public:
- KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2001 : public Klayman {
-public:
- KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2101 : public Klayman {
-public:
- KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2201 : public Klayman {
-public:
- KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2203 : public Klayman {
-public:
- KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2205 : public Klayman {
-public:
- KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- void xUpdate();
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2206 : public Klayman {
-public:
- KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
- ~KmScene2206();
-protected:
- void xUpdate();
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2207 : public Klayman {
-public:
- KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2242 : public Klayman {
-public:
- KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- void xUpdate();
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmHallOfRecords : public Klayman {
-public:
- KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- void xUpdate();
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2247 : public Klayman {
-public:
- KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- void xUpdate();
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2401 : public Klayman {
-public:
- KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2402 : public Klayman {
-public:
- KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2403 : public Klayman {
-public:
- KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2406 : public Klayman {
-public:
- KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2501 : public Klayman {
-public:
- KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2732 : public Klayman {
-public:
- KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2801 : public Klayman {
-public:
- KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2803 : public Klayman {
-public:
- KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2803Small : public Klayman {
-public:
- KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2805 : public Klayman {
-public:
- KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2806 : public Klayman {
-public:
- KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2809 : public Klayman {
-public:
- KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2810Small : public Klayman {
-public:
- KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2810 : public Klayman {
-public:
- KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- NRect *clipRects, uint clipRectsCount);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-class KmScene2812 : public Klayman {
-public:
- KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y);
-protected:
- uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_KLAYMAN_H */
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp
new file mode 100644
index 0000000..6d139b1
--- /dev/null
+++ b/engines/neverhood/klaymen.cpp
@@ -0,0 +1,6240 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "neverhood/klaymen.h"
+#include "neverhood/resourceman.h"
+#include "neverhood/scene.h"
+#include "neverhood/staticdata.h"
+
+namespace Neverhood {
+
+static const KlaymenIdleTableItem klaymenTable1[] = {
+ {1, &Klaymen::stDoIdlePickEar},
+ {1, &Klaymen::stDoIdleSpinHead},
+ {1, &Klaymen::stDoIdleArms},
+ {1, &Klaymen::stDoIdleChest},
+ {1, &Klaymen::stDoIdleHeadOff}
+};
+
+static const KlaymenIdleTableItem klaymenTable2[] = {
+ {1, &Klaymen::stDoIdlePickEar},
+ {1, &Klaymen::stDoIdleSpinHead},
+ {1, &Klaymen::stDoIdleChest},
+ {1, &Klaymen::stDoIdleHeadOff}
+};
+
+static const KlaymenIdleTableItem klaymenTable3[] = {
+ {1, &Klaymen::stDoIdleTeleporterHands},
+ {1, &Klaymen::stDoIdleTeleporterHands2}
+};
+
+static const KlaymenIdleTableItem klaymenTable4[] = {
+ {1, &Klaymen::stDoIdleSpinHead},
+ {1, &Klaymen::stDoIdleChest},
+ {1, &Klaymen::stDoIdleHeadOff},
+};
+
+static const KlaymenIdleTableItem klaymenIdleTable1002[] = {
+ {1, &Klaymen::stDoIdlePickEar},
+ {2, &Klaymen::stIdleWonderAbout}
+};
+
+// Klaymen
+
+Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
+ : AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
+ _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
+ _attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
+ _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
+ _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
+
+ createSurface(surfacePriority, 320, 200);
+ _x = x;
+ _y = y;
+ _destX = x;
+ _destY = y;
+ _flags = 2;
+ setKlaymenIdleTable1();
+ stTryStandIdle();
+ SetUpdateHandler(&Klaymen::update);
+}
+
+void Klaymen::xUpdate() {
+ // Empty
+}
+
+uint32 Klaymen::xHandleMessage(int messageNum, const MessageParam ¶m) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klaymen::stTryStandIdle);
+ break;
+ case 0x4818:
+ startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
+ break;
+ }
+ return 0;
+}
+
+void Klaymen::update() {
+ AnimatedSprite::update();
+ xUpdate();
+}
+
+void Klaymen::setKlaymenIdleTable(const KlaymenIdleTableItem *table, int tableCount) {
+ _idleTable = table;
+ _idleTableCount = tableCount;
+ _idleTableMaxValue = 0;
+ for (int i = 0; i < tableCount; i++)
+ _idleTableMaxValue += table[i].value;
+}
+
+void Klaymen::setKlaymenIdleTable1() {
+ setKlaymenIdleTable(klaymenTable1, ARRAYSIZE(klaymenTable1));
+}
+
+void Klaymen::setKlaymenIdleTable2() {
+ setKlaymenIdleTable(klaymenTable2, ARRAYSIZE(klaymenTable2));
+}
+
+void Klaymen::setKlaymenIdleTable3() {
+ setKlaymenIdleTable(klaymenTable3, ARRAYSIZE(klaymenTable3));
+}
+
+void Klaymen::stDoIdlePickEar() {
+ startIdleAnimation(0x5B20C814, AnimationCallback(&Klaymen::stIdlePickEar));
+}
+
+void Klaymen::stIdlePickEar() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5B20C814, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmIdlePickEar);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+ FinalizeState(&Klaymen::evIdlePickEarDone);
+}
+
+uint32 Klaymen::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x04DBC02C) {
+ playSound(0, 0x44528AA1);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::evIdlePickEarDone() {
+ stopSound(0);
+}
+
+void Klaymen::stDoIdleSpinHead() {
+ startIdleAnimation(0xD122C137, AnimationCallback(&Klaymen::stIdleSpinHead));
+}
+
+void Klaymen::stIdleSpinHead() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0xD122C137, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmIdleSpinHead);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+}
+
+uint32 Klaymen::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x808A0008) {
+ playSound(0, 0xD948A340);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stDoIdleArms() {
+ startIdleAnimation(0x543CD054, AnimationCallback(&Klaymen::stIdleArms));
+}
+
+void Klaymen::stIdleArms() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x543CD054, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmIdleArms);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+ FinalizeState(&Klaymen::evIdleArmsDone);
+}
+
+void Klaymen::evIdleArmsDone() {
+ stopSound(0);
+}
+
+uint32 Klaymen::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x5A0F0104) {
+ playSound(0, 0x7970A100);
+ } else if (param.asInteger() == 0x9A9A0109) {
+ playSound(0, 0xD170CF04);
+ } else if (param.asInteger() == 0x989A2169) {
+ playSound(0, 0xD073CF14);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stDoIdleChest() {
+ startIdleAnimation(0x40A0C034, AnimationCallback(&Klaymen::stIdleChest));
+}
+
+void Klaymen::stIdleChest() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x40A0C034, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmIdleChest);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+}
+
+uint32 Klaymen::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x0D2A0288) {
+ playSound(0, 0xD192A368);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stDoIdleHeadOff() {
+ startIdleAnimation(0x5120E137, AnimationCallback(&Klaymen::stIdleHeadOff));
+}
+
+void Klaymen::stIdleHeadOff() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5120E137, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmIdleHeadOff);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+}
+
+uint32 Klaymen::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC006000C) {
+ playSound(0, 0x9D406340);
+ } else if (param.asInteger() == 0x2E4A2940) {
+ playSound(0, 0x53A4A1D4);
+ } else if (param.asInteger() == 0xAA0A0860) {
+ playSound(0, 0x5BE0A3C6);
+ } else if (param.asInteger() == 0xC0180260) {
+ playSound(0, 0x5D418366);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stIdleWonderAbout() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+}
+
+void Klaymen::stSitIdleTeleporter() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x582EC138, 0, -1);
+ SetUpdateHandler(&Klaymen::upSitIdleTeleporter);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+ _idleCounter = 0;
+ _blinkCounter = 0;
+ _idleCounterMax = 8;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+}
+
+void Klaymen::upSitIdleTeleporter() {
+ update();
+ _idleCounter++;
+ if (_idleCounter >= _idleCounterMax) {
+ _idleCounter = 0;
+ if (_idleTable) {
+ int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
+ for (int i = 0; i < _idleTableCount; i++) {
+ if (randomValue < _idleTable[i].value) {
+ (this->*(_idleTable[i].callback))();
+ _idleCounterMax = _vm->_rnd->getRandomNumber(128 - 1) + 24;
+ break;
+ }
+ randomValue -= _idleTable[i].value;
+ }
+ }
+ } else if (++_blinkCounter >= _blinkCounterMax) {
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ stSitIdleTeleporterBlink();
+ }
+}
+
+void Klaymen::stSitIdleTeleporterBlink() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x5C24C018, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stSitIdleTeleporterBlinkSecond);
+}
+
+void Klaymen::stSitIdleTeleporterBlinkSecond() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x5C24C018, 0, -1);
+ SetUpdateHandler(&Klaymen::upSitIdleTeleporter);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stPickUpNeedle() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klaymen::stPickUpNeedle))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x1449C169, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPickUpObject);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+void Klaymen::stPickUpTube() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klaymen::stPickUpTube))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x0018C032, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPickUpTube);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+uint32 Klaymen::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC1380080) {
+ sendMessage(_attachedSprite, 0x4806, 0);
+ playSound(0, 0xC8004340);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x03020231) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0x67221A03) {
+ playSound(0, 0x44051000);
+ } else if (param.asInteger() == 0x925A0C1E) {
+ playSound(0, 0x40E5884D);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stTurnToUseInTeleporter() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0xD229823D, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stReturnFromUseInTeleporter() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x9A2801E0, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stStepOver() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stStepOver))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x004AA310, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStartWalking);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stSitInTeleporter() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stSitInTeleporter))) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x392A0330, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmSitInTeleporter);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+uint32 Klaymen::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x001A2832) {
+ playSound(0, 0xC0E4884C);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stGetUpFromTeleporter() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x913AB120, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+/////////////////////////////////////////////////////////////////
+
+void Klaymen::stopWalking() {
+ _destX = _x;
+ if (!_isWalking && !_isSneaking && !_isLargeStep) {
+ gotoState(NULL);
+ gotoNextStateExt();
+ }
+}
+
+void Klaymen::startIdleAnimation(uint32 fileHash, AnimationCb callback) {
+ debug("startIdleAnimation(%08X)", fileHash);
+ NextState(callback);
+ SetUpdateHandler(&Klaymen::upIdleAnimation);
+}
+
+void Klaymen::upIdleAnimation() {
+ gotoNextStateExt();
+ update();
+}
+
+bool Klaymen::stStartActionFromIdle(AnimationCb callback) {
+ if (_status2 == 2) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x9A7020B8, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStartAction);
+ SetSpriteUpdate(NULL);
+ NextState(callback);
+ return true;
+ }
+ return false;
+}
+
+void Klaymen::gotoNextStateExt() {
+ if (_finalizeStateCb) {
+ AnimationCb cb = _finalizeStateCb;
+ _finalizeStateCb = NULL;
+ (this->*cb)();
+ }
+ if (_nextStateCb) {
+ AnimationCb cb = _nextStateCb;
+ _nextStateCb = NULL;
+ (this->*cb)();
+ } else {
+ // Inform the scene that the current Klaymen animation sequence has finished
+ sendMessage(_parentScene, 0x1006, 0);
+ }
+}
+
+void Klaymen::sub41C770() {
+ _flagFA = false;
+ _status3 = 1;
+}
+
+void Klaymen::sub41C790() {
+ if (_flagFA)
+ _status3 = 0;
+}
+
+void Klaymen::stTryStandIdle() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stTryStandIdle))) {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klaymen::upStandIdle);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+ _idleCounter = 0;
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
+ }
+}
+
+void Klaymen::upStandIdle() {
+ update();
+ if (++_idleCounter >= 720) {
+ _idleCounter = 0;
+ if (_idleTable) {
+ int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue - 1);
+ for (int i = 0; i < _idleTableCount; i++) {
+ if (randomValue < _idleTable[i].value) {
+ (this->*(_idleTable[i].callback))();
+ break;
+ }
+ randomValue -= _idleTable[i].value;
+ }
+ }
+ } else if (++_blinkCounter >= _blinkCounterMax) {
+ _blinkCounter = 0;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
+ stIdleBlink();
+ }
+}
+
+uint32 Klaymen::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Sprite::handleMessage(messageNum, param, sender);
+ uint32 messageResult = xHandleMessage(messageNum, param);
+ switch (messageNum) {
+ case 0x1008:
+ messageResult = _acceptInput;
+ break;
+ case 0x1014:
+ _attachedSprite = (Sprite*)(param.asEntity());
+ break;
+ case 0x1019:
+ gotoNextStateExt();
+ break;
+ case 0x101C:
+ sub41C770();
+ break;
+ case 0x1021:
+ sub41C790();
+ break;
+ case 0x481C:
+ _status3 = param.asInteger();
+ _flagFA = true;
+ messageResult = 1;
+ break;
+ case 0x482C:
+ if (param.asInteger() != 0) {
+ _pathPoints = _dataResource.getPointArray(param.asInteger());
+ } else {
+ _pathPoints = NULL;
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stIdleBlink() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5900C41E, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stStandAround);
+}
+
+uint32 Klaymen::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextStateExt();
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stStandAround() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klaymen::upStandIdle);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x271AA210) {
+ playSound(0, 0x4924AAC4);
+ } else if (param.asInteger() == 0x2B22AA81) {
+ playSound(0, 0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+
+void Klaymen::startWalkToX(int16 x, bool flag) {
+ int16 xdiff = ABS(x - _x);
+ if (x == _x) {
+ _destX = x;
+ if (!_isWalking && !_isSneaking && !_isLargeStep) {
+ gotoState(NULL);
+ gotoNextStateExt();
+ }
+ } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) {
+ _destX = x;
+ gotoState(NULL);
+ gotoNextStateExt();
+ } else if (xdiff <= 42 && _status3 != 3) {
+ if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
+ _destX = x;
+ } else {
+ _destX = x;
+ GotoState(&Klaymen::stSneak);
+ }
+ } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _destX = x;
+ } else if (flag) {
+ _destX = x;
+ GotoState(&Klaymen::stStartWalkingExt);
+ } else {
+ _destX = x;
+ GotoState(&Klaymen::stStartWalking);
+ }
+}
+
+void Klaymen::stWakeUp() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x527AC970, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stSleeping() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x5A38C110, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmSleeping);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x03060012) {
+ playSound(0, 0xC0238244);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+bool Klaymen::stStartAction(AnimationCb callback3) {
+ if (_status2 == 1) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x5C7080D4, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStartAction);
+ SetSpriteUpdate(&Klaymen::suAction);
+ NextState(callback3);
+ return true;
+ } else {
+ _x = _destX;
+ return false;
+ }
+}
+
+void Klaymen::suAction() {
+
+ int16 xdiff = _destX - _x;
+
+ if (_doDeltaX) {
+ _x -= _deltaX;
+ } else {
+ _x += _deltaX;
+ }
+ _deltaX = 0;
+
+ if (_doDeltaY) {
+ _y -= _deltaY;
+ } else {
+ _y += _deltaY;
+ }
+ _deltaY = 0;
+
+ if (_frameChanged) {
+ if (xdiff > 6)
+ _x += 6;
+ else if (xdiff < -6)
+ _x -= 6;
+ else
+ _x = _destX;
+ }
+
+ updateBounds();
+
+}
+
+void Klaymen::suSneaking() {
+
+ int16 xdiff = _destX - _x;
+
+ if (_currFrameIndex == 9) {
+ if (xdiff > 26)
+ _deltaX += xdiff - 26;
+ else if (xdiff < -26)
+ _deltaX -= xdiff + 26;
+ }
+
+ if (xdiff > _deltaX)
+ xdiff = _deltaX;
+ else if (xdiff < -_deltaX)
+ xdiff = -_deltaX;
+ _deltaX = 0;
+
+ if (_destX != _x) {
+ HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
+ _x += xdiff;
+ if (_pathPoints) {
+ walkAlongPathPoints();
+ } else {
+ HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
+ if (hitRectNext->type == 0x5002) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
+ } else if (hitRectNext->type == 0x5003) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
+ } else if (hitRectPrev->type == 0x5002) {
+ if (xdiff > 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ } else if (hitRectPrev->type == 0x5003) {
+ if (xdiff < 0) {
+ _y = hitRectPrev->rect.y2;
+ } else {
+ _y = hitRectPrev->rect.y1;
+ }
+ }
+ }
+ updateBounds();
+ }
+
+}
+
+void Klaymen::stSneak() {
+ _status2 = 1;
+ _isSneaking = true;
+ _acceptInput = true;
+ setDoDeltaX(_destX < _x ? 1 : 0);
+ startAnimation(0x5C48C506, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmSneaking);
+ SetSpriteUpdate(&Klaymen::suSneaking);
+ FinalizeState(&Klaymen::evSneakingDone);
+}
+
+void Klaymen::evSneakingDone() {
+ _isSneaking = false;
+}
+
+uint32 Klaymen::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0A2AA8E0);
+ } else if (param.asInteger() == 0x32188010) {
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
+ } else if (param.asInteger() == 0x02A2909C) {
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
+ }
+ break;
+ case 0x3002:
+ _x = _destX;
+ gotoNextStateExt();
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stStartWalking() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stStartWalking))) {
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ setDoDeltaX(_destX < _x ? 1 : 0);
+ startAnimation(0x242C0198, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStartWalking);
+ SetSpriteUpdate(&Klaymen::suWalkingTestExit);
+ NextState(&Klaymen::stWalkingFirst);
+ FinalizeState(&Klaymen::evStartWalkingDone);
+ }
+}
+
+void Klaymen::evStartWalkingDone() {
+ _isWalking = false;
+}
+
+uint32 Klaymen::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stWalkingFirst() {
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ startAnimation(0x1A249001, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalking);
+ SetSpriteUpdate(&Klaymen::suWalkingFirst);
+ NextState(&Klaymen::stUpdateWalkingFirst);
+ FinalizeState(&Klaymen::evStartWalkingDone);
+}
+
+void Klaymen::suWalkingFirst() {
+ SetSpriteUpdate(&Klaymen::suWalkingTestExit);
+ _deltaX = 0;
+}
+
+uint32 Klaymen::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stUpdateWalkingFirst() {
+ if (_status3 == 2) {
+ gotoNextStateExt();
+ } else if (_status3 == 3) {
+ stWalkingOpenDoor();
+ } else {
+ _isSneaking = true;
+ _acceptInput = true;
+ if (ABS(_destX - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
+ if (_status3 == 0) {
+ _status2 = 1;
+ startAnimation(0xF234EE31, 0, -1);
+ } else {
+ _status2 = 2;
+ startAnimation(0xF135CC21, 0, -1);
+ }
+ } else if (ABS(_destX - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
+ if (_status3 == 0) {
+ _status2 = 1;
+ startAnimation(0x8604A152, 0, -1);
+ } else {
+ _status2 = 2;
+ startAnimation(0xA246A132, 0, -1);
+ }
+ }
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmSneaking);
+ SetSpriteUpdate(&Klaymen::suSneaking);
+ FinalizeState(&Klaymen::evSneakingDone);
+ }
+}
+
+void Klaymen::suWalkingTestExit() {
+ int16 xdiff = ABS(_destX - _x);
+ int16 xdelta = _destX - _x;
+
+ if (xdelta > _deltaX)
+ xdelta = _deltaX;
+ else if (xdelta < -_deltaX)
+ xdelta = -_deltaX;
+
+ _deltaX = 0;
+
+ if (xdiff == 0 ||
+ (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) ||
+ (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) ||
+ (_status3 == 3 && xdiff < 30) ||
+ (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) {
+ sendMessage(this, 0x1019, 0);
+ } else {
+ HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
+ _x += xdelta;
+ if (_pathPoints) {
+ walkAlongPathPoints();
+ } else {
+ HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
+ if (hitRectNext->type == 0x5002) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
+ } else if (hitRectNext->type == 0x5003) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
+ } else if (hitRectPrev->type == 0x5002) {
+ _y = xdelta > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
+ } else if (hitRectPrev->type == 0x5003) {
+ _y = xdelta < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
+ } else if (_flagF6 && xdelta != 0) {
+ if (hitRectNext->type == 0x5000) {
+ _y++;
+ } else if (hitRectNext->type == 0x5001 && _y > hitRectNext->rect.y1) {
+ _y--;
+ }
+ }
+ }
+ updateBounds();
+ }
+
+}
+
+uint32 Klaymen::hmLever(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stPickUpGeneric() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klaymen::stPickUpGeneric))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x1C28C178, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPickUpObject);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+uint32 Klaymen::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC1380080) {
+ sendMessage(_attachedSprite, 0x4806, 0);
+ playSound(0, 0x40208200);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x03020231) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0x67221A03) {
+ playSound(0, 0x44051000);
+ } else if (param.asInteger() == 0x2EAE0303) {
+ playSound(0, 0x03630300);
+ } else if (param.asInteger() == 0x61CE4467) {
+ playSound(0, 0x03630300);
+ }
+ break;
+ }
+ return messageResult;
+
+}
+
+void Klaymen::stPressButton() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stPressButton))) {
+ _status2 = 2;
+ _acceptInput = true;
+ startAnimation(0x1C02B03D, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPressButton);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+uint32 Klaymen::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x0D01B294) {
+ sendMessage(_attachedSprite, 0x480B, 0);
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stPressFloorButton() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stPressFloorButton))) {
+ _status2 = 2;
+ _acceptInput = true;
+ startAnimation(0x1C16B033, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPressButton);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+void Klaymen::stPressButtonSide() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stPressButtonSide))) {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x1CD89029, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPressButton);
+ SetSpriteUpdate(&Klaymen::suAction);
+ }
+}
+
+void Klaymen::startSpecialWalkRight(int16 x) {
+ if (_x == x) {
+ _destX = x;
+ gotoState(NULL);
+ gotoNextStateExt();
+ } else if (_x < x) {
+ startWalkToX(x, false);
+ } else if (_x - x <= 105) {
+ startWalkToXExt(x);
+ } else {
+ startWalkToX(x, false);
+ }
+}
+
+void Klaymen::startSpecialWalkLeft(int16 x) {
+ if (x == _x) {
+ _destX = x;
+ gotoState(NULL);
+ gotoNextStateExt();
+ } else if (x < _x) {
+ startWalkToX(x, false);
+ } else if (x - _x <= 105) {
+ startWalkToXExt(x);
+ } else {
+ startWalkToX(x, false);
+ }
+}
+
+void Klaymen::startWalkToXSmall(int16 x) {
+ _status3 = 2;
+ if (_x == x) {
+ _destX = x;
+ if (_isWalking) {
+ GotoState(NULL);
+ gotoNextStateExt();
+ }
+ } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _destX = x;
+ } else {
+ _destX = x;
+ GotoState(&Klaymen::stStartWalkingSmall);
+ }
+}
+
+void Klaymen::stStartWalkingSmall() {
+ _isWalking = true;
+ _acceptInput = true;
+ _status3 = 2;
+ setDoDeltaX(_destX < _x ? 1 : 0);
+ startAnimation(0x3A4CD934, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkingSmall);
+ SetSpriteUpdate(&Klaymen::suWalkingTestExit);
+ FinalizeState(&Klaymen::evStartWalkingDone);
+}
+
+uint32 Klaymen::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101)
+ playSound(0, 0x4924AAC4);
+ else if (param.asInteger() == 0x0A2A9098)
+ playSound(0, 0x0A2AA8E0);
+ }
+ return messageResult;
+}
+
+void Klaymen::stStandIdleSmall() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x90D0D1D0, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stWonderAboutAfterSmall() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x11C8D156, 30, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stWonderAboutHalfSmall() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x11C8D156, 0, 10);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stWonderAboutSmall() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x11C8D156, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stWalkToFrontNoStepSmall() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x3F9CC394, 0x14884392, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+uint32 Klaymen::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5)
+ sendMessage(_parentScene, 0x482A, 0);
+ else if (param.asInteger() == 0x110010D1)
+ sendMessage(_parentScene, 0x482B, 0);
+ else if (param.asInteger() == 0x32180101)
+ playSound(0, 0x4924AAC4);
+ else if (param.asInteger() == 0x0A2A9098)
+ playSound(0, 0x0A2AA8E0);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stWalkToFront2Small() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2F1C4694, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+void Klaymen::stWalkToFrontSmall() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x3F9CC394, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+void Klaymen::stTurnToBackHalfSmall() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x37ECD436, 0, 0x8520108C);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+void Klaymen::stTurnToBackWalkSmall() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x16EDDE36, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+void Klaymen::stTurnToBackSmall() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x37ECD436, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkFrontBackSmall);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+void Klaymen::stPullCord() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stPullCord))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x3F28E094, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPullReleaseCord);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stReleaseCord);
+ }
+}
+
+void Klaymen::stReleaseCord() {
+ _acceptInput = false;
+ startAnimation(0x3A28C094, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPullReleaseCord);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ sendMessage(_attachedSprite, 0x480F, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stUseTube() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stUseTube))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x1A38A814, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmUseTube);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+uint32 Klaymen::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x02B20220)
+ playSound(0, 0xC5408620);
+ else if (param.asInteger() == 0x0A720138)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0x03020231)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0xB613A180)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x67221A03)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x038A010B)
+ playSound(0, 0x00018040);
+ else if (param.asInteger() == 0x422B0280)
+ playSound(0, 0x166FC6E0);
+ else if (param.asInteger() == 0x925A0C1E)
+ playSound(0, 0x40E5884D);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stWalkingFirstExt() {
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ startAnimation(0x5A2CBC00, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalking);
+ SetSpriteUpdate(&Klaymen::suWalkingFirst);
+ NextState(&Klaymen::stUpdateWalkingFirst);
+ FinalizeState(&Klaymen::evStartWalkingDone);
+}
+
+void Klaymen::stStartWalkingExt() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stStartWalkingExt))) {
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ setDoDeltaX(_destX < _x ? 1 : 0);
+ startAnimation(0x272C1199, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStartWalking);
+ SetSpriteUpdate(&Klaymen::suWalkingTestExit);
+ NextState(&Klaymen::stWalkingFirstExt);
+ FinalizeState(&Klaymen::evStartWalkingDone);
+ }
+}
+
+void Klaymen::sub41CC40(int16 x1, int16 x2) {
+ if (_x > x1) {
+ if (_x == x1 + x2) {
+ _destX = x1 + x2;
+ gotoState(NULL);
+ gotoNextStateExt();
+ } else if (_x < x1 + x2) {
+ startWalkToXExt(x1 + x2);
+ } else {
+ startWalkToX(x1 + x2, false);
+ }
+ } else {
+ if (_x == x1 - x2) {
+ _destX = x1 - x2;
+ gotoState(NULL);
+ gotoNextStateExt();
+ } else if (_x > x1 - x2) {
+ startWalkToXExt(x1 - x2);
+ } else {
+ startWalkToX(x1 - x2, false);
+ }
+ }
+}
+
+void Klaymen::startWalkToXExt(int16 x) {
+ int16 xdiff = ABS(x - _x);
+ if (x == _x) {
+ _destX = x;
+ if (!_isWalking && !_isSneaking && !_isLargeStep) {
+ gotoState(NULL);
+ gotoNextStateExt();
+ }
+ } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) {
+ _destX = x;
+ gotoState(NULL);
+ gotoNextStateExt();
+ } else if (xdiff <= 42 && _status3 != 3) {
+ if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
+ _destX = x;
+ } else {
+ _destX = x;
+ GotoState(&Klaymen::stSneak);
+ }
+ } else if (_isLargeStep && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
+ _destX = x;
+ } else {
+ _destX = x;
+ GotoState(&Klaymen::stLargeStep);
+ }
+}
+
+void Klaymen::stLargeStep() {
+ _status2 = 2;
+ _isLargeStep = true;
+ _acceptInput = true;
+ setDoDeltaX(_destX >= _x ? 1 : 0);
+ startAnimation(0x08B28116, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLargeStep);
+ SetSpriteUpdate(&Klaymen::suLargeStep);
+ FinalizeState(&Klaymen::evLargeStepDone);
+}
+
+void Klaymen::evLargeStepDone() {
+ _isLargeStep = false;
+}
+
+void Klaymen::suLargeStep() {
+ int16 xdiff = _destX - _x;
+
+ if (_doDeltaX) {
+ _deltaX = -_deltaX;
+ }
+
+ if (_currFrameIndex == 7) {
+ _deltaX = xdiff;
+ }
+
+ if ((xdiff > 0 && xdiff > _deltaX) || (xdiff < 0 && xdiff < _deltaX))
+ xdiff = _deltaX;
+
+ _deltaX = 0;
+
+ if (_x != _destX) {
+ HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
+ _x += xdiff;
+ if (_pathPoints) {
+ walkAlongPathPoints();
+ } else {
+ HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y);
+ if (hitRectNext->type == 0x5002) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2);
+ } else if (hitRectNext->type == 0x5003) {
+ _y = MAX<int16>(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2);
+ } else if (hitRectPrev->type == 0x5002) {
+ _y = xdiff > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
+ } else if (hitRectPrev->type == 0x5003) {
+ _y = xdiff < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
+ }
+ }
+ updateBounds();
+ }
+}
+
+uint32 Klaymen::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0A2AA8E0);
+ }
+ break;
+ case 0x3002:
+ _x = _destX;
+ gotoNextStateExt();
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stWonderAboutHalf() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, 10);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stWonderAboutAfter() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 30, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stTurnToUseHalf() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x9B250AD2, 0, 7);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTurnToUse);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stTurnAwayFromUse() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x98F88391, 4, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTurnToUse);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stWonderAbout() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stPeekWall() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPeekWall);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender) {
+ int16 speedUpFrameIndex;
+ switch (messageNum) {
+ case 0x1008:
+ speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash);
+ if (_currFrameIndex < speedUpFrameIndex)
+ startAnimation(0xAC20C012, speedUpFrameIndex, -1);
+ return 0;
+ case 0x100D:
+ if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0460E2FA);
+ }
+ break;
+ }
+ return hmLowLevelAnimation(messageNum, param, sender);
+}
+
+void Klaymen::stJumpToRing1() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing1))) {
+ _status2 = 0;
+ startAnimation(0xD82890BA, 0, -1);
+ setupJumpToRing();
+ }
+}
+
+void Klaymen::setupJumpToRing() {
+ _acceptInput = false;
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmJumpToRing);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ NextState(&Klaymen::stHangOnRing);
+ sendMessage(_attachedSprite, 0x482B, 0);
+}
+
+uint32 Klaymen::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0) {
+ sendMessage(_attachedSprite, 0x4806, 0);
+ _acceptInput = true;
+ } else if (param.asInteger() == 0x320AC306) {
+ playSound(0, 0x5860C640);
+ } else if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::suUpdateDestX() {
+ AnimatedSprite::updateDeltaXY();
+ _destX = _x;
+}
+
+void Klaymen::stHangOnRing() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x4829E0B8, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stJumpToRing2() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing2))) {
+ _status2 = 0;
+ startAnimation(0x900980B2, 0, -1);
+ setupJumpToRing();
+ }
+}
+
+void Klaymen::stJumpToRing3() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing3))) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0xBA1910B2, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ SetMessageHandler(&Klaymen::hmJumpToRing3);
+ NextState(&Klaymen::stHoldRing3);
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+}
+
+uint32 Klaymen::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0) {
+ sendMessage(_attachedSprite, 0x4806, 0);
+ } else if (param.asInteger() == 0x320AC306) {
+ playSound(0, 0x5860C640);
+ } else if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stHoldRing3() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x4A293FB0, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmHoldRing3);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender) {
+ if (messageNum == 0x1008) {
+ stReleaseRing();
+ return 0;
+ }
+ return hmLowLevel(messageNum, param, sender);
+}
+
+void Klaymen::stReleaseRing() {
+ _status2 = 1;
+ _acceptInput = false;
+ sendMessage(_attachedSprite, 0x4807, 0);
+ _attachedSprite = NULL;
+ startAnimation(0xB869A4B9, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stJumpToRing4() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing4))) {
+ _status2 = 0;
+ startAnimation(0xB8699832, 0, -1);
+ setupJumpToRing();
+ }
+}
+
+void Klaymen::sub41CCE0(int16 x) {
+ sub41CC40(_attachedSprite->getX(), x);
+}
+
+void Klaymen::stContinueClimbLadderUp() {
+ _status2 = 0;
+ _acceptInput = true;
+ _ladderStatus = 3;
+ startAnimationByHash(0x3A292504, 0x01084280, 0);
+ _newStickFrameHash = 0x01084280;
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+ gotoNextStateExt();
+}
+
+void Klaymen::stStartClimbLadderDown() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stStartClimbLadderDown))) {
+ _status2 = 0;
+ if (_destY < _y) {
+ if (_ladderStatus == 1) {
+ _ladderStatus = 2;
+ stClimbLadderHalf();
+ } else {
+ gotoNextStateExt();
+ }
+ } else if (_ladderStatus == 0) {
+ _ladderStatus = 2;
+ _acceptInput = false;
+ startAnimation(0x122D1505, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClimbLadderUpDown);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ } else if (_ladderStatus == 3) {
+ _ladderStatus = 2;
+ _acceptInput = true;
+ startAnimationByHash(0x122D1505, 0x01084280, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClimbLadderUpDown);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ } else if (_ladderStatus == 1) {
+ _ladderStatus = 2;
+ _acceptInput = true;
+ startAnimation(0x122D1505, 29 - _currFrameIndex, -1);
+ }
+ }
+}
+
+void Klaymen::stClimbLadderHalf() {
+ _status2 = 2;
+ if (_ladderStatus == 1) {
+ _ladderStatus = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x3A292504, 0x02421405, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClimbLadderHalf);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ } else if (_ladderStatus == 2) {
+ _ladderStatus = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x122D1505, 0x02421405, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClimbLadderHalf);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ } else {
+ gotoNextStateExt();
+ }
+}
+
+uint32 Klaymen::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x489B025C) {
+ playSound(0, 0x52C4C2D7);
+ } else if (param.asInteger() == 0x400A0E64) {
+ playSound(0, 0x50E081D9);
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ _acceptInput = true;
+ } else if (param.asInteger() == 0x489B025C) {
+ playSound(0, 0x52C4C2D7);
+ } else if (param.asInteger() == 0x400A0E64) {
+ playSound(0, 0x50E081D9);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_ladderStatus == 1) {
+ startAnimationByHash(0x3A292504, 0x01084280, 0);
+ if (_destY >= _y - 30)
+ sendMessage(this, 0x1019, 0);
+ } else {
+ startAnimationByHash(0x122D1505, 0x01084280, 0);
+ if (_destY <= _y)
+ sendMessage(this, 0x1019, 0);
+ }
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stStartClimbLadderUp() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stStartClimbLadderUp))) {
+ _status2 = 0;
+ if (_destY >= _y - 30) {
+ gotoNextStateExt();
+ } else if (_ladderStatus == 0) {
+ _ladderStatus = 1;
+ _acceptInput = false;
+ startAnimation(0x3A292504, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClimbLadderUpDown);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ } else if (_ladderStatus == 3) {
+ _ladderStatus = 1;
+ _acceptInput = true;
+ startAnimationByHash(0x3A292504, 0x01084280, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClimbLadderUpDown);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ } else if (_ladderStatus == 2) {
+ _ladderStatus = 1;
+ _acceptInput = true;
+ startAnimation(0x3A292504, 29 - _currFrameIndex, -1);
+ }
+ }
+}
+
+void Klaymen::stWalkToFrontNoStep() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimationByHash(0xF229C003, 0x14884392, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkToFront);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+uint32 Klaymen::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5) {
+ sendMessage(_parentScene, 0x482A, 0);
+ } else if (param.asInteger() == 0x110010D1) {
+ sendMessage(_parentScene, 0x482B, 0);
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stWalkToFront() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stWalkToFront))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0xF229C003, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkToFront);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stTurnToFront() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stTurnToFront))) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0xCA221107, 0, 0x8520108C);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkToFront);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stTurnToBack() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stTurnToBack))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0xCA221107, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmWalkToFront);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stLandOnFeet() {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x18118554, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLandOnFeet);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x320AC306) {
+ playSound(0, 0x5860C640);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stTurnToBackToUse() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stTurnToBackToUse))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x91540140, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTurnToBackToUse);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+uint32 Klaymen::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0xC61A0119) {
+ playSound(0, 0x402338C2);
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x4924AAC4);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0A2AA8E0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stClayDoorOpen() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stClayDoorOpen))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x5CCCB330, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmClayDoorOpen);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+uint32 Klaymen::hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x040D4186) {
+ sendMessage(_attachedSprite, 0x4808, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stTurnToUse() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stTurnToUse))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x9B250AD2, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTurnToUse);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stReturnFromUse() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x98F88391, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTurnToUse);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+}
+
+void Klaymen::stWalkingOpenDoor() {
+ _isWalkingOpenDoorNotified = false;
+ _acceptInput = false;
+ startAnimation(0x11A8E012, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStartWalking);
+ SetSpriteUpdate(&Klaymen::suWalkingOpenDoor);
+}
+
+void Klaymen::suWalkingOpenDoor() {
+ if (!_isWalkingOpenDoorNotified && ABS(_destX - _x) < 80) {
+ sendMessage(_parentScene, 0x4829, 0);
+ _isWalkingOpenDoorNotified = true;
+ }
+ AnimatedSprite::updateDeltaXY();
+}
+
+void Klaymen::stMoveObjectSkipTurnFaceObject() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ _isMoveObjectRequested = false;
+ _acceptInput = true;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ SetMessageHandler(&Klaymen::hmMoveObjectTurn);
+}
+
+void Klaymen::evMoveObjectTurnDone() {
+ sendMessage(_attachedSprite, 0x4807, 0);
+}
+
+uint32 Klaymen::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
+ stMoveObjectSkipTurn();
+ } else {
+ FinalizeState(&Klaymen::evMoveObjectTurnDone);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ }
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0460E2FA);
+ }
+ break;
+ case 0x480A:
+ _isMoveObjectRequested = true;
+ return 0;
+ }
+ return hmLowLevelAnimation(messageNum, param, sender);
+}
+
+void Klaymen::stMoveObjectSkipTurn() {
+ _isMoveObjectRequested = false;
+ _acceptInput = true;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ SetMessageHandler(&Klaymen::hmMoveObjectTurn);
+}
+
+void Klaymen::stMoveObjectFaceObject() {
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ if (!stStartAction(AnimationCallback(&Klaymen::stMoveObjectFaceObject))) {
+ _status2 = 2;
+ _isMoveObjectRequested = false;
+ _acceptInput = true;
+ startAnimation(0x0C1CA072, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmMoveObjectTurn);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stUseLever() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stUseLever))) {
+ _status2 = 0;
+ if (_isLeverDown) {
+ stUseLeverRelease();
+ } else {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ startAnimation(0x0C303040, 0, -1);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ SetMessageHandler(&Klaymen::hmLever);
+ SetUpdateHandler(&Klaymen::update);
+ NextState(&Klaymen::stPullLeverDown);
+ _acceptInput = false;
+ }
+ }
+}
+
+// Exactly the same code as sub420DA0 which was removed
+void Klaymen::stPullLeverDown() {
+ startAnimation(0x0D318140, 0, -1);
+ sendMessage(_attachedSprite, 0x480F, 0);
+ NextState(&Klaymen::stHoldLeverDown);
+}
+
+void Klaymen::stHoldLeverDown() {
+ startAnimation(0x4464A440, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ _isLeverDown = true;
+ _acceptInput = true;
+}
+
+void Klaymen::stUseLeverRelease() {
+ startAnimation(0x09018068, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLever);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ sendMessage(_attachedSprite, 0x4807, 0);
+ NextState(&Klaymen::stPullLeverDown);
+ _acceptInput = false;
+}
+
+void Klaymen::stReleaseLever() {
+ if (_isLeverDown) {
+ _status2 = 2;
+ startAnimation(0x09018068, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLever);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ sendMessage(_attachedSprite, 0x4807, 0);
+ NextState(&Klaymen::stLetGoOfLever);
+ _acceptInput = false;
+ _isLeverDown = false;
+ } else {
+ gotoNextStateExt();
+ }
+}
+
+void Klaymen::stLetGoOfLever() {
+ startAnimation(0x0928C048, 0, -1);
+ FinalizeState(&Klaymen::evLeverReleasedEvent);
+}
+
+void Klaymen::evLeverReleasedEvent() {
+ sendMessage(_attachedSprite, 0x482A, 0);
+}
+
+void Klaymen::stInsertDisk() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stInsertDisk))) {
+ _status2 = 2;
+ _tapesToInsert = 0;
+ for (uint32 i = 0; i < 20; i++) {
+ if (getSubVar(VA_HAS_TAPE, i)) {
+ setSubVar(VA_IS_TAPE_INSERTED, i, 1);
+ setSubVar(VA_HAS_TAPE, i, 0);
+ _tapesToInsert++;
+ }
+ }
+ if (_tapesToInsert == 0) {
+ GotoState(NULL);
+ gotoNextStateExt();
+ } else {
+ startAnimation(0xD8C8D100, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmInsertDisk);
+ SetSpriteUpdate(&Klaymen::suAction);
+ _acceptInput = false;
+ _tapesToInsert--;
+ }
+ }
+}
+
+uint32 Klaymen::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) {
+ nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0);
+ } else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) {
+ _tapesToInsert--;
+ startAnimationByHash(0xD8C8D100, 0x01084280, 0);
+ } else if (param.asInteger() == 0x062A1510) {
+ playSound(0, 0x41688704);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ playSound(0, 0x44051000);
+ } else if (param.asInteger() == 0x0E040501) {
+ playSound(1, 0xC6A129C1);
+ }
+ }
+ return messageResult;
+}
+
+void Klaymen::walkAlongPathPoints() {
+ if (_x <= (*_pathPoints)[0].x)
+ _y = (*_pathPoints)[0].y;
+ else if (_x >= (*_pathPoints)[_pathPoints->size() - 1].x)
+ _y = (*_pathPoints)[_pathPoints->size() - 1].y;
+ else {
+ int16 deltaX = _x - (*_pathPoints)[0].x, deltaXIncr = 0;
+ uint index = 0;
+ while (deltaX > 0) {
+ NPoint pt2 = (*_pathPoints)[index];
+ NPoint pt1 = index + 1 >= _pathPoints->size() ? (*_pathPoints)[0] : (*_pathPoints)[index + 1];
+ int16 xd = ABS(pt1.x - pt2.x);
+ int16 yd = ABS(pt1.y - pt2.y);
+ if (deltaX + deltaXIncr >= xd) {
+ deltaX -= xd;
+ deltaX += deltaXIncr;
+ ++index;
+ if (index >= _pathPoints->size())
+ index = 0;
+ _y = (*_pathPoints)[index].y;
+ } else {
+ deltaXIncr += deltaX;
+ if (pt1.y >= pt2.y) {
+ _y = pt2.y + (yd * deltaXIncr) / xd;
+ } else {
+ _y = pt2.y - (yd * deltaXIncr) / xd;
+ }
+ deltaX = 0;
+ }
+ }
+ }
+}
+
+void Klaymen::stJumpToGrab() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimationByHash(0x00AB8C10, 0x01084280, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(&Klaymen::suJumpToGrab);
+ SetMessageHandler(&Klaymen::hmJumpToGrab);
+}
+
+void Klaymen::suJumpToGrab() {
+ updateDeltaXY();
+ if (_y >= _destY) {
+ _y = _destY;
+ updateBounds();
+ gotoNextStateExt();
+ }
+}
+
+uint32 Klaymen::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0)
+ sendMessage(_attachedSprite, 0x4806, 0);
+ else if (param.asInteger() == 0x320AC306)
+ startAnimationByHash(0x00AB8C10, 0x01084280, 0);
+ else if (param.asInteger() == 0x4AB28209)
+ sendMessage(_attachedSprite, 0x482A, 0);
+ else if (param.asInteger() == 0x88001184)
+ sendMessage(_attachedSprite, 0x482B, 0);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stFinishGrow() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x38445000, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klaymen::hmFinishGrow);
+}
+
+uint32 Klaymen::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x040C4C01)
+ playSound(0, 0x01E11140);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stTurnToUseExt() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stTurnToUseExt))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x1B3D8216, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTurnToUse);
+ SetSpriteUpdate(&Klaymen::suUpdateDestX);
+ }
+}
+
+void Klaymen::stJumpToGrabFall() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stJumpToGrabFall))) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x00AB8C10, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmJumpToGrab);
+ SetSpriteUpdate(&Klaymen::suJumpToGrab);
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+}
+
+void Klaymen::stJumpToGrabRelease() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimationByHash(0x00AB8C10, 0x320AC306, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmJumpToGrabRelease);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stReleaseRing);
+}
+
+uint32 Klaymen::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x320AC306)
+ playSound(0, 0x5860C640);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stDoIdleTeleporterHands() {
+ startIdleAnimation(0x90EF8D38, AnimationCallback(&Klaymen::stIdleTeleporterHands));
+}
+
+void Klaymen::stIdleTeleporterHands() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x90EF8D38, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stSitIdleTeleporterBlinkSecond);
+}
+
+void Klaymen::stDoIdleTeleporterHands2() {
+ startIdleAnimation(0x900F0930, AnimationCallback(&Klaymen::stIdleTeleporterHands2));
+}
+
+void Klaymen::stIdleTeleporterHands2() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0x900F0930, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stSitIdleTeleporterBlinkSecond);
+}
+
+void Klaymen::teleporterAppear(uint32 fileHash) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(fileHash, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTeleporterAppearDisappear);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::teleporterDisappear(uint32 fileHash) {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(fileHash, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmTeleporterAppearDisappear);
+ SetSpriteUpdate(NULL);
+}
+
+uint32 Klaymen::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4E0A2C24) {
+ playSound(0, 0x85B10BB8);
+ } else if (param.asInteger() == 0x4E6A0CA0) {
+ playSound(0, 0xC5B709B0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x80C110B5)
+ sendMessage(_parentScene, 0x482A, 0);
+ else if (param.asInteger() == 0x33288344)
+ playSound(2, 0x10688664);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stShrink() {
+ _status2 = 0;
+ _acceptInput = false;
+ playSound(0, 0x4C69EA53);
+ startAnimation(0x1AE88904, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmShrink);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+void Klaymen::stStandWonderAbout() {
+ if (_x > 260)
+ setDoDeltaX(1);
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xD820A114, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(NULL);
+ _newStickFrameIndex = 10;
+}
+
+uint32 Klaymen::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1008:
+ if (_potionFlag1) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ } else
+ _potionFlag2 = true;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x0002418E)
+ sendMessage(_parentScene, 0x2000, 0);
+ else if (param.asInteger() == 0x924090C2) {
+ _potionFlag1 = true;
+ if (_potionFlag2) {
+ startAnimationByHash(0x1C388C04, 0x004A2148, 0);
+ messageResult = 0;
+ }
+ } else if (param.asInteger() == 0x004A2148)
+ _potionFlag1 = false;
+ else if (param.asInteger() == 0x02B20220)
+ playSound(0, 0xC5408620);
+ else if (param.asInteger() == 0x0A720138)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0x03020231)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0xB613A180)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x67221A03)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x038A010B)
+ playSound(0, 0x00018040);
+ else if (param.asInteger() == 0x422B0280)
+ playSound(0, 0x166FC6E0);
+ else if (param.asInteger() == 0x925A0C1E)
+ playSound(0, 0x40E5884D);
+ else if (param.asInteger() == 0x000F0082)
+ playSound(0, 0x546CDCC1);
+ else if (param.asInteger() == 0x00020814)
+ playSound(0, 0x786CC6D0);
+ else if (param.asInteger() == 0x06020500)
+ playSound(0, 0x1069C0E1);
+ else if (param.asInteger() == 0x02128C00)
+ playSound(0, 0x5068C4C3);
+ else if (param.asInteger() == 0x82022030)
+ playSound(0, 0x5C48C0E8);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x32180101)
+ playSound(0, 0x405002D8);
+ else if (param.asInteger() == 0x0A2A9098)
+ playSound(0, 0x0460E2FA);
+ else if (param.asInteger() == 0xD00A0C0C)
+ playSound(3);
+ else if (param.asInteger() == 0x04121920)
+ playSound(4);
+ else if (param.asInteger() == 0x030B4480)
+ playSound(5);
+ else if (param.asInteger() == 0x422B0280)
+ playSound(6);
+ else if (param.asInteger() == 0x038A010B)
+ playSound(7);
+ else if (param.asInteger() == 0x67221A03)
+ playSound(0, 0x44051000);
+ else if (param.asInteger() == 0x02B20220)
+ playSound(0, 0xC5408620);
+ else if (param.asInteger() == 0x925A0C1E)
+ playSound(0, 0x40E5884D);
+ else if (param.asInteger() == 0x03020231)
+ playSound(0, 0xD4C08010);
+ else if (param.asInteger() == 0x08040840)
+ setDoDeltaX(2);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stGrow() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2838C010, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmGrow);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+void Klaymen::stDrinkPotion() {
+ _status2 = 1;
+ _acceptInput = false;
+ _potionFlag1 = false;
+ _potionFlag2 = false;
+ startAnimation(0x1C388C04, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmDrinkPotion);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+uint32 Klaymen::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (_keysToInsert == 0 && param.asInteger() == 0x06040580) {
+ nextAnimationByHash(0xDC409440, 0x46431401, 0);
+ } else if (_keysToInsert != 0 && param.asInteger() == 0x46431401) {
+ _keysToInsert--;
+ startAnimationByHash(0xDC409440, 0x01084280, 0);
+ } else if (param.asInteger() == 0x062A1510) {
+ playSound(0, 0x41688704);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ playSound(0, 0x44051000);
+ } else if (param.asInteger() == 0x0E4C8141) {
+ playSound(0, 0xDC4A1280);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stInsertKey() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stInsertKey))) {
+ _status2 = 2;
+ _keysToInsert = 0;
+ for (uint32 i = 0; i < 3; i++) {
+ if (getSubVar(VA_HAS_KEY, i)) {
+ bool more;
+ setSubVar(VA_IS_KEY_INSERTED, i, 1);
+ setSubVar(VA_HAS_KEY, i, 0);
+ do {
+ more = false;
+ setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1));
+ for (uint j = 0; j < i && !more; j++) {
+ if (getSubVar(VA_IS_KEY_INSERTED, j) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i))
+ more = true;
+ }
+ if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i))
+ more = true;
+ } while (more);
+ _keysToInsert++;
+ }
+ }
+ if (_keysToInsert == 0) {
+ GotoState(NULL);
+ gotoNextStateExt();
+ } else {
+ _acceptInput = false;
+ startAnimation(0xDC409440, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmInsertKey);
+ SetSpriteUpdate(&Klaymen::suAction);
+ _keysToInsert--;
+ }
+ }
+}
+
+uint32 Klaymen::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x04684052) {
+ _acceptInput = true;
+ sendMessage(_parentScene, 0x2002, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stReadNote() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x123E9C9F, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmReadNote);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+}
+
+uint32 Klaymen::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ int16 speedUpFrameIndex;
+ switch (messageNum) {
+ case 0x1008:
+ speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash);
+ if (_currFrameIndex < speedUpFrameIndex) {
+ startAnimation(0x35AA8059, speedUpFrameIndex, -1);
+ _y = 438;
+ }
+ messageResult = 0;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x1A1A0785) {
+ playSound(0, 0x40F0A342);
+ } else if (param.asInteger() == 0x60428026) {
+ playSound(0, 0x40608A59);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::stHitByDoor() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x35AA8059, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmHitByDoor);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ playSound(0, 0x402E82D4);
+}
+
+uint32 Klaymen::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == calcHash("PopBalloon")) {
+ sendMessage(_parentScene, 0x2000, 0);
+ } else if (param.asInteger() == 0x02B20220) {
+ playSound(0, 0xC5408620);
+ } else if (param.asInteger() == 0x0A720138) {
+ playSound(0, 0xD4C08010);
+ } else if (param.asInteger() == 0xB613A180) {
+ playSound(0, 0x44051000);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::upPeekWallBlink() {
+ Klaymen::update();
+ _blinkCounter++;
+ if (_blinkCounter >= _blinkCounterMax)
+ stPeekWallBlink();
+}
+
+void Klaymen::stPeekWall1() {
+ _status2 = 0;
+ _acceptInput = true;
+ startAnimation(0xAC20C012, 8, 37);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(NULL);
+ NextState(&Klaymen::stPeekWallBlink);
+}
+
+void Klaymen::stPeekWall2() {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0xAC20C012, 43, 49);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+}
+
+void Klaymen::stPeekWallBlink() {
+ _blinkCounter = 0;
+ _status2 = 0;
+ _acceptInput = true;
+ _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
+ startAnimation(0xAC20C012, 38, 42);
+ SetUpdateHandler(&Klaymen::upPeekWallBlink);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ _newStickFrameIndex = 42;
+}
+
+void Klaymen::stPeekWallReturn() {
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x2426932E, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPeekWallReturn);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stPullHammerLever() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stPullHammerLever))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x00648953, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmPullHammerLever);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ }
+}
+
+uint32 Klaymen::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = Klaymen::hmLever(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209)
+ sendMessage(_attachedSprite, 0x480F, 0);
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::suRidePlatformDown() {
+ _platformDeltaY++;
+ _y += _platformDeltaY;
+ if (_y > 600)
+ sendMessage(this, 0x1019, 0);
+}
+
+void Klaymen::stRidePlatformDown() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stRidePlatformDown))) {
+ _status2 = 1;
+ sendMessage(_parentScene, 0x4803, 0);
+ _acceptInput = false;
+ _platformDeltaY = 0;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(&Klaymen::suRidePlatformDown);
+ _vm->_soundMan->playSoundLooping(0xD3B02847);
+ }
+}
+
+void Klaymen::stCrashDown() {
+ playSound(0, 0x41648271);
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimationByHash(0x000BAB02, 0x88003000, 0);
+ SetUpdateHandler(&Klaymen::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ NextState(&Klaymen::stCrashDownFinished);
+}
+
+void Klaymen::stCrashDownFinished() {
+ setDoDeltaX(2);
+ stTryStandIdle();
+}
+
+void Klaymen::upSpitOutFall() {
+ Klaymen::update();
+ if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ _surface->setVisible(true);
+ SetUpdateHandler(&Klaymen::update);
+ }
+}
+
+uint32 Klaymen::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x168050A0) {
+ sendMessage(_attachedSprite, 0x480F, 0);
+ } else if (param.asInteger() == 0x586B0300) {
+ sendMessage(_otherSprite, 0x480E, 1);
+ } else if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x4811:
+ playSound(0, 0x5252A0E4);
+ setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
+ if (_doDeltaX) {
+ _x = ((Sprite*)sender)->getX() - 75;
+ } else {
+ _x = ((Sprite*)sender)->getX() + 75;
+ }
+ _y = ((Sprite*)sender)->getY() - 200;
+ if (param.asInteger() == 0) {
+ stSpitOutFall0();
+ } else if (param.asInteger() == 1) {
+ // NOTE This is never used and the code was removed
+ // Also the animations used here in the original don't exist...
+ } else if (param.asInteger() == 2) {
+ stSpitOutFall2();
+ }
+ break;
+ }
+ return 0;
+}
+
+uint32 Klaymen::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x942D2081) {
+ _acceptInput = false;
+ sendMessage(_attachedSprite, 0x2003, 0);
+ } else if (param.asInteger() == 0xDA600012) {
+ stHitByBoxingGlove();
+ } else if (param.asInteger() == 0x0D01B294) {
+ _acceptInput = false;
+ sendMessage(_attachedSprite, 0x480B, 0);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ sendMessage(_attachedSprite, 0x480B, (uint32)_doDeltaX);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_isMoveObjectRequested) {
+ if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0)
+ stContinueMovingVenusFlyTrap();
+ } else {
+ SetMessageHandler(&Klaymen::hmFirstMoveVenusFlyTrap);
+ }
+ } else if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0460E2FA);
+ }
+ break;
+ case 0x480A:
+ _isMoveObjectRequested = true;
+ return 0;
+ }
+ return hmLowLevelAnimation(messageNum, param, sender);
+}
+
+uint32 Klaymen::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x4AB28209) {
+ sendMessage(_attachedSprite, 0x482A, 0);
+ } else if (param.asInteger() == 0x88001184) {
+ sendMessage(_attachedSprite, 0x482B, 0);
+ } else if (param.asInteger() == 0x32180101) {
+ playSound(0, 0x405002D8);
+ } else if (param.asInteger() == 0x0A2A9098) {
+ playSound(0, 0x0460E2FA);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) {
+ int16 speedUpFrameIndex;
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x1008:
+ speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash);
+ if (_currFrameIndex < speedUpFrameIndex) {
+ startAnimation(0x35AA8059, speedUpFrameIndex, -1);
+ _y = 435;
+ }
+ messageResult = 0;
+ break;
+ case 0x100D:
+ if (param.asInteger() == 0x1A1A0785) {
+ playSound(0, 0x40F0A342);
+ } else if (param.asInteger() == 0x60428026) {
+ playSound(0, 0x40608A59);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Klaymen::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x1307050A) {
+ playSound(0, 0x40428A09);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klaymen::suFallDown() {
+ AnimatedSprite::updateDeltaXY();
+ HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10);
+ if (hitRect->type == 0x5001) {
+ _y = hitRect->rect.y1;
+ updateBounds();
+ sendMessage(this, 0x1019, 0);
+ }
+ _parentScene->checkCollision(this, 0xFFFF, 0x4810, 0);
+}
+
+void Klaymen::stJumpToRingVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRingVenusFlyTrap))) {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimation(0x584984B4, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmJumpToRingVenusFlyTrap);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ NextState(&Klaymen::stLandOnFeet);
+ sendMessage(_attachedSprite, 0x482B, 0);
+ }
+}
+
+void Klaymen::stStandIdleSpecial() {
+ playSound(0, 0x56548280);
+ _status2 = 0;
+ _acceptInput = false;
+ _surface->setVisible(false);
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klaymen::update);
+ SetMessageHandler(&Klaymen::hmStandIdleSpecial);
+ SetSpriteUpdate(NULL);
+}
+
+void Klaymen::stSpitOutFall0() {
+ _countdown1 = 1;
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x000BAB02, 0, -1);
+ SetUpdateHandler(&Klaymen::upSpitOutFall);
+ SetMessageHandler(&Klaymen::hmLowLevel);
+ SetSpriteUpdate(&Klaymen::suFallDown);
+ NextState(&Klaymen::stFalling);
+ sendMessage(_parentScene, 0x8000, 0);
+}
+
+void Klaymen::stSpitOutFall2() {
+ _countdown1 = 1;
+ _status2 = 0;
+ _acceptInput = false;
+ startAnimation(0x9308C132, 0, -1);
+ SetUpdateHandler(&Klaymen::upSpitOutFall);
+ SetMessageHandler(&Klaymen::hmLowLevelAnimation);
+ SetSpriteUpdate(&Klaymen::suFallDown);
+ NextState(&Klaymen::stFalling);
+ sendMessage(_parentScene, 0x8000, 0);
+}
+
+void Klaymen::stFalling() {
+ sendMessage(_parentScene, 0x1024, 1);
+ playSound(0, 0x41648271);
+ _status2 = 1;
+ _acceptInput = false;
Commit: 490d447ed19d481c9e15847c9bb43223b71c7847
https://github.com/scummvm/scummvm/commit/490d447ed19d481c9e15847c9bb43223b71c7847
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Implement restart functionality (from both main menu and game logic)
- Some minor cleanup
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/gamevars.cpp
engines/neverhood/gamevars.h
engines/neverhood/menumodule.cpp
engines/neverhood/module1600.cpp
engines/neverhood/module1900.cpp
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index cf56522..fa8a6d5 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -75,7 +75,7 @@ enum {
GameModule::GameModule(NeverhoodEngine *vm)
: Module(vm, NULL), _moduleNum(-1), _prevChildObject(NULL), _prevModuleNum(-1),
- _mainMenuRequested(false), _gameWasLoaded(false) {
+ _restartGameRequested(false), _mainMenuRequested(false), _gameWasLoaded(false) {
// Other initializations moved to actual engine class
_vm->_soundMan->playSoundThree(0x002D0031, 0x8861079);
@@ -400,9 +400,9 @@ void GameModule::startup() {
// <<<DEBUG
#if 1
- _vm->gameState().which = 1;
- _vm->gameState().sceneNum = 1;
- createModule(1000, -1);
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 8;
+ createModule(1800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 5;
@@ -473,7 +473,17 @@ void GameModule::restoreGame() {
createModuleByHash(getGlobalVar(V_MODULE_NAME));
}
+void GameModule::requestRestartGame(bool requestMainMenu) {
+ _restartGameRequested = true;
+ _mainMenuRequested = requestMainMenu;
+}
+
void GameModule::checkMainMenu() {
+ if (_restartGameRequested) {
+ _restartGameRequested = false;
+ _vm->_gameVars->clear();
+ restoreGame();
+ }
if (_mainMenuRequested)
openMainMenu();
}
@@ -646,7 +656,8 @@ void GameModule::createModuleByHash(uint32 nameHash) {
createModule(3000, -1);
break;
default:
- error("GameModule::createModuleByHash() Unknown module name %08X", nameHash);
+ createModule(1000, 0);
+ break;
}
}
@@ -673,9 +684,7 @@ void GameModule::updateModule() {
case 1300:
if (_moduleResult == 1) {
// The game was successfully finished
- // TODO Restart the game/show main menu
- // TODO _gameState.clear();
- // TODO GameModule_handleKeyEscape
+ requestRestartGame(true);
} else
createModule(2900, 0);
break;
@@ -702,9 +711,7 @@ void GameModule::updateModule() {
case 1800:
if (_moduleResult == 1) {
// Game over, Klaymen jumped into the hole
- // TODO Restart the game/show main menu
- // TODO _gameState.clear();
- // TODO GameModule_handleKeyEscape
+ requestRestartGame(true);
} else if (_moduleResult == 2)
createModule(2700, 0);
else if (_moduleResult == 3)
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index ee6b000..b212a19 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -34,6 +34,7 @@ public:
virtual ~GameModule();
void startup();
void restoreGame();
+ void requestRestartGame(bool requestMainMenu);
void checkMainMenu();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
@@ -57,6 +58,7 @@ protected:
Entity *_prevChildObject;
int _prevModuleNum;
bool _gameWasLoaded;
+ bool _restartGameRequested;
bool _mainMenuRequested;
bool _someFlag1;
bool _field2C;
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index 57d9547..87f5fe6 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -28,6 +28,11 @@ GameVars::GameVars() {
addVar(0, 0);
}
+void GameVars::clear() {
+ _vars.clear();
+ addVar(0, 0);
+}
+
void GameVars::loadState(Common::InSaveFile *in) {
uint varCount;
_vars.clear();
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 3672aa6..5337c13 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -172,6 +172,7 @@ struct GameVar {
class GameVars {
public:
GameVars();
+ void clear();
void loadState(Common::InSaveFile *in);
void saveState(Common::OutSaveFile *out);
uint32 getGlobalVar(uint32 nameHash);
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 71b216b..b86fc70 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/menumodule.h"
+#include "neverhood/gamemodule.h"
namespace Neverhood {
@@ -31,6 +32,18 @@ enum {
SAVE_GAME_MENU = 3
};
+enum {
+ kMainMenuRestartGame = 0,
+ kMainMenuLoadGame = 1,
+ kMainMenuSaveGame = 2,
+ kMainMenuResumeGame = 3,
+ kMainMenuQuitGame = 4,
+ kMainMenuCredits = 5,
+ kMainMenuMakingOf = 6,
+ kMainMenuToggleMusic = 7,
+ kMainMenuDeleteGame = 8
+};
+
static const uint32 kMakingOfSmackerFileHashList[] = {
0x21082409,
0x21082809,
@@ -97,42 +110,34 @@ void MenuModule::updateScene() {
case MAIN_MENU:
// TODO
switch (_moduleResult) {
- case 0:
- // 0048A2A5
- debug("RESTART GAME");
+ case kMainMenuRestartGame:
+ _vm->_gameModule->requestRestartGame(false);
+ leaveModule(0);
break;
- case 1:
- debug("LOAD GAME");
+ case kMainMenuLoadGame:
// TODO createLoadGameMenu();
break;
- case 2:
- debug("SAVE GAME");
+ case kMainMenuSaveGame:
createScene(SAVE_GAME_MENU, -1);
break;
- case 3:
- debug("RESUME GAME");
+ case kMainMenuResumeGame:
leaveModule(0);
break;
- case 4:
- debug("QUIT GAME");
+ case kMainMenuQuitGame:
leaveModule(0);
_vm->quitGame();
break;
- case 5:
- debug("CREDITS");
+ case kMainMenuCredits:
createScene(CREDITS_SCENE, -1);
break;
- case 6:
- debug("MAKING OF");
+ case kMainMenuMakingOf:
createScene(MAKING_OF, -1);
break;
- case 7:
- debug("TOGGLE MUSIC");
+ case kMainMenuToggleMusic:
// TODO Toggle music 0048A367
createScene(MAIN_MENU, -1);
break;
- case 8:
- debug("DELETE GAME");
+ case kMainMenuDeleteGame:
// TODO createDeleteGameMenu();
break;
default:
@@ -270,30 +275,14 @@ uint32 MainMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity
}
static const uint32 kCreditsSceneFileHashes[] = {
- 0x6081128C,
- 0x608112BC,
- 0x608112DC,
- 0x6081121C,
- 0x6081139C,
- 0x6081109C,
- 0x6081169C,
- 0x60811A9C,
- 0x6081029C,
- 0x0081128C,
- 0x008112BC,
- 0x008012BC,
- 0x008112DC,
- 0x0081121C,
- 0x0081139C,
- 0x0081109C,
- 0x0081169C,
- 0x00811A9C,
- 0x0081029C,
- 0x0081329C,
- 0xC08112BC,
- 0xC08112DC,
- 0xC081121C,
- 0xC081139C,
+ 0x6081128C, 0x608112BC, 0x608112DC,
+ 0x6081121C, 0x6081139C, 0x6081109C,
+ 0x6081169C, 0x60811A9C, 0x6081029C,
+ 0x0081128C, 0x008112BC, 0x008012BC,
+ 0x008112DC, 0x0081121C, 0x0081139C,
+ 0x0081109C, 0x0081169C, 0x00811A9C,
+ 0x0081029C, 0x0081329C, 0xC08112BC,
+ 0xC08112DC, 0xC081121C, 0xC081139C,
0
};
@@ -353,7 +342,7 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, En
case 0x0009:
leaveScene(0);
break;
- case 0x000B://TODO Implement this message
+ case 0x000B:
if (param.asInteger() == Common::KEYCODE_ESCAPE && _canAbort)
leaveScene(0);
break;
@@ -388,6 +377,7 @@ void WidgetScene::setCurrWidget(Widget *newWidget) {
}
void WidgetScene::handleEvent(int16 itemID, int eventType) {
+ // Empty
}
Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
@@ -403,7 +393,7 @@ Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene
void Widget::onClick() {
_parentScene->setCurrWidget(this);
- // TODO _parentScene->onClick(_itemID, 0);
+ // TODO? _parentScene->onClick(_itemID, 0);
}
void Widget::setPosition(int16 x, int16 y) {
@@ -490,7 +480,7 @@ void TextLabelWidget::clear() {
void TextLabelWidget::onClick() {
Widget::onClick();
- // TODO Click handler?
+ // TODO? Click handler
}
void TextLabelWidget::setString(const byte *string, int stringLen) {
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index bb6874e..cc1aa2c 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -28,12 +28,8 @@
namespace Neverhood {
static const uint32 kModule1600SoundList[] = {
- 0x90805C50,
- 0x90804450,
- 0xB4005E60,
- 0x91835066,
- 0x90E14440,
- 0
+ 0x90805C50, 0x90804450, 0xB4005E60,
+ 0x91835066, 0x90E14440, 0
};
Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 31bf05b..348306f 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -199,9 +199,9 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
}
void AsScene1907Symbol::update() {
- AnimatedSprite::updateAnim();
+ updateAnim();
handleSpriteUpdate();
- AnimatedSprite::updatePosition();
+ updatePosition();
if (_plugInFailed && _plugInTryCount == 0)
_plugInFailed = false;
}
@@ -488,8 +488,8 @@ AsScene1907WaterHint::AsScene1907WaterHint(NeverhoodEngine *vm)
}
void AsScene1907WaterHint::update() {
- AnimatedSprite::updateAnim();
- AnimatedSprite::updatePosition();
+ updateAnim();
+ updatePosition();
}
uint32 AsScene1907WaterHint::hmShowing(int messageNum, const MessageParam ¶m, Entity *sender) {
@@ -629,19 +629,19 @@ void Scene1907::plugInFailed() {
}
int Scene1907::getRandomPositionIndex() {
- bool flag = false;
+ bool found = false;
int index = 0;
// Check if any position is free
for (int i = 0; i < 9; i++)
if (_positionFree[i])
- flag = true;
- if (flag) {
+ found = true;
+ if (found) {
// Get a random free position
- flag = false;
- while (!flag) {
+ found = false;
+ while (!found) {
index = _vm->_rnd->getRandomNumber(9 - 1);
if (_positionFree[index])
- flag = true;
+ found = true;
}
}
return index;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index d4b0984..bfba0b9 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -122,8 +122,6 @@ Common::Error NeverhoodEngine::run() {
delete _gameVars;
delete _staticData;
- debug("Ok.");
-
return Common::kNoError;
}
Commit: 379a8cbbe031c0c637029946b4cebea1e3e72bd5
https://github.com/scummvm/scummvm/commit/379a8cbbe031c0c637029946b4cebea1e3e72bd5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Add support for loading/saving games with the game's own menu
- Add LoadGameMenu class
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
engines/neverhood/neverhood.cpp
engines/neverhood/neverhood.h
engines/neverhood/saveload.cpp
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index fa8a6d5..48462a2 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -75,7 +75,7 @@ enum {
GameModule::GameModule(NeverhoodEngine *vm)
: Module(vm, NULL), _moduleNum(-1), _prevChildObject(NULL), _prevModuleNum(-1),
- _restartGameRequested(false), _mainMenuRequested(false), _gameWasLoaded(false) {
+ _restoreGameRequested(false), _restartGameRequested(false), _mainMenuRequested(false), _gameWasLoaded(false) {
// Other initializations moved to actual engine class
_vm->_soundMan->playSoundThree(0x002D0031, 0x8861079);
@@ -464,13 +464,8 @@ void GameModule::startup() {
#endif
}
-void GameModule::restoreGame() {
- delete _childObject;
- delete _prevChildObject;
- _childObject = NULL;
- _prevChildObject = NULL;
- _prevModuleNum = 0;
- createModuleByHash(getGlobalVar(V_MODULE_NAME));
+void GameModule::requestRestoreGame() {
+ _restoreGameRequested = true;
}
void GameModule::requestRestartGame(bool requestMainMenu) {
@@ -478,11 +473,27 @@ void GameModule::requestRestartGame(bool requestMainMenu) {
_mainMenuRequested = requestMainMenu;
}
-void GameModule::checkMainMenu() {
+void GameModule::redrawPrevChildObject() {
+ if (_prevChildObject) {
+ _prevChildObject->draw();
+ _vm->_screen->update();
+ }
+}
+
+void GameModule::checkRequests() {
if (_restartGameRequested) {
_restartGameRequested = false;
_vm->_gameVars->clear();
- restoreGame();
+ requestRestoreGame();
+ }
+ if (_restoreGameRequested) {
+ _restoreGameRequested = false;
+ delete _childObject;
+ delete _prevChildObject;
+ _childObject = NULL;
+ _prevChildObject = NULL;
+ _prevModuleNum = 0;
+ createModuleByHash(getGlobalVar(V_MODULE_NAME));
}
if (_mainMenuRequested)
openMainMenu();
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index b212a19..04fc780 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -33,9 +33,10 @@ public:
GameModule(NeverhoodEngine *vm);
virtual ~GameModule();
void startup();
- void restoreGame();
+ void requestRestoreGame();
void requestRestartGame(bool requestMainMenu);
- void checkMainMenu();
+ void redrawPrevChildObject();
+ void checkRequests();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
void handleMouseUp(int16 x, int16 y);
@@ -58,6 +59,7 @@ protected:
Entity *_prevChildObject;
int _prevModuleNum;
bool _gameWasLoaded;
+ bool _restoreGameRequested;
bool _restartGameRequested;
bool _mainMenuRequested;
bool _someFlag1;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index b86fc70..396d8cf 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -23,13 +23,16 @@
#include "neverhood/menumodule.h"
#include "neverhood/gamemodule.h"
+#include "engines/savestate.h"
+
namespace Neverhood {
enum {
MAIN_MENU = 0,
CREDITS_SCENE = 1,
MAKING_OF = 2,
- SAVE_GAME_MENU = 3
+ LOAD_GAME_MENU = 3,
+ SAVE_GAME_MENU = 4
};
enum {
@@ -77,10 +80,14 @@ MenuModule::~MenuModule() {
_vm->_screen->setPaletteData(_savedPaletteData);
}
+void MenuModule::setLoadgameInfo(uint slot) {
+ _savegameSlot = slot;
+ debug("LOADGAME: slot = %d", slot);
+}
+
void MenuModule::setSavegameInfo(const Common::String &description, uint slot, bool newSavegame) {
_savegameDescription = description;
- _savegameSlot = slot;
- _newSavegame = newSavegame;
+ _savegameSlot = newSavegame ? _savegameList->size() : slot;
debug("SAVEGAME: description = [%s]; slot = %d; new = %d", description.c_str(), slot, newSavegame);
}
@@ -96,6 +103,9 @@ void MenuModule::createScene(int sceneNum, int which) {
case MAKING_OF:
createSmackerScene(kMakingOfSmackerFileHashList, false, true, true);
break;
+ case LOAD_GAME_MENU:
+ createLoadGameMenu();
+ break;
case SAVE_GAME_MENU:
createSaveGameMenu();
break;
@@ -108,14 +118,13 @@ void MenuModule::updateScene() {
if (!updateChild()) {
switch (_sceneNum) {
case MAIN_MENU:
- // TODO
switch (_moduleResult) {
case kMainMenuRestartGame:
_vm->_gameModule->requestRestartGame(false);
leaveModule(0);
break;
case kMainMenuLoadGame:
- // TODO createLoadGameMenu();
+ createScene(LOAD_GAME_MENU, -1);
break;
case kMainMenuSaveGame:
createScene(SAVE_GAME_MENU, -1);
@@ -149,8 +158,11 @@ void MenuModule::updateScene() {
case MAKING_OF:
createScene(MAIN_MENU, -1);
break;
+ case LOAD_GAME_MENU:
+ handleLoadGameMenuAction(_moduleResult != 1);
+ break;
case SAVE_GAME_MENU:
- handleSaveGameMenuAction(_moduleResult);
+ handleSaveGameMenuAction(_moduleResult != 1);
break;
default:
break;
@@ -163,27 +175,71 @@ uint32 MenuModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
return Module::handleMessage(messageNum, param, sender);;
}
+void MenuModule::createLoadGameMenu() {
+ _savegameSlot = -1;
+ _savegameList = new Common::StringArray();
+ loadSavegameList();
+ _childObject = new LoadGameMenu(_vm, this, _savegameList);
+}
+
void MenuModule::createSaveGameMenu() {
- // TODO Load actual savegames list :)
- _savegameList = new StringArray();
- _savegameList->push_back(Common::String("Annoying scene"));
- _savegameList->push_back(Common::String("Stuff happens"));
- for (uint i = 0; i < 33; ++i)
- _savegameList->push_back(Common::String::format("Game %d", i));
+ _savegameSlot = -1;
+ _savegameList = new Common::StringArray();
+ loadSavegameList();
_childObject = new SaveGameMenu(_vm, this, _savegameList);
}
-void MenuModule::handleSaveGameMenuAction(int action) {
- if (action != 0) {
- createScene(MAIN_MENU, -1);
- } else {
- // TODO Actual saving later 0048A62E
- createScene(MAIN_MENU, -1);
+void MenuModule::handleLoadGameMenuAction(bool doLoad) {
+ createScene(MAIN_MENU, -1);
+ if (doLoad && _savegameSlot >= 0) {
+ _vm->loadGameState(_savegameSlot);
+ leaveModule(0);
+ }
+ delete _savegameList;
+ _savegameList = NULL;
+}
+
+void MenuModule::handleSaveGameMenuAction(bool doSave) {
+ createScene(MAIN_MENU, -1);
+ if (doSave && _savegameSlot >= 0) {
+ // Restore the scene palette and background so that the correct thumbnail is saved
+ byte *menuPaletteData = _vm->_screen->getPaletteData();
+ _vm->_screen->setPaletteData(_savedPaletteData);
+ _vm->_gameModule->redrawPrevChildObject();
+ _vm->saveGameState(_savegameSlot, _savegameDescription);
+ _vm->_screen->setPaletteData(menuPaletteData);
+ leaveModule(0);
}
delete _savegameList;
_savegameList = NULL;
}
+void MenuModule::loadSavegameList() {
+
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Neverhood::NeverhoodEngine::SaveHeader header;
+ Common::String pattern = _vm->getTargetName();
+ pattern += ".???";
+
+ Common::StringArray filenames;
+ filenames = saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(filenames.begin(), filenames.end());
+
+ SaveStateList saveList;
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); file++) {
+ int slotNum = atoi(file->c_str() + file->size() - 3);
+ if (slotNum >= 0 && slotNum <= 999) {
+ Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
+ if (in) {
+ if (Neverhood::NeverhoodEngine::readSaveHeader(in, false, header) == Neverhood::NeverhoodEngine::kRSHENoError)
+ _savegameList->push_back(header.description);
+ delete in;
+ }
+ }
+ }
+
+}
+
MenuButton::MenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex, uint32 fileHash, const NRect &collisionBounds)
: StaticSprite(vm, 900), _parentScene(parentScene), _buttonIndex(buttonIndex), _countdown(0) {
@@ -393,7 +449,6 @@ Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene
void Widget::onClick() {
_parentScene->setCurrWidget(this);
- // TODO? _parentScene->onClick(_itemID, 0);
}
void Widget::setPosition(int16 x, int16 y) {
@@ -494,7 +549,7 @@ TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 item
: Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
_maxStringLength(maxStringLength), _fontSurface(fontSurface), _fileHash(fileHash), _rect(rect),
_cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0),
- _modified(false) {
+ _modified(false), _readOnly(false) {
_maxVisibleChars = (_rect.x2 - _rect.x1) / _fontSurface->getCharWidth();
_cursorPos = 0;
@@ -543,17 +598,19 @@ void TextEditWidget::addSprite() {
cursorSpriteResource.load(_cursorFileHash, true);
_cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
_cursorSurface->drawSpriteResourceEx(cursorSpriteResource, false, false, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
- _cursorSurface->setVisible(true);
+ _cursorSurface->setVisible(!_readOnly);
refresh();
}
void TextEditWidget::enterWidget() {
- _cursorSurface->setVisible(true);
+ if (!_readOnly)
+ _cursorSurface->setVisible(true);
refresh();
}
void TextEditWidget::exitWidget() {
- _cursorSurface->setVisible(false);
+ if (!_readOnly)
+ _cursorSurface->setVisible(false);
refresh();
}
@@ -568,7 +625,7 @@ void TextEditWidget::drawCursor() {
NDrawRect sourceRect(0, 0, _cursorWidth, _cursorHeight);
_surface->copyFrom(_cursorSurface->getSurface(), _rect.x1 + _cursorPos * _fontSurface->getCharWidth(),
_rect.y1 + (_rect.y2 - _cursorHeight - _rect.y1 + 1) / 2, sourceRect);
- } else
+ } else if (!_readOnly)
_cursorSurface->setVisible(false);
}
@@ -628,10 +685,11 @@ void TextEditWidget::handleKeyDown(Common::KeyCode keyCode) {
}
break;
default:
+ doRefresh = false;
break;
}
if (doRefresh) {
- _cursorSurface->setVisible(true);
+ _cursorSurface->setVisible(!_readOnly);
_cursorTicks = 0;
refresh();
}
@@ -645,7 +703,7 @@ void TextEditWidget::refresh() {
void TextEditWidget::update() {
Widget::update();
- if (_parentScene->getCurrWidget() == this && _cursorTicks++ == 10) {
+ if (!_readOnly && _parentScene->getCurrWidget() == this && _cursorTicks++ == 10) {
_cursorSurface->setVisible(!_cursorSurface->getVisible());
refresh();
_cursorTicks = 0;
@@ -667,7 +725,7 @@ uint32 TextEditWidget::handleMessage(int messageNum, const MessageParam ¶m,
SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
- StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect)
+ Common::StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect)
: Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
_savegameList(savegameList), _fontSurface(fontSurface), _bgFileHash(bgFileHash), _rect(rect),
_maxStringLength(0), _firstVisibleItem(0), _lastVisibleItem(0), _currIndex(0) {
@@ -687,7 +745,6 @@ void SavegameListBox::onClick() {
_currIndex = newIndex;
refresh();
_parentScene->setCurrWidget(this);
- debug("_currIndex = %d", _currIndex);
_parentScene->handleEvent(_itemID, 5);
}
}
@@ -707,7 +764,7 @@ void SavegameListBox::addSprite() {
}
void SavegameListBox::buildItems() {
- StringArray &savegameList = *_savegameList;
+ Common::StringArray &savegameList = *_savegameList;
int16 itemX = _rect.x1, itemY = 0;
for (uint i = 0; i < savegameList.size(); ++i) {
const byte *string = (const byte*)savegameList[i].c_str();
@@ -770,7 +827,7 @@ void SavegameListBox::pageDown() {
}
}
-SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArray *savegameList)
+SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList)
: WidgetScene(vm, parentModule), _savegameList(savegameList) {
static const uint32 kSaveGameMenuButtonFileHashes[] = {
@@ -819,7 +876,6 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArra
addCollisionSprite(menuButton);
}
-
SetUpdateHandler(&Scene::update);
SetMessageHandler(&SaveGameMenu::handleMessage);
}
@@ -885,4 +941,119 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
+LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList)
+ : WidgetScene(vm, parentModule), _savegameList(savegameList) {
+
+ static const uint32 kLoadGameMenuButtonFileHashes[] = {
+ 0x100B2091,
+ 0x84822B03,
+ 0x20E22087,
+ 0x04040107,
+ 0x04820122,
+ 0x24423047
+ };
+
+ static const NRect kLoadGameMenuButtonCollisionBounds[] = {
+ NRect( 44, 115, 108, 147),
+ NRect( 52, 396, 112, 426),
+ NRect(188, 116, 245, 196),
+ NRect(189, 209, 239, 269),
+ NRect(187, 301, 233, 349),
+ NRect(182, 358, 241, 433)
+ };
+
+ static const NRect kListBoxRect(0, 0, 320, 271);
+ static const NRect kTextEditRect(0, 0, 320, 17);
+ static const NRect kMouseRect(263, 48, 583, 65);
+
+ _fontSurface = new FontSurface(_vm, calcHash("bgLoadTinyAlphabet"), 32, 7, 32, 11, 17);
+
+ setBackground(0x98620234);
+ setPalette(0x98620234);
+ insertScreenMouse(0x2023098E, &kMouseRect);
+ insertStaticSprite(0x0BC600A3, 200);
+ insertStaticSprite(0x0F960021, 200);
+
+ _listBox = new SavegameListBox(_vm, 263, 142, 69/*ItemID*/, this, 1000, 1000,
+ _savegameList, _fontSurface, 0x04040409, kListBoxRect);
+ _listBox->addSprite();
+
+ _textEditWidget = new TextEditWidget(_vm, 263, 48, 70/*ItemID*/, this, 1000, 1000, 29,
+ _fontSurface, 0x10924C03, kTextEditRect);
+ _textEditWidget->setCursor(0x18032303, 2, 13);
+ _textEditWidget->setReadOnly(true);
+ _textEditWidget->addSprite();
+ setCurrWidget(_textEditWidget);
+
+ for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
+ Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
+ kLoadGameMenuButtonFileHashes[buttonIndex], kLoadGameMenuButtonCollisionBounds[buttonIndex]);
+ addCollisionSprite(menuButton);
+ }
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&LoadGameMenu::handleMessage);
+}
+
+LoadGameMenu::~LoadGameMenu() {
+ delete _fontSurface;
+}
+
+void LoadGameMenu::handleEvent(int16 itemID, int eventType) {
+ if (itemID == 69 && eventType == 5) {
+ uint currIndex = _listBox->getCurrIndex();
+ _textEditWidget->setString((*_savegameList)[currIndex]);
+ setCurrWidget(_textEditWidget);
+ }
+}
+
+uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+#if 0
+ case 0x000A:
+ sendMessage(_textEditWidget, 0x000A, param.asInteger());
+ setCurrWidget(_textEditWidget);
+ break;
+#endif
+ case 0x000B:
+ if (param.asInteger() == Common::KEYCODE_RETURN) {
+ ((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
+ leaveScene(0);
+ } else if (param.asInteger() == Common::KEYCODE_ESCAPE) {
+ leaveScene(1);
+ }/* else {
+ sendMessage(_textEditWidget, 0x000B, param.asInteger());
+ setCurrWidget(_textEditWidget);
+ }*/
+ break;
+ case 0x2000:
+ // Handle menu button click
+ switch (param.asInteger()) {
+ case 0:
+ // TODO Same handling as Return, merge
+ ((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
+ leaveScene(0);
+ break;
+ case 1:
+ leaveScene(1);
+ break;
+ case 2:
+ _listBox->pageUp();
+ break;
+ case 3:
+ _listBox->scrollUp();
+ break;
+ case 4:
+ _listBox->scrollDown();
+ break;
+ case 5:
+ _listBox->pageDown();
+ break;
+ }
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 51c32aa..0836795 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -24,31 +24,33 @@
#define NEVERHOOD_MENUMODULE_H
#include "common/str.h"
+#include "common/str-array.h"
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
namespace Neverhood {
-typedef Common::Array<Common::String> StringArray;
-
class MenuModule : public Module {
public:
MenuModule(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~MenuModule();
+ void setLoadgameInfo(uint slot);
void setSavegameInfo(const Common::String &description, uint slot, bool newSavegame);
protected:
int _sceneNum;
byte *_savedPaletteData;
- StringArray *_savegameList;
+ Common::StringArray *_savegameList;
Common::String _savegameDescription;
- uint _savegameSlot;
- bool _newSavegame;
+ int _savegameSlot;
void createScene(int sceneNum, int which);
void updateScene();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void createLoadGameMenu();
void createSaveGameMenu();
- void handleSaveGameMenuAction(int action);
+ void handleLoadGameMenuAction(bool doLoad);
+ void handleSaveGameMenuAction(bool doSave);
+ void loadSavegameList();
};
class MenuButton : public StaticSprite {
@@ -158,6 +160,7 @@ public:
void handleAsciiKey(char ch);
void handleKeyDown(Common::KeyCode keyCode);
void refresh();
+ void setReadOnly(bool value) { _readOnly = value; }
bool isModified() const { return _modified; }
protected:
NRect _rect;
@@ -173,6 +176,7 @@ protected:
uint32 _cursorFileHash;
int16 _cursorWidth, _cursorHeight;
bool _modified;
+ bool _readOnly;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
@@ -181,7 +185,7 @@ class SavegameListBox : public Widget {
public:
SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
- StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
+ Common::StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
virtual void onClick();
virtual void addSprite();
void buildItems();
@@ -199,7 +203,7 @@ protected:
Common::Array<TextLabelWidget*> _textLabelItems;
int _firstVisibleItem;
int _lastVisibleItem;
- StringArray *_savegameList;
+ Common::StringArray *_savegameList;
FontSurface *_fontSurface;
uint _currIndex;
int _maxVisibleItemsCount;
@@ -207,11 +211,26 @@ protected:
class SaveGameMenu : public WidgetScene {
public:
- SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, StringArray *savegameList);
+ SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList);
~SaveGameMenu();
virtual void handleEvent(int16 itemID, int eventType);
protected:
- StringArray *_savegameList;
+ Common::StringArray *_savegameList;
+ FontSurface *_fontSurface;
+ SavegameListBox *_listBox;
+ TextEditWidget *_textEditWidget;
+ Common::String _savegameDescription;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class LoadGameMenu : public WidgetScene {
+public:
+ LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList);
+ ~LoadGameMenu();
+ virtual void handleEvent(int16 itemID, int eventType);
+protected:
+ Common::StringArray *_savegameList;
FontSurface *_fontSurface;
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index bfba0b9..7b068bd 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -159,7 +159,7 @@ void NeverhoodEngine::mainLoop() {
}
}
if (_system->getMillis() >= nextFrameTime) {
- _gameModule->checkMainMenu();
+ _gameModule->checkRequests();
_gameModule->handleUpdate();
_gameModule->draw();
_screen->update();
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 3653127..14c283b 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -28,6 +28,7 @@
#include "common/keyboard.h"
#include "common/random.h"
#include "common/savefile.h"
+#include "common/str-array.h"
#include "common/system.h"
#include "audio/mixer.h"
#include "engines/engine.h"
@@ -72,6 +73,7 @@ public:
Common::Platform getPlatform() const;
bool hasFeature(EngineFeature f) const;
bool isDemo() const;
+ Common::String getTargetName() { return _targetName; };
Common::RandomSource *_rnd;
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
index e1ef954..2f97ade 100644
--- a/engines/neverhood/saveload.cpp
+++ b/engines/neverhood/saveload.cpp
@@ -125,7 +125,7 @@ void NeverhoodEngine::loadgame(const char *filename) {
_gameState.sceneNum = _gameVars->getGlobalVar(V_CURRENT_SCENE);
_gameState.which = _gameVars->getGlobalVar(V_CURRENT_SCENE_WHICH);
- _gameModule->restoreGame();
+ _gameModule->requestRestoreGame();
delete in;
Commit: 4c6e82fc05134b71481c56ce70b9d26268a66cd5
https://github.com/scummvm/scummvm/commit/4c6e82fc05134b71481c56ce70b9d26268a66cd5
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Remove objectPriority and surfacePriority parameters from the Klaymen class constructor since they always have the same value (1000)
Changed paths:
engines/neverhood/klaymen.cpp
engines/neverhood/klaymen.h
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp
index 6d139b1..4323d73 100644
--- a/engines/neverhood/klaymen.cpp
+++ b/engines/neverhood/klaymen.cpp
@@ -60,14 +60,14 @@ static const KlaymenIdleTableItem klaymenIdleTable1002[] = {
// Klaymen
-Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects)
- : AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
- _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
+Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRectArray *clipRects)
+ : AnimatedSprite(vm, 1000), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
+ _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), _status2(0), _acceptInput(true),
_attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
_flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
_idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
- createSurface(surfacePriority, 320, 200);
+ createSurface(1000, 320, 200);
_x = x;
_y = y;
_destX = x;
@@ -3344,12 +3344,10 @@ void Klaymen::stPeekInsideBlink() {
_blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
}
-//##############################################################################
-
// KmScene1001
KmScene1001::KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
}
uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3368,10 +3366,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klaymen::stPullHammerLever);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -3427,7 +3425,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1002
KmScene1002::KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
setKlaymenIdleTable1();
@@ -3492,7 +3490,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klaymen::stJumpToRingVenusFlyTrap);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 0) {
GotoState(&Klaymen::stPressDoorButton);
}
@@ -3549,7 +3547,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1004
KmScene1004::KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_dataResource.load(0x01900A04);
}
@@ -3615,7 +3613,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1109::KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -3683,7 +3681,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1201
KmScene1201::KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4));
_flagF6 = true;
@@ -3702,7 +3700,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480A:
GotoState(&Klaymen::stMoveObject);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4813:
@@ -3714,7 +3712,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4815:
GotoState(&Klaymen::stCloseEyes);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 0) {
GotoState(&Klaymen::stPressButtonSide);
}
@@ -3754,7 +3752,7 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1303::KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -3775,7 +3773,7 @@ uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1304::KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -3789,7 +3787,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3829,7 +3827,7 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1305::KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -3855,7 +3853,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1306::KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
}
@@ -3876,7 +3874,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
else
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -3885,7 +3883,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
}
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -3898,7 +3896,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
- case NM_KLAYMEN_INSERT_DISK:
+ case 0x481A:
GotoState(&Klaymen::stInsertDisk);
break;
case 0x481B:
@@ -3981,7 +3979,7 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1308::KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4005,7 +4003,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klaymen::stUseLever);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4018,7 +4016,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
- case NM_KLAYMEN_INSERT_DISK:
+ case 0x481A:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stInsertKey);
} else {
@@ -4038,7 +4036,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x481E:
GotoState(&Klaymen::stReturnFromUse);
break;
- case NM_KLAYMEN_RELEASE_LEVER:
+ case 0x4827:
GotoState(&Klaymen::stReleaseLever);
break;
case 0x4834:
@@ -4057,7 +4055,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1401
KmScene1401::KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4078,7 +4076,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stMoveObjectFaceObject);
}
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -4132,7 +4130,7 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1402
KmScene1402::KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
SetFilterY(&Sprite::defFilterY);
}
@@ -4177,7 +4175,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1403
KmScene1403::KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4));
}
@@ -4201,7 +4199,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klaymen::stUseLever);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4221,7 +4219,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41CCE0(param.asPoint().x);
}
break;
- case NM_KLAYMEN_RELEASE_LEVER:
+ case 0x4827:
GotoState(&Klaymen::stReleaseLever);
break;
case 0x483F:
@@ -4237,7 +4235,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1404
KmScene1404::KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4258,7 +4256,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stMoveObjectFaceObject);
}
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4271,7 +4269,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
- case NM_KLAYMEN_INSERT_DISK:
+ case 0x481A:
GotoState(&Klaymen::stInsertDisk);
break;
case 0x481B:
@@ -4315,7 +4313,7 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1608::KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
}
uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4335,7 +4333,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
else
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4406,7 +4404,7 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
// KmScene1705
KmScene1705::KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4423,16 +4421,15 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
- if (_isSittingInTeleporter) {
+ if (_isSittingInTeleporter)
GotoState(&Klaymen::stSitIdleTeleporter);
- } else {
+ else
GotoState(&Klaymen::stTryStandIdle);
- }
break;
case 0x4803:
GotoState(&Klaymen::stFallSkipJump);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4499,7 +4496,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene1901::KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4538,7 +4535,7 @@ uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2001::KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4555,9 +4552,9 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(param.asPoint().x, false);
break;
case 0x4004:
- if (_isSittingInTeleporter) {
+ if (_isSittingInTeleporter)
GotoState(&Klaymen::stSitIdleTeleporter);
- } else
+ else
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4804:
@@ -4604,7 +4601,7 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2101::KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4629,7 +4626,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4811:
GotoState(&Klaymen::stHitByDoor);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4638,7 +4635,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
}
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -4690,7 +4687,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2201::KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -4707,10 +4704,10 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 0) {
GotoState(&Klaymen::stPressButtonSide);
}
@@ -4764,7 +4761,7 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2203::KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4777,7 +4774,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -4786,7 +4783,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
}
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -4805,7 +4802,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4819:
GotoState(&Klaymen::stClayDoorOpen);
break;
- case NM_KLAYMEN_INSERT_DISK:
+ case 0x481A:
GotoState(&Klaymen::stInsertDisk);
break;
case 0x481B:
@@ -4836,7 +4833,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2205::KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -4861,7 +4858,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPeekWall);
}
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 0) {
GotoState(&Klaymen::stPressButtonSide);
}
@@ -4884,7 +4881,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2206::KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_walkResumeFrameIncr = 1;
_vm->_soundMan->addSound(0x80101800, 0xD3B02847);
@@ -4918,14 +4915,14 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPeekWall);
}
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPickUpTube);
} else {
GotoState(&Klaymen::stPickUpGeneric);
}
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -4990,7 +4987,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2207::KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5013,10 +5010,10 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klaymen::stInteractLever);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -5036,7 +5033,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
sub41CCE0(param.asPoint().x);
}
break;
- case NM_KLAYMEN_RELEASE_LEVER:
+ case 0x4827:
GotoState(&Klaymen::stReleaseLever);
break;
case 0x482D:
@@ -5054,7 +5051,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2242::KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5079,7 +5076,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPeekWall);
}
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2) {
GotoState(&Klaymen::stPickUpNeedle);
} else if (param.asInteger() == 1) {
@@ -5124,7 +5121,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5178,7 +5175,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
}
KmScene2247::KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5232,7 +5229,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5246,7 +5243,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -5315,7 +5312,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2402::KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5340,10 +5337,10 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPeekWall);
}
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -5387,7 +5384,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2403::KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5404,10 +5401,10 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x480D:
GotoState(&Klaymen::stPullCord);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
- case NM_KLAYMEN_PRESS_BUTTON:
+ case 0x4816:
if (param.asInteger() == 1) {
GotoState(&Klaymen::stPressButton);
} else if (param.asInteger() == 2) {
@@ -5473,7 +5470,7 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2406::KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -5497,7 +5494,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPeekWall);
}
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
else if (param.asInteger() == 1)
@@ -5566,7 +5563,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2501::KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5617,7 +5614,7 @@ uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2732::KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5634,7 +5631,7 @@ uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2801::KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5647,7 +5644,7 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
case 0x4004:
GotoState(&Klaymen::stTryStandIdle);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4817:
@@ -5706,7 +5703,7 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2803::KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -5770,7 +5767,7 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_dataResource.load(0x81120132);
}
@@ -5823,7 +5820,7 @@ uint32 KmScene2803Small::xHandleMessage(int messageNum, const MessageParam ¶
}
KmScene2805::KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -5881,7 +5878,7 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2806::KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
if (flag) {
NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
@@ -5942,7 +5939,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
bool flag, NRect *clipRects, uint clipRectsCount)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
if (flag) {
NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
@@ -6002,7 +5999,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -6052,7 +6049,7 @@ uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶
}
KmScene2810::KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
@@ -6075,7 +6072,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() == 3)
GotoState(&Klaymen::stFinishGrow);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4817:
@@ -6147,7 +6144,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2812::KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : Klaymen(vm, parentScene, x, y, 1000, 1000) {
+ : Klaymen(vm, parentScene, x, y) {
// Empty
}
@@ -6164,7 +6161,7 @@ uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
_destY = param.asInteger();
GotoState(&Klaymen::stJumpToGrabFall);
break;
- case NM_KLAYMEN_PICKUP:
+ case 0x4812:
if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
else if (param.asInteger() == 1)
diff --git a/engines/neverhood/klaymen.h b/engines/neverhood/klaymen.h
index 6e5a843..31f8e5a 100644
--- a/engines/neverhood/klaymen.h
+++ b/engines/neverhood/klaymen.h
@@ -49,7 +49,7 @@ struct KlaymenIdleTableItem {
class Klaymen : public AnimatedSprite {
public:
- Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
+ Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRectArray *clipRects = NULL);
void update();
Commit: c218cb46e0181cdb213c9cc0486acb880bbf9d29
https://github.com/scummvm/scummvm/commit/c218cb46e0181cdb213c9cc0486acb880bbf9d29
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Remove unneeded braces
Changed paths:
engines/neverhood/klaymen.cpp
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp
index 4323d73..18a8b34 100644
--- a/engines/neverhood/klaymen.cpp
+++ b/engines/neverhood/klaymen.cpp
@@ -3370,13 +3370,12 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3390,17 +3389,16 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -3459,11 +3457,10 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4803:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stJumpAndFall);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stDropFromRing);
- }
break;
case 0x4804:
GotoState(&Klaymen::stPeekWall);
@@ -3491,9 +3488,8 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stJumpToRingVenusFlyTrap);
break;
case 0x4816:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stPressDoorButton);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3521,18 +3517,16 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stClimbLadderHalf);
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -3639,9 +3633,8 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stWalkingFirst);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3713,9 +3706,8 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stCloseEyes);
break;
case 0x4816:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3788,13 +3780,12 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3808,13 +3799,12 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -3875,22 +3865,20 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3919,35 +3907,32 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stReturnFromUse);
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x4834:
GotoState(&Klaymen::stStepOver);
@@ -3994,41 +3979,37 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x480A:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject);
- } else {
+ else
GotoState(&Klaymen::stMoveObjectFaceObject);
- }
break;
case 0x480D:
GotoState(&Klaymen::stUseLever);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481A:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stInsertKey);
- } else {
+ else
GotoState(&Klaymen::stInsertDisk);
- }
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4070,20 +4051,18 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x480A:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject);
- } else {
+ else
GotoState(&Klaymen::stMoveObjectFaceObject);
- }
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4097,31 +4076,28 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
}
return 0;
@@ -4145,11 +4121,10 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x480A:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject);
- } else {
+ else
GotoState(&Klaymen::stMoveObjectFaceObject);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4190,23 +4165,21 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x480A:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject);
- } else {
+ else
GotoState(&Klaymen::stMoveObjectFaceObject);
- }
break;
case 0x480D:
GotoState(&Klaymen::stUseLever);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4250,20 +4223,18 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x480A:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject);
- } else {
+ else
GotoState(&Klaymen::stMoveObjectFaceObject);
- }
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4273,11 +4244,10 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stInsertDisk);
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4286,17 +4256,16 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stReturnFromUse);
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4334,13 +4303,12 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4362,17 +4330,16 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stReturnFromUseInTeleporter);
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -4430,24 +4397,22 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stFallSkipJump);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481D:
if (_isSittingInTeleporter) {
@@ -4455,22 +4420,20 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481E:
- if (_isSittingInTeleporter) {
+ if (_isSittingInTeleporter)
GotoState(&Klaymen::stReturnFromUseInTeleporter);
- }
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x4834:
GotoState(&Klaymen::stStepOver);
@@ -4573,9 +4536,8 @@ uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_isSittingInTeleporter) {
+ if (_isSittingInTeleporter)
GotoState(&Klaymen::stReturnFromUseInTeleporter);
- }
break;
case 0x4834:
GotoState(&Klaymen::stStepOver);
@@ -4627,40 +4589,37 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stHitByDoor);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481D:
if (_isSittingInTeleporter)
GotoState(&Klaymen::stTurnToUseInTeleporter);
break;
case 0x481E:
- if (_isSittingInTeleporter)//CHECKME
+ if (_isSittingInTeleporter)
GotoState(&Klaymen::stReturnFromUseInTeleporter);
break;
case 0x4834:
@@ -4708,9 +4667,8 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4816:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger() ? 1 : 0);
@@ -4737,18 +4695,16 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -4775,22 +4731,20 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4806,11 +4760,10 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stInsertDisk);
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4854,14 +4807,12 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stStartWalkingResume);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4816:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4911,25 +4862,22 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stStartWalkingResume);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4812:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -4943,35 +4891,32 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x4837:
stopWalking();
@@ -5014,24 +4959,22 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x4827:
GotoState(&Klaymen::stReleaseLever);
@@ -5072,42 +5015,38 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stStartWalkingResume);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4812:
- if (param.asInteger() == 2) {
+ if (param.asInteger() == 2)
GotoState(&Klaymen::stPickUpNeedle);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stPickUpTube);
- } else {
+ else
GotoState(&Klaymen::stPickUpGeneric);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -5142,26 +5081,24 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stStartWalkingResume);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -5196,26 +5133,24 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stStartWalkingResume);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
@@ -5244,51 +5179,46 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stTryStandIdle);
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x4832:
GotoState(&Klaymen::stUseTube);
@@ -5333,45 +5263,41 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stWalkingFirst);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4812:
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
@@ -5405,37 +5331,34 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPickUpGeneric);
break;
case 0x4816:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stPressButton);
- } else if (param.asInteger() == 2) {
+ else if (param.asInteger() == 2)
GotoState(&Klaymen::stPressFloorButton);
- } else {
+ else
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x4820:
sendMessage(_parentScene, 0x2000, 0);
@@ -5490,9 +5413,8 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
if (param.asInteger() != 0) {
_destX = param.asInteger();
GotoState(&Klaymen::stWalkingFirst);
- } else {
+ } else
GotoState(&Klaymen::stPeekWall);
- }
break;
case 0x4812:
if (param.asInteger() == 2)
@@ -5522,17 +5444,16 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stReturnFromUse);
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x4820:
sendMessage(_parentScene, 0x2000, 0);
@@ -5652,11 +5573,10 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -5665,35 +5585,32 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stReturnFromUse);
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 0) {
+ else if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x4837:
stopWalking();
@@ -5744,11 +5661,10 @@ uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stReturnFromUse);
break;
case 0x481F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else {
+ else
GotoState(&Klaymen::stWonderAboutHalf);
- }
break;
case 0x482E:
GotoState(&Klaymen::stWalkToFront);
@@ -5912,9 +5828,8 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPullCord);
break;
case 0x4816:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -5927,11 +5842,10 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stGrow);
break;
case 0x4832:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stDrinkPotion);
- } else {
+ else
GotoState(&Klaymen::stUseTube);
- }
break;
}
return 0;
@@ -5973,9 +5887,8 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stPullCord);
break;
case 0x4816:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stPressButtonSide);
- }
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -5988,11 +5901,10 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stGrow);
break;
case 0x4832:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stDrinkPotion);
- } else {
+ else
GotoState(&Klaymen::stUseTube);
- }
break;
}
return 0;
@@ -6028,18 +5940,16 @@ uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶
GotoState(&Klaymen::stWonderAboutSmall);
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStepSmall);
- } else {
+ else
GotoState(&Klaymen::stWalkToFrontSmall);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToBackHalfSmall);
- } else {
+ else
GotoState(&Klaymen::stTurnToBackSmall);
- }
break;
case 0x4837:
stopWalking();
@@ -6083,26 +5993,24 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x481B:
- if (param.asPoint().y != 0) {
+ if (param.asPoint().y != 0)
sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
+ else
sub41CCE0(param.asPoint().x);
- }
break;
case 0x481F:
- if (param.asInteger() == 0) {
+ if (param.asInteger() == 0)
GotoState(&Klaymen::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
+ else if (param.asInteger() == 1)
GotoState(&Klaymen::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
+ else if (param.asInteger() == 3)
GotoState(&Klaymen::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
+ else if (param.asInteger() == 4)
GotoState(&Klaymen::stTurnAwayFromUse);
- } else if (param.asInteger() == 5) {
+ else if (param.asInteger() == 5)
GotoState(&Klaymen::stTurnToUseExt);
- } else {
+ else
GotoState(&Klaymen::stWonderAbout);
- }
break;
case 0x4820:
sendMessage(_parentScene, 0x2000, 0);
@@ -6211,18 +6119,16 @@ uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x482E:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stWalkToFrontNoStep);
- } else {
+ else
GotoState(&Klaymen::stWalkToFront);
- }
break;
case 0x482F:
- if (param.asInteger() == 1) {
+ if (param.asInteger() == 1)
GotoState(&Klaymen::stTurnToFront);
- } else {
+ else
GotoState(&Klaymen::stTurnToBack);
- }
break;
case 0x483F:
startSpecialWalkRight(param.asInteger());
Commit: 1383c5f39504dfc4dc3b1b5e5f99645077abc5fe
https://github.com/scummvm/scummvm/commit/1383c5f39504dfc4dc3b1b5e5f99645077abc5fe
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Rename stuff in the Klaymen class
Changed paths:
engines/neverhood/klaymen.cpp
engines/neverhood/klaymen.h
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp
index 18a8b34..484d7aa 100644
--- a/engines/neverhood/klaymen.cpp
+++ b/engines/neverhood/klaymen.cpp
@@ -62,9 +62,9 @@ static const KlaymenIdleTableItem klaymenIdleTable1002[] = {
Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRectArray *clipRects)
: AnimatedSprite(vm, 1000), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
- _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), _status2(0), _acceptInput(true),
- _attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
- _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
+ _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), _busyStatus(0), _acceptInput(true),
+ _attachedSprite(NULL), _isWalking(false), _actionStatus(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
+ _doYHitIncr(false), _isLeverDown(false), _isSittingInTeleporter(false), _actionStatusChanged(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
_idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
createSurface(1000, 320, 200);
@@ -128,7 +128,7 @@ void Klaymen::stDoIdlePickEar() {
}
void Klaymen::stIdlePickEar() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x5B20C814, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -159,7 +159,7 @@ void Klaymen::stDoIdleSpinHead() {
}
void Klaymen::stIdleSpinHead() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0xD122C137, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -185,7 +185,7 @@ void Klaymen::stDoIdleArms() {
}
void Klaymen::stIdleArms() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x543CD054, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -220,7 +220,7 @@ void Klaymen::stDoIdleChest() {
}
void Klaymen::stIdleChest() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x40A0C034, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -246,7 +246,7 @@ void Klaymen::stDoIdleHeadOff() {
}
void Klaymen::stIdleHeadOff() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x5120E137, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -274,7 +274,7 @@ uint32 Klaymen::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity
}
void Klaymen::stIdleWonderAbout() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -284,7 +284,7 @@ void Klaymen::stIdleWonderAbout() {
}
void Klaymen::stSitIdleTeleporter() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x582EC138, 0, -1);
SetUpdateHandler(&Klaymen::upSitIdleTeleporter);
@@ -320,7 +320,7 @@ void Klaymen::upSitIdleTeleporter() {
}
void Klaymen::stSitIdleTeleporterBlink() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -330,7 +330,7 @@ void Klaymen::stSitIdleTeleporterBlink() {
}
void Klaymen::stSitIdleTeleporterBlinkSecond() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klaymen::upSitIdleTeleporter);
@@ -341,7 +341,7 @@ void Klaymen::stSitIdleTeleporterBlinkSecond() {
void Klaymen::stPickUpNeedle() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klaymen::stPickUpNeedle))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x1449C169, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -353,7 +353,7 @@ void Klaymen::stPickUpNeedle() {
void Klaymen::stPickUpTube() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klaymen::stPickUpTube))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x0018C032, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -384,7 +384,7 @@ uint32 Klaymen::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *
}
void Klaymen::stTurnToUseInTeleporter() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0xD229823D, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -393,7 +393,7 @@ void Klaymen::stTurnToUseInTeleporter() {
}
void Klaymen::stReturnFromUseInTeleporter() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x9A2801E0, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -403,7 +403,7 @@ void Klaymen::stReturnFromUseInTeleporter() {
void Klaymen::stStepOver() {
if (!stStartAction(AnimationCallback(&Klaymen::stStepOver))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x004AA310, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -414,7 +414,7 @@ void Klaymen::stStepOver() {
void Klaymen::stSitInTeleporter() {
if (!stStartAction(AnimationCallback(&Klaymen::stSitInTeleporter))) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x392A0330, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -436,7 +436,7 @@ uint32 Klaymen::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Ent
}
void Klaymen::stGetUpFromTeleporter() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x913AB120, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -466,8 +466,8 @@ void Klaymen::upIdleAnimation() {
}
bool Klaymen::stStartActionFromIdle(AnimationCb callback) {
- if (_status2 == 2) {
- _status2 = 1;
+ if (_busyStatus == 2) {
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x9A7020B8, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -495,19 +495,19 @@ void Klaymen::gotoNextStateExt() {
}
}
-void Klaymen::sub41C770() {
- _flagFA = false;
- _status3 = 1;
+void Klaymen::beginAction() {
+ _actionStatusChanged = false;
+ _actionStatus = 1;
}
-void Klaymen::sub41C790() {
- if (_flagFA)
- _status3 = 0;
+void Klaymen::endAction() {
+ if (_actionStatusChanged)
+ _actionStatus = 0;
}
void Klaymen::stTryStandIdle() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stTryStandIdle))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klaymen::upStandIdle);
@@ -554,14 +554,14 @@ uint32 Klaymen::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *se
gotoNextStateExt();
break;
case 0x101C:
- sub41C770();
+ beginAction();
break;
case 0x1021:
- sub41C790();
+ endAction();
break;
case 0x481C:
- _status3 = param.asInteger();
- _flagFA = true;
+ _actionStatus = param.asInteger();
+ _actionStatusChanged = true;
messageResult = 1;
break;
case 0x482C:
@@ -576,7 +576,7 @@ uint32 Klaymen::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *se
}
void Klaymen::stIdleBlink() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x5900C41E, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -596,7 +596,7 @@ uint32 Klaymen::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, E
}
void Klaymen::stStandAround() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klaymen::upStandIdle);
@@ -619,7 +619,7 @@ uint32 Klaymen::hmStartAction(int messageNum, const MessageParam ¶m, Entity
}
-void Klaymen::startWalkToX(int16 x, bool flag) {
+void Klaymen::startWalkToX(int16 x, bool walkExt) {
int16 xdiff = ABS(x - _x);
if (x == _x) {
_destX = x;
@@ -631,7 +631,7 @@ void Klaymen::startWalkToX(int16 x, bool flag) {
_destX = x;
gotoState(NULL);
gotoNextStateExt();
- } else if (xdiff <= 42 && _status3 != 3) {
+ } else if (xdiff <= 42 && _actionStatus != 3) {
if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
_destX = x;
} else {
@@ -640,7 +640,7 @@ void Klaymen::startWalkToX(int16 x, bool flag) {
}
} else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) {
_destX = x;
- } else if (flag) {
+ } else if (walkExt) {
_destX = x;
GotoState(&Klaymen::stStartWalkingExt);
} else {
@@ -650,7 +650,7 @@ void Klaymen::startWalkToX(int16 x, bool flag) {
}
void Klaymen::stWakeUp() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x527AC970, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -659,7 +659,7 @@ void Klaymen::stWakeUp() {
}
void Klaymen::stSleeping() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x5A38C110, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -680,8 +680,8 @@ uint32 Klaymen::hmSleeping(int messageNum, const MessageParam ¶m, Entity *se
}
bool Klaymen::stStartAction(AnimationCb callback3) {
- if (_status2 == 1) {
- _status2 = 2;
+ if (_busyStatus == 1) {
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x5C7080D4, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -774,7 +774,7 @@ void Klaymen::suSneaking() {
}
void Klaymen::stSneak() {
- _status2 = 1;
+ _busyStatus = 1;
_isSneaking = true;
_acceptInput = true;
setDoDeltaX(_destX < _x ? 1 : 0);
@@ -813,7 +813,7 @@ uint32 Klaymen::hmSneaking(int messageNum, const MessageParam ¶m, Entity *se
void Klaymen::stStartWalking() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stStartWalking))) {
- _status2 = 0;
+ _busyStatus = 0;
_isWalking = true;
_acceptInput = true;
setDoDeltaX(_destX < _x ? 1 : 0);
@@ -845,7 +845,7 @@ uint32 Klaymen::hmStartWalking(int messageNum, const MessageParam ¶m, Entity
}
void Klaymen::stWalkingFirst() {
- _status2 = 0;
+ _busyStatus = 0;
_isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, 0, -1);
@@ -876,27 +876,27 @@ uint32 Klaymen::hmWalking(int messageNum, const MessageParam ¶m, Entity *sen
}
void Klaymen::stUpdateWalkingFirst() {
- if (_status3 == 2) {
+ if (_actionStatus == 2) {
gotoNextStateExt();
- } else if (_status3 == 3) {
+ } else if (_actionStatus == 3) {
stWalkingOpenDoor();
} else {
_isSneaking = true;
_acceptInput = true;
if (ABS(_destX - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) {
- if (_status3 == 0) {
- _status2 = 1;
+ if (_actionStatus == 0) {
+ _busyStatus = 1;
startAnimation(0xF234EE31, 0, -1);
} else {
- _status2 = 2;
+ _busyStatus = 2;
startAnimation(0xF135CC21, 0, -1);
}
} else if (ABS(_destX - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) {
- if (_status3 == 0) {
- _status2 = 1;
+ if (_actionStatus == 0) {
+ _busyStatus = 1;
startAnimation(0x8604A152, 0, -1);
} else {
- _status2 = 2;
+ _busyStatus = 2;
startAnimation(0xA246A132, 0, -1);
}
}
@@ -919,10 +919,10 @@ void Klaymen::suWalkingTestExit() {
_deltaX = 0;
if (xdiff == 0 ||
- (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) ||
- (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) ||
- (_status3 == 3 && xdiff < 30) ||
- (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) {
+ (_actionStatus != 2 && _actionStatus != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) ||
+ (_actionStatus != 2 && _actionStatus != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) ||
+ (_actionStatus == 3 && xdiff < 30) ||
+ (_actionStatus == 3 && xdiff < 150 && _currFrameIndex >= 6)) {
sendMessage(this, 0x1019, 0);
} else {
HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y);
@@ -939,7 +939,7 @@ void Klaymen::suWalkingTestExit() {
_y = xdelta > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
} else if (hitRectPrev->type == 0x5003) {
_y = xdelta < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1;
- } else if (_flagF6 && xdelta != 0) {
+ } else if (_doYHitIncr && xdelta != 0) {
if (hitRectNext->type == 0x5000) {
_y++;
} else if (hitRectNext->type == 0x5001 && _y > hitRectNext->rect.y1) {
@@ -969,7 +969,7 @@ uint32 Klaymen::hmLever(int messageNum, const MessageParam ¶m, Entity *sende
void Klaymen::stPickUpGeneric() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klaymen::stPickUpGeneric))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x1C28C178, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1004,7 +1004,7 @@ uint32 Klaymen::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity
void Klaymen::stPressButton() {
if (!stStartAction(AnimationCallback(&Klaymen::stPressButton))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = true;
startAnimation(0x1C02B03D, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1031,7 +1031,7 @@ uint32 Klaymen::hmPressButton(int messageNum, const MessageParam ¶m, Entity
void Klaymen::stPressFloorButton() {
if (!stStartAction(AnimationCallback(&Klaymen::stPressFloorButton))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = true;
startAnimation(0x1C16B033, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1042,7 +1042,7 @@ void Klaymen::stPressFloorButton() {
void Klaymen::stPressButtonSide() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stPressButtonSide))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1080,7 +1080,7 @@ void Klaymen::startSpecialWalkLeft(int16 x) {
}
void Klaymen::startWalkToXSmall(int16 x) {
- _status3 = 2;
+ _actionStatus = 2;
if (_x == x) {
_destX = x;
if (_isWalking) {
@@ -1098,7 +1098,7 @@ void Klaymen::startWalkToXSmall(int16 x) {
void Klaymen::stStartWalkingSmall() {
_isWalking = true;
_acceptInput = true;
- _status3 = 2;
+ _actionStatus = 2;
setDoDeltaX(_destX < _x ? 1 : 0);
startAnimation(0x3A4CD934, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1120,7 +1120,7 @@ uint32 Klaymen::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity
}
void Klaymen::stStandIdleSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x90D0D1D0, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1129,7 +1129,7 @@ void Klaymen::stStandIdleSmall() {
}
void Klaymen::stWonderAboutAfterSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x11C8D156, 30, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1138,7 +1138,7 @@ void Klaymen::stWonderAboutAfterSmall() {
}
void Klaymen::stWonderAboutHalfSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x11C8D156, 0, 10);
SetUpdateHandler(&Klaymen::update);
@@ -1147,7 +1147,7 @@ void Klaymen::stWonderAboutHalfSmall() {
}
void Klaymen::stWonderAboutSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x11C8D156, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1156,7 +1156,7 @@ void Klaymen::stWonderAboutSmall() {
}
void Klaymen::stWalkToFrontNoStepSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimationByHash(0x3F9CC394, 0x14884392, 0);
SetUpdateHandler(&Klaymen::update);
@@ -1182,7 +1182,7 @@ uint32 Klaymen::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m,
}
void Klaymen::stWalkToFront2Small() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x2F1C4694, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1191,7 +1191,7 @@ void Klaymen::stWalkToFront2Small() {
}
void Klaymen::stWalkToFrontSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x3F9CC394, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1200,7 +1200,7 @@ void Klaymen::stWalkToFrontSmall() {
}
void Klaymen::stTurnToBackHalfSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimationByHash(0x37ECD436, 0, 0x8520108C);
SetUpdateHandler(&Klaymen::update);
@@ -1209,7 +1209,7 @@ void Klaymen::stTurnToBackHalfSmall() {
}
void Klaymen::stTurnToBackWalkSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x16EDDE36, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1218,7 +1218,7 @@ void Klaymen::stTurnToBackWalkSmall() {
}
void Klaymen::stTurnToBackSmall() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x37ECD436, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1228,7 +1228,7 @@ void Klaymen::stTurnToBackSmall() {
void Klaymen::stPullCord() {
if (!stStartAction(AnimationCallback(&Klaymen::stPullCord))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x3F28E094, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1263,7 +1263,7 @@ uint32 Klaymen::hmPullReleaseCord(int messageNum, const MessageParam ¶m, Ent
void Klaymen::stUseTube() {
if (!stStartAction(AnimationCallback(&Klaymen::stUseTube))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x1A38A814, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1298,7 +1298,7 @@ uint32 Klaymen::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sen
}
void Klaymen::stWalkingFirstExt() {
- _status2 = 0;
+ _busyStatus = 0;
_isWalking = true;
_acceptInput = true;
startAnimation(0x5A2CBC00, 0, -1);
@@ -1311,7 +1311,7 @@ void Klaymen::stWalkingFirstExt() {
void Klaymen::stStartWalkingExt() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stStartWalkingExt))) {
- _status2 = 0;
+ _busyStatus = 0;
_isWalking = true;
_acceptInput = true;
setDoDeltaX(_destX < _x ? 1 : 0);
@@ -1324,26 +1324,26 @@ void Klaymen::stStartWalkingExt() {
}
}
-void Klaymen::sub41CC40(int16 x1, int16 x2) {
- if (_x > x1) {
- if (_x == x1 + x2) {
- _destX = x1 + x2;
+void Klaymen::startWalkToXDistance(int16 destX, int16 distance) {
+ if (_x > destX) {
+ if (_x == destX + distance) {
+ _destX = destX + distance;
gotoState(NULL);
gotoNextStateExt();
- } else if (_x < x1 + x2) {
- startWalkToXExt(x1 + x2);
+ } else if (_x < destX + distance) {
+ startWalkToXExt(destX + distance);
} else {
- startWalkToX(x1 + x2, false);
+ startWalkToX(destX + distance, false);
}
} else {
- if (_x == x1 - x2) {
- _destX = x1 - x2;
+ if (_x == destX - distance) {
+ _destX = destX - distance;
gotoState(NULL);
gotoNextStateExt();
- } else if (_x > x1 - x2) {
- startWalkToXExt(x1 - x2);
+ } else if (_x > destX - distance) {
+ startWalkToXExt(destX - distance);
} else {
- startWalkToX(x1 - x2, false);
+ startWalkToX(destX - distance, false);
}
}
}
@@ -1360,7 +1360,7 @@ void Klaymen::startWalkToXExt(int16 x) {
_destX = x;
gotoState(NULL);
gotoNextStateExt();
- } else if (xdiff <= 42 && _status3 != 3) {
+ } else if (xdiff <= 42 && _actionStatus != 3) {
if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) {
_destX = x;
} else {
@@ -1376,7 +1376,7 @@ void Klaymen::startWalkToXExt(int16 x) {
}
void Klaymen::stLargeStep() {
- _status2 = 2;
+ _busyStatus = 2;
_isLargeStep = true;
_acceptInput = true;
setDoDeltaX(_destX >= _x ? 1 : 0);
@@ -1447,7 +1447,7 @@ uint32 Klaymen::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *s
}
void Klaymen::stWonderAboutHalf() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0xD820A114, 0, 10);
SetUpdateHandler(&Klaymen::update);
@@ -1456,7 +1456,7 @@ void Klaymen::stWonderAboutHalf() {
}
void Klaymen::stWonderAboutAfter() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0xD820A114, 30, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1465,7 +1465,7 @@ void Klaymen::stWonderAboutAfter() {
}
void Klaymen::stTurnToUseHalf() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x9B250AD2, 0, 7);
SetUpdateHandler(&Klaymen::update);
@@ -1488,7 +1488,7 @@ uint32 Klaymen::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *s
}
void Klaymen::stTurnAwayFromUse() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x98F88391, 4, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1497,7 +1497,7 @@ void Klaymen::stTurnAwayFromUse() {
}
void Klaymen::stWonderAbout() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1506,7 +1506,7 @@ void Klaymen::stWonderAbout() {
}
void Klaymen::stPeekWall() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0xAC20C012, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1535,7 +1535,7 @@ uint32 Klaymen::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se
void Klaymen::stJumpToRing1() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing1))) {
- _status2 = 0;
+ _busyStatus = 0;
startAnimation(0xD82890BA, 0, -1);
setupJumpToRing();
}
@@ -1575,7 +1575,7 @@ void Klaymen::suUpdateDestX() {
}
void Klaymen::stHangOnRing() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x4829E0B8, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1585,7 +1585,7 @@ void Klaymen::stHangOnRing() {
void Klaymen::stJumpToRing2() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing2))) {
- _status2 = 0;
+ _busyStatus = 0;
startAnimation(0x900980B2, 0, -1);
setupJumpToRing();
}
@@ -1593,7 +1593,7 @@ void Klaymen::stJumpToRing2() {
void Klaymen::stJumpToRing3() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing3))) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0xBA1910B2, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1623,7 +1623,7 @@ uint32 Klaymen::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity
}
void Klaymen::stHoldRing3() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x4A293FB0, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1640,7 +1640,7 @@ uint32 Klaymen::hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *s
}
void Klaymen::stReleaseRing() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
sendMessage(_attachedSprite, 0x4807, 0);
_attachedSprite = NULL;
@@ -1652,18 +1652,18 @@ void Klaymen::stReleaseRing() {
void Klaymen::stJumpToRing4() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing4))) {
- _status2 = 0;
+ _busyStatus = 0;
startAnimation(0xB8699832, 0, -1);
setupJumpToRing();
}
}
-void Klaymen::sub41CCE0(int16 x) {
- sub41CC40(_attachedSprite->getX(), x);
+void Klaymen::startWalkToAttachedSpriteXDistance(int16 distance) {
+ startWalkToXDistance(_attachedSprite->getX(), distance);
}
void Klaymen::stContinueClimbLadderUp() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
_ladderStatus = 3;
startAnimationByHash(0x3A292504, 0x01084280, 0);
@@ -1676,7 +1676,7 @@ void Klaymen::stContinueClimbLadderUp() {
void Klaymen::stStartClimbLadderDown() {
if (!stStartAction(AnimationCallback(&Klaymen::stStartClimbLadderDown))) {
- _status2 = 0;
+ _busyStatus = 0;
if (_destY < _y) {
if (_ladderStatus == 1) {
_ladderStatus = 2;
@@ -1707,7 +1707,7 @@ void Klaymen::stStartClimbLadderDown() {
}
void Klaymen::stClimbLadderHalf() {
- _status2 = 2;
+ _busyStatus = 2;
if (_ladderStatus == 1) {
_ladderStatus = 0;
_acceptInput = false;
@@ -1773,7 +1773,7 @@ uint32 Klaymen::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, E
void Klaymen::stStartClimbLadderUp() {
if (!stStartAction(AnimationCallback(&Klaymen::stStartClimbLadderUp))) {
- _status2 = 0;
+ _busyStatus = 0;
if (_destY >= _y - 30) {
gotoNextStateExt();
} else if (_ladderStatus == 0) {
@@ -1799,7 +1799,7 @@ void Klaymen::stStartClimbLadderUp() {
}
void Klaymen::stWalkToFrontNoStep() {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimationByHash(0xF229C003, 0x14884392, 0);
SetUpdateHandler(&Klaymen::update);
@@ -1827,7 +1827,7 @@ uint32 Klaymen::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity
void Klaymen::stWalkToFront() {
if (!stStartAction(AnimationCallback(&Klaymen::stWalkToFront))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0xF229C003, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1838,7 +1838,7 @@ void Klaymen::stWalkToFront() {
void Klaymen::stTurnToFront() {
if (!stStartAction(AnimationCallback(&Klaymen::stTurnToFront))) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimationByHash(0xCA221107, 0, 0x8520108C);
SetUpdateHandler(&Klaymen::update);
@@ -1849,7 +1849,7 @@ void Klaymen::stTurnToFront() {
void Klaymen::stTurnToBack() {
if (!stStartAction(AnimationCallback(&Klaymen::stTurnToBack))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0xCA221107, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1859,7 +1859,7 @@ void Klaymen::stTurnToBack() {
}
void Klaymen::stLandOnFeet() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x18118554, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1881,7 +1881,7 @@ uint32 Klaymen::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *
void Klaymen::stTurnToBackToUse() {
if (!stStartAction(AnimationCallback(&Klaymen::stTurnToBackToUse))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x91540140, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1908,7 +1908,7 @@ uint32 Klaymen::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Ent
void Klaymen::stClayDoorOpen() {
if (!stStartAction(AnimationCallback(&Klaymen::stClayDoorOpen))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x5CCCB330, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1931,7 +1931,7 @@ uint32 Klaymen::hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity
void Klaymen::stTurnToUse() {
if (!stStartAction(AnimationCallback(&Klaymen::stTurnToUse))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x9B250AD2, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -1941,7 +1941,7 @@ void Klaymen::stTurnToUse() {
}
void Klaymen::stReturnFromUse() {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x98F88391, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2017,7 +2017,7 @@ void Klaymen::stMoveObjectSkipTurn() {
void Klaymen::stMoveObjectFaceObject() {
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
if (!stStartAction(AnimationCallback(&Klaymen::stMoveObjectFaceObject))) {
- _status2 = 2;
+ _busyStatus = 2;
_isMoveObjectRequested = false;
_acceptInput = true;
startAnimation(0x0C1CA072, 0, -1);
@@ -2029,7 +2029,7 @@ void Klaymen::stMoveObjectFaceObject() {
void Klaymen::stUseLever() {
if (!stStartAction(AnimationCallback(&Klaymen::stUseLever))) {
- _status2 = 0;
+ _busyStatus = 0;
if (_isLeverDown) {
stUseLeverRelease();
} else {
@@ -2072,7 +2072,7 @@ void Klaymen::stUseLeverRelease() {
void Klaymen::stReleaseLever() {
if (_isLeverDown) {
- _status2 = 2;
+ _busyStatus = 2;
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klaymen::update);
SetMessageHandler(&Klaymen::hmLever);
@@ -2097,7 +2097,7 @@ void Klaymen::evLeverReleasedEvent() {
void Klaymen::stInsertDisk() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stInsertDisk))) {
- _status2 = 2;
+ _busyStatus = 2;
_tapesToInsert = 0;
for (uint32 i = 0; i < 20; i++) {
if (getSubVar(VA_HAS_TAPE, i)) {
@@ -2178,7 +2178,7 @@ void Klaymen::walkAlongPathPoints() {
}
void Klaymen::stJumpToGrab() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimationByHash(0x00AB8C10, 0x01084280, 0);
SetUpdateHandler(&Klaymen::update);
@@ -2213,7 +2213,7 @@ uint32 Klaymen::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *
}
void Klaymen::stFinishGrow() {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x38445000, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2234,7 +2234,7 @@ uint32 Klaymen::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *
void Klaymen::stTurnToUseExt() {
if (!stStartAction(AnimationCallback(&Klaymen::stTurnToUseExt))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x1B3D8216, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2245,7 +2245,7 @@ void Klaymen::stTurnToUseExt() {
void Klaymen::stJumpToGrabFall() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpToGrabFall))) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x00AB8C10, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2256,7 +2256,7 @@ void Klaymen::stJumpToGrabFall() {
}
void Klaymen::stJumpToGrabRelease() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimationByHash(0x00AB8C10, 0x320AC306, 0);
SetUpdateHandler(&Klaymen::update);
@@ -2281,7 +2281,7 @@ void Klaymen::stDoIdleTeleporterHands() {
}
void Klaymen::stIdleTeleporterHands() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x90EF8D38, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2295,7 +2295,7 @@ void Klaymen::stDoIdleTeleporterHands2() {
}
void Klaymen::stIdleTeleporterHands2() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0x900F0930, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2305,7 +2305,7 @@ void Klaymen::stIdleTeleporterHands2() {
}
void Klaymen::teleporterAppear(uint32 fileHash) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(fileHash, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2314,7 +2314,7 @@ void Klaymen::teleporterAppear(uint32 fileHash) {
}
void Klaymen::teleporterDisappear(uint32 fileHash) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(fileHash, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2350,7 +2350,7 @@ uint32 Klaymen::hmShrink(int messageNum, const MessageParam ¶m, Entity *send
}
void Klaymen::stShrink() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
playSound(0, 0x4C69EA53);
startAnimation(0x1AE88904, 0, -1);
@@ -2362,7 +2362,7 @@ void Klaymen::stShrink() {
void Klaymen::stStandWonderAbout() {
if (_x > 260)
setDoDeltaX(1);
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2457,7 +2457,7 @@ uint32 Klaymen::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender
}
void Klaymen::stGrow() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x2838C010, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2466,7 +2466,7 @@ void Klaymen::stGrow() {
}
void Klaymen::stDrinkPotion() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
_potionFlag1 = false;
_potionFlag2 = false;
@@ -2503,7 +2503,7 @@ uint32 Klaymen::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *s
void Klaymen::stInsertKey() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stInsertKey))) {
- _status2 = 2;
+ _busyStatus = 2;
_keysToInsert = 0;
for (uint32 i = 0; i < 3; i++) {
if (getSubVar(VA_HAS_KEY, i)) {
@@ -2551,7 +2551,7 @@ uint32 Klaymen::hmReadNote(int messageNum, const MessageParam ¶m, Entity *se
}
void Klaymen::stReadNote() {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x123E9C9F, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2583,7 +2583,7 @@ uint32 Klaymen::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *s
}
void Klaymen::stHitByDoor() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2618,7 +2618,7 @@ void Klaymen::upPeekWallBlink() {
}
void Klaymen::stPeekWall1() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klaymen::update);
@@ -2628,7 +2628,7 @@ void Klaymen::stPeekWall1() {
}
void Klaymen::stPeekWall2() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0xAC20C012, 43, 49);
SetUpdateHandler(&Klaymen::update);
@@ -2638,7 +2638,7 @@ void Klaymen::stPeekWall2() {
void Klaymen::stPeekWallBlink() {
_blinkCounter = 0;
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
startAnimation(0xAC20C012, 38, 42);
@@ -2649,7 +2649,7 @@ void Klaymen::stPeekWallBlink() {
}
void Klaymen::stPeekWallReturn() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x2426932E, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2659,7 +2659,7 @@ void Klaymen::stPeekWallReturn() {
void Klaymen::stPullHammerLever() {
if (!stStartAction(AnimationCallback(&Klaymen::stPullHammerLever))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x00648953, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2688,7 +2688,7 @@ void Klaymen::suRidePlatformDown() {
void Klaymen::stRidePlatformDown() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stRidePlatformDown))) {
- _status2 = 1;
+ _busyStatus = 1;
sendMessage(_parentScene, 0x4803, 0);
_acceptInput = false;
_platformDeltaY = 0;
@@ -2702,7 +2702,7 @@ void Klaymen::stRidePlatformDown() {
void Klaymen::stCrashDown() {
playSound(0, 0x41648271);
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klaymen::update);
@@ -2879,7 +2879,7 @@ void Klaymen::suFallDown() {
void Klaymen::stJumpToRingVenusFlyTrap() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRingVenusFlyTrap))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2892,7 +2892,7 @@ void Klaymen::stJumpToRingVenusFlyTrap() {
void Klaymen::stStandIdleSpecial() {
playSound(0, 0x56548280);
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
_surface->setVisible(false);
startAnimation(0x5420E254, 0, -1);
@@ -2903,7 +2903,7 @@ void Klaymen::stStandIdleSpecial() {
void Klaymen::stSpitOutFall0() {
_countdown1 = 1;
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x000BAB02, 0, -1);
SetUpdateHandler(&Klaymen::upSpitOutFall);
@@ -2915,7 +2915,7 @@ void Klaymen::stSpitOutFall0() {
void Klaymen::stSpitOutFall2() {
_countdown1 = 1;
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
SetUpdateHandler(&Klaymen::upSpitOutFall);
@@ -2928,7 +2928,7 @@ void Klaymen::stSpitOutFall2() {
void Klaymen::stFalling() {
sendMessage(_parentScene, 0x1024, 1);
playSound(0, 0x41648271);
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
_isWalking = false;
startAnimationByHash(0x000BAB02, 0x88003000, 0);
@@ -2949,7 +2949,7 @@ void Klaymen::stFallTouchdown() {
void Klaymen::stJumpAndFall() {
if (!stStartAction(AnimationCallback(&Klaymen::stJumpAndFall))) {
sendMessage(_parentScene, 0x1024, 3);
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0xB93AB151, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2965,7 +2965,7 @@ void Klaymen::stDropFromRing() {
sendMessage(_attachedSprite, 0x4807, 0);
_attachedSprite = NULL;
}
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimation(0x586984B1, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -2975,7 +2975,7 @@ void Klaymen::stDropFromRing() {
}
void Klaymen::stPressDoorButton() {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = true;
setDoDeltaX(0);
startAnimation(0x1CD89029, 0, -1);
@@ -2985,7 +2985,7 @@ void Klaymen::stPressDoorButton() {
}
void Klaymen::stHitByBoxingGlove() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -3000,7 +3000,7 @@ void Klaymen::evHitByBoxingGloveDone() {
void Klaymen::stMoveVenusFlyTrap() {
if (!stStartAction(AnimationCallback(&Klaymen::stMoveVenusFlyTrap))) {
- _status2 = 2;
+ _busyStatus = 2;
_isMoveObjectRequested = false;
_acceptInput = true;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
@@ -3037,7 +3037,7 @@ void Klaymen::suFallSkipJump() {
}
void Klaymen::stFallSkipJump() {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
SetUpdateHandler(&Klaymen::update);
@@ -3074,7 +3074,7 @@ uint32 Klaymen::hmMatch(int messageNum, const MessageParam ¶m, Entity *sende
void Klaymen::stFetchMatch() {
if (!stStartAction(AnimationCallback(&Klaymen::stFetchMatch))) {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = false;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x9CAA0218, 0, -1);
@@ -3086,7 +3086,7 @@ void Klaymen::stFetchMatch() {
}
void Klaymen::stLightMatch() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x1222A513, 0, -1);
@@ -3128,7 +3128,7 @@ uint32 Klaymen::hmTumbleHeadless(int messageNum, const MessageParam ¶m, Enti
void Klaymen::stMoveObject() {
if (!stStartAction(AnimationCallback(&Klaymen::stMoveObject))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = false;
_moveObjectCountdown = 8;
setDoDeltaX(0);
@@ -3149,7 +3149,7 @@ void Klaymen::stContinueMoveObject() {
void Klaymen::stTumbleHeadless() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stTumbleHeadless))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
setDoDeltaX(0);
startAnimation(0x2821C590, 0, -1);
@@ -3164,7 +3164,7 @@ void Klaymen::stTumbleHeadless() {
void Klaymen::stCloseEyes() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stCloseEyes))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -3200,7 +3200,7 @@ void Klaymen::stTrySpitIntoPipe() {
if (_canSpitPipe)
spitIntoPipe();
} else if (!stStartAction(AnimationCallback(&Klaymen::stTrySpitIntoPipe))) {
- _status2 = 2;
+ _busyStatus = 2;
_acceptInput = true;
_spitDestPipeIndex = _spitPipeIndex;
_readyToSpit = true;
@@ -3242,7 +3242,7 @@ void Klaymen::suRidePlatform() {
void Klaymen::stRidePlatform() {
if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stRidePlatform))) {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klaymen::update);
@@ -3253,7 +3253,7 @@ void Klaymen::stRidePlatform() {
void Klaymen::stInteractLever() {
if (!stStartAction(AnimationCallback(&Klaymen::stInteractLever))) {
- _status2 = 0;
+ _busyStatus = 0;
if (_isLeverDown) {
stUseLeverRelease();
} else {
@@ -3295,7 +3295,7 @@ void Klaymen::stStartWalkingResume() {
int16 frameIndex = getGlobalVar(V_KLAYMEN_FRAMEINDEX) + _walkResumeFrameIncr;
if (frameIndex < 0 || frameIndex > 13)
frameIndex = 0;
- _status2 = 0;
+ _busyStatus = 0;
_isWalking = true;
_acceptInput = true;
startAnimation(0x1A249001, frameIndex, -1);
@@ -3314,7 +3314,7 @@ void Klaymen::upPeekInsideBlink() {
}
void Klaymen::stPeekInside() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klaymen::update);
@@ -3324,7 +3324,7 @@ void Klaymen::stPeekInside() {
}
void Klaymen::stPeekInsideReturn() {
- _status2 = 1;
+ _busyStatus = 1;
_acceptInput = false;
startAnimation(0xAC20C012, 43, 49);
SetUpdateHandler(&Klaymen::update);
@@ -3333,7 +3333,7 @@ void Klaymen::stPeekInsideReturn() {
}
void Klaymen::stPeekInsideBlink() {
- _status2 = 0;
+ _busyStatus = 0;
_acceptInput = true;
startAnimation(0xAC20C012, 38, 42);
_newStickFrameIndex = 42;
@@ -3382,11 +3382,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 0)
@@ -3426,7 +3425,6 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
: Klaymen(vm, parentScene, x, y) {
setKlaymenIdleTable1();
-
}
void KmScene1002::xUpdate() {
@@ -3496,7 +3494,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- sub41CCE0(param.asInteger());
+ startWalkToAttachedSpriteXDistance(param.asInteger());
break;
case 0x4820:
sendMessage(_parentScene, 0x2005, 0);
@@ -3677,8 +3675,7 @@ KmScene1201::KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
: Klaymen(vm, parentScene, x, y) {
setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4));
- _flagF6 = true;
-
+ _doYHitIncr = true;
}
uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3714,11 +3711,10 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -3792,11 +3788,10 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 1)
@@ -3845,6 +3840,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1306::KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+ // Empty
}
uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -3888,11 +3884,10 @@ uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) {
GotoState(&Klaymen::stInsertDisk);
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
if (_isSittingInTeleporter)
@@ -4007,9 +4002,9 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4069,11 +4064,10 @@ uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 1)
@@ -4131,11 +4125,10 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4186,11 +4179,10 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x4827:
GotoState(&Klaymen::stReleaseLever);
@@ -4209,7 +4201,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1404::KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
-
+
// Empty
}
@@ -4245,9 +4237,9 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4283,6 +4275,8 @@ uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1608::KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
+ // Empty
}
uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4315,11 +4309,10 @@ uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
if (_isSittingInTeleporter)
@@ -4410,9 +4403,9 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
if (_isSittingInTeleporter) {
@@ -4610,9 +4603,9 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
if (_isSittingInTeleporter)
@@ -4649,9 +4642,7 @@ KmScene2201::KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
: Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
-
_dataResource.load(0x04104242);
- _flagF6 = false;
}
uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -4678,11 +4669,10 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4718,6 +4708,7 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2203::KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -4761,9 +4752,9 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -4787,6 +4778,7 @@ uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2205::KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -4884,11 +4876,10 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
gotoNextStateExt();
break;
case 0x481B:
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
+ if (param.asPoint().y != 0)
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
+ else
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 0)
@@ -4933,6 +4924,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2207::KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -4972,9 +4964,9 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x4827:
GotoState(&Klaymen::stReleaseLever);
@@ -4995,6 +4987,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2242::KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5032,9 +5025,9 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 0)
@@ -5113,6 +5106,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m
KmScene2247::KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5165,6 +5159,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5192,9 +5187,9 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 1)
@@ -5243,6 +5238,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2402::KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5283,9 +5279,9 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 0)
@@ -5311,6 +5307,7 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2403::KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5344,9 +5341,9 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 0)
@@ -5396,7 +5393,6 @@ KmScene2406::KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
: Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
-
}
uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5433,9 +5429,9 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -5485,6 +5481,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2501::KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5536,6 +5533,7 @@ uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2732::KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5553,6 +5551,7 @@ uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2801::KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5574,9 +5573,9 @@ uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
@@ -5623,7 +5622,6 @@ KmScene2803::KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
: Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
-
_dataResource.load(0x00900849);
}
@@ -5737,6 +5735,7 @@ uint32 KmScene2803Small::xHandleMessage(int messageNum, const MessageParam ¶
KmScene2805::KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5793,10 +5792,10 @@ uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2806::KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount)
+ bool needsLargeSurface, NRect *clipRects, uint clipRectsCount)
: Klaymen(vm, parentScene, x, y) {
- if (flag) {
+ if (needsLargeSurface) {
NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
delete _surface;
createSurface(1000, dimensions.width, dimensions.height);
@@ -5809,7 +5808,6 @@ KmScene2806::KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
_dataResource.load(0x98182003);
_surface->setClipRects(clipRects, clipRectsCount);
-
}
uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5852,10 +5850,10 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) {
}
KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount)
+ bool needsLargeSurface, NRect *clipRects, uint clipRectsCount)
: Klaymen(vm, parentScene, x, y) {
- if (flag) {
+ if (needsLargeSurface) {
NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010);
delete _surface;
createSurface(1000, dimensions.width, dimensions.height);
@@ -5868,7 +5866,6 @@ KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
_dataResource.load(0x1830009A);
_surface->setClipRects(clipRects, clipRectsCount);
-
}
uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5912,6 +5909,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -5962,7 +5960,6 @@ KmScene2810::KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16
: Klaymen(vm, parentScene, x, y) {
_surface->setClipRects(clipRects, clipRectsCount);
-
}
uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
@@ -5994,9 +5991,9 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481F:
if (param.asInteger() == 0)
@@ -6053,6 +6050,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene2812::KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
+
// Empty
}
@@ -6086,9 +6084,9 @@ uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) {
break;
case 0x481B:
if (param.asPoint().y != 0)
- sub41CC40(param.asPoint().y, param.asPoint().x);
+ startWalkToXDistance(param.asPoint().y, param.asPoint().x);
else
- sub41CCE0(param.asPoint().x);
+ startWalkToAttachedSpriteXDistance(param.asPoint().x);
break;
case 0x481D:
GotoState(&Klaymen::stTurnToUse);
diff --git a/engines/neverhood/klaymen.h b/engines/neverhood/klaymen.h
index 31f8e5a..4cf9e72 100644
--- a/engines/neverhood/klaymen.h
+++ b/engines/neverhood/klaymen.h
@@ -399,12 +399,12 @@ protected:
int16 _blinkCounter, _blinkCounterMax;
int16 _countdown1;
int16 _tapesToInsert, _keysToInsert;
- bool _flagF6;
+ bool _doYHitIncr;
bool _isLeverDown;
bool _isWalkingOpenDoorNotified;
- int _status2;
- bool _flagFA;
- int _status3;
+ int _busyStatus;
+ bool _actionStatusChanged;
+ int _actionStatus;
const KlaymenIdleTableItem *_idleTable;
int _idleTableCount;
int _idleTableMaxValue;
@@ -436,17 +436,17 @@ protected:
// TODO Check if this can be turned into a void result
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
- void startWalkToX(int16 x, bool flag);
+ void startWalkToX(int16 x, bool walkExt);
void startWalkToXExt(int16 x);
void startWalkToXSmall(int16 x);
void startSpecialWalkLeft(int16 x);
void startSpecialWalkRight(int16 x);
- void sub41CC40(int16 x1, int16 x2);
- void sub41CCE0(int16 x);
+ void startWalkToXDistance(int16 destX, int16 distance);
+ void startWalkToAttachedSpriteXDistance(int16 distance);
void gotoNextStateExt();
- void sub41C770();
- void sub41C790();
+ void beginAction();
+ void endAction();
void stStartWalkingSmall();
uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
@@ -724,7 +724,7 @@ protected:
class KmScene2806 : public Klaymen {
public:
KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount);
+ bool needsLargeSurface, NRect *clipRects, uint clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
@@ -732,7 +732,7 @@ protected:
class KmScene2809 : public Klaymen {
public:
KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y,
- bool flag, NRect *clipRects, uint clipRectsCount);
+ bool needsLargeSurface, NRect *clipRects, uint clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
};
Commit: 9ae1888593ae25680a53819a038e9123db30b038
https://github.com/scummvm/scummvm/commit/9ae1888593ae25680a53819a038e9123db30b038
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Change Klaymen idle callbacks from method pointers to integers and evaluate these in a new method enterIdleAnimation
Changed paths:
engines/neverhood/klaymen.cpp
engines/neverhood/klaymen.h
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp
index 484d7aa..2563ce0 100644
--- a/engines/neverhood/klaymen.cpp
+++ b/engines/neverhood/klaymen.cpp
@@ -27,35 +27,35 @@
namespace Neverhood {
-static const KlaymenIdleTableItem klaymenTable1[] = {
- {1, &Klaymen::stDoIdlePickEar},
- {1, &Klaymen::stDoIdleSpinHead},
- {1, &Klaymen::stDoIdleArms},
- {1, &Klaymen::stDoIdleChest},
- {1, &Klaymen::stDoIdleHeadOff}
+static const KlaymenIdleTableItem klaymenIdleTable1[] = {
+ {1, kIdlePickEar},
+ {1, kIdleSpinHead},
+ {1, kIdleArms},
+ {1, kIdleChest},
+ {1, kIdleHeadOff}
};
-static const KlaymenIdleTableItem klaymenTable2[] = {
- {1, &Klaymen::stDoIdlePickEar},
- {1, &Klaymen::stDoIdleSpinHead},
- {1, &Klaymen::stDoIdleChest},
- {1, &Klaymen::stDoIdleHeadOff}
+static const KlaymenIdleTableItem klaymenIdleTable2[] = {
+ {1, kIdlePickEar},
+ {1, kIdleSpinHead},
+ {1, kIdleChest},
+ {1, kIdleHeadOff}
};
-static const KlaymenIdleTableItem klaymenTable3[] = {
- {1, &Klaymen::stDoIdleTeleporterHands},
- {1, &Klaymen::stDoIdleTeleporterHands2}
+static const KlaymenIdleTableItem klaymenIdleTable3[] = {
+ {1, kIdleTeleporterHands},
+ {1, kIdleTeleporterHands2}
};
-static const KlaymenIdleTableItem klaymenTable4[] = {
- {1, &Klaymen::stDoIdleSpinHead},
- {1, &Klaymen::stDoIdleChest},
- {1, &Klaymen::stDoIdleHeadOff},
+static const KlaymenIdleTableItem klaymenIdleTable4[] = {
+ {1, kIdleSpinHead},
+ {1, kIdleChest},
+ {1, kIdleHeadOff},
};
static const KlaymenIdleTableItem klaymenIdleTable1002[] = {
- {1, &Klaymen::stDoIdlePickEar},
- {2, &Klaymen::stIdleWonderAbout}
+ {1, kIdlePickEar},
+ {2, kIdleWonderAbout}
};
// Klaymen
@@ -103,28 +103,24 @@ void Klaymen::update() {
xUpdate();
}
-void Klaymen::setKlaymenIdleTable(const KlaymenIdleTableItem *table, int tableCount) {
+void Klaymen::setKlaymenIdleTable(const KlaymenIdleTableItem *table, uint tableCount) {
_idleTable = table;
_idleTableCount = tableCount;
- _idleTableMaxValue = 0;
- for (int i = 0; i < tableCount; i++)
- _idleTableMaxValue += table[i].value;
+ _idleTableTotalWeight = 0;
+ for (uint i = 0; i < tableCount; i++)
+ _idleTableTotalWeight += table[i].weight;
}
void Klaymen::setKlaymenIdleTable1() {
- setKlaymenIdleTable(klaymenTable1, ARRAYSIZE(klaymenTable1));
+ setKlaymenIdleTable(klaymenIdleTable1, ARRAYSIZE(klaymenIdleTable1));
}
void Klaymen::setKlaymenIdleTable2() {
- setKlaymenIdleTable(klaymenTable2, ARRAYSIZE(klaymenTable2));
+ setKlaymenIdleTable(klaymenIdleTable2, ARRAYSIZE(klaymenIdleTable2));
}
void Klaymen::setKlaymenIdleTable3() {
- setKlaymenIdleTable(klaymenTable3, ARRAYSIZE(klaymenTable3));
-}
-
-void Klaymen::stDoIdlePickEar() {
- startIdleAnimation(0x5B20C814, AnimationCallback(&Klaymen::stIdlePickEar));
+ setKlaymenIdleTable(klaymenIdleTable3, ARRAYSIZE(klaymenIdleTable3));
}
void Klaymen::stIdlePickEar() {
@@ -154,10 +150,6 @@ void Klaymen::evIdlePickEarDone() {
stopSound(0);
}
-void Klaymen::stDoIdleSpinHead() {
- startIdleAnimation(0xD122C137, AnimationCallback(&Klaymen::stIdleSpinHead));
-}
-
void Klaymen::stIdleSpinHead() {
_busyStatus = 1;
_acceptInput = true;
@@ -180,10 +172,6 @@ uint32 Klaymen::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity
return messageResult;
}
-void Klaymen::stDoIdleArms() {
- startIdleAnimation(0x543CD054, AnimationCallback(&Klaymen::stIdleArms));
-}
-
void Klaymen::stIdleArms() {
_busyStatus = 1;
_acceptInput = true;
@@ -215,10 +203,6 @@ uint32 Klaymen::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *se
return messageResult;
}
-void Klaymen::stDoIdleChest() {
- startIdleAnimation(0x40A0C034, AnimationCallback(&Klaymen::stIdleChest));
-}
-
void Klaymen::stIdleChest() {
_busyStatus = 1;
_acceptInput = true;
@@ -241,10 +225,6 @@ uint32 Klaymen::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *s
return messageResult;
}
-void Klaymen::stDoIdleHeadOff() {
- startIdleAnimation(0x5120E137, AnimationCallback(&Klaymen::stIdleHeadOff));
-}
-
void Klaymen::stIdleHeadOff() {
_busyStatus = 1;
_acceptInput = true;
@@ -298,18 +278,17 @@ void Klaymen::stSitIdleTeleporter() {
void Klaymen::upSitIdleTeleporter() {
update();
- _idleCounter++;
- if (_idleCounter >= _idleCounterMax) {
+ if (++_idleCounter >= _idleCounterMax) {
_idleCounter = 0;
if (_idleTable) {
- int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue);
- for (int i = 0; i < _idleTableCount; i++) {
- if (randomValue < _idleTable[i].value) {
- (this->*(_idleTable[i].callback))();
+ int idleWeight = _vm->_rnd->getRandomNumber(_idleTableTotalWeight - 1);
+ for (uint i = 0; i < _idleTableCount; i++) {
+ if (idleWeight < _idleTable[i].weight) {
+ enterIdleAnimation(_idleTable[i].idleAnimation);
_idleCounterMax = _vm->_rnd->getRandomNumber(128 - 1) + 24;
break;
}
- randomValue -= _idleTable[i].value;
+ idleWeight -= _idleTable[i].weight;
}
}
} else if (++_blinkCounter >= _blinkCounterMax) {
@@ -524,13 +503,13 @@ void Klaymen::upStandIdle() {
if (++_idleCounter >= 720) {
_idleCounter = 0;
if (_idleTable) {
- int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue - 1);
- for (int i = 0; i < _idleTableCount; i++) {
- if (randomValue < _idleTable[i].value) {
- (this->*(_idleTable[i].callback))();
+ int idleWeight = _vm->_rnd->getRandomNumber(_idleTableTotalWeight - 1);
+ for (uint i = 0; i < _idleTableCount; i++) {
+ if (idleWeight < _idleTable[i].weight) {
+ enterIdleAnimation(_idleTable[i].idleAnimation);
break;
}
- randomValue -= _idleTable[i].value;
+ idleWeight -= _idleTable[i].weight;
}
}
} else if (++_blinkCounter >= _blinkCounterMax) {
@@ -2177,6 +2156,35 @@ void Klaymen::walkAlongPathPoints() {
}
}
+void Klaymen::enterIdleAnimation(uint idleAnimation) {
+ switch (idleAnimation) {
+ case kIdlePickEar:
+ startIdleAnimation(0x5B20C814, AnimationCallback(&Klaymen::stIdlePickEar));
+ break;
+ case kIdleSpinHead:
+ startIdleAnimation(0xD122C137, AnimationCallback(&Klaymen::stIdleSpinHead));
+ break;
+ case kIdleArms:
+ startIdleAnimation(0x543CD054, AnimationCallback(&Klaymen::stIdleArms));
+ break;
+ case kIdleChest:
+ startIdleAnimation(0x40A0C034, AnimationCallback(&Klaymen::stIdleChest));
+ break;
+ case kIdleHeadOff:
+ startIdleAnimation(0x5120E137, AnimationCallback(&Klaymen::stIdleHeadOff));
+ break;
+ case kIdleTeleporterHands:
+ startIdleAnimation(0x90EF8D38, AnimationCallback(&Klaymen::stIdleTeleporterHands));
+ break;
+ case kIdleTeleporterHands2:
+ startIdleAnimation(0x900F0930, AnimationCallback(&Klaymen::stIdleTeleporterHands2));
+ break;
+ case kIdleWonderAbout:
+ stIdleWonderAbout();
+ break;
+ }
+}
+
void Klaymen::stJumpToGrab() {
_busyStatus = 0;
_acceptInput = false;
@@ -2276,10 +2284,6 @@ uint32 Klaymen::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, E
return messageResult;
}
-void Klaymen::stDoIdleTeleporterHands() {
- startIdleAnimation(0x90EF8D38, AnimationCallback(&Klaymen::stIdleTeleporterHands));
-}
-
void Klaymen::stIdleTeleporterHands() {
_busyStatus = 0;
_acceptInput = true;
@@ -2290,10 +2294,6 @@ void Klaymen::stIdleTeleporterHands() {
NextState(&Klaymen::stSitIdleTeleporterBlinkSecond);
}
-void Klaymen::stDoIdleTeleporterHands2() {
- startIdleAnimation(0x900F0930, AnimationCallback(&Klaymen::stIdleTeleporterHands2));
-}
-
void Klaymen::stIdleTeleporterHands2() {
_busyStatus = 0;
_acceptInput = true;
@@ -3674,7 +3674,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1201::KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
- setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4));
+ setKlaymenIdleTable(klaymenIdleTable4, ARRAYSIZE(klaymenIdleTable4));
_doYHitIncr = true;
}
@@ -4145,7 +4145,7 @@ uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) {
KmScene1403::KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
: Klaymen(vm, parentScene, x, y) {
- setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4));
+ setKlaymenIdleTable(klaymenIdleTable4, ARRAYSIZE(klaymenIdleTable4));
}
uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) {
diff --git a/engines/neverhood/klaymen.h b/engines/neverhood/klaymen.h
index 4cf9e72..d1b0b59 100644
--- a/engines/neverhood/klaymen.h
+++ b/engines/neverhood/klaymen.h
@@ -41,12 +41,23 @@ const uint32 kKlaymenSpeedUpHash = 0x004A2148;
#include "common/pack-start.h" // START STRUCT PACKING
struct KlaymenIdleTableItem {
- int value;
- void (Klaymen::*callback)();
+ int weight;
+ uint idleAnimation;
};
#include "common/pack-end.h" // END STRUCT PACKING
+enum {
+ kIdlePickEar,
+ kIdleSpinHead,
+ kIdleArms,
+ kIdleChest,
+ kIdleHeadOff,
+ kIdleTeleporterHands,
+ kIdleTeleporterHands2,
+ kIdleWonderAbout
+};
+
class Klaymen : public AnimatedSprite {
public:
Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRectArray *clipRects = NULL);
@@ -56,34 +67,27 @@ public:
void startIdleAnimation(uint32 fileHash, AnimationCb callback);
void upIdleAnimation();
- void stDoIdlePickEar();
void stIdlePickEar();
void evIdlePickEarDone();
uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender);
- void stDoIdleSpinHead();
void stIdleSpinHead();
uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender);
- void stDoIdleArms();
void stIdleArms();
void evIdleArmsDone();
uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender);
- void stDoIdleChest();
void stIdleChest();
uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender);
- void stDoIdleHeadOff();
void stIdleHeadOff();
uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender);
void stIdleWonderAbout();
- void stDoIdleTeleporterHands();
void stIdleTeleporterHands();
- void stDoIdleTeleporterHands2();
void stIdleTeleporterHands2();
void stTryStandIdle();
@@ -367,7 +371,7 @@ public:
uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender);
uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
- void setKlaymenIdleTable(const KlaymenIdleTableItem *table, int tableCount);
+ void setKlaymenIdleTable(const KlaymenIdleTableItem *table, uint tableCount);
void setKlaymenIdleTable1();
void setKlaymenIdleTable2();
void setKlaymenIdleTable3();
@@ -406,8 +410,8 @@ protected:
bool _actionStatusChanged;
int _actionStatus;
const KlaymenIdleTableItem *_idleTable;
- int _idleTableCount;
- int _idleTableMaxValue;
+ uint _idleTableCount;
+ int _idleTableTotalWeight;
NPointArray *_pathPoints;
bool _soundFlag;
@@ -451,6 +455,7 @@ protected:
void stStartWalkingSmall();
uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender);
+ void enterIdleAnimation(uint idleAnimation);
void walkAlongPathPoints();
};
Commit: 65c6984635849f451d2137a37407813a3ada105e
https://github.com/scummvm/scummvm/commit/65c6984635849f451d2137a37407813a3ada105e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Implement game-internal savegame overwrite query screen
- Rename and reorder fields in the Klaymen class
Changed paths:
engines/neverhood/klaymen.cpp
engines/neverhood/klaymen.h
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp
index 2563ce0..06d606e 100644
--- a/engines/neverhood/klaymen.cpp
+++ b/engines/neverhood/klaymen.cpp
@@ -62,7 +62,7 @@ static const KlaymenIdleTableItem klaymenIdleTable1002[] = {
Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRectArray *clipRects)
: AnimatedSprite(vm, 1000), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
- _isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), _busyStatus(0), _acceptInput(true),
+ _isWalkingOpenDoorNotified(false), _spitOutCountdown(0), _tapesToInsert(0), _keysToInsert(0), _busyStatus(0), _acceptInput(true),
_attachedSprite(NULL), _isWalking(false), _actionStatus(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
_doYHitIncr(false), _isLeverDown(false), _isSittingInTeleporter(false), _actionStatusChanged(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
_idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) {
@@ -2718,7 +2718,7 @@ void Klaymen::stCrashDownFinished() {
void Klaymen::upSpitOutFall() {
Klaymen::update();
- if (_countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_spitOutCountdown != 0 && (--_spitOutCountdown == 0)) {
_surface->setVisible(true);
SetUpdateHandler(&Klaymen::update);
}
@@ -2902,7 +2902,7 @@ void Klaymen::stStandIdleSpecial() {
}
void Klaymen::stSpitOutFall0() {
- _countdown1 = 1;
+ _spitOutCountdown = 1;
_busyStatus = 0;
_acceptInput = false;
startAnimation(0x000BAB02, 0, -1);
@@ -2914,7 +2914,7 @@ void Klaymen::stSpitOutFall0() {
}
void Klaymen::stSpitOutFall2() {
- _countdown1 = 1;
+ _spitOutCountdown = 1;
_busyStatus = 0;
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
diff --git a/engines/neverhood/klaymen.h b/engines/neverhood/klaymen.h
index d1b0b59..25443b5 100644
--- a/engines/neverhood/klaymen.h
+++ b/engines/neverhood/klaymen.h
@@ -401,7 +401,6 @@ protected:
int16 _destX, _destY;
int16 _idleCounter, _idleCounterMax;
int16 _blinkCounter, _blinkCounterMax;
- int16 _countdown1;
int16 _tapesToInsert, _keysToInsert;
bool _doYHitIncr;
bool _isLeverDown;
@@ -409,12 +408,17 @@ protected:
int _busyStatus;
bool _actionStatusChanged;
int _actionStatus;
+
const KlaymenIdleTableItem *_idleTable;
uint _idleTableCount;
int _idleTableTotalWeight;
+ int _idleTableNum;
+
NPointArray *_pathPoints;
bool _soundFlag;
+ int16 _spitOutCountdown;
+
bool _isSittingInTeleporter;
bool _potionFlag1;
@@ -423,7 +427,6 @@ protected:
int16 _platformDeltaY;
Sprite *_otherSprite;
- int _idleTableNum;
int16 _walkResumeFrameIncr;
@@ -437,7 +440,6 @@ protected:
uint32 _spitContDestPipeIndex;
virtual void xUpdate();
- // TODO Check if this can be turned into a void result
virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m);
void startWalkToX(int16 x, bool walkExt);
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 396d8cf..f1669a6 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -32,7 +32,8 @@ enum {
CREDITS_SCENE = 1,
MAKING_OF = 2,
LOAD_GAME_MENU = 3,
- SAVE_GAME_MENU = 4
+ SAVE_GAME_MENU = 4,
+ QUERY_OVR_MENU = 5
};
enum {
@@ -109,6 +110,9 @@ void MenuModule::createScene(int sceneNum, int which) {
case SAVE_GAME_MENU:
createSaveGameMenu();
break;
+ case QUERY_OVR_MENU:
+ _childObject = new QueryOverwriteMenu(_vm, this, _savegameDescription);
+ break;
}
SetUpdateHandler(&MenuModule::updateScene);
_childObject->handleUpdate();
@@ -162,7 +166,10 @@ void MenuModule::updateScene() {
handleLoadGameMenuAction(_moduleResult != 1);
break;
case SAVE_GAME_MENU:
- handleSaveGameMenuAction(_moduleResult != 1);
+ handleSaveGameMenuAction(_moduleResult != 1, true);
+ break;
+ case QUERY_OVR_MENU:
+ handleSaveGameMenuAction(_moduleResult != 1, false);
break;
default:
break;
@@ -199,16 +206,19 @@ void MenuModule::handleLoadGameMenuAction(bool doLoad) {
_savegameList = NULL;
}
-void MenuModule::handleSaveGameMenuAction(bool doSave) {
- createScene(MAIN_MENU, -1);
- if (doSave && _savegameSlot >= 0) {
+void MenuModule::handleSaveGameMenuAction(bool doSave, bool doQuery) {
+ if (doSave && doQuery && _savegameSlot >= 0 && _savegameSlot < (int)_savegameList->size()) {
+ createScene(QUERY_OVR_MENU, -1);
+ } else if (doSave && _savegameSlot >= 0) {
// Restore the scene palette and background so that the correct thumbnail is saved
byte *menuPaletteData = _vm->_screen->getPaletteData();
_vm->_screen->setPaletteData(_savedPaletteData);
_vm->_gameModule->redrawPrevChildObject();
_vm->saveGameState(_savegameSlot, _savegameDescription);
_vm->_screen->setPaletteData(menuPaletteData);
- leaveModule(0);
+ createScene(MAIN_MENU, -1);
+ } else {
+ createScene(MAIN_MENU, -1);
}
delete _savegameList;
_savegameList = NULL;
@@ -1010,22 +1020,13 @@ void LoadGameMenu::handleEvent(int16 itemID, int eventType) {
uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
-#if 0
- case 0x000A:
- sendMessage(_textEditWidget, 0x000A, param.asInteger());
- setCurrWidget(_textEditWidget);
- break;
-#endif
case 0x000B:
if (param.asInteger() == Common::KEYCODE_RETURN) {
((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
leaveScene(0);
} else if (param.asInteger() == Common::KEYCODE_ESCAPE) {
leaveScene(1);
- }/* else {
- sendMessage(_textEditWidget, 0x000B, param.asInteger());
- setCurrWidget(_textEditWidget);
- }*/
+ }
break;
case 0x2000:
// Handle menu button click
@@ -1056,4 +1057,55 @@ uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
+QueryOverwriteMenu::QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule, const Common::String &description)
+ : Scene(vm, parentModule) {
+
+ static const uint32 kQueryOverwriteMenuButtonFileHashes[] = {
+ 0x90312400,
+ 0x94C22A22
+ };
+
+ static const NRect kQueryOverwriteMenuCollisionBounds[] = {
+ NRect(145, 334, 260, 385),
+ NRect(365, 340, 477, 388)
+ };
+
+ setBackground(0x043692C4);
+ setPalette(0x043692C4);
+ insertScreenMouse(0x692C004B);
+ insertStaticSprite(0x08C0AC24, 200);
+
+ for (uint buttonIndex = 0; buttonIndex < 2; ++buttonIndex) {
+ Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
+ kQueryOverwriteMenuButtonFileHashes[buttonIndex], kQueryOverwriteMenuCollisionBounds[buttonIndex]);
+ addCollisionSprite(menuButton);
+ }
+
+ // Draw the query text to the background, each text line is centered
+ // NOTE The original had this in its own class
+ FontSurface *fontSurface = new FontSurface(_vm, calcHash("bgQueryTinyAlphabet"), 32, 7, 32, 11, 17);
+ Common::StringArray textLines;
+ textLines.push_back(description);
+ textLines.push_back("Game exists.");
+ textLines.push_back("Overwrite it?");
+ for (uint i = 0; i < textLines.size(); ++i)
+ fontSurface->drawString(_background->getSurface(), 106 + (423 - textLines[i].size() * 11) / 2,
+ 127 + 31 + i * 17, (const byte*)textLines[i].c_str());
+ delete fontSurface;
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&QueryOverwriteMenu::handleMessage);
+}
+
+uint32 QueryOverwriteMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x2000:
+ // Handle menu button click
+ leaveScene(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 0836795..de25b69 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -49,7 +49,7 @@ protected:
void createLoadGameMenu();
void createSaveGameMenu();
void handleLoadGameMenuAction(bool doLoad);
- void handleSaveGameMenuAction(bool doSave);
+ void handleSaveGameMenuAction(bool doSave, bool doQuery);
void loadSavegameList();
};
@@ -235,6 +235,13 @@ protected:
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
Common::String _savegameDescription;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+};
+
+class QueryOverwriteMenu : public Scene {
+public:
+ QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule, const Common::String &description);
+protected:
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
};
Commit: 53a81d11b8e5e34478e75a8797b094ec53976c68
https://github.com/scummvm/scummvm/commit/53a81d11b8e5e34478e75a8797b094ec53976c68
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Don't allow main menu until _canRequestMainMenu is set
- Clean up GameModule
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 48462a2..493d16d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -75,7 +75,8 @@ enum {
GameModule::GameModule(NeverhoodEngine *vm)
: Module(vm, NULL), _moduleNum(-1), _prevChildObject(NULL), _prevModuleNum(-1),
- _restoreGameRequested(false), _restartGameRequested(false), _mainMenuRequested(false), _gameWasLoaded(false) {
+ _restoreGameRequested(false), _restartGameRequested(false), _canRequestMainMenu(true),
+ _mainMenuRequested(false) {
// Other initializations moved to actual engine class
_vm->_soundMan->playSoundThree(0x002D0031, 0x8861079);
@@ -147,7 +148,7 @@ void GameModule::handleKeyDown(Common::KeyCode keyCode) {
void GameModule::handleEscapeKey() {
if (_vm->isDemo())
_vm->quitGame();
- else if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
+ else if (!_prevChildObject && _canRequestMainMenu)
_mainMenuRequested = true;
else if (_childObject)
sendMessage(_childObject, 0x000C, 0);
@@ -334,7 +335,7 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
uint32 messageResult = Module::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0800:
- _someFlag1 = true;
+ _canRequestMainMenu = true;
break;
case 0x1009:
_moduleResult = param.asInteger();
@@ -344,15 +345,12 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
case 0x1023:
// Unused resource preloading messages
break;
- case 0x101F:
- _field2C = true;
- break;
}
return messageResult;
}
void GameModule::startup() {
-#if 0
+#if 1
createModule(1500, 0); // Logos and intro video // Real game start
#else
// DEBUG>>>
@@ -524,7 +522,7 @@ void GameModule::createModule(int moduleNum, int which) {
_childObject = new Module1400(_vm, this, which);
break;
case 1500:
- _someFlag1 = false;
+ _canRequestMainMenu = false;
setGlobalVar(V_MODULE_NAME, 0x00F10114);
_childObject = new Module1500(_vm, this, which);
break;
@@ -876,21 +874,10 @@ void GameModule::updateMenuModule() {
// TODO Restore FPS?
_childObject = _prevChildObject;
// TODO Restore Smacker handle, screen offsets
- sendMessage(_childObject, 0x101E, 0); // TODO CHECKME Is this needed?
+ sendMessage(_childObject, 0x101E, 0);
_prevChildObject = NULL;
_moduleNum = _prevModuleNum;
SetUpdateHandler(&GameModule::updateModule);
- } else if (_gameWasLoaded) {
-#if 0 // TODO Handle this in some other way...
- _gameWasLoaded = false;
- delete _childObject;
- delete _prevChildObject;
- _childObject = NULL;
- _prevChildObject = NULL;
- _prevModuleNum = 0;
- // TODO Create module from savegame values...
- // TODO createModuleByHash(...);
-#endif
}
}
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 04fc780..df8f015 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -58,13 +58,10 @@ public:
protected:
Entity *_prevChildObject;
int _prevModuleNum;
- bool _gameWasLoaded;
bool _restoreGameRequested;
bool _restartGameRequested;
+ bool _canRequestMainMenu;
bool _mainMenuRequested;
- bool _someFlag1;
- bool _field2C;
- uint32 _counter;
int _moduleNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createModule(int moduleNum, int which);
Commit: c96d2475b100610271c974043a8a9c4322b8e60b
https://github.com/scummvm/scummvm/commit/c96d2475b100610271c974043a8a9c4322b8e60b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:42-07:00
Commit Message:
NEVERHOOD: Add Screen::saveParams and Screen::restoreParams, called when etnering/leaving the menu
Changed paths:
engines/neverhood/gamemodule.cpp
engines/neverhood/gamemodule.h
engines/neverhood/screen.cpp
engines/neverhood/screen.h
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 493d16d..5eaa7e2 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -286,8 +286,7 @@ void GameModule::initCubeSymbolsPuzzle() {
}
void GameModule::initCrystalColorsPuzzle() {
- // TODO Maybe move this into the GameModule so all puzzle init code is together
- if (getGlobalVar(V_CRYSTAL_COLORS_INIT) == 0) {
+ if (!getGlobalVar(V_CRYSTAL_COLORS_INIT)) {
TextResource textResource(_vm);
const char *textStart, *textEnd;
textResource.load(0x46691611);
@@ -341,10 +340,6 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
_moduleResult = param.asInteger();
_done = true;
break;
- case 0x100A:
- case 0x1023:
- // Unused resource preloading messages
- break;
}
return messageResult;
}
@@ -829,7 +824,7 @@ void GameModule::updateModule() {
break;
case 3000:
// NOTE _moduleResult 2 never used
- // TODO Check if _moduleResult 4 is used
+ // NOTE Check if _moduleResult 4 is used
if (_moduleResult == 1)
createModule(1900, 0);
else if (_moduleResult == 3)
@@ -854,7 +849,7 @@ void GameModule::openMainMenu() {
// If there's no module, create one so there's something to return to
createModule(1000, 0);
}
- // TODO Save FPS, Smacker handle, screen offsets
+ _vm->_screen->saveParams();
_mainMenuRequested = false;
createMenuModule();
}
@@ -871,9 +866,8 @@ void GameModule::createMenuModule() {
void GameModule::updateMenuModule() {
if (!updateChild()) {
- // TODO Restore FPS?
+ _vm->_screen->restoreParams();
_childObject = _prevChildObject;
- // TODO Restore Smacker handle, screen offsets
sendMessage(_childObject, 0x101E, 0);
_prevChildObject = NULL;
_moduleNum = _prevModuleNum;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index df8f015..8101d38 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -56,13 +56,13 @@ public:
void initCrystalColorsPuzzle();
uint32 getCurrRadioMusicFileHash();
protected:
+ int _moduleNum;
Entity *_prevChildObject;
int _prevModuleNum;
bool _restoreGameRequested;
bool _restartGameRequested;
bool _canRequestMainMenu;
bool _mainMenuRequested;
- int _moduleNum;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createModule(int moduleNum, int which);
void createModuleByHash(uint32 nameHash);
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 352e59e..3e57422 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -114,6 +114,18 @@ uint32 Screen::getNextFrameTime() {
return _vm->_system->getMillis() + waitTicks;
}
+void Screen::saveParams() {
+ _savedSmackerDecoder = _smackerDecoder;
+ _savedFrameDelay = _frameDelay;
+ _savedYOffset = _yOffset;
+}
+
+void Screen::restoreParams() {
+ _smackerDecoder = _savedSmackerDecoder;
+ _frameDelay = _savedFrameDelay;
+ _yOffset = _savedYOffset;
+}
+
void Screen::setFps(int fps) {
_frameDelay = 1000 / fps;
}
@@ -270,16 +282,14 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
NDrawRect newDrawRect;
x = sysRect.x;
- if (sysRect.width <= x || -sysRect.width >= x) {
+ if (sysRect.width <= x || -sysRect.width >= x)
x = x % sysRect.width;
- }
if (x < 0)
x += sysRect.width;
y = sysRect.y;
- if (y >= sysRect.height || -sysRect.height >= y) {
+ if (y >= sysRect.height || -sysRect.height >= y)
y = y % sysRect.height;
- }
if (y < 0)
y += sysRect.height;
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 33de141..c778066 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -63,6 +63,8 @@ public:
~Screen();
void update();
uint32 getNextFrameTime();
+ void saveParams();
+ void restoreParams();
void setFps(int fps);
int getFps();
void setYOffset(int16 yOffset);
@@ -89,12 +91,12 @@ protected:
NeverhoodEngine *_vm;
MicroTileArray *_microTiles;
Graphics::Surface *_backScreen;
- Video::SmackerDecoder *_smackerDecoder;
+ Video::SmackerDecoder *_smackerDecoder, *_savedSmackerDecoder;
int32 _ticks;
- int32 _frameDelay;
+ int32 _frameDelay, _savedFrameDelay;
byte *_paletteData;
bool _paletteChanged;
- int16 _yOffset;
+ int16 _yOffset, _savedYOffset;
bool _fullRefresh;
RenderQueue *_renderQueue, *_prevRenderQueue;
};
Commit: 70fdfd9d572b4c395dfa4d3fbff791e064d4079d
https://github.com/scummvm/scummvm/commit/70fdfd9d572b4c395dfa4d3fbff791e064d4079d
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Delete all sound/music items on exit
- Minor cleanup
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/sound.cpp
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index f1669a6..f752ce6 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -178,7 +178,6 @@ void MenuModule::updateScene() {
}
uint32 MenuModule::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- // TODO CHECKME Handles 0x101F, possibly just a debug/cache message which can be ignored?
return Module::handleMessage(messageNum, param, sender);;
}
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index 9e0e572..a479bf2 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -233,21 +233,18 @@ void SoundItem::setVolume(int volume) {
void SoundItem::update() {
if (_playOnceAfterCountdown) {
- if (_currCountdown == 0) {
+ if (_currCountdown == 0)
_currCountdown = _initialCountdown;
- } else if (--_currCountdown == 0) {
+ else if (--_currCountdown == 0)
_soundResource->play();
- }
} else if (_playOnceAfterRandomCountdown) {
if (_currCountdown == 0) {
if (_minCountdown > 0 && _maxCountdown > 0 && _minCountdown < _maxCountdown)
_currCountdown = _vm->_rnd->getRandomNumberRng(_minCountdown, _maxCountdown);
- } else if (--_currCountdown == 0) {
+ } else if (--_currCountdown == 0)
_soundResource->play();
- }
- } else if (_playLooping && !_soundResource->isPlaying()) {
- _soundResource->play(); // TODO Looping parameter?
- }
+ } else if (_playLooping && !_soundResource->isPlaying())
+ _soundResource->play();
}
// SoundMan
@@ -257,7 +254,10 @@ SoundMan::SoundMan(NeverhoodEngine *vm)
}
SoundMan::~SoundMan() {
- // TODO Clean up
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ delete _soundItems[i];
+ for (uint i = 0; i < _musicItems.size(); ++i)
+ delete _musicItems[i];
}
void SoundMan::addMusic(uint32 groupNameHash, uint32 musicFileHash) {
@@ -709,6 +709,10 @@ AudioResourceMan::AudioResourceMan(NeverhoodEngine *vm)
}
AudioResourceMan::~AudioResourceMan() {
+ for (uint i = 0; i < _soundItems.size(); ++i)
+ delete _soundItems[i];
+ for (uint i = 0; i < _musicItems.size(); ++i)
+ delete _musicItems[i];
}
int16 AudioResourceMan::addSound(uint32 fileHash) {
Commit: bdac28929f7ebcab6ae758e57c24c32493e46f76
https://github.com/scummvm/scummvm/commit/bdac28929f7ebcab6ae758e57c24c32493e46f76
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Add Y-flipping to unpackSpriteNormal
Changed paths:
engines/neverhood/graphics.cpp
diff --git a/engines/neverhood/graphics.cpp b/engines/neverhood/graphics.cpp
index 9139545..5099c7a 100644
--- a/engines/neverhood/graphics.cpp
+++ b/engines/neverhood/graphics.cpp
@@ -315,9 +315,12 @@ void unpackSpriteRle(const byte *source, int width, int height, byte *dest, int
void unpackSpriteNormal(const byte *source, int width, int height, byte *dest, int destPitch, bool flipX, bool flipY) {
- // TODO: Flip Y
-
- int sourcePitch = (width + 3) & 0xFFFC;
+ const int sourcePitch = (width + 3) & 0xFFFC;
+
+ if (flipY) {
+ dest += destPitch * (height - 1);
+ destPitch = -destPitch;
+ }
if (!flipX) {
while (height-- > 0) {
Commit: dc459b5f673207a932ae07546ab29efd5b64727a
https://github.com/scummvm/scummvm/commit/dc459b5f673207a932ae07546ab29efd5b64727a
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Merge some code in the save/load menus
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index f752ce6..3093c43 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -542,11 +542,6 @@ void TextLabelWidget::clear() {
updateBounds();
}
-void TextLabelWidget::onClick() {
- Widget::onClick();
- // TODO? Click handler
-}
-
void TextLabelWidget::setString(const byte *string, int stringLen) {
_string = string;
_stringLen = stringLen;
@@ -909,13 +904,11 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
setCurrWidget(_textEditWidget);
break;
case 0x000B:
- if (param.asInteger() == Common::KEYCODE_RETURN) {
- ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
- _listBox->getCurrIndex(), _textEditWidget->isModified());
- leaveScene(0);
- } else if (param.asInteger() == Common::KEYCODE_ESCAPE) {
+ if (param.asInteger() == Common::KEYCODE_RETURN)
+ performSaveGame();
+ else if (param.asInteger() == Common::KEYCODE_ESCAPE)
leaveScene(1);
- } else {
+ else {
sendMessage(_textEditWidget, 0x000B, param.asInteger());
setCurrWidget(_textEditWidget);
}
@@ -924,10 +917,7 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
// Handle menu button click
switch (param.asInteger()) {
case 0:
- // TODO Same handling as Return, merge
- ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
- _listBox->getCurrIndex(), _textEditWidget->isModified());
- leaveScene(0);
+ performSaveGame();
break;
case 1:
leaveScene(1);
@@ -950,6 +940,12 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
+void SaveGameMenu::performSaveGame() {
+ ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
+ _listBox->getCurrIndex(), _textEditWidget->isModified());
+ leaveScene(0);
+}
+
LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList)
: WidgetScene(vm, parentModule), _savegameList(savegameList) {
@@ -1020,20 +1016,16 @@ uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x000B:
- if (param.asInteger() == Common::KEYCODE_RETURN) {
- ((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
- leaveScene(0);
- } else if (param.asInteger() == Common::KEYCODE_ESCAPE) {
+ if (param.asInteger() == Common::KEYCODE_RETURN)
+ performLoadGame();
+ else if (param.asInteger() == Common::KEYCODE_ESCAPE)
leaveScene(1);
- }
break;
case 0x2000:
// Handle menu button click
switch (param.asInteger()) {
case 0:
- // TODO Same handling as Return, merge
- ((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
- leaveScene(0);
+ performLoadGame();
break;
case 1:
leaveScene(1);
@@ -1056,6 +1048,11 @@ uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
+void LoadGameMenu::performLoadGame() {
+ ((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
+ leaveScene(0);
+}
+
QueryOverwriteMenu::QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule, const Common::String &description)
: Scene(vm, parentModule) {
@@ -1081,7 +1078,7 @@ QueryOverwriteMenu::QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule
}
// Draw the query text to the background, each text line is centered
- // NOTE The original had this in its own class
+ // NOTE The original had this text in its own class
FontSurface *fontSurface = new FontSurface(_vm, calcHash("bgQueryTinyAlphabet"), 32, 7, 32, 11, 17);
Common::StringArray textLines;
textLines.push_back(description);
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index de25b69..1b39982 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -126,7 +126,6 @@ public:
TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface);
- virtual void onClick();
virtual void addSprite();
virtual int16 getWidth();
virtual int16 getHeight();
@@ -222,6 +221,7 @@ protected:
Common::String _savegameDescription;
void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void performSaveGame();
};
class LoadGameMenu : public WidgetScene {
@@ -236,6 +236,7 @@ protected:
TextEditWidget *_textEditWidget;
Common::String _savegameDescription;
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void performLoadGame();
};
class QueryOverwriteMenu : public Scene {
Commit: a80bafeb2eb67756fc5765468c4c7ac3e1c024d4
https://github.com/scummvm/scummvm/commit/a80bafeb2eb67756fc5765468c4c7ac3e1c024d4
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Support game loading from launcher/command line
Changed paths:
engines/neverhood/detection.cpp
engines/neverhood/neverhood.cpp
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index 043cf02..1c88c34 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -137,7 +137,7 @@ bool NeverhoodMetaEngine::hasFeature(MetaEngineFeature f) const {
return
(f == kSupportsListSaves) ||
(f == kSupportsLoadingDuringStartup) ||
-// (f == kSupportsDeleteSave) ||
+ (f == kSupportsDeleteSave) ||
(f == kSavesSupportMetaInfo) ||
(f == kSavesSupportThumbnail) ||
(f == kSavesSupportCreationDate) ||
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 7b068bd..475a459 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -108,7 +108,10 @@ Common::Error NeverhoodEngine::run() {
(*navigationList)[5].middleFlag = 1;
}
- _gameModule->startup();
+ if (ConfMan.hasKey("save_slot"))
+ loadGameState(ConfMan.getInt("save_slot"));
+ else
+ _gameModule->startup();
mainLoop();
Commit: 2a571d71b054b5dc90c7cee669f25766206fbb36
https://github.com/scummvm/scummvm/commit/2a571d71b054b5dc90c7cee669f25766206fbb36
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Fix GUI options and game copyright
Changed paths:
engines/neverhood/detection.cpp
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index 1c88c34..4224e08 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -113,6 +113,7 @@ class NeverhoodMetaEngine : public AdvancedMetaEngine {
public:
NeverhoodMetaEngine() : AdvancedMetaEngine(Neverhood::gameDescriptions, sizeof(Neverhood::NeverhoodGameDescription), neverhoodGames) {
_singleid = "neverhood";
+ _guioptions = GUIO2(GUIO_NOSUBTITLES, GUIO_NOMIDI);
}
virtual const char *getName() const {
@@ -120,7 +121,7 @@ public:
}
virtual const char *getOriginalCopyright() const {
- return "Neverhood Engine (C) Infogrames";
+ return "Neverhood (C) The Neverhood, Inc.";
}
virtual bool hasFeature(MetaEngineFeature f) const;
@@ -257,3 +258,4 @@ SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target,
#else
REGISTER_PLUGIN_STATIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
#endif
+
Commit: a03879963f2e8adebd1f4bb90975ff0c43f286dc
https://github.com/scummvm/scummvm/commit/a03879963f2e8adebd1f4bb90975ff0c43f286dc
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Changed the save/load menu to allow gaps in saved games to simplify game deletion
Changed paths:
engines/neverhood/detection.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index 4224e08..e5bfd29 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -174,7 +174,6 @@ SaveStateList NeverhoodMetaEngine::listSaves(const char *target) const {
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); file++) {
// Obtain the last 3 digits of the filename, since they correspond to the save slot
int slotNum = atoi(file->c_str() + file->size() - 3);
-
if (slotNum >= 0 && slotNum <= 999) {
Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
if (in) {
@@ -194,31 +193,9 @@ int NeverhoodMetaEngine::getMaximumSaveSlot() const {
}
void NeverhoodMetaEngine::removeSaveState(const char *target, int slot) const {
-
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, slot);
-
saveFileMan->removeSavefile(filename.c_str());
-
- Common::StringArray filenames;
- Common::String pattern = target;
- pattern += ".???";
- filenames = saveFileMan->listSavefiles(pattern.c_str());
- Common::sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
-
- for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
- // Obtain the last 3 digits of the filename, since they correspond to the save slot
- int slotNum = atoi(file->c_str() + file->size() - 3);
-
- // Rename every slot greater than the deleted slot,
- // Also do not rename quicksaves.
- if (slotNum > slot && slotNum < 990) {
- saveFileMan->renameSavefile(file->c_str(), filename.c_str());
-
- filename = Neverhood::NeverhoodEngine::getSavegameFilename(target, ++slot);
- }
- }
-
}
SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 5eaa7e2..1246a5b 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -345,7 +345,7 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
}
void GameModule::startup() {
-#if 1
+#if 0
createModule(1500, 0); // Logos and intro video // Real game start
#else
// DEBUG>>>
@@ -394,8 +394,8 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 8;
- createModule(1800, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(1000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 5;
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 3093c43..0ba9bc0 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -81,15 +81,13 @@ MenuModule::~MenuModule() {
_vm->_screen->setPaletteData(_savedPaletteData);
}
-void MenuModule::setLoadgameInfo(uint slot) {
- _savegameSlot = slot;
- debug("LOADGAME: slot = %d", slot);
+void MenuModule::setLoadgameInfo(uint index) {
+ _savegameSlot = (*_savegameList)[index].slotNum;
}
-void MenuModule::setSavegameInfo(const Common::String &description, uint slot, bool newSavegame) {
+void MenuModule::setSavegameInfo(const Common::String &description, uint index, bool newSavegame) {
_savegameDescription = description;
- _savegameSlot = newSavegame ? _savegameList->size() : slot;
- debug("SAVEGAME: description = [%s]; slot = %d; new = %d", description.c_str(), slot, newSavegame);
+ _savegameSlot = newSavegame ? -1 : (*_savegameList)[index].slotNum;
}
void MenuModule::createScene(int sceneNum, int which) {
@@ -183,14 +181,14 @@ uint32 MenuModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
void MenuModule::createLoadGameMenu() {
_savegameSlot = -1;
- _savegameList = new Common::StringArray();
+ _savegameList = new SavegameList();
loadSavegameList();
_childObject = new LoadGameMenu(_vm, this, _savegameList);
}
void MenuModule::createSaveGameMenu() {
_savegameSlot = -1;
- _savegameList = new Common::StringArray();
+ _savegameList = new SavegameList();
loadSavegameList();
_childObject = new SaveGameMenu(_vm, this, _savegameList);
}
@@ -206,9 +204,12 @@ void MenuModule::handleLoadGameMenuAction(bool doLoad) {
}
void MenuModule::handleSaveGameMenuAction(bool doSave, bool doQuery) {
- if (doSave && doQuery && _savegameSlot >= 0 && _savegameSlot < (int)_savegameList->size()) {
+ if (doSave && doQuery && _savegameSlot >= 0) {
createScene(QUERY_OVR_MENU, -1);
- } else if (doSave && _savegameSlot >= 0) {
+ } else if (doSave) {
+ // Get a new slot number if it's a new savegame
+ if (_savegameSlot < 0)
+ _savegameSlot = _savegameList->size() > 0 ? _savegameList->back().slotNum + 1 : 0;
// Restore the scene palette and background so that the correct thumbnail is saved
byte *menuPaletteData = _vm->_screen->getPaletteData();
_vm->_screen->setPaletteData(_savedPaletteData);
@@ -240,8 +241,12 @@ void MenuModule::loadSavegameList() {
if (slotNum >= 0 && slotNum <= 999) {
Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
if (in) {
- if (Neverhood::NeverhoodEngine::readSaveHeader(in, false, header) == Neverhood::NeverhoodEngine::kRSHENoError)
- _savegameList->push_back(header.description);
+ if (Neverhood::NeverhoodEngine::readSaveHeader(in, false, header) == Neverhood::NeverhoodEngine::kRSHENoError) {
+ SavegameItem savegameItem;
+ savegameItem.slotNum = slotNum;
+ savegameItem.description = header.description;
+ _savegameList->push_back(savegameItem);
+ }
delete in;
}
}
@@ -548,9 +553,8 @@ void TextLabelWidget::setString(const byte *string, int stringLen) {
}
TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, int maxStringLength, FontSurface *fontSurface,
- uint32 fileHash, const NRect &rect)
- : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
+ int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect)
+ : Widget(vm, x, y, itemID, parentScene, 1000, 1000),
_maxStringLength(maxStringLength), _fontSurface(fontSurface), _fileHash(fileHash), _rect(rect),
_cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0),
_modified(false), _readOnly(false) {
@@ -728,9 +732,8 @@ uint32 TextEditWidget::handleMessage(int messageNum, const MessageParam ¶m,
}
SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority,
- Common::StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect)
- : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
+ SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect)
+ : Widget(vm, x, y, itemID, parentScene, 1000, 1000),
_savegameList(savegameList), _fontSurface(fontSurface), _bgFileHash(bgFileHash), _rect(rect),
_maxStringLength(0), _firstVisibleItem(0), _lastVisibleItem(0), _currIndex(0) {
@@ -768,11 +771,11 @@ void SavegameListBox::addSprite() {
}
void SavegameListBox::buildItems() {
- Common::StringArray &savegameList = *_savegameList;
+ SavegameList &savegameList = *_savegameList;
int16 itemX = _rect.x1, itemY = 0;
for (uint i = 0; i < savegameList.size(); ++i) {
- const byte *string = (const byte*)savegameList[i].c_str();
- int stringLen = (int)savegameList[i].size();
+ const byte *string = (const byte*)savegameList[i].description.c_str();
+ int stringLen = (int)savegameList[i].description.size();
TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1,
_baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _fontSurface);
label->addSprite();
@@ -831,7 +834,7 @@ void SavegameListBox::pageDown() {
}
}
-SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList)
+SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
: WidgetScene(vm, parentModule), _savegameList(savegameList) {
static const uint32 kSaveGameMenuButtonFileHashes[] = {
@@ -864,11 +867,11 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::St
insertStaticSprite(0x1340A5C2, 200);
insertStaticSprite(0x1301A7EA, 200);
- _listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this, 1000, 1000,
+ _listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this,
_savegameList, _fontSurface, 0x1115A223, kListBoxRect);
_listBox->addSprite();
- _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 1000, 1000, 29,
+ _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 29,
_fontSurface, 0x3510A868, kTextEditRect);
_textEditWidget->setCursor(0x8290AC20, 2, 13);
_textEditWidget->addSprite();
@@ -891,7 +894,7 @@ SaveGameMenu::~SaveGameMenu() {
void SaveGameMenu::handleEvent(int16 itemID, int eventType) {
if (itemID == 69 && eventType == 5) {
uint currIndex = _listBox->getCurrIndex();
- _textEditWidget->setString((*_savegameList)[currIndex]);
+ _textEditWidget->setString((*_savegameList)[currIndex].description);
setCurrWidget(_textEditWidget);
}
}
@@ -946,7 +949,7 @@ void SaveGameMenu::performSaveGame() {
leaveScene(0);
}
-LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList)
+LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
: WidgetScene(vm, parentModule), _savegameList(savegameList) {
static const uint32 kLoadGameMenuButtonFileHashes[] = {
@@ -979,11 +982,11 @@ LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::St
insertStaticSprite(0x0BC600A3, 200);
insertStaticSprite(0x0F960021, 200);
- _listBox = new SavegameListBox(_vm, 263, 142, 69/*ItemID*/, this, 1000, 1000,
+ _listBox = new SavegameListBox(_vm, 263, 142, 69/*ItemID*/, this,
_savegameList, _fontSurface, 0x04040409, kListBoxRect);
_listBox->addSprite();
- _textEditWidget = new TextEditWidget(_vm, 263, 48, 70/*ItemID*/, this, 1000, 1000, 29,
+ _textEditWidget = new TextEditWidget(_vm, 263, 48, 70/*ItemID*/, this, 29,
_fontSurface, 0x10924C03, kTextEditRect);
_textEditWidget->setCursor(0x18032303, 2, 13);
_textEditWidget->setReadOnly(true);
@@ -1007,7 +1010,7 @@ LoadGameMenu::~LoadGameMenu() {
void LoadGameMenu::handleEvent(int16 itemID, int eventType) {
if (itemID == 69 && eventType == 5) {
uint currIndex = _listBox->getCurrIndex();
- _textEditWidget->setString((*_savegameList)[currIndex]);
+ _textEditWidget->setString((*_savegameList)[currIndex].description);
setCurrWidget(_textEditWidget);
}
}
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 1b39982..2f91bdb 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -31,16 +31,23 @@
namespace Neverhood {
+struct SavegameItem {
+ int slotNum;
+ Common::String description;
+};
+
+typedef Common::Array<SavegameItem> SavegameList;
+
class MenuModule : public Module {
public:
MenuModule(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~MenuModule();
- void setLoadgameInfo(uint slot);
- void setSavegameInfo(const Common::String &description, uint slot, bool newSavegame);
+ void setLoadgameInfo(uint index);
+ void setSavegameInfo(const Common::String &description, uint index, bool newSavegame);
protected:
int _sceneNum;
byte *_savedPaletteData;
- Common::StringArray *_savegameList;
+ SavegameList *_savegameList;
Common::String _savegameDescription;
int _savegameSlot;
void createScene(int sceneNum, int which);
@@ -144,8 +151,7 @@ protected:
class TextEditWidget : public Widget {
public:
TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority, int maxStringLength, FontSurface *fontSurface,
- uint32 fileHash, const NRect &rect);
+ int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect);
~TextEditWidget();
virtual void onClick();
virtual void addSprite();
@@ -183,8 +189,7 @@ protected:
class SavegameListBox : public Widget {
public:
SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
- int baseObjectPriority, int baseSurfacePriority,
- Common::StringArray *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
+ SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
virtual void onClick();
virtual void addSprite();
void buildItems();
@@ -202,7 +207,7 @@ protected:
Common::Array<TextLabelWidget*> _textLabelItems;
int _firstVisibleItem;
int _lastVisibleItem;
- Common::StringArray *_savegameList;
+ SavegameList *_savegameList;
FontSurface *_fontSurface;
uint _currIndex;
int _maxVisibleItemsCount;
@@ -210,11 +215,11 @@ protected:
class SaveGameMenu : public WidgetScene {
public:
- SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList);
+ SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
~SaveGameMenu();
virtual void handleEvent(int16 itemID, int eventType);
protected:
- Common::StringArray *_savegameList;
+ SavegameList *_savegameList;
FontSurface *_fontSurface;
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
@@ -226,11 +231,11 @@ protected:
class LoadGameMenu : public WidgetScene {
public:
- LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, Common::StringArray *savegameList);
+ LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
~LoadGameMenu();
virtual void handleEvent(int16 itemID, int eventType);
protected:
- Common::StringArray *_savegameList;
+ SavegameList *_savegameList;
FontSurface *_fontSurface;
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
Commit: 8749efdea821433cf355ae4fa543ef412f33c2fe
https://github.com/scummvm/scummvm/commit/8749efdea821433cf355ae4fa543ef412f33c2fe
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Add game-internal savegame delete menu
- Rename Widget::addSprite to Widget::initialize
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
engines/neverhood/neverhood.h
engines/neverhood/saveload.cpp
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 0ba9bc0..8b03532 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -28,12 +28,13 @@
namespace Neverhood {
enum {
- MAIN_MENU = 0,
- CREDITS_SCENE = 1,
- MAKING_OF = 2,
- LOAD_GAME_MENU = 3,
- SAVE_GAME_MENU = 4,
- QUERY_OVR_MENU = 5
+ MAIN_MENU = 0,
+ CREDITS_SCENE = 1,
+ MAKING_OF = 2,
+ LOAD_GAME_MENU = 3,
+ SAVE_GAME_MENU = 4,
+ DELETE_GAME_MENU = 5,
+ QUERY_OVR_MENU = 6
};
enum {
@@ -90,6 +91,10 @@ void MenuModule::setSavegameInfo(const Common::String &description, uint index,
_savegameSlot = newSavegame ? -1 : (*_savegameList)[index].slotNum;
}
+void MenuModule::setDeletegameInfo(uint index) {
+ _savegameSlot = (*_savegameList)[index].slotNum;
+}
+
void MenuModule::createScene(int sceneNum, int which) {
_sceneNum = sceneNum;
switch (_sceneNum) {
@@ -108,6 +113,9 @@ void MenuModule::createScene(int sceneNum, int which) {
case SAVE_GAME_MENU:
createSaveGameMenu();
break;
+ case DELETE_GAME_MENU:
+ createDeleteGameMenu();
+ break;
case QUERY_OVR_MENU:
_childObject = new QueryOverwriteMenu(_vm, this, _savegameDescription);
break;
@@ -149,7 +157,7 @@ void MenuModule::updateScene() {
createScene(MAIN_MENU, -1);
break;
case kMainMenuDeleteGame:
- // TODO createDeleteGameMenu();
+ createScene(DELETE_GAME_MENU, -1);
break;
default:
createScene(MAIN_MENU, -1);
@@ -166,6 +174,9 @@ void MenuModule::updateScene() {
case SAVE_GAME_MENU:
handleSaveGameMenuAction(_moduleResult != 1, true);
break;
+ case DELETE_GAME_MENU:
+ handleDeleteGameMenuAction(_moduleResult != 1);
+ break;
case QUERY_OVR_MENU:
handleSaveGameMenuAction(_moduleResult != 1, false);
break;
@@ -193,6 +204,13 @@ void MenuModule::createSaveGameMenu() {
_childObject = new SaveGameMenu(_vm, this, _savegameList);
}
+void MenuModule::createDeleteGameMenu() {
+ _savegameSlot = -1;
+ _savegameList = new SavegameList();
+ loadSavegameList();
+ _childObject = new DeleteGameMenu(_vm, this, _savegameList);
+}
+
void MenuModule::handleLoadGameMenuAction(bool doLoad) {
createScene(MAIN_MENU, -1);
if (doLoad && _savegameSlot >= 0) {
@@ -224,6 +242,15 @@ void MenuModule::handleSaveGameMenuAction(bool doSave, bool doQuery) {
_savegameList = NULL;
}
+void MenuModule::handleDeleteGameMenuAction(bool doDelete) {
+ if (doDelete && _savegameSlot >= 0) {
+ _vm->removeGameState(_savegameSlot);
+ createScene(MAIN_MENU, -1);
+ }
+ delete _savegameList;
+ _savegameList = NULL;
+}
+
void MenuModule::loadSavegameList() {
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
@@ -479,7 +506,7 @@ void Widget::refreshPosition() {
updateBounds();
}
-void Widget::addSprite() {
+void Widget::initialize() {
// Empty
}
@@ -523,7 +550,7 @@ TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 it
}
-void TextLabelWidget::addSprite() {
+void TextLabelWidget::initialize() {
_parentScene->addSprite(this);
_parentScene->addCollisionSprite(this);
}
@@ -590,7 +617,7 @@ void TextEditWidget::onClick() {
Widget::onClick();
}
-void TextEditWidget::addSprite() {
+void TextEditWidget::initialize() {
SpriteResource cursorSpriteResource(_vm);
_spriteResource.load(_fileHash, true);
@@ -602,7 +629,7 @@ void TextEditWidget::addSprite() {
_textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _fontSurface->getCharHeight()) / 2,
0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
(const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _fontSurface);
- _textLabelWidget->addSprite();
+ _textLabelWidget->initialize();
cursorSpriteResource.load(_cursorFileHash, true);
_cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
_cursorSurface->drawSpriteResourceEx(cursorSpriteResource, false, false, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
@@ -757,7 +784,7 @@ void SavegameListBox::onClick() {
}
}
-void SavegameListBox::addSprite() {
+void SavegameListBox::initialize() {
_spriteResource.load(_bgFileHash, true);
createSurface(_baseSurfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
refreshPosition();
@@ -778,7 +805,7 @@ void SavegameListBox::buildItems() {
int stringLen = (int)savegameList[i].description.size();
TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1,
_baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _fontSurface);
- label->addSprite();
+ label->initialize();
_textLabelItems.push_back(label);
}
}
@@ -869,12 +896,12 @@ SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameLi
_listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this,
_savegameList, _fontSurface, 0x1115A223, kListBoxRect);
- _listBox->addSprite();
+ _listBox->initialize();
_textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 29,
_fontSurface, 0x3510A868, kTextEditRect);
_textEditWidget->setCursor(0x8290AC20, 2, 13);
- _textEditWidget->addSprite();
+ _textEditWidget->initialize();
setCurrWidget(_textEditWidget);
for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
@@ -984,13 +1011,12 @@ LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameLi
_listBox = new SavegameListBox(_vm, 263, 142, 69/*ItemID*/, this,
_savegameList, _fontSurface, 0x04040409, kListBoxRect);
- _listBox->addSprite();
+ _listBox->initialize();
_textEditWidget = new TextEditWidget(_vm, 263, 48, 70/*ItemID*/, this, 29,
_fontSurface, 0x10924C03, kTextEditRect);
- _textEditWidget->setCursor(0x18032303, 2, 13);
_textEditWidget->setReadOnly(true);
- _textEditWidget->addSprite();
+ _textEditWidget->initialize();
setCurrWidget(_textEditWidget);
for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
@@ -1056,6 +1082,111 @@ void LoadGameMenu::performLoadGame() {
leaveScene(0);
}
+DeleteGameMenu::DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
+ : WidgetScene(vm, parentModule), _savegameList(savegameList) {
+
+ static const uint32 kDeleteGameMenuButtonFileHashes[] = {
+ 0x8198E268,
+ 0xDD0C4620,
+ 0x81296520,
+ 0x8D284211,
+ 0x8C004621,
+ 0x07294020
+ };
+
+ static const NRect kDeleteGameMenuButtonCollisionBounds[] = {
+ NRect(518, 46, 595, 91),
+ NRect(524, 322, 599, 369),
+ NRect(395, 40, 462, 127),
+ NRect(405, 126, 460, 185),
+ NRect(397, 205, 456, 273),
+ NRect(395, 278, 452, 372)
+ };
+
+ static const NRect kListBoxRect(0, 0, 320, 271);
+ static const NRect kTextEditRect(0, 0, 320, 17);
+
+ _fontSurface = new FontSurface(_vm, calcHash("bgDeleteTinyAlphabet"), 32, 7, 32, 11, 17);
+
+ setBackground(0x4080E01C);
+ setPalette(0x4080E01C);
+ insertScreenMouse(0x0E018400);
+ insertStaticSprite(0x80083C01, 200);
+ insertStaticSprite(0x84181E81, 200);
+
+ _listBox = new SavegameListBox(_vm, 61, 64, 69/*ItemID*/, this,
+ _savegameList, _fontSurface, calcHash("mxDeleteListBox"), kListBoxRect);
+ _listBox->initialize();
+
+ _textEditWidget = new TextEditWidget(_vm, 49, 414, 70/*ItemID*/, this, 29,
+ _fontSurface, 0x250A3060, kTextEditRect);
+ _textEditWidget->setReadOnly(true);
+ _textEditWidget->initialize();
+ setCurrWidget(_textEditWidget);
+
+ for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
+ Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
+ kDeleteGameMenuButtonFileHashes[buttonIndex], kDeleteGameMenuButtonCollisionBounds[buttonIndex]);
+ addCollisionSprite(menuButton);
+ }
+
+ SetUpdateHandler(&Scene::update);
+ SetMessageHandler(&DeleteGameMenu::handleMessage);
+}
+
+DeleteGameMenu::~DeleteGameMenu() {
+ delete _fontSurface;
+}
+
+void DeleteGameMenu::handleEvent(int16 itemID, int eventType) {
+ if (itemID == 69 && eventType == 5) {
+ uint currIndex = _listBox->getCurrIndex();
+ _textEditWidget->setString((*_savegameList)[currIndex].description);
+ setCurrWidget(_textEditWidget);
+ }
+}
+
+uint32 DeleteGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x000B:
+ if (param.asInteger() == Common::KEYCODE_RETURN)
+ performDeleteGame();
+ else if (param.asInteger() == Common::KEYCODE_ESCAPE)
+ leaveScene(1);
+ break;
+ case 0x2000:
+ // Handle menu button click
+ switch (param.asInteger()) {
+ case 0:
+ performDeleteGame();
+ break;
+ case 1:
+ leaveScene(1);
+ break;
+ case 2:
+ _listBox->pageUp();
+ break;
+ case 3:
+ _listBox->scrollUp();
+ break;
+ case 4:
+ _listBox->scrollDown();
+ break;
+ case 5:
+ _listBox->pageDown();
+ break;
+ }
+ break;
+ }
+ return 0;
+}
+
+void DeleteGameMenu::performDeleteGame() {
+ ((MenuModule*)_parentModule)->setDeletegameInfo(_listBox->getCurrIndex());
+ leaveScene(0);
+}
+
QueryOverwriteMenu::QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule, const Common::String &description)
: Scene(vm, parentModule) {
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 2f91bdb..39cd36a 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -44,6 +44,7 @@ public:
virtual ~MenuModule();
void setLoadgameInfo(uint index);
void setSavegameInfo(const Common::String &description, uint index, bool newSavegame);
+ void setDeletegameInfo(uint index);
protected:
int _sceneNum;
byte *_savedPaletteData;
@@ -55,8 +56,10 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
void createLoadGameMenu();
void createSaveGameMenu();
+ void createDeleteGameMenu();
void handleLoadGameMenuAction(bool doLoad);
void handleSaveGameMenuAction(bool doSave, bool doQuery);
+ void handleDeleteGameMenuAction(bool doDelete);
void loadSavegameList();
};
@@ -114,7 +117,7 @@ public:
virtual void onClick();
virtual void setPosition(int16 x, int16 y);
virtual void refreshPosition();
- virtual void addSprite();
+ virtual void initialize();
virtual int16 getWidth();
virtual int16 getHeight();
virtual void enterWidget();
@@ -133,7 +136,7 @@ public:
TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
int baseObjectPriority, int baseSurfacePriority,
const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface);
- virtual void addSprite();
+ virtual void initialize();
virtual int16 getWidth();
virtual int16 getHeight();
void drawString(int maxStringLength);
@@ -154,7 +157,7 @@ public:
int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect);
~TextEditWidget();
virtual void onClick();
- virtual void addSprite();
+ virtual void initialize();
virtual void enterWidget();
virtual void exitWidget();
void setCursor(uint32 cursorFileHash, int16 cursorWidth, int16 cursorHeight);
@@ -191,7 +194,7 @@ public:
SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
virtual void onClick();
- virtual void addSprite();
+ virtual void initialize();
void buildItems();
void drawItems();
void refresh();
@@ -244,6 +247,21 @@ protected:
void performLoadGame();
};
+class DeleteGameMenu : public WidgetScene {
+public:
+ DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
+ ~DeleteGameMenu();
+ virtual void handleEvent(int16 itemID, int eventType);
+protected:
+ SavegameList *_savegameList;
+ FontSurface *_fontSurface;
+ SavegameListBox *_listBox;
+ TextEditWidget *_textEditWidget;
+ Common::String _savegameDescription;
+ uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
+ void performDeleteGame();
+};
+
class QueryOverwriteMenu : public Scene {
public:
QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule, const Common::String &description);
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 14c283b..577fbd7 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -119,6 +119,7 @@ public:
Common::Error loadGameState(int slot);
Common::Error saveGameState(int slot, const Common::String &description);
+ Common::Error removeGameState(int slot);
void savegame(const char *filename, const char *description);
void loadgame(const char *filename);
const char *getSavegameFilename(int num);
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
index 2f97ade..578d985 100644
--- a/engines/neverhood/saveload.cpp
+++ b/engines/neverhood/saveload.cpp
@@ -143,6 +143,13 @@ Common::Error NeverhoodEngine::saveGameState(int slot, const Common::String &des
return Common::kNoError;
}
+Common::Error NeverhoodEngine::removeGameState(int slot) {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Common::String filename = Neverhood::NeverhoodEngine::getSavegameFilename(_targetName, slot);
+ saveFileMan->removeSavefile(filename.c_str());
+ return Common::kNoError;
+}
+
const char *NeverhoodEngine::getSavegameFilename(int num) {
static Common::String filename;
filename = getSavegameFilename(_targetName, num);
Commit: 9ca3973e6fe6c191a504a2c9fb402f03fda738e7
https://github.com/scummvm/scummvm/commit/9ca3973e6fe6c191a504a2c9fb402f03fda738e7
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Work on the save/load/delete menus
- Rename WidgetScene to GameStateMenu
- Merge common code from the save/load/delete into GameStateMenu
Changed paths:
engines/neverhood/menumodule.cpp
engines/neverhood/menumodule.h
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 8b03532..619acad 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -243,9 +243,9 @@ void MenuModule::handleSaveGameMenuAction(bool doSave, bool doQuery) {
}
void MenuModule::handleDeleteGameMenuAction(bool doDelete) {
+ createScene(MAIN_MENU, -1);
if (doDelete && _savegameSlot >= 0) {
_vm->removeGameState(_savegameSlot);
- createScene(MAIN_MENU, -1);
}
delete _savegameList;
_savegameList = NULL;
@@ -453,33 +453,9 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
-WidgetScene::WidgetScene(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _currWidget(NULL) {
-}
-
-NPoint WidgetScene::getMousePos() {
- NPoint pt;
- pt.x = _mouseCursor->getX();
- pt.y = _mouseCursor->getY();
- return pt;
-}
-
-void WidgetScene::setCurrWidget(Widget *newWidget) {
- if (newWidget && newWidget != _currWidget) {
- if (_currWidget)
- _currWidget->exitWidget();
- newWidget->enterWidget();
- _currWidget = newWidget;
- }
-}
-
-void WidgetScene::handleEvent(int16 itemID, int eventType) {
- // Empty
-}
-
-Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
int baseObjectPriority, int baseSurfacePriority)
- : StaticSprite(vm, baseObjectPriority), _itemID(itemID), _parentScene(parentScene),
+ : StaticSprite(vm, baseObjectPriority), _parentScene(parentScene),
_baseObjectPriority(baseObjectPriority), _baseSurfacePriority(baseSurfacePriority) {
SetUpdateHandler(&Widget::update);
@@ -542,10 +518,10 @@ uint32 Widget::handleMessage(int messageNum, const MessageParam ¶m, Entity *
return messageResult;
}
-TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
int baseObjectPriority, int baseSurfacePriority,
const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface)
- : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority),
+ : Widget(vm, x, y, parentScene, baseObjectPriority, baseSurfacePriority),
_string(string), _stringLen(stringLen), _drawSurface(drawSurface), _tx(tx), _ty(ty), _fontSurface(fontSurface) {
}
@@ -579,9 +555,9 @@ void TextLabelWidget::setString(const byte *string, int stringLen) {
_stringLen = stringLen;
}
-TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect)
- : Widget(vm, x, y, itemID, parentScene, 1000, 1000),
+ : Widget(vm, x, y, parentScene, 1000, 1000),
_maxStringLength(maxStringLength), _fontSurface(fontSurface), _fileHash(fileHash), _rect(rect),
_cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0),
_modified(false), _readOnly(false) {
@@ -627,7 +603,7 @@ void TextEditWidget::initialize() {
_parentScene->addCollisionSprite(this);
_surface->setVisible(true);
_textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _fontSurface->getCharHeight()) / 2,
- 0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
+ _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
(const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _fontSurface);
_textLabelWidget->initialize();
cursorSpriteResource.load(_cursorFileHash, true);
@@ -758,9 +734,9 @@ uint32 TextEditWidget::handleMessage(int messageNum, const MessageParam ¶m,
return messageResult;
}
-SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect)
- : Widget(vm, x, y, itemID, parentScene, 1000, 1000),
+ : Widget(vm, x, y, parentScene, 1000, 1000),
_savegameList(savegameList), _fontSurface(fontSurface), _bgFileHash(bgFileHash), _rect(rect),
_maxStringLength(0), _firstVisibleItem(0), _lastVisibleItem(0), _currIndex(0) {
@@ -779,7 +755,7 @@ void SavegameListBox::onClick() {
_currIndex = newIndex;
refresh();
_parentScene->setCurrWidget(this);
- _parentScene->handleEvent(_itemID, 5);
+ _parentScene->refreshDescriptionEdit();
}
}
}
@@ -803,7 +779,7 @@ void SavegameListBox::buildItems() {
for (uint i = 0; i < savegameList.size(); ++i) {
const byte *string = (const byte*)savegameList[i].description.c_str();
int stringLen = (int)savegameList[i].description.size();
- TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1,
+ TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, _parentScene, _baseObjectPriority + 1,
_baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _fontSurface);
label->initialize();
_textLabelItems.push_back(label);
@@ -861,84 +837,92 @@ void SavegameListBox::pageDown() {
}
}
-SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
- : WidgetScene(vm, parentModule), _savegameList(savegameList) {
-
- static const uint32 kSaveGameMenuButtonFileHashes[] = {
- 0x8359A824,
- 0x0690E260,
- 0x0352B050,
- 0x1392A223,
- 0x13802260,
- 0x0B32B200
- };
+GameStateMenu::GameStateMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList,
+ const uint32 *buttonFileHashes, const NRect *buttonCollisionBounds,
+ uint32 backgroundFileHash, uint32 fontFileHash,
+ uint32 mouseFileHash, const NRect *mouseRect,
+ uint32 listBoxBackgroundFileHash, int16 listBoxX, int16 listBoxY, const NRect &listBoxRect,
+ uint32 textEditBackgroundFileHash, uint32 textEditCursorFileHash, int16 textEditX, int16 textEditY, const NRect &textEditRect,
+ uint32 textFileHash1, uint32 textFileHash2)
+ : Scene(vm, parentModule), _currWidget(NULL), _savegameList(savegameList) {
- static const NRect kSaveGameMenuButtonCollisionBounds[] = {
- NRect(518, 106, 602, 160),
- NRect(516, 378, 596, 434),
- NRect(394, 108, 458, 206),
- NRect(400, 204, 458, 276),
- NRect(398, 292, 456, 352),
- NRect(396, 352, 460, 444)
- };
-
- static const NRect kListBoxRect(0, 0, 320, 272);
- static const NRect kTextEditRect(0, 0, 377, 17);
- static const NRect kMouseRect(50, 47, 427, 64);
-
- _fontSurface = new FontSurface(_vm, 0x2328121A, 32, 7, 32, 11, 17);
+ _fontSurface = new FontSurface(_vm, fontFileHash, 32, 7, 32, 11, 17);
- setBackground(0x30084E25);
- setPalette(0x30084E25);
- insertScreenMouse(0x84E21308, &kMouseRect);
- insertStaticSprite(0x1340A5C2, 200);
- insertStaticSprite(0x1301A7EA, 200);
-
- _listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this,
- _savegameList, _fontSurface, 0x1115A223, kListBoxRect);
+ setBackground(backgroundFileHash);
+ setPalette(backgroundFileHash);
+ insertScreenMouse(mouseFileHash, mouseRect);
+ insertStaticSprite(textFileHash1, 200);
+ insertStaticSprite(textFileHash2, 200);
+
+ _listBox = new SavegameListBox(_vm, listBoxX, listBoxY, this,
+ _savegameList, _fontSurface, listBoxBackgroundFileHash, listBoxRect);
_listBox->initialize();
- _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 29,
- _fontSurface, 0x3510A868, kTextEditRect);
- _textEditWidget->setCursor(0x8290AC20, 2, 13);
+ _textEditWidget = new TextEditWidget(_vm, textEditX, textEditY, this, 29,
+ _fontSurface, textEditBackgroundFileHash, textEditRect);
+ if (textEditCursorFileHash != 0)
+ _textEditWidget->setCursor(textEditCursorFileHash, 2, 13);
+ else
+ _textEditWidget->setReadOnly(true);
_textEditWidget->initialize();
setCurrWidget(_textEditWidget);
for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
- kSaveGameMenuButtonFileHashes[buttonIndex], kSaveGameMenuButtonCollisionBounds[buttonIndex]);
+ buttonFileHashes[buttonIndex], buttonCollisionBounds[buttonIndex]);
addCollisionSprite(menuButton);
}
SetUpdateHandler(&Scene::update);
- SetMessageHandler(&SaveGameMenu::handleMessage);
+ SetMessageHandler(&GameStateMenu::handleMessage);
+
}
-SaveGameMenu::~SaveGameMenu() {
+GameStateMenu::~GameStateMenu() {
delete _fontSurface;
}
-void SaveGameMenu::handleEvent(int16 itemID, int eventType) {
- if (itemID == 69 && eventType == 5) {
- uint currIndex = _listBox->getCurrIndex();
- _textEditWidget->setString((*_savegameList)[currIndex].description);
- setCurrWidget(_textEditWidget);
+NPoint GameStateMenu::getMousePos() {
+ NPoint pt;
+ pt.x = _mouseCursor->getX();
+ pt.y = _mouseCursor->getY();
+ return pt;
+}
+
+void GameStateMenu::setCurrWidget(Widget *newWidget) {
+ if (newWidget && newWidget != _currWidget) {
+ if (_currWidget)
+ _currWidget->exitWidget();
+ newWidget->enterWidget();
+ _currWidget = newWidget;
}
}
-uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
+void GameStateMenu::refreshDescriptionEdit() {
+ uint currIndex = _listBox->getCurrIndex();
+ _textEditWidget->setString((*_savegameList)[currIndex].description);
+ setCurrWidget(_textEditWidget);
+}
+
+void GameStateMenu::performAction() {
+ // Empty
+}
+
+uint32 GameStateMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x000A:
- sendMessage(_textEditWidget, 0x000A, param.asInteger());
- setCurrWidget(_textEditWidget);
+ if (!_textEditWidget->isReadOnly()) {
+ sendMessage(_textEditWidget, 0x000A, param.asInteger());
+ setCurrWidget(_textEditWidget);
+ }
break;
case 0x000B:
if (param.asInteger() == Common::KEYCODE_RETURN)
- performSaveGame();
+ performAction();
else if (param.asInteger() == Common::KEYCODE_ESCAPE)
leaveScene(1);
- else {
+ else if (!_textEditWidget->isReadOnly()) {
sendMessage(_textEditWidget, 0x000B, param.asInteger());
setCurrWidget(_textEditWidget);
}
@@ -947,7 +931,7 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
// Handle menu button click
switch (param.asInteger()) {
case 0:
- performSaveGame();
+ performAction();
break;
case 1:
leaveScene(1);
@@ -970,219 +954,101 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En
return 0;
}
-void SaveGameMenu::performSaveGame() {
- ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
- _listBox->getCurrIndex(), _textEditWidget->isModified());
- leaveScene(0);
-}
-
-LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
- : WidgetScene(vm, parentModule), _savegameList(savegameList) {
-
- static const uint32 kLoadGameMenuButtonFileHashes[] = {
- 0x100B2091,
- 0x84822B03,
- 0x20E22087,
- 0x04040107,
- 0x04820122,
- 0x24423047
- };
-
- static const NRect kLoadGameMenuButtonCollisionBounds[] = {
- NRect( 44, 115, 108, 147),
- NRect( 52, 396, 112, 426),
- NRect(188, 116, 245, 196),
- NRect(189, 209, 239, 269),
- NRect(187, 301, 233, 349),
- NRect(182, 358, 241, 433)
- };
+static const uint32 kSaveGameMenuButtonFileHashes[] = {
+ 0x8359A824, 0x0690E260, 0x0352B050,
+ 0x1392A223, 0x13802260, 0x0B32B200
+};
- static const NRect kListBoxRect(0, 0, 320, 271);
- static const NRect kTextEditRect(0, 0, 320, 17);
- static const NRect kMouseRect(263, 48, 583, 65);
+static const NRect kSaveGameMenuButtonCollisionBounds[] = {
+ NRect(518, 106, 602, 160),
+ NRect(516, 378, 596, 434),
+ NRect(394, 108, 458, 206),
+ NRect(400, 204, 458, 276),
+ NRect(398, 292, 456, 352),
+ NRect(396, 352, 460, 444)
+};
- _fontSurface = new FontSurface(_vm, calcHash("bgLoadTinyAlphabet"), 32, 7, 32, 11, 17);
-
- setBackground(0x98620234);
- setPalette(0x98620234);
- insertScreenMouse(0x2023098E, &kMouseRect);
- insertStaticSprite(0x0BC600A3, 200);
- insertStaticSprite(0x0F960021, 200);
-
- _listBox = new SavegameListBox(_vm, 263, 142, 69/*ItemID*/, this,
- _savegameList, _fontSurface, 0x04040409, kListBoxRect);
- _listBox->initialize();
+static const NRect kSaveGameMenuListBoxRect(0, 0, 320, 272);
+static const NRect kSaveGameMenuTextEditRect(0, 0, 377, 17);
+static const NRect kSaveGameMenuMouseRect(50, 47, 427, 64);
- _textEditWidget = new TextEditWidget(_vm, 263, 48, 70/*ItemID*/, this, 29,
- _fontSurface, 0x10924C03, kTextEditRect);
- _textEditWidget->setReadOnly(true);
- _textEditWidget->initialize();
- setCurrWidget(_textEditWidget);
-
- for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
- Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
- kLoadGameMenuButtonFileHashes[buttonIndex], kLoadGameMenuButtonCollisionBounds[buttonIndex]);
- addCollisionSprite(menuButton);
- }
+SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
+ : GameStateMenu(vm, parentModule, savegameList, kSaveGameMenuButtonFileHashes, kSaveGameMenuButtonCollisionBounds,
+ 0x30084E25, 0x2328121A,
+ 0x84E21308, &kSaveGameMenuMouseRect,
+ 0x1115A223, 60, 142, kSaveGameMenuListBoxRect,
+ 0x3510A868, 0x8290AC20, 50, 47, kSaveGameMenuTextEditRect,
+ 0x1340A5C2, 0x1301A7EA) {
- SetUpdateHandler(&Scene::update);
- SetMessageHandler(&LoadGameMenu::handleMessage);
}
-LoadGameMenu::~LoadGameMenu() {
- delete _fontSurface;
+void SaveGameMenu::performAction() {
+ ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(),
+ _listBox->getCurrIndex(), _textEditWidget->isModified());
+ leaveScene(0);
}
-void LoadGameMenu::handleEvent(int16 itemID, int eventType) {
- if (itemID == 69 && eventType == 5) {
- uint currIndex = _listBox->getCurrIndex();
- _textEditWidget->setString((*_savegameList)[currIndex].description);
- setCurrWidget(_textEditWidget);
- }
-}
+static const uint32 kLoadGameMenuButtonFileHashes[] = {
+ 0x100B2091, 0x84822B03, 0x20E22087,
+ 0x04040107, 0x04820122, 0x24423047
+};
+
+static const NRect kLoadGameMenuButtonCollisionBounds[] = {
+ NRect( 44, 115, 108, 147),
+ NRect( 52, 396, 112, 426),
+ NRect(188, 116, 245, 196),
+ NRect(189, 209, 239, 269),
+ NRect(187, 301, 233, 349),
+ NRect(182, 358, 241, 433)
+};
+
+static const NRect kLoadGameMenuListBoxRect(0, 0, 320, 271);
+static const NRect kLoadGameMenuTextEditRect(0, 0, 320, 17);
+static const NRect kLoadGameMenuMouseRect(263, 48, 583, 65);
+
+LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
+ : GameStateMenu(vm, parentModule, savegameList, kLoadGameMenuButtonFileHashes, kLoadGameMenuButtonCollisionBounds,
+ 0x98620234, 0x201C2474,
+ 0x2023098E, &kLoadGameMenuMouseRect,
+ 0x04040409, 263, 142, kLoadGameMenuListBoxRect,
+ 0x10924C03, 0, 263, 48, kLoadGameMenuTextEditRect,
+ 0x0BC600A3, 0x0F960021) {
-uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x000B:
- if (param.asInteger() == Common::KEYCODE_RETURN)
- performLoadGame();
- else if (param.asInteger() == Common::KEYCODE_ESCAPE)
- leaveScene(1);
- break;
- case 0x2000:
- // Handle menu button click
- switch (param.asInteger()) {
- case 0:
- performLoadGame();
- break;
- case 1:
- leaveScene(1);
- break;
- case 2:
- _listBox->pageUp();
- break;
- case 3:
- _listBox->scrollUp();
- break;
- case 4:
- _listBox->scrollDown();
- break;
- case 5:
- _listBox->pageDown();
- break;
- }
- break;
- }
- return 0;
}
-void LoadGameMenu::performLoadGame() {
+void LoadGameMenu::performAction() {
((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex());
leaveScene(0);
}
-DeleteGameMenu::DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
- : WidgetScene(vm, parentModule), _savegameList(savegameList) {
-
- static const uint32 kDeleteGameMenuButtonFileHashes[] = {
- 0x8198E268,
- 0xDD0C4620,
- 0x81296520,
- 0x8D284211,
- 0x8C004621,
- 0x07294020
- };
-
- static const NRect kDeleteGameMenuButtonCollisionBounds[] = {
- NRect(518, 46, 595, 91),
- NRect(524, 322, 599, 369),
- NRect(395, 40, 462, 127),
- NRect(405, 126, 460, 185),
- NRect(397, 205, 456, 273),
- NRect(395, 278, 452, 372)
- };
-
- static const NRect kListBoxRect(0, 0, 320, 271);
- static const NRect kTextEditRect(0, 0, 320, 17);
-
- _fontSurface = new FontSurface(_vm, calcHash("bgDeleteTinyAlphabet"), 32, 7, 32, 11, 17);
-
- setBackground(0x4080E01C);
- setPalette(0x4080E01C);
- insertScreenMouse(0x0E018400);
- insertStaticSprite(0x80083C01, 200);
- insertStaticSprite(0x84181E81, 200);
-
- _listBox = new SavegameListBox(_vm, 61, 64, 69/*ItemID*/, this,
- _savegameList, _fontSurface, calcHash("mxDeleteListBox"), kListBoxRect);
- _listBox->initialize();
-
- _textEditWidget = new TextEditWidget(_vm, 49, 414, 70/*ItemID*/, this, 29,
- _fontSurface, 0x250A3060, kTextEditRect);
- _textEditWidget->setReadOnly(true);
- _textEditWidget->initialize();
- setCurrWidget(_textEditWidget);
-
- for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) {
- Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex,
- kDeleteGameMenuButtonFileHashes[buttonIndex], kDeleteGameMenuButtonCollisionBounds[buttonIndex]);
- addCollisionSprite(menuButton);
- }
+static const uint32 kDeleteGameMenuButtonFileHashes[] = {
+ 0x8198E268, 0xDD0C4620, 0x81296520,
+ 0x8D284211, 0x8C004621, 0x07294020
+};
- SetUpdateHandler(&Scene::update);
- SetMessageHandler(&DeleteGameMenu::handleMessage);
-}
+static const NRect kDeleteGameMenuButtonCollisionBounds[] = {
+ NRect(518, 46, 595, 91),
+ NRect(524, 322, 599, 369),
+ NRect(395, 40, 462, 127),
+ NRect(405, 126, 460, 185),
+ NRect(397, 205, 456, 273),
+ NRect(395, 278, 452, 372)
+};
-DeleteGameMenu::~DeleteGameMenu() {
- delete _fontSurface;
-}
+static const NRect kDeleteGameMenuListBoxRect(0, 0, 320, 271);
+static const NRect kDeleteGameMenuTextEditRect(0, 0, 320, 17);
-void DeleteGameMenu::handleEvent(int16 itemID, int eventType) {
- if (itemID == 69 && eventType == 5) {
- uint currIndex = _listBox->getCurrIndex();
- _textEditWidget->setString((*_savegameList)[currIndex].description);
- setCurrWidget(_textEditWidget);
- }
-}
+DeleteGameMenu::DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList)
+ : GameStateMenu(vm, parentModule, savegameList, kDeleteGameMenuButtonFileHashes, kDeleteGameMenuButtonCollisionBounds,
+ 0x4080E01C, 0x728523ED,
+ 0x0E018400, NULL,
+ 0xA5584211, 61, 64, kDeleteGameMenuListBoxRect,
+ 0x250A3060, 0, 49, 414, kDeleteGameMenuTextEditRect,
+ 0x80083C01, 0x84181E81) {
-uint32 DeleteGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x000B:
- if (param.asInteger() == Common::KEYCODE_RETURN)
- performDeleteGame();
- else if (param.asInteger() == Common::KEYCODE_ESCAPE)
- leaveScene(1);
- break;
- case 0x2000:
- // Handle menu button click
- switch (param.asInteger()) {
- case 0:
- performDeleteGame();
- break;
- case 1:
- leaveScene(1);
- break;
- case 2:
- _listBox->pageUp();
- break;
- case 3:
- _listBox->scrollUp();
- break;
- case 4:
- _listBox->scrollDown();
- break;
- case 5:
- _listBox->pageDown();
- break;
- }
- break;
- }
- return 0;
}
-void DeleteGameMenu::performDeleteGame() {
+void DeleteGameMenu::performAction() {
((MenuModule*)_parentModule)->setDeletegameInfo(_listBox->getCurrIndex());
leaveScene(0);
}
@@ -1213,7 +1079,7 @@ QueryOverwriteMenu::QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule
// Draw the query text to the background, each text line is centered
// NOTE The original had this text in its own class
- FontSurface *fontSurface = new FontSurface(_vm, calcHash("bgQueryTinyAlphabet"), 32, 7, 32, 11, 17);
+ FontSurface *fontSurface = new FontSurface(_vm, 0x94188D4D, 32, 7, 32, 11, 17);
Common::StringArray textLines;
textLines.push_back(description);
textLines.push_back("Game exists.");
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 39cd36a..08858ad 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -98,21 +98,11 @@ protected:
};
class Widget;
-
-class WidgetScene : public Scene {
-public:
- WidgetScene(NeverhoodEngine *vm, Module *parentModule);
- NPoint getMousePos();
- virtual void setCurrWidget(Widget *newWidget);
- virtual Widget *getCurrWidget() { return _currWidget; }
- virtual void handleEvent(int16 itemID, int eventType);
-protected:
- Widget *_currWidget;
-};
+class GameStateMenu;
class Widget : public StaticSprite {
public:
- Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ Widget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
int baseObjectPriority, int baseSurfacePriority);
virtual void onClick();
virtual void setPosition(int16 x, int16 y);
@@ -123,8 +113,7 @@ public:
virtual void enterWidget();
virtual void exitWidget();
protected:
- int16 _itemID;
- WidgetScene *_parentScene;
+ GameStateMenu *_parentScene;
int _baseObjectPriority;
int _baseSurfacePriority;
void update();
@@ -133,7 +122,7 @@ protected:
class TextLabelWidget : public Widget {
public:
- TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
int baseObjectPriority, int baseSurfacePriority,
const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface);
virtual void initialize();
@@ -153,7 +142,7 @@ protected:
class TextEditWidget : public Widget {
public:
- TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect);
~TextEditWidget();
virtual void onClick();
@@ -169,6 +158,7 @@ public:
void handleKeyDown(Common::KeyCode keyCode);
void refresh();
void setReadOnly(bool value) { _readOnly = value; }
+ bool isReadOnly() const { return _readOnly; }
bool isModified() const { return _modified; }
protected:
NRect _rect;
@@ -191,7 +181,7 @@ protected:
class SavegameListBox : public Widget {
public:
- SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
+ SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene,
SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect);
virtual void onClick();
virtual void initialize();
@@ -215,51 +205,51 @@ protected:
uint _currIndex;
int _maxVisibleItemsCount;
};
-
-class SaveGameMenu : public WidgetScene {
+
+class GameStateMenu : public Scene {
public:
- SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
- ~SaveGameMenu();
- virtual void handleEvent(int16 itemID, int eventType);
+ GameStateMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList,
+ const uint32 *buttonFileHashes, const NRect *buttonCollisionBounds,
+ uint32 backgroundFileHash, uint32 fontFileHash,
+ uint32 mouseFileHash, const NRect *mouseRect,
+ uint32 listBoxBackgroundFileHash, int16 listBoxX, int16 listBoxY, const NRect &listBoxRect,
+ uint32 textEditBackgroundFileHash, uint32 textEditCursorFileHash, int16 textEditX, int16 textEditY, const NRect &textEditRect,
+ uint32 textFileHash1, uint32 textFileHash2);
+ virtual ~GameStateMenu();
+ NPoint getMousePos();
+ virtual void setCurrWidget(Widget *newWidget);
+ virtual Widget *getCurrWidget() { return _currWidget; }
+ virtual void refreshDescriptionEdit();
protected:
+ Widget *_currWidget;
SavegameList *_savegameList;
FontSurface *_fontSurface;
SavegameListBox *_listBox;
TextEditWidget *_textEditWidget;
Common::String _savegameDescription;
- void update();
uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void performSaveGame();
+ virtual void performAction();
+};
+
+class SaveGameMenu : public GameStateMenu {
+public:
+ SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
+protected:
+ virtual void performAction();
};
-class LoadGameMenu : public WidgetScene {
+class LoadGameMenu : public GameStateMenu {
public:
LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
- ~LoadGameMenu();
- virtual void handleEvent(int16 itemID, int eventType);
protected:
- SavegameList *_savegameList;
- FontSurface *_fontSurface;
- SavegameListBox *_listBox;
- TextEditWidget *_textEditWidget;
- Common::String _savegameDescription;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void performLoadGame();
+ virtual void performAction();
};
-class DeleteGameMenu : public WidgetScene {
+class DeleteGameMenu : public GameStateMenu {
public:
DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList);
- ~DeleteGameMenu();
- virtual void handleEvent(int16 itemID, int eventType);
protected:
- SavegameList *_savegameList;
- FontSurface *_fontSurface;
- SavegameListBox *_listBox;
- TextEditWidget *_textEditWidget;
- Common::String _savegameDescription;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void performDeleteGame();
+ virtual void performAction();
};
class QueryOverwriteMenu : public Scene {
Commit: 9b6d813d412a636b1c02511065ab1466e0f6c5e0
https://github.com/scummvm/scummvm/commit/9b6d813d412a636b1c02511065ab1466e0f6c5e0
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Update todo.txt
Changed paths:
engines/neverhood/todo.txt
diff --git a/engines/neverhood/todo.txt b/engines/neverhood/todo.txt
index c13d3f1..9d781e0 100644
--- a/engines/neverhood/todo.txt
+++ b/engines/neverhood/todo.txt
@@ -13,13 +13,13 @@ TODOs which can be done any time:
TODOs which should be done only after the game logic is finished:
-------------------------------------------------------------------
-- Implement game menus
- Maybe rework organization of files (e.g. put ALL Sprites into one separate file, same with Modules and Scenes)
- This would solve the problem of how to organize stuff which is used several times, and less headers would have to be included
- The move special scenes (SmackerScene) into the scenes file
DONE:
-------
+- Implement game menus
- Rework sound system (I don't like that SoundResources need to be explicitly initialized in Scene constructors)
- Should be just a handle object which initializes itself
- Play routine should fill the handle so it can be stopped/queried later
Commit: 583f9abaf98f64895546b75573e9442ca47426e3
https://github.com/scummvm/scummvm/commit/583f9abaf98f64895546b75573e9442ca47426e3
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:47:43-07:00
Commit Message:
NEVERHOOD: Fix some logic bugs and minor changes
- Fix video speed in the very last scene (Scene1317)
- Fix back door not opening in Scene1401
- Fix projector not moving in Scene1402
- Fix projector not appearing in Scene1403
- Fix wrong Klaymen walking in Scene2205
- Fix wrong scene change in Module2300
- Fix symbols not appearing in Scene3011
- Define out some remaining logic debug code
- Remove some obsolete comments
- Reduce debug output
- Use a List instead of an Array when building the microtiles rectangles
Changed paths:
engines/neverhood/blbarchive.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/menumodule.cpp
engines/neverhood/microtiles.cpp
engines/neverhood/microtiles.h
engines/neverhood/module1300.cpp
engines/neverhood/module1400.cpp
engines/neverhood/module2200.cpp
engines/neverhood/module2300.cpp
engines/neverhood/module2800.cpp
engines/neverhood/module3000.cpp
engines/neverhood/resource.cpp
engines/neverhood/resourceman.cpp
engines/neverhood/screen.cpp
engines/neverhood/smackerplayer.cpp
engines/neverhood/smackerscene.cpp
engines/neverhood/sound.h
diff --git a/engines/neverhood/blbarchive.cpp b/engines/neverhood/blbarchive.cpp
index 748d04c..9f5f464 100644
--- a/engines/neverhood/blbarchive.cpp
+++ b/engines/neverhood/blbarchive.cpp
@@ -153,7 +153,7 @@ Common::SeekableReadStream *BlbArchive::createStream(uint index) {
Common::SeekableReadStream *BlbArchive::createStream(BlbArchiveEntry *entry) {
return new SafeMutexedSeekableSubReadStream(&_fd, entry->offset, entry->offset + entry->diskSize,
- DisposeAfterUse::NO,_mutex);
+ DisposeAfterUse::NO, _mutex);
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1246a5b..99aea5d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -84,7 +84,6 @@ GameModule::GameModule(NeverhoodEngine *vm)
}
GameModule::~GameModule() {
-
_vm->_soundMan->deleteSoundGroup(0x002D0031);
delete _childObject;
_childObject = NULL;
@@ -196,7 +195,8 @@ void GameModule::initMemoryPuzzle() {
}
setSubVar(VA_IS_PUZZLE_INIT, 0xC8606803, 1);
- // DEBUG>>> Some debug code: Leave two matching tiles open
+ // DEBUG Enable to autosolve all tiles and leave only two matching tiles open
+#if 0
for (int i = 0; i < 48; i++)
setSubVar(VA_IS_TILE_MATCH, i, 1);
int debugIndex = 0;
@@ -207,7 +207,7 @@ void GameModule::initMemoryPuzzle() {
break;
}
}
- // <<<DEBUG
+#endif
}
}
@@ -345,8 +345,9 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti
}
void GameModule::startup() {
-#if 0
- createModule(1500, 0); // Logos and intro video // Real game start
+#if 1
+ // Logos and intro video // Real game start
+ createModule(1500, 0);
#else
// DEBUG>>>
/*
@@ -395,63 +396,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 0;
- createModule(1000, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 5;
- _vm->gameState().which = 0;
- createModule(2800, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 0;
- createModule(2000, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 5;
- createModule(2200, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 7;
- createModule(2200, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 1;
- createModule(1000, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 8;
- _vm->gameState().which = 1;
- createModule(1600, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 6;
- createModule(1900, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 0;
- createModule(2100, 3);
-#endif
-#if 0
- _vm->gameState().sceneNum = 8;
- createModule(2600, -1);
-#endif
-#if 0
- _vm->gameState().which = 0;
- _vm->gameState().sceneNum = 1;
- createModule(2700, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 1;
- createModule(2800, -1);
-#endif
-#if 0
- _vm->gameState().which = 0;
- _vm->gameState().sceneNum = 0;
- createModule(2500, -1);
-#endif
-#if 0
- _vm->gameState().sceneNum = 1;
- createModule(2300, -1);
+ createModule(2400, 0);
#endif
#endif
@@ -739,6 +684,7 @@ void GameModule::updateModule() {
createModule(2300, 1);
break;
case 2300:
+ debug("module 23000 _moduleResult : %d", _moduleResult);
if (_moduleResult == 2)
createModule(1200, 0);
else if (_moduleResult == 0)
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 619acad..d4882c3 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -583,7 +583,7 @@ void TextEditWidget::onClick() {
_cursorPos = 0;
else {
int newCursorPos = mousePos.x / _fontSurface->getCharWidth();
- if (mousePos.x % _fontSurface->getCharWidth() > _fontSurface->getCharWidth() / 2 && newCursorPos <= (int)_entryString.size())//###
+ if (mousePos.x % _fontSurface->getCharWidth() > _fontSurface->getCharWidth() / 2 && newCursorPos <= (int)_entryString.size())
++newCursorPos;
_cursorPos = MIN((int)_entryString.size(), newCursorPos);
}
diff --git a/engines/neverhood/microtiles.cpp b/engines/neverhood/microtiles.cpp
index ee64fda..e19be52 100644
--- a/engines/neverhood/microtiles.cpp
+++ b/engines/neverhood/microtiles.cpp
@@ -108,9 +108,9 @@ void MicroTileArray::updateBoundingBox(BoundingBox &boundingBox, byte x0, byte y
setBoundingBox(boundingBox, x0, y0, x1, y1);
}
-RectArray *MicroTileArray::getRectangles() {
+RectangleList *MicroTileArray::getRectangles() {
- RectArray *rects = new RectArray();
+ RectangleList *rects = new RectangleList();
int x, y;
int x0, y0, x1, y1;
diff --git a/engines/neverhood/microtiles.h b/engines/neverhood/microtiles.h
index 2ad6796..29af3d9 100644
--- a/engines/neverhood/microtiles.h
+++ b/engines/neverhood/microtiles.h
@@ -25,7 +25,7 @@
#define NEVERHOOD_MICROTILES_H
#include "common/scummsys.h"
-#include "common/array.h"
+#include "common/list.h"
#include "common/util.h"
#include "common/rect.h"
@@ -37,7 +37,7 @@ const BoundingBox FullBoundingBox = 0x00001F1F;
const BoundingBox EmptyBoundingBox = 0x00000000;
const int TileSize = 32;
-typedef Common::Array<Common::Rect> RectArray;
+typedef Common::List<Common::Rect> RectangleList;
class MicroTileArray {
public:
@@ -45,7 +45,7 @@ public:
~MicroTileArray();
void addRect(Common::Rect r);
void clear();
- RectArray *getRectangles();
+ RectangleList *getRectangles();
protected:
BoundingBox *_tiles;
int16 _tilesW, _tilesH;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 94937c4..162d710 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -1701,6 +1701,7 @@ Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule)
SetMessageHandler(&Scene1317::handleMessage);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false));
+ _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
insertScreenMouse(0x08284011);
showMouse(false);
_smackerFileHash = 0;
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index d96703b..8aa0632 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -339,7 +339,7 @@ uint32 AsScene1401BackDoor::handleMessage(int messageNum, const MessageParam &pa
break;
case 0x4808:
_countdown = 168;
- if (_isOpen)
+ if (!_isOpen)
stOpenDoor();
break;
}
@@ -743,7 +743,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit
if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504)
sendMessage(_asProjector , 0x4839, 0);
} else if (sender == _ssButton)
- sendMessage(_ssButton, 0x4808, 0);
+ sendMessage(_asBackDoor, 0x4808, 0);
break;
case 0x4826:
if (sender == _asProjector) {
@@ -968,7 +968,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit
break;
case 0x4826:
if (sender == _asProjector) {
- if (sendMessage(_asProjector, 0x408C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) {
+ if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) {
sendEntityMessage(_klaymen, 0x1014, _asProjector);
setMessageList2(0x004B0BB8);
} else
@@ -1309,7 +1309,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
}
_klaymen->setRepl(64, 0);
- if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 0) {
_asProjector = insertSprite<AsCommonProjector>(this, _klaymen, (Sprite*)NULL);
addCollisionSprite(_asProjector);
if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 2e6549a..ddcfb36 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -47,6 +47,7 @@ Module2200::~Module2200() {
}
void Module2200::createScene(int sceneNum, int which) {
+ debug("Module2200::createScene(%d, %d)", sceneNum, which);
_sceneNum = sceneNum;
switch (_sceneNum) {
case 0:
@@ -1221,7 +1222,6 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2205::update);
setHitRects(0x004B0620);
- loadDataResource(0x00144822);
if (getGlobalVar(V_LIGHTS_ON)) {
_isLightOn = true;
setBackground(0x0008028D);
@@ -1263,6 +1263,9 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_klaymen->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480);
_klaymen->setSoundFlag(true);
+
+ loadDataResource(0x00144822);
+
}
void Scene2205::update() {
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 937ba9a..bf0e866 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -140,7 +140,7 @@ void Module2300::updateScene() {
break;
case 2:
if (_moduleResult == 1)
- leaveModule(3);
+ leaveModule(1);
else
createScene(1, 5);
break;
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 5fececd..d81445c 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -284,7 +284,6 @@ void Module2800::updateScene() {
createScene(9, 4);
break;
case 9:
- debug("scene 9 _moduleResult = %d", _moduleResult);
if (_moduleResult == 1)
createScene(11, 0);
else if (_moduleResult == 2)
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index 6bf95e3..d08ff9d 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -756,7 +756,6 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
_isTurning(false), _lockSymbolsPart1Countdown(1), _lockSymbolsPart2Countdown(1) {
_cannonTargetStatus = getGlobalVar(V_CANNON_TARGET_STATUS);
- debug("_cannonTargetStatus = %d", _cannonTargetStatus);
_vm->gameModule()->initCannonSymbolsPuzzle();
@@ -809,11 +808,12 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene3009::handleMessage);
SetUpdateHandler(&Scene3009::update);
- // DEBUG: Set the correct code
+ // DEBUG Enable to set the correct code
+#if 0
for (int i = 0; i < 6; i++)
setSubVar(VA_CURR_CANNON_SYMBOLS, i, _correctSymbols[i]);
sendMessage(this, 0x2003, 0);
- //setGlobalVar(V_ROBOT_TARGET, 1);
+#endif
}
@@ -1224,10 +1224,12 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
int initCountdown = 0;
- // DEBUG: Enable all buttons
+ // DEBUG Enable to activate all buttons
+#if 0
setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[0], 1);
setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[1], 1);
setSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[2], 1);
+#endif
setBackground(0x80802626);
setPalette(0x80802626);
@@ -1448,7 +1450,7 @@ void AsScene3011Symbol::change(int symbolIndex, bool isNoisy) {
}
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0) {
+ : Scene(vm, parentModule), _updateStatus(0), _buttonClicked(false), _currentSymbolIndex(0), _countdown(0) {
_vm->gameModule()->initCodeSymbolsPuzzle();
_noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 2fce4ba..22a8028 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -355,7 +355,6 @@ DataResource::~DataResource() {
void DataResource::load(uint32 fileHash) {
if (_resourceHandle.fileHash() == fileHash)
return;
- debug("DataResource::load(%08X)", fileHash);
const byte *data = NULL;
uint32 dataSize = 0;
unload();
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index 9e5f9ae..f662130 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -58,7 +58,6 @@ void ResourceMan::addArchive(const Common::String &filename) {
_entries[archiveEntry->fileHash] = newEntry;
}
}
- debug("_entries.size() = %d", _entries.size());
}
ResourceFileEntry *ResourceMan::findEntrySimple(uint32 fileHash) {
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 3e57422..25b4109 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -86,18 +86,18 @@ void Screen::update() {
renderItem._refresh = true;
}
- RectArray *updateRects = _microTiles->getRectangles();
+ RectangleList *updateRects = _microTiles->getRectangles();
for (RenderQueue::iterator it = _renderQueue->begin(); it != _renderQueue->end(); ++it) {
RenderItem &renderItem = (*it);
- for (RectArray::iterator ri = updateRects->begin(); ri != updateRects->end(); ++ri)
+ for (RectangleList::iterator ri = updateRects->begin(); ri != updateRects->end(); ++ri)
blitRenderItem(renderItem, *ri);
}
SWAP(_renderQueue, _prevRenderQueue);
_renderQueue->clear();
- for (Common::Array<Common::Rect>::iterator ri = updateRects->begin(); ri != updateRects->end(); ++ri) {
+ for (RectangleList::iterator ri = updateRects->begin(); ri != updateRects->end(); ++ri) {
Common::Rect &r = *ri;
_vm->_system->copyRectToScreen((const byte*)_backScreen->getBasePtr(r.left, r.top), _backScreen->pitch, r.left, r.top, r.width(), r.height());
}
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 7c14edf..b67c8db 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -100,7 +100,7 @@ SmackerPlayer::~SmackerPlayer() {
}
void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
- debug("SmackerPlayer::open(%08X)", fileHash);
+ debug(0, "SmackerPlayer::open(%08X)", fileHash);
_fileHash = fileHash;
_keepLastFrame = keepLastFrame;
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index 20eebe2..115aafe 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -28,7 +28,7 @@ SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubl
: Scene(vm, parentModule), _doubleSurface(doubleSurface), _canSkip(canSkip), _canAbort(canAbort), _videoPlayedBefore(false),
_fileHashListIndex(-1), _fileHashList(NULL), _playNextVideoFlag(false) {
- debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, canSkip, canAbort);
+ debug(0, "SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, canSkip, canAbort);
// NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags)
@@ -53,18 +53,18 @@ SmackerScene::~SmackerScene() {
}
void SmackerScene::setFileHash(uint32 fileHash) {
- debug("SmackerScene::setFileHash(%08X)", fileHash);
+ debug(0, "SmackerScene::setFileHash(%08X)", fileHash);
_fileHash[0] = fileHash;
_fileHashList = _fileHash;
}
void SmackerScene::setFileHashList(const uint32 *fileHashList) {
- debug("SmackerScene::setFileHashList(...)");
+ debug(0, "SmackerScene::setFileHashList(...)");
_fileHashList = fileHashList;
}
void SmackerScene::nextVideo() {
- debug("SmackerScene::nextVideo()");
+ debug(0, "SmackerScene::nextVideo()");
_fileHashListIndex++;
diff --git a/engines/neverhood/sound.h b/engines/neverhood/sound.h
index e0e45e9..d331899 100644
--- a/engines/neverhood/sound.h
+++ b/engines/neverhood/sound.h
@@ -124,14 +124,6 @@ protected:
SoundResource *_soundResource;
};
-// TODO Give this a better name
-
-/*
-template<class T>
-class SoundManItems : public Common::Array<T> {
-};
-*/
-
class SoundMan {
public:
SoundMan(NeverhoodEngine *vm);
Commit: 102299630901d08a44ef3aec367fcbcae065b9fe
https://github.com/scummvm/scummvm/commit/102299630901d08a44ef3aec367fcbcae065b9fe
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2013-05-08T11:47:44-07:00
Commit Message:
Merge branch 'master'
Changed paths:
A audio/midiparser_qt.cpp
A audio/midiparser_qt.h
A audio/softsynth/mt32/BReverbModel.cpp
A audio/softsynth/mt32/BReverbModel.h
A audio/softsynth/mt32/LA32WaveGenerator.cpp
A audio/softsynth/mt32/LA32WaveGenerator.h
A audio/softsynth/mt32/LegacyWaveGenerator.cpp
A audio/softsynth/mt32/LegacyWaveGenerator.h
A audio/softsynth/mt32/ROMInfo.cpp
A audio/softsynth/mt32/ROMInfo.h
A backends/platform/android/org/scummvm/scummvm/MouseHelper.java
A backends/platform/symbian/mmp/scummvm_cge.mmp.in
A backends/platform/symbian/mmp/scummvm_composer.mmp.in
A backends/platform/symbian/mmp/scummvm_hopkins.mmp.in
A backends/platform/symbian/mmp/scummvm_pegasus.mmp.in
A backends/platform/symbian/mmp/scummvm_toltecs.mmp.in
A backends/platform/symbian/mmp/scummvm_tony.mmp.in
A backends/platform/symbian/mmp/scummvm_wintermute.mmp.in
A common/c++11-compat.h
A devtools/create_teenagent/static_tables.h
A devtools/create_teenagent/util.cpp
A dists/engine-data/wintermute.zip
A engines/groovie/stuffit.cpp
A engines/groovie/stuffit.h
A engines/hopkins/anim.cpp
A engines/hopkins/anim.h
A engines/hopkins/computer.cpp
A engines/hopkins/computer.h
A engines/hopkins/debugger.cpp
A engines/hopkins/debugger.h
A engines/hopkins/detection.cpp
A engines/hopkins/detection_tables.h
A engines/hopkins/dialogs.cpp
A engines/hopkins/dialogs.h
A engines/hopkins/events.cpp
A engines/hopkins/events.h
A engines/hopkins/files.cpp
A engines/hopkins/files.h
A engines/hopkins/font.cpp
A engines/hopkins/font.h
A engines/hopkins/globals.cpp
A engines/hopkins/globals.h
A engines/hopkins/graphics.cpp
A engines/hopkins/graphics.h
A engines/hopkins/hopkins.cpp
A engines/hopkins/hopkins.h
A engines/hopkins/lines.cpp
A engines/hopkins/lines.h
A engines/hopkins/menu.cpp
A engines/hopkins/menu.h
A engines/hopkins/module.mk
A engines/hopkins/objects.cpp
A engines/hopkins/objects.h
A engines/hopkins/saveload.cpp
A engines/hopkins/saveload.h
A engines/hopkins/script.cpp
A engines/hopkins/script.h
A engines/hopkins/sound.cpp
A engines/hopkins/sound.h
A engines/hopkins/talk.cpp
A engines/hopkins/talk.h
A engines/kyra/sequences_hof.h
A engines/kyra/sound_digital.h
A engines/scumm/player_mac.cpp
A engines/scumm/player_mac.h
A engines/scumm/player_v3m.cpp
A engines/scumm/player_v3m.h
A engines/scumm/player_v5m.cpp
A engines/scumm/player_v5m.h
A engines/toltecs/console.cpp
A engines/toltecs/console.h
A engines/wintermute/base/base_game_music.cpp
A engines/wintermute/base/base_game_music.h
A engines/wintermute/base/base_game_settings.cpp
A engines/wintermute/base/base_game_settings.h
A engines/wintermute/base/gfx/osystem/render_ticket.cpp
A engines/wintermute/base/gfx/osystem/render_ticket.h
A engines/wintermute/base/save_thumb_helper.cpp
A engines/wintermute/base/save_thumb_helper.h
A engines/wintermute/base/timer.cpp
A engines/wintermute/base/timer.h
A engines/wintermute/debugger.cpp
A engines/wintermute/debugger.h
A graphics/decoders/iff.cpp
A graphics/decoders/iff.h
A gui/fluidsynth-dialog.cpp
A gui/fluidsynth-dialog.h
A po/be_BY.po
A po/fi_FI.po
A test/common/bitstream.h
R devtools/create_teenagent/md5.cpp
R engines/parallaction/disk.cpp
R devtools/create_teenagent/md5.h
R engines/wintermute/base/file/base_resources.cpp
R engines/wintermute/base/base_save_thumb_helper.cpp
R engines/wintermute/base/base_save_thumb_helper.h
R engines/wintermute/base/file/base_resources.h
R graphics/iff.cpp
R graphics/iff.h
AUTHORS
COPYRIGHT
Makefile.common
NEWS
README
audio/decoders/adpcm.cpp
audio/decoders/adpcm_intern.h
audio/decoders/aiff.h
audio/decoders/qdm2.cpp
audio/decoders/quicktime.cpp
audio/decoders/quicktime_intern.h
audio/fmopl.h
audio/mididrv.h
audio/midiparser.h
audio/mods/maxtrax.cpp
audio/mods/maxtrax.h
audio/mods/protracker.cpp
audio/mods/protracker.h
audio/mods/tfmx.cpp
audio/mods/tfmx.h
audio/module.mk
audio/softsynth/adlib.cpp
audio/softsynth/fluidsynth.cpp
audio/softsynth/fmtowns_pc98/towns_midi.cpp
audio/softsynth/mt32.cpp
audio/softsynth/mt32/AReverbModel.cpp
audio/softsynth/mt32/AReverbModel.h
audio/softsynth/mt32/DelayReverb.cpp
audio/softsynth/mt32/DelayReverb.h
audio/softsynth/mt32/FreeverbModel.cpp
audio/softsynth/mt32/FreeverbModel.h
audio/softsynth/mt32/LA32Ramp.cpp
audio/softsynth/mt32/LA32Ramp.h
audio/softsynth/mt32/Part.cpp
audio/softsynth/mt32/Part.h
audio/softsynth/mt32/Partial.cpp
audio/softsynth/mt32/Partial.h
audio/softsynth/mt32/PartialManager.cpp
audio/softsynth/mt32/PartialManager.h
audio/softsynth/mt32/Poly.cpp
audio/softsynth/mt32/Poly.h
audio/softsynth/mt32/Structures.h
audio/softsynth/mt32/Synth.cpp
audio/softsynth/mt32/Synth.h
audio/softsynth/mt32/TVA.cpp
audio/softsynth/mt32/TVA.h
audio/softsynth/mt32/TVF.cpp
audio/softsynth/mt32/TVF.h
audio/softsynth/mt32/TVP.cpp
audio/softsynth/mt32/TVP.h
audio/softsynth/mt32/Tables.cpp
audio/softsynth/mt32/Tables.h
audio/softsynth/mt32/mmath.h
audio/softsynth/mt32/module.mk
audio/softsynth/mt32/mt32emu.h
audio/softsynth/opl/dosbox.cpp
audio/softsynth/opl/mame.cpp
audio/softsynth/sid.cpp
backends/fs/ds/ds-fs.h
backends/graphics/opengl/gltexture.cpp
backends/graphics/openglsdl/openglsdl-graphics.cpp
backends/graphics/surfacesdl/surfacesdl-graphics.cpp
backends/midi/coreaudio.cpp
backends/midi/seq.cpp
backends/mixer/sdl/sdl-mixer.cpp
backends/platform/android/android.h
backends/platform/android/android.mk
backends/platform/android/events.cpp
backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java
backends/platform/ds/arm9/source/blitters.cpp
backends/platform/ds/arm9/source/blitters.h
backends/platform/ds/arm9/source/cdaudio.cpp
backends/platform/ds/arm9/source/cdaudio.h
backends/platform/ds/arm9/source/dsmain.cpp
backends/platform/ds/arm9/source/dsmain.h
backends/platform/ds/arm9/source/dsoptions.cpp
backends/platform/ds/arm9/source/dsoptions.h
backends/platform/ds/arm9/source/keys.cpp
backends/platform/ds/arm9/source/keys.h
backends/platform/ds/arm9/source/scummhelp.cpp
backends/platform/ds/arm9/source/scummhelp.h
backends/platform/ds/arm9/source/touchkeyboard.cpp
backends/platform/ds/arm9/source/touchkeyboard.h
backends/platform/ds/arm9/source/wordcompletion.cpp
backends/platform/ds/arm9/source/wordcompletion.h
backends/platform/iphone/iphone_video.mm
backends/platform/iphone/osys_main.cpp
backends/platform/iphone/osys_video.mm
backends/platform/n64/osys_n64.h
backends/platform/n64/osys_n64_base.cpp
backends/platform/ps2/Gs2dScreen.cpp
backends/platform/ps2/Gs2dScreen.h
backends/platform/ps2/ps2pad.cpp
backends/platform/sdl/macosx/appmenu_osx.mm
backends/platform/sdl/macosx/macosx.cpp
backends/platform/symbian/AdaptAllMMPs.pl
backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
backends/platform/symbian/README
backends/platform/symbian/S60/ScummVM_S60.mmp.in
backends/platform/symbian/S60/ScummVM_S60_App.mmp
backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
backends/platform/symbian/S80/ScummVM_S80.mmp.in
backends/platform/symbian/S80/ScummVM_S80_App.mmp
backends/platform/symbian/S90/Scummvm_S90.mmp.in
backends/platform/symbian/S90/Scummvm_S90_App.mmp
backends/platform/symbian/UIQ2/ScummVM.rss
backends/platform/symbian/UIQ3/ScummVM.rss
backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
backends/platform/symbian/mmp/scummvm_agi.mmp.in
backends/platform/symbian/mmp/scummvm_agos.mmp.in
backends/platform/symbian/mmp/scummvm_base.mmp.in
backends/platform/symbian/mmp/scummvm_cine.mmp.in
backends/platform/symbian/mmp/scummvm_cruise.mmp.in
backends/platform/symbian/mmp/scummvm_draci.mmp.in
backends/platform/symbian/mmp/scummvm_drascula.mmp.in
backends/platform/symbian/mmp/scummvm_gob.mmp.in
backends/platform/symbian/mmp/scummvm_groovie.mmp.in
backends/platform/symbian/mmp/scummvm_hugo.mmp.in
backends/platform/symbian/mmp/scummvm_kyra.mmp.in
backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
backends/platform/symbian/mmp/scummvm_lure.mmp.in
backends/platform/symbian/mmp/scummvm_m4.mmp.in
backends/platform/symbian/mmp/scummvm_made.mmp.in
backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
backends/platform/symbian/mmp/scummvm_queen.mmp.in
backends/platform/symbian/mmp/scummvm_saga.mmp.in
backends/platform/symbian/mmp/scummvm_sci.mmp.in
backends/platform/symbian/mmp/scummvm_scumm.mmp.in
backends/platform/symbian/mmp/scummvm_sky.mmp.in
backends/platform/symbian/mmp/scummvm_sword1.mmp.in
backends/platform/symbian/mmp/scummvm_sword2.mmp.in
backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
backends/platform/symbian/mmp/scummvm_toon.mmp.in
backends/platform/symbian/mmp/scummvm_touche.mmp.in
backends/platform/symbian/mmp/scummvm_tsage.mmp.in
backends/platform/symbian/mmp/scummvm_tucker.mmp.in
backends/platform/symbian/res/ScummVmAif.rss
backends/platform/symbian/res/scummvm.rss
backends/platform/symbian/res/scummvm_A0000658.rss
backends/platform/symbian/src/ScummVm.hrh
backends/platform/wii/osystem_gfx.cpp
backends/platform/wince/CEgui/GUIElement.cpp
backends/platform/wince/CEgui/GUIElement.h
backends/platform/wince/CEgui/ToolbarHandler.cpp
backends/updates/macosx/macosx-updates.mm
base/commandLine.cpp
common/bufferedstream.h
common/config-file.cpp
common/config-file.h
common/config-manager.h
common/debug-channels.h
common/debug.cpp
common/fft.h
common/file.cpp
common/forbidden.h
common/fs.cpp
common/func.h
common/hash-str.h
common/hashmap.cpp
common/hashmap.h
common/iff_container.cpp
common/iff_container.h
common/language.h
common/macresman.cpp
common/memorypool.h
common/memstream.h
common/mutex.cpp
common/platform.cpp
common/platform.h
common/quicktime.cpp
common/quicktime.h
common/random.cpp
common/random.h
common/rect.h
common/scummsys.h
common/singleton.h
common/str.cpp
common/stream.cpp
common/stream.h
common/taskbar.h
common/textconsole.cpp
common/textconsole.h
common/unzip.cpp
common/unzip.h
common/updates.h
common/util.cpp
common/util.h
common/xmlparser.cpp
common/zlib.cpp
common/zlib.h
configure
devtools/create_kyradat/create_kyradat.cpp
devtools/create_kyradat/create_kyradat.h
devtools/create_kyradat/extract.cpp
devtools/create_kyradat/games.cpp
devtools/create_kyradat/tables.cpp
devtools/create_teenagent/create_teenagent.cpp
devtools/create_teenagent/module.mk
devtools/create_teenagent/util.h
devtools/credits.pl
devtools/scumm-md5.txt
dists/bada/Res/scummmobile/scummmobile_layout.stx
dists/debian/copyright
dists/engine-data/kyra.dat
dists/macosx/Info.plist
dists/macosx/Info.plist.in
dists/scummvm.rc
dists/scummvm.rc.in
dists/win32/ScummVM.iss
dists/win32/migration.bat
dists/win32/scummvm.nsi
dists/win32/scummvm.nsi.in
doc/cz/PrectiMe
engines/agi/console.cpp
engines/agi/console.h
engines/agi/logic.h
engines/agi/lzw.h
engines/agi/op_cmd.cpp
engines/agi/op_test.cpp
engines/agi/opcodes.cpp
engines/agi/preagi_winnie.h
engines/cge/bitmap.cpp
engines/cge/events.cpp
engines/cge/snail.cpp
engines/cge/text.cpp
engines/cge/vga13h.cpp
engines/composer/composer.cpp
engines/composer/composer.h
engines/composer/detection.cpp
engines/composer/graphics.cpp
engines/composer/resource.cpp
engines/configure.engines
engines/cruise/linker.h
engines/cruise/staticres.cpp
engines/cruise/volume.cpp
engines/drascula/animation.cpp
engines/drascula/console.cpp
engines/drascula/converse.cpp
engines/drascula/detection.cpp
engines/drascula/drascula.cpp
engines/drascula/drascula.h
engines/drascula/graphics.cpp
engines/drascula/interface.cpp
engines/drascula/objects.cpp
engines/drascula/rooms.cpp
engines/drascula/saveload.cpp
engines/dreamweb/backdrop.cpp
engines/dreamweb/dreamweb.cpp
engines/dreamweb/dreamweb.h
engines/dreamweb/keypad.cpp
engines/dreamweb/monitor.cpp
engines/dreamweb/newplace.cpp
engines/dreamweb/object.cpp
engines/dreamweb/pathfind.cpp
engines/dreamweb/people.cpp
engines/dreamweb/print.cpp
engines/dreamweb/rain.cpp
engines/dreamweb/saveload.cpp
engines/dreamweb/sprite.cpp
engines/dreamweb/stubs.cpp
engines/dreamweb/titles.cpp
engines/dreamweb/use.cpp
engines/dreamweb/vgafades.cpp
engines/dreamweb/vgagrafx.cpp
engines/engine.cpp
engines/engines.mk
engines/gob/anifile.cpp
engines/gob/cmpfile.cpp
engines/gob/detection/tables_geisha.h
engines/gob/draw.cpp
engines/gob/expression.cpp
engines/gob/hotspots.cpp
engines/gob/inter.h
engines/gob/inter_v7.cpp
engines/gob/map_v1.cpp
engines/gob/mult_v2.cpp
engines/gob/save/saveconverter.cpp
engines/gob/save/saveload.h
engines/gob/sound/adlib.cpp
engines/gob/sound/sound.cpp
engines/gob/sound/soundblaster.cpp
engines/gob/surface.cpp
engines/gob/surface.h
engines/groovie/detection.cpp
engines/groovie/groovie.cpp
engines/groovie/groovie.h
engines/groovie/module.mk
engines/groovie/music.cpp
engines/groovie/music.h
engines/groovie/vdx.cpp
engines/hugo/mouse.cpp
engines/hugo/parser.cpp
engines/kyra/chargen.cpp
engines/kyra/darkmoon.cpp
engines/kyra/darkmoon.h
engines/kyra/debugger.cpp
engines/kyra/debugger.h
engines/kyra/detection.cpp
engines/kyra/detection_tables.h
engines/kyra/eob.cpp
engines/kyra/eob.h
engines/kyra/eobcommon.cpp
engines/kyra/eobcommon.h
engines/kyra/gui_eob.cpp
engines/kyra/gui_eob.h
engines/kyra/gui_hof.cpp
engines/kyra/gui_lol.cpp
engines/kyra/gui_lol.h
engines/kyra/gui_mr.cpp
engines/kyra/gui_rpg.cpp
engines/kyra/items_eob.cpp
engines/kyra/items_hof.cpp
engines/kyra/items_lok.cpp
engines/kyra/items_lol.cpp
engines/kyra/kyra_hof.cpp
engines/kyra/kyra_hof.h
engines/kyra/kyra_lok.cpp
engines/kyra/kyra_lok.h
engines/kyra/kyra_mr.cpp
engines/kyra/kyra_mr.h
engines/kyra/kyra_rpg.cpp
engines/kyra/kyra_rpg.h
engines/kyra/kyra_v1.cpp
engines/kyra/kyra_v1.h
engines/kyra/lol.cpp
engines/kyra/lol.h
engines/kyra/magic_eob.cpp
engines/kyra/resource.cpp
engines/kyra/resource.h
engines/kyra/resource_intern.cpp
engines/kyra/resource_intern.h
engines/kyra/saveload.cpp
engines/kyra/saveload_eob.cpp
engines/kyra/saveload_lok.cpp
engines/kyra/saveload_lol.cpp
engines/kyra/scene_eob.cpp
engines/kyra/scene_lol.cpp
engines/kyra/scene_mr.cpp
engines/kyra/scene_rpg.cpp
engines/kyra/screen.cpp
engines/kyra/screen.h
engines/kyra/screen_eob.cpp
engines/kyra/screen_eob.h
engines/kyra/screen_hof.cpp
engines/kyra/screen_hof.h
engines/kyra/screen_lol.cpp
engines/kyra/screen_lol.h
engines/kyra/screen_v2.cpp
engines/kyra/screen_v2.h
engines/kyra/script_eob.cpp
engines/kyra/script_eob.h
engines/kyra/script_hof.cpp
engines/kyra/script_lok.cpp
engines/kyra/script_lol.cpp
engines/kyra/script_mr.cpp
engines/kyra/script_tim.cpp
engines/kyra/sequences_darkmoon.cpp
engines/kyra/sequences_eob.cpp
engines/kyra/sequences_hof.cpp
engines/kyra/sequences_lok.cpp
engines/kyra/sequences_lol.cpp
engines/kyra/sound.cpp
engines/kyra/sound.h
engines/kyra/sound_adlib.cpp
engines/kyra/sound_adlib.h
engines/kyra/sound_amiga.cpp
engines/kyra/sound_digital.cpp
engines/kyra/sound_intern.h
engines/kyra/sound_lol.cpp
engines/kyra/sound_midi.cpp
engines/kyra/sound_towns.cpp
engines/kyra/sprites_eob.cpp
engines/kyra/sprites_lol.cpp
engines/kyra/sprites_rpg.cpp
engines/kyra/staticres.cpp
engines/kyra/staticres_eob.cpp
engines/kyra/staticres_lol.cpp
engines/kyra/text_hof.cpp
engines/kyra/text_lol.cpp
engines/kyra/text_rpg.cpp
engines/kyra/text_rpg.h
engines/kyra/timer_eob.cpp
engines/kyra/timer_lol.cpp
engines/kyra/vqa.cpp
engines/lure/hotspots.cpp
engines/lure/menu.cpp
engines/lure/room.cpp
engines/mohawk/console.cpp
engines/mohawk/cursors.cpp
engines/mohawk/detection.cpp
engines/mohawk/detection_tables.h
engines/mohawk/dialogs.cpp
engines/mohawk/installer_archive.cpp
engines/mohawk/livingbooks.cpp
engines/mohawk/myst.cpp
engines/mohawk/myst.h
engines/mohawk/myst_areas.cpp
engines/mohawk/myst_graphics.cpp
engines/mohawk/myst_graphics.h
engines/mohawk/myst_scripts.cpp
engines/mohawk/myst_scripts.h
engines/mohawk/myst_stacks/channelwood.cpp
engines/mohawk/myst_stacks/demo.cpp
engines/mohawk/myst_stacks/intro.cpp
engines/mohawk/myst_stacks/mechanical.cpp
engines/mohawk/myst_stacks/mechanical.h
engines/mohawk/myst_stacks/myst.cpp
engines/mohawk/myst_stacks/myst.h
engines/mohawk/myst_stacks/preview.cpp
engines/mohawk/myst_stacks/preview.h
engines/mohawk/myst_stacks/selenitic.cpp
engines/mohawk/myst_stacks/slides.cpp
engines/mohawk/myst_stacks/stoneship.cpp
engines/mohawk/resource.cpp
engines/mohawk/riven.cpp
engines/mohawk/riven_external.cpp
engines/mohawk/video.cpp
engines/mohawk/video.h
engines/parallaction/dialogue.cpp
engines/parallaction/disk.h
engines/parallaction/disk_br.cpp
engines/parallaction/disk_ns.cpp
engines/parallaction/input.cpp
engines/parallaction/module.mk
engines/parallaction/parallaction.cpp
engines/parallaction/parser_br.cpp
engines/parallaction/parser_ns.cpp
engines/parallaction/sound_br.cpp
engines/pegasus/cursor.cpp
engines/pegasus/detection.cpp
engines/pegasus/elements.cpp
engines/pegasus/energymonitor.cpp
engines/pegasus/interface.cpp
engines/pegasus/interface.h
engines/pegasus/items/inventorypicture.h
engines/pegasus/menu.cpp
engines/pegasus/movie.cpp
engines/pegasus/neighborhood/caldoria/caldoria.cpp
engines/pegasus/neighborhood/mars/mars.cpp
engines/pegasus/neighborhood/mars/reactor.cpp
engines/pegasus/neighborhood/neighborhood.cpp
engines/pegasus/neighborhood/norad/pressuredoor.cpp
engines/pegasus/neighborhood/prehistoric/prehistoric.cpp
engines/pegasus/neighborhood/tsa/fulltsa.cpp
engines/pegasus/neighborhood/wsc/wsc.cpp
engines/pegasus/pegasus.cpp
engines/pegasus/pegasus.h
engines/pegasus/sound.cpp
engines/pegasus/surface.cpp
engines/pegasus/surface.h
engines/pegasus/timers.cpp
engines/pegasus/timers.h
engines/plugins_table.h
engines/queen/display.cpp
engines/queen/display.h
engines/queen/journal.cpp
engines/queen/sound.cpp
engines/queen/sound.h
engines/queen/talk.cpp
engines/saga/detection.cpp
engines/saga/events.cpp
engines/saga/music.cpp
engines/saga/music.h
engines/saga/resource.cpp
engines/saga/saga.cpp
engines/saga/saga.h
engines/saga/saveload.cpp
engines/saga/scene.cpp
engines/saga/sfuncs_ihnm.cpp
engines/sci/console.cpp
engines/sci/console.h
engines/sci/decompressor.cpp
engines/sci/detection.cpp
engines/sci/detection_tables.h
engines/sci/engine/features.cpp
engines/sci/engine/kernel.h
engines/sci/engine/kernel_tables.h
engines/sci/engine/kfile.cpp
engines/sci/engine/kgraphics.cpp
engines/sci/engine/kgraphics32.cpp
engines/sci/engine/kmath.cpp
engines/sci/engine/kpathing.cpp
engines/sci/engine/ksound.cpp
engines/sci/engine/kstring.cpp
engines/sci/engine/message.cpp
engines/sci/engine/savegame.cpp
engines/sci/engine/script_patches.cpp
engines/sci/engine/scriptdebug.cpp
engines/sci/engine/workarounds.cpp
engines/sci/event.cpp
engines/sci/graphics/animate.h
engines/sci/graphics/cursor.cpp
engines/sci/graphics/cursor.h
engines/sci/graphics/frameout.cpp
engines/sci/graphics/frameout.h
engines/sci/graphics/menu.cpp
engines/sci/graphics/palette.cpp
engines/sci/graphics/portrait.cpp
engines/sci/graphics/ports.cpp
engines/sci/parser/vocabulary.cpp
engines/sci/resource.cpp
engines/sci/sci.cpp
engines/sci/sci.h
engines/sci/sound/drivers/midi.cpp
engines/sci/sound/midiparser_sci.cpp
engines/sci/sound/music.cpp
engines/sci/sound/soundcmd.cpp
engines/scumm/debugger.cpp
engines/scumm/detection_tables.h
engines/scumm/gfx.cpp
engines/scumm/he/sound_he.cpp
engines/scumm/imuse/imuse.cpp
engines/scumm/imuse/imuse.h
engines/scumm/imuse/imuse_internal.h
engines/scumm/imuse/imuse_part.cpp
engines/scumm/insane/insane_ben.cpp
engines/scumm/insane/insane_enemy.cpp
engines/scumm/module.mk
engines/scumm/music.h
engines/scumm/object.cpp
engines/scumm/saveload.cpp
engines/scumm/saveload.h
engines/scumm/script.cpp
engines/scumm/scumm-md5.h
engines/scumm/scumm.cpp
engines/scumm/sound.cpp
engines/sky/compact.cpp
engines/sword1/detection.cpp
engines/sword2/sword2.cpp
engines/sword25/gfx/graphicengine.cpp
engines/sword25/util/lua/ldo.cpp
engines/sword25/util/lua/llex.cpp
engines/sword25/util/lua/lua.h
engines/sword25/util/lua/luaconf.h
engines/teenagent/actor.cpp
engines/teenagent/actor.h
engines/teenagent/animation.cpp
engines/teenagent/animation.h
engines/teenagent/callbacks.cpp
engines/teenagent/detection.cpp
engines/teenagent/dialog.cpp
engines/teenagent/dialog.h
engines/teenagent/font.cpp
engines/teenagent/font.h
engines/teenagent/inventory.cpp
engines/teenagent/inventory.h
engines/teenagent/music.cpp
engines/teenagent/music.h
engines/teenagent/objects.cpp
engines/teenagent/objects.h
engines/teenagent/pack.cpp
engines/teenagent/resources.cpp
engines/teenagent/resources.h
engines/teenagent/scene.cpp
engines/teenagent/scene.h
engines/teenagent/segment.h
engines/teenagent/surface.cpp
engines/teenagent/surface.h
engines/teenagent/surface_list.cpp
engines/teenagent/surface_list.h
engines/teenagent/teenagent.cpp
engines/teenagent/teenagent.h
engines/testbed/config-params.cpp
engines/testbed/config.cpp
engines/testbed/sound.cpp
engines/tinsel/actors.cpp
engines/tinsel/anim.cpp
engines/tinsel/bg.cpp
engines/tinsel/bmv.cpp
engines/tinsel/cursor.cpp
engines/tinsel/detection_tables.h
engines/tinsel/dialogs.cpp
engines/tinsel/dw.h
engines/tinsel/events.cpp
engines/tinsel/events.h
engines/tinsel/faders.cpp
engines/tinsel/faders.h
engines/tinsel/font.cpp
engines/tinsel/graphics.cpp
engines/tinsel/handle.cpp
engines/tinsel/multiobj.cpp
engines/tinsel/music.cpp
engines/tinsel/object.cpp
engines/tinsel/palette.cpp
engines/tinsel/palette.h
engines/tinsel/pcode.cpp
engines/tinsel/play.cpp
engines/tinsel/polygons.cpp
engines/tinsel/rince.cpp
engines/tinsel/saveload.cpp
engines/tinsel/savescn.cpp
engines/tinsel/scene.cpp
engines/tinsel/sched.cpp
engines/tinsel/sound.cpp
engines/tinsel/sound.h
engines/tinsel/strres.cpp
engines/tinsel/text.cpp
engines/tinsel/timers.cpp
engines/tinsel/tinlib.cpp
engines/tinsel/tinsel.cpp
engines/tinsel/tinsel.h
engines/toltecs/detection.cpp
engines/toltecs/menu.cpp
engines/toltecs/menu.h
engines/toltecs/microtiles.cpp
engines/toltecs/module.mk
engines/toltecs/movie.cpp
engines/toltecs/movie.h
engines/toltecs/palette.cpp
engines/toltecs/palette.h
engines/toltecs/resource.cpp
engines/toltecs/resource.h
engines/toltecs/screen.cpp
engines/toltecs/screen.h
engines/toltecs/script.cpp
engines/toltecs/script.h
engines/toltecs/sound.cpp
engines/toltecs/toltecs.cpp
engines/toltecs/toltecs.h
engines/tony/custom.cpp
engines/tony/debugger.cpp
engines/tony/detection.cpp
engines/tony/detection_tables.h
engines/tony/font.cpp
engines/tony/font.h
engines/tony/game.cpp
engines/tony/game.h
engines/tony/gfxcore.cpp
engines/tony/gfxcore.h
engines/tony/gfxengine.cpp
engines/tony/globals.h
engines/tony/input.cpp
engines/tony/input.h
engines/tony/inventory.cpp
engines/tony/inventory.h
engines/tony/loc.cpp
engines/tony/loc.h
engines/tony/mpal/expr.cpp
engines/tony/mpal/expr.h
engines/tony/mpal/loadmpc.cpp
engines/tony/mpal/lzo.cpp
engines/tony/mpal/memory.cpp
engines/tony/mpal/mpal.cpp
engines/tony/mpal/mpal.h
engines/tony/mpal/mpaldll.h
engines/tony/mpal/mpalutils.h
engines/tony/resid.h
engines/tony/sound.cpp
engines/tony/tony.cpp
engines/tony/tony.h
engines/tony/tonychar.cpp
engines/tony/window.cpp
engines/tony/window.h
engines/toon/toon.h
engines/touche/console.cpp
engines/touche/console.h
engines/touche/menu.cpp
engines/touche/resource.cpp
engines/touche/touche.cpp
engines/touche/touche.h
engines/tsage/events.h
engines/tsage/ringworld2/ringworld2_scenes0.cpp
engines/tsage/ringworld2/ringworld2_scenes1.cpp
engines/wintermute/ad/ad_actor.cpp
engines/wintermute/ad/ad_actor.h
engines/wintermute/ad/ad_entity.cpp
engines/wintermute/ad/ad_entity.h
engines/wintermute/ad/ad_game.cpp
engines/wintermute/ad/ad_game.h
engines/wintermute/ad/ad_inventory.cpp
engines/wintermute/ad/ad_inventory.h
engines/wintermute/ad/ad_inventory_box.cpp
engines/wintermute/ad/ad_inventory_box.h
engines/wintermute/ad/ad_item.cpp
engines/wintermute/ad/ad_item.h
engines/wintermute/ad/ad_layer.cpp
engines/wintermute/ad/ad_layer.h
engines/wintermute/ad/ad_node_state.cpp
engines/wintermute/ad/ad_object.cpp
engines/wintermute/ad/ad_object.h
engines/wintermute/ad/ad_path.cpp
engines/wintermute/ad/ad_path.h
engines/wintermute/ad/ad_path_point.cpp
engines/wintermute/ad/ad_path_point.h
engines/wintermute/ad/ad_region.cpp
engines/wintermute/ad/ad_region.h
engines/wintermute/ad/ad_response.cpp
engines/wintermute/ad/ad_response.h
engines/wintermute/ad/ad_response_box.cpp
engines/wintermute/ad/ad_response_box.h
engines/wintermute/ad/ad_response_context.cpp
engines/wintermute/ad/ad_response_context.h
engines/wintermute/ad/ad_rot_level.cpp
engines/wintermute/ad/ad_rot_level.h
engines/wintermute/ad/ad_scale_level.cpp
engines/wintermute/ad/ad_scale_level.h
engines/wintermute/ad/ad_scene.cpp
engines/wintermute/ad/ad_scene.h
engines/wintermute/ad/ad_scene_node.cpp
engines/wintermute/ad/ad_scene_state.cpp
engines/wintermute/ad/ad_scene_state.h
engines/wintermute/ad/ad_sentence.cpp
engines/wintermute/ad/ad_sentence.h
engines/wintermute/ad/ad_sprite_set.cpp
engines/wintermute/ad/ad_sprite_set.h
engines/wintermute/ad/ad_talk_def.cpp
engines/wintermute/ad/ad_talk_def.h
engines/wintermute/ad/ad_talk_holder.cpp
engines/wintermute/ad/ad_talk_holder.h
engines/wintermute/ad/ad_talk_node.cpp
engines/wintermute/ad/ad_talk_node.h
engines/wintermute/ad/ad_waypoint_group.cpp
engines/wintermute/ad/ad_waypoint_group.h
engines/wintermute/base/base.cpp
engines/wintermute/base/base.h
engines/wintermute/base/base_active_rect.cpp
engines/wintermute/base/base_active_rect.h
engines/wintermute/base/base_dynamic_buffer.cpp
engines/wintermute/base/base_dynamic_buffer.h
engines/wintermute/base/base_engine.cpp
engines/wintermute/base/base_engine.h
engines/wintermute/base/base_fader.cpp
engines/wintermute/base/base_fader.h
engines/wintermute/base/base_file_manager.cpp
engines/wintermute/base/base_file_manager.h
engines/wintermute/base/base_frame.cpp
engines/wintermute/base/base_frame.h
engines/wintermute/base/base_game.cpp
engines/wintermute/base/base_game.h
engines/wintermute/base/base_keyboard_state.cpp
engines/wintermute/base/base_keyboard_state.h
engines/wintermute/base/base_named_object.cpp
engines/wintermute/base/base_named_object.h
engines/wintermute/base/base_object.cpp
engines/wintermute/base/base_object.h
engines/wintermute/base/base_parser.cpp
engines/wintermute/base/base_parser.h
engines/wintermute/base/base_persistence_manager.cpp
engines/wintermute/base/base_persistence_manager.h
engines/wintermute/base/base_point.h
engines/wintermute/base/base_quick_msg.cpp
engines/wintermute/base/base_quick_msg.h
engines/wintermute/base/base_region.cpp
engines/wintermute/base/base_region.h
engines/wintermute/base/base_script_holder.cpp
engines/wintermute/base/base_script_holder.h
engines/wintermute/base/base_scriptable.cpp
engines/wintermute/base/base_scriptable.h
engines/wintermute/base/base_sprite.cpp
engines/wintermute/base/base_sprite.h
engines/wintermute/base/base_string_table.cpp
engines/wintermute/base/base_sub_frame.cpp
engines/wintermute/base/base_sub_frame.h
engines/wintermute/base/base_surface_storage.cpp
engines/wintermute/base/base_surface_storage.h
engines/wintermute/base/base_transition_manager.cpp
engines/wintermute/base/base_transition_manager.h
engines/wintermute/base/base_viewport.cpp
engines/wintermute/base/base_viewport.h
engines/wintermute/base/file/base_disk_file.cpp
engines/wintermute/base/file/base_file.h
engines/wintermute/base/file/base_file_entry.cpp
engines/wintermute/base/file/base_package.cpp
engines/wintermute/base/file/base_package.h
engines/wintermute/base/file/base_save_thumb_file.cpp
engines/wintermute/base/font/base_font.cpp
engines/wintermute/base/font/base_font.h
engines/wintermute/base/font/base_font_bitmap.cpp
engines/wintermute/base/font/base_font_bitmap.h
engines/wintermute/base/font/base_font_storage.cpp
engines/wintermute/base/font/base_font_truetype.cpp
engines/wintermute/base/font/base_font_truetype.h
engines/wintermute/base/gfx/base_image.cpp
engines/wintermute/base/gfx/base_image.h
engines/wintermute/base/gfx/base_renderer.cpp
engines/wintermute/base/gfx/base_renderer.h
engines/wintermute/base/gfx/base_surface.cpp
engines/wintermute/base/gfx/base_surface.h
engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
engines/wintermute/base/gfx/osystem/base_render_osystem.h
engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
engines/wintermute/base/gfx/osystem/base_surface_osystem.h
engines/wintermute/base/particles/part_emitter.cpp
engines/wintermute/base/particles/part_emitter.h
engines/wintermute/base/particles/part_particle.cpp
engines/wintermute/base/particles/part_particle.h
engines/wintermute/base/saveload.cpp
engines/wintermute/base/scriptables/script.cpp
engines/wintermute/base/scriptables/script.h
engines/wintermute/base/scriptables/script_engine.cpp
engines/wintermute/base/scriptables/script_engine.h
engines/wintermute/base/scriptables/script_ext_array.cpp
engines/wintermute/base/scriptables/script_ext_array.h
engines/wintermute/base/scriptables/script_ext_date.cpp
engines/wintermute/base/scriptables/script_ext_file.cpp
engines/wintermute/base/scriptables/script_ext_file.h
engines/wintermute/base/scriptables/script_ext_mem_buffer.cpp
engines/wintermute/base/scriptables/script_ext_mem_buffer.h
engines/wintermute/base/scriptables/script_ext_string.cpp
engines/wintermute/base/scriptables/script_ext_string.h
engines/wintermute/base/scriptables/script_stack.cpp
engines/wintermute/base/scriptables/script_stack.h
engines/wintermute/base/scriptables/script_value.cpp
engines/wintermute/base/scriptables/script_value.h
engines/wintermute/base/sound/base_sound.cpp
engines/wintermute/base/sound/base_sound.h
engines/wintermute/base/sound/base_sound_buffer.cpp
engines/wintermute/base/sound/base_sound_buffer.h
engines/wintermute/base/sound/base_sound_manager.cpp
engines/wintermute/base/sound/base_sound_manager.h
engines/wintermute/dcgf.h
engines/wintermute/detection.cpp
engines/wintermute/detection_tables.h
engines/wintermute/graphics/transparent_surface.cpp
engines/wintermute/graphics/transparent_surface.h
engines/wintermute/module.mk
engines/wintermute/persistent.h
engines/wintermute/platform_osystem.cpp
engines/wintermute/platform_osystem.h
engines/wintermute/system/sys_class.cpp
engines/wintermute/system/sys_class_registry.cpp
engines/wintermute/ui/ui_button.cpp
engines/wintermute/ui/ui_button.h
engines/wintermute/ui/ui_edit.cpp
engines/wintermute/ui/ui_edit.h
engines/wintermute/ui/ui_entity.cpp
engines/wintermute/ui/ui_entity.h
engines/wintermute/ui/ui_object.cpp
engines/wintermute/ui/ui_object.h
engines/wintermute/ui/ui_text.cpp
engines/wintermute/ui/ui_text.h
engines/wintermute/ui/ui_tiled_image.cpp
engines/wintermute/ui/ui_tiled_image.h
engines/wintermute/ui/ui_window.cpp
engines/wintermute/ui/ui_window.h
engines/wintermute/utils/string_util.cpp
engines/wintermute/utils/utils.cpp
engines/wintermute/video/video_player.cpp
engines/wintermute/video/video_player.h
engines/wintermute/video/video_theora_player.cpp
engines/wintermute/video/video_theora_player.h
engines/wintermute/wintermute.cpp
engines/wintermute/wintermute.h
graphics/decoders/bmp.h
graphics/decoders/jpeg.cpp
graphics/decoders/jpeg.h
graphics/decoders/pict.cpp
graphics/decoders/png.cpp
graphics/decoders/png.h
graphics/decoders/tga.h
graphics/module.mk
graphics/primitives.cpp
graphics/primitives.h
graphics/scaler.cpp
graphics/scaler/aspect.cpp
graphics/thumbnail.cpp
graphics/thumbnail.h
gui/ThemeEngine.h
gui/about.cpp
gui/browser.cpp
gui/browser.h
gui/browser_osx.mm
gui/credits.h
gui/debugger.cpp
gui/debugger.h
gui/launcher.cpp
gui/module.mk
gui/options.cpp
gui/options.h
gui/saveload-dialog.cpp
gui/themes/default.inc
gui/themes/scummclassic.zip
gui/themes/scummclassic/THEMERC
gui/themes/scummclassic/classic_layout.stx
gui/themes/scummclassic/classic_layout_lowres.stx
gui/themes/scummmodern.zip
gui/themes/scummmodern/THEMERC
gui/themes/scummmodern/scummmodern_layout.stx
gui/themes/scummmodern/scummmodern_layout_lowres.stx
gui/themes/translations.dat
gui/widget.cpp
gui/widgets/list.cpp
gui/widgets/list.h
gui/widgets/popup.cpp
po/POTFILES
po/ca_ES.po
po/cs_CZ.po
po/da_DA.po
po/de_DE.po
po/es_ES.po
po/eu.po
po/fr_FR.po
po/gl_ES.po
po/hu_HU.po
po/it_IT.po
po/nb_NO.po
po/nn_NO.po
po/pl_PL.po
po/pt_BR.po
po/ru_RU.po
po/scummvm.pot
po/se_SE.po
po/uk_UA.po
ports.mk
test/common/bufferedseekablereadstream.h
video/avi_decoder.cpp
video/avi_decoder.h
video/bink_decoder.cpp
video/bink_decoder.h
video/codecs/cdtoons.h
video/codecs/cinepak.cpp
video/codecs/cinepak.h
video/codecs/codec.h
video/codecs/indeo3.h
video/codecs/mjpeg.h
video/codecs/msrle.h
video/codecs/msvideo1.h
video/codecs/qtrle.h
video/codecs/rpza.cpp
video/codecs/rpza.h
video/codecs/smc.h
video/codecs/svq1.cpp
video/codecs/svq1.h
video/codecs/truemotion1.h
video/coktel_decoder.cpp
video/flic_decoder.cpp
video/flic_decoder.h
video/psx_decoder.cpp
video/qt_decoder.cpp
video/qt_decoder.h
video/smk_decoder.cpp
video/theora_decoder.h
video/video_decoder.cpp
video/video_decoder.h
diff --cc engines/configure.engines
index c7f142b,db01777..cdacb60
--- a/engines/configure.engines
+++ b/engines/configure.engines
@@@ -27,9 -28,8 +28,9 @@@ add_engine mohawk "Mohawk" yes "cstime
add_engine cstime "Where in Time is Carmen Sandiego?" no
add_engine riven "Riven: The Sequel to Myst" no "" "" "16bit"
add_engine myst "Myst" no "" "" "16bit"
+add_engine neverhood "Neverhood" no
add_engine parallaction "Parallaction" yes
- add_engine pegasus "The Journeyman Project: Pegasus Prime" no "" "" "16bit"
+ add_engine pegasus "The Journeyman Project: Pegasus Prime" yes "" "" "16bit"
add_engine queen "Flight of the Amazon Queen" yes
add_engine saga "SAGA" yes "ihnm saga2" "ITE"
add_engine ihnm "IHNM" yes
Commit: 78e0d6a3f1bd0ee050e5cd0ca3599f86dcf25813
https://github.com/scummvm/scummvm/commit/78e0d6a3f1bd0ee050e5cd0ca3599f86dcf25813
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T11:49:19-07:00
Commit Message:
NEVERHOOD: Move module files to own subdirectory
Changed paths:
A engines/neverhood/modules/module1000.cpp
A engines/neverhood/modules/module1000.h
A engines/neverhood/modules/module1100.cpp
A engines/neverhood/modules/module1100.h
A engines/neverhood/modules/module1200.cpp
A engines/neverhood/modules/module1200.h
A engines/neverhood/modules/module1300.cpp
A engines/neverhood/modules/module1300.h
A engines/neverhood/modules/module1400.cpp
A engines/neverhood/modules/module1400.h
A engines/neverhood/modules/module1500.cpp
A engines/neverhood/modules/module1500.h
A engines/neverhood/modules/module1600.cpp
A engines/neverhood/modules/module1600.h
A engines/neverhood/modules/module1700.cpp
A engines/neverhood/modules/module1700.h
A engines/neverhood/modules/module1800.cpp
A engines/neverhood/modules/module1800.h
A engines/neverhood/modules/module1900.cpp
A engines/neverhood/modules/module1900.h
A engines/neverhood/modules/module2000.cpp
A engines/neverhood/modules/module2000.h
A engines/neverhood/modules/module2100.cpp
A engines/neverhood/modules/module2100.h
A engines/neverhood/modules/module2200.cpp
A engines/neverhood/modules/module2200.h
A engines/neverhood/modules/module2300.cpp
A engines/neverhood/modules/module2300.h
A engines/neverhood/modules/module2400.cpp
A engines/neverhood/modules/module2400.h
A engines/neverhood/modules/module2500.cpp
A engines/neverhood/modules/module2500.h
A engines/neverhood/modules/module2600.cpp
A engines/neverhood/modules/module2600.h
A engines/neverhood/modules/module2700.cpp
A engines/neverhood/modules/module2700.h
A engines/neverhood/modules/module2800.cpp
A engines/neverhood/modules/module2800.h
A engines/neverhood/modules/module2900.cpp
A engines/neverhood/modules/module2900.h
A engines/neverhood/modules/module3000.cpp
A engines/neverhood/modules/module3000.h
R engines/neverhood/module1000.cpp
R engines/neverhood/module1000.h
R engines/neverhood/module1100.cpp
R engines/neverhood/module1100.h
R engines/neverhood/module1200.cpp
R engines/neverhood/module1200.h
R engines/neverhood/module1300.cpp
R engines/neverhood/module1300.h
R engines/neverhood/module1400.cpp
R engines/neverhood/module1400.h
R engines/neverhood/module1500.cpp
R engines/neverhood/module1500.h
R engines/neverhood/module1600.cpp
R engines/neverhood/module1600.h
R engines/neverhood/module1700.cpp
R engines/neverhood/module1700.h
R engines/neverhood/module1800.cpp
R engines/neverhood/module1800.h
R engines/neverhood/module1900.cpp
R engines/neverhood/module1900.h
R engines/neverhood/module2000.cpp
R engines/neverhood/module2000.h
R engines/neverhood/module2100.cpp
R engines/neverhood/module2100.h
R engines/neverhood/module2200.cpp
R engines/neverhood/module2200.h
R engines/neverhood/module2300.cpp
R engines/neverhood/module2300.h
R engines/neverhood/module2400.cpp
R engines/neverhood/module2400.h
R engines/neverhood/module2500.cpp
R engines/neverhood/module2500.h
R engines/neverhood/module2600.cpp
R engines/neverhood/module2600.h
R engines/neverhood/module2700.cpp
R engines/neverhood/module2700.h
R engines/neverhood/module2800.cpp
R engines/neverhood/module2800.h
R engines/neverhood/module2900.cpp
R engines/neverhood/module2900.h
R engines/neverhood/module3000.cpp
R engines/neverhood/module3000.h
engines/neverhood/detection.cpp
engines/neverhood/gamemodule.cpp
engines/neverhood/module.cpp
engines/neverhood/module.mk
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index e5bfd29..4f70c63 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -235,4 +235,3 @@ SaveStateDescriptor NeverhoodMetaEngine::querySaveMetaInfos(const char *target,
#else
REGISTER_PLUGIN_STATIC(NEVERHOOD, PLUGIN_TYPE_ENGINE, NeverhoodMetaEngine);
#endif
-
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 99aea5d..49682b0 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -24,27 +24,27 @@
#include "neverhood/graphics.h"
#include "neverhood/menumodule.h"
-#include "neverhood/module1000.h"
-#include "neverhood/module1100.h"
-#include "neverhood/module1200.h"
-#include "neverhood/module1300.h"
-#include "neverhood/module1400.h"
-#include "neverhood/module1500.h"
-#include "neverhood/module1600.h"
-#include "neverhood/module1700.h"
-#include "neverhood/module1800.h"
-#include "neverhood/module1900.h"
-#include "neverhood/module2000.h"
-#include "neverhood/module2100.h"
-#include "neverhood/module2200.h"
-#include "neverhood/module2300.h"
-#include "neverhood/module2400.h"
-#include "neverhood/module2500.h"
-#include "neverhood/module2600.h"
-#include "neverhood/module2700.h"
-#include "neverhood/module2800.h"
-#include "neverhood/module2900.h"
-#include "neverhood/module3000.h"
+#include "neverhood/modules/module1000.h"
+#include "neverhood/modules/module1100.h"
+#include "neverhood/modules/module1200.h"
+#include "neverhood/modules/module1300.h"
+#include "neverhood/modules/module1400.h"
+#include "neverhood/modules/module1500.h"
+#include "neverhood/modules/module1600.h"
+#include "neverhood/modules/module1700.h"
+#include "neverhood/modules/module1800.h"
+#include "neverhood/modules/module1900.h"
+#include "neverhood/modules/module2000.h"
+#include "neverhood/modules/module2100.h"
+#include "neverhood/modules/module2200.h"
+#include "neverhood/modules/module2300.h"
+#include "neverhood/modules/module2400.h"
+#include "neverhood/modules/module2500.h"
+#include "neverhood/modules/module2600.h"
+#include "neverhood/modules/module2700.h"
+#include "neverhood/modules/module2800.h"
+#include "neverhood/modules/module2900.h"
+#include "neverhood/modules/module3000.h"
namespace Neverhood {
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 93b4134..e384b5a 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -23,8 +23,8 @@
#include "neverhood/module.h"
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
-#include "neverhood/module1000.h"
-#include "neverhood/module1500.h"
+#include "neverhood/modules/module1000.h"
+#include "neverhood/modules/module1500.h"
namespace Neverhood {
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk
index 59effb5..c7bfbb6 100644
--- a/engines/neverhood/module.mk
+++ b/engines/neverhood/module.mk
@@ -13,27 +13,27 @@ MODULE_OBJS = \
menumodule.o \
microtiles.o \
module.o \
- module1000.o \
- module1100.o \
- module1200.o \
- module1300.o \
- module1400.o \
- module1500.o \
- module1600.o \
- module1700.o \
- module1800.o \
- module1900.o \
- module2000.o \
- module2100.o \
- module2200.o \
- module2300.o \
- module2400.o \
- module2500.o \
- module2600.o \
- module2700.o \
- module2800.o \
- module2900.o \
- module3000.o \
+ modules/module1000.o \
+ modules/module1100.o \
+ modules/module1200.o \
+ modules/module1300.o \
+ modules/module1400.o \
+ modules/module1500.o \
+ modules/module1600.o \
+ modules/module1700.o \
+ modules/module1800.o \
+ modules/module1900.o \
+ modules/module2000.o \
+ modules/module2100.o \
+ modules/module2200.o \
+ modules/module2300.o \
+ modules/module2400.o \
+ modules/module2500.o \
+ modules/module2600.o \
+ modules/module2700.o \
+ modules/module2800.o \
+ modules/module2900.o \
+ modules/module3000.o \
mouse.o \
navigationscene.o \
neverhood.o \
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
deleted file mode 100644
index 096072b..0000000
--- a/engines/neverhood/module1000.cpp
+++ /dev/null
@@ -1,1699 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1000.h"
-
-namespace Neverhood {
-
-Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- debug("Create Module1000(%d)", which);
-
- _musicFileHash = getGlobalVar(V_ENTRANCE_OPEN) ? 0x81106480 : 0x00103144;
-
- _vm->_soundMan->addMusic(0x03294419, 0x061880C6);
- _vm->_soundMan->addMusic(0x03294419, _musicFileHash);
-
- if (which < 0)
- createScene(_vm->gameState().sceneNum, -1);
- else if (which == 0)
- createScene(0, 0);
- else if (which == 1)
- createScene(1, 1);
-
-}
-
-Module1000::~Module1000() {
- _vm->_soundMan->deleteMusicGroup(0x03294419);
-}
-
-void Module1000::createScene(int sceneNum, int which) {
- debug("Module1000::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 0:
- _vm->gameState().sceneNum = 0;
- _vm->_soundMan->startMusic(0x061880C6, 0, 0);
- _childObject = new Scene1001(_vm, this, which);
- break;
- case 1:
- _vm->gameState().sceneNum = 1;
- _vm->_soundMan->startMusic(0x061880C6, 0, 0);
- _childObject = new Scene1002(_vm, this, which);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- _vm->_soundMan->startMusic(0x061880C6, 0, 0);
- createStaticScene(0xC084110C, 0x41108C00);
- break;
- case 3:
- _vm->gameState().sceneNum = 3;
- _vm->_soundMan->stopMusic(0x061880C6, 0, 2);
- _childObject = new Scene1004(_vm, this, which);
- break;
- case 4:
- _vm->gameState().sceneNum = 4;
- _vm->_soundMan->stopMusic(0x061880C6, 0, 0);
- _vm->_soundMan->startMusic(_musicFileHash, 0, 0);
- _childObject = new Scene1005(_vm, this, which);
- break;
- }
- SetUpdateHandler(&Module1000::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1000::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 0:
- if (_moduleResult == 2)
- createScene(2, 0);
- else
- createScene(1, 0);
- break;
- case 1:
- if (_moduleResult == 1)
- leaveModule(0);
- else if (_moduleResult == 2) {
- if (_vm->isDemo())
- // Demo version returns to the same scene
- createScene(1, 2);
- else
- createScene(3, 0);
- } else
- createScene(0, 1);
- break;
- case 2:
- createScene(0, 2);
- break;
- case 3:
- if (_moduleResult == 1)
- createScene(4, 0);
- else
- createScene(1, 2);
- break;
- case 4:
- _vm->_soundMan->stopMusic(_musicFileHash, 0, 1);
- createScene(3, 1);
- break;
- }
- }
-}
-
-// Scene1001
-
-AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100) {
-
- createSurface(800, 137, 242);
- _x = 726;
- _y = 440;
- stShowIdleDoor();
- loadSound(1, 0xED403E03);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1001Door::handleMessage);
-}
-
-uint32 AsScene1001Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2000:
- hammerHitsDoor();
- break;
- case 0x3002:
- gotoNextState();
- break;
- }
- return 0;
-}
-
-void AsScene1001Door::hammerHitsDoor() {
- switch (getGlobalVar(V_DOOR_STATUS)) {
- case 0:
- case 1:
- playSound(0, 0x65482F03);
- startAnimation(0x624C0498, 1, 3);
- NextState(&AsScene1001Door::stShowIdleDoor);
- break;
- case 2:
- playSound(1);
- startAnimation(0x624C0498, 6, 6);
- NextState(&AsScene1001Door::stBustedDoorMove);
- break;
- default:
- // Nothing
- break;
- }
- incGlobalVar(V_DOOR_STATUS, 1);
-}
-
-void AsScene1001Door::stShowIdleDoor() {
- switch (getGlobalVar(V_DOOR_STATUS)) {
- case 1:
- startAnimation(0x624C0498, 4, -1);
- _newStickFrameIndex = 4;
- break;
- case 2:
- startAnimation(0x624C0498, 1, -1);
- _newStickFrameIndex = 1;
- break;
- case 3:
- stopAnimation();
- setVisible(false);
- break;
- default:
- startAnimation(0x624C0498, 0, -1);
- _newStickFrameIndex = 0;
- break;
- }
-}
-
-void AsScene1001Door::stBustedDoorMove() {
- setGlobalVar(V_DOOR_BUSTED, 1);
- startAnimation(0x624C0498, 6, 6);
- NextState(&AsScene1001Door::stBustedDoorGone);
- _x = 30;
-}
-
-void AsScene1001Door::stBustedDoorGone() {
- playSound(0);
- stopAnimation();
- setVisible(false);
-}
-
-AsScene1001Hammer::AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor)
- : AnimatedSprite(vm, 1100), _asDoor(asDoor) {
-
- _x = 547;
- _y = 206;
- createSurface(900, 177, 192);
- startAnimation(0x022C90D4, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1001Hammer::handleMessage);
-}
-
-uint32 AsScene1001Hammer::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x00352100)
- sendMessage(_asDoor, 0x2000, 0);
- else if (param.asInteger() == 0x0A1A0109)
- playSound(0, 0x66410886);
- break;
- case 0x2000:
- startAnimation(0x022C90D4, 1, -1);
- playSound(0, 0xE741020A);
- _newStickFrameIndex = STICK_LAST_FRAME;
- break;
- }
- return 0;
-}
-
-AsScene1001Window::AsScene1001Window(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200) {
-
- _x = 320;
- _y = 240;
- createSurface(100, 66, 129);
- startAnimation(0xC68C2299, 0, -1);
- _newStickFrameIndex = 0;
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1001Window::handleMessage);
-}
-
-uint32 AsScene1001Window::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x0E0A1410)
- playSound(0, 0x60803F10);
- break;
- case 0x2001:
- startAnimation(0xC68C2299, 0, -1);
- break;
- case 0x3002:
- SetMessageHandler(NULL);
- setGlobalVar(V_WINDOW_OPEN, 1);
- setVisible(false);
- break;
- }
- return 0;
-}
-
-AsScene1001Lever::AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
-
- createSurface(1010, 71, 73);
- setDoDeltaX(deltaXType);
- startAnimation(0x04A98C36, 0, -1);
- _newStickFrameIndex = 0;
- _x = x;
- _y = y;
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1001Lever::handleMessage);
-}
-
-uint32 AsScene1001Lever::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x00C0C444)
- sendMessage(_parentScene, 0x480F, 0);
- else if (param.asInteger() == 0xC41A02C0)
- playSound(0, 0x40581882);
- break;
- case 0x1011:
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- break;
- case 0x3002:
- startAnimation(0x04A98C36, 0, -1);
- _newStickFrameIndex = 0;
- break;
- case 0x480F:
- startAnimation(0x04A98C36, 0, -1);
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-SsCommonButtonSprite::SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, int surfacePriority, uint32 soundFileHash)
- : StaticSprite(vm, fileHash, surfacePriority), _parentScene(parentScene), _countdown(0) {
-
- _priority = 1100;
- _soundFileHash = soundFileHash ? soundFileHash : 0x44141000;
- setVisible(false);
- SetUpdateHandler(&SsCommonButtonSprite::update);
- SetMessageHandler(&SsCommonButtonSprite::handleMessage);
-}
-
-void SsCommonButtonSprite::update() {
- if (_countdown != 0 && (--_countdown) == 0)
- setVisible(false);
-}
-
-uint32 SsCommonButtonSprite::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x480B:
- sendMessage(_parentScene, 0x480B, 0);
- setVisible(true);
- _countdown = 8;
- playSound(0, _soundFileHash);
- break;
- }
- return messageResult;
-}
-
-Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _asDoor(NULL), _asWindow(NULL) {
-
- Sprite *tempSprite;
-
- SetMessageHandler(&Scene1001::handleMessage);
-
- setHitRects(0x004B4860);
- setBackground(0x4086520E);
- setPalette(0x4086520E);
- insertScreenMouse(0x6520A400);
-
- if (which < 0) {
- // Restoring game
- setRectList(0x004B49F0);
- insertKlaymen<KmScene1001>(200, 433);
- setMessageList(0x004B4888);
- } else if (which == 1) {
- // Klaymen entering from the right
- setRectList(0x004B49F0);
- insertKlaymen<KmScene1001>(640, 433);
- setMessageList(0x004B4898);
- } else if (which == 2) {
- // Klaymen returning from looking through the window
- setRectList(0x004B49F0);
- if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) {
- insertKlaymen<KmScene1001>(390, 433);
- _klaymen->setDoDeltaX(1);
- } else {
- insertKlaymen<KmScene1001>(300, 433);
- }
- setMessageList(0x004B4970);
- } else {
- // Klaymen sleeping
- setRectList(0x004B4A00);
- insertKlaymen<KmScene1001>(200, 433);
- setMessageList(0x004B4890);
- }
-
- tempSprite = insertStaticSprite(0x2080A3A8, 1300);
-
- _klaymen->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
-
- if (!getGlobalVar(V_DOOR_BUSTED)) {
- _asDoor = insertSprite<AsScene1001Door>();
- _asDoor->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480);
- }
-
- _asLever = insertSprite<AsScene1001Lever>(this, 150, 433, 1);
-
- insertStaticSprite(0x809861A6, 950);
- insertStaticSprite(0x89C03848, 1100);
-
- _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x15288120, 100, 0);
-
- if (!getGlobalVar(V_WINDOW_OPEN)) {
- tempSprite = insertStaticSprite(0x8C066150, 200);
- _asWindow = insertSprite<AsScene1001Window>();
- _asWindow->setClipRect(tempSprite->getDrawRect());
- }
-
- _asHammer = insertSprite<AsScene1001Hammer>(_asDoor);
-
-}
-
-Scene1001::~Scene1001() {
- setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX());
-}
-
-uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x00342624) {
- sendEntityMessage(_klaymen, 0x1014, _asLever);
- setMessageList2(0x004B4910);
- messageResult = 1;
- } else if (param.asInteger() == 0x21E64A00) {
- if (getGlobalVar(V_DOOR_BUSTED)) {
- setMessageList(0x004B48A8);
- } else {
- setMessageList(0x004B48C8);
- }
- messageResult = 1;
- } else if (param.asInteger() == 0x040424D0) {
- sendEntityMessage(_klaymen, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x80006358) {
- if (getGlobalVar(V_WINDOW_OPEN)) {
- setMessageList(0x004B4938);
- } else {
- setMessageList(0x004B4960);
- }
- }
- break;
- case 0x2002:
- setRectList(0x004B49F0);
- break;
- case 0x480B:
- sendMessage(_asWindow, 0x2001, 0);
- break;
- case 0x480F:
- sendMessage(_asHammer, 0x2000, 0);
- break;
- }
- return messageResult;
-}
-
-// Scene1002
-
-AsScene1002Ring::AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool isSpecial, int16 x, int16 y, int16 clipY1, bool isRingLow)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _isSpecial(isSpecial) {
-
- SetUpdateHandler(&AsScene1002Ring::update);
-
- if (_isSpecial) {
- createSurface(990, 68, 314);
- if (isRingLow) {
- startAnimation(0x04103090, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
- } else {
- startAnimation(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
- SetMessageHandler(&AsScene1002Ring::hmRingIdle);
- }
- } else {
- createSurface(990, 68, 138);
- startAnimation(0xA85C4011, _vm->_rnd->getRandomNumber(15), -1);
- SetMessageHandler(&AsScene1002Ring::hmRingIdle);
- }
-
- setClipRect(0, clipY1, 640, 480);
-
- _x = x;
- _y = y;
-
- setDoDeltaX(_vm->_rnd->getRandomNumber(1));
-
-}
-
-void AsScene1002Ring::update() {
- updateAnim();
- updatePosition();
-}
-
-uint32 AsScene1002Ring::hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4806:
- setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
- sendMessage(_parentScene, 0x4806, 0);
- SetMessageHandler(&AsScene1002Ring::hmRingPulled1);
- startAnimation(_isSpecial ? 0x87502558 : 0x80DD4010, 0, -1);
- break;
- case 0x480F:
- setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0);
- sendMessage(_parentScene, 0x480F, 0);
- SetMessageHandler(&AsScene1002Ring::hmRingPulled2);
- startAnimation(0x861A2020, 0, -1);
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002Ring::hmRingPulled1(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- startAnimation(_isSpecial ? 0x78D0A812 : 0xB85D2A10, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
- break;
- case 0x4807:
- sendMessage(_parentScene, 0x4807, 0);
- setDoDeltaX(_vm->_rnd->getRandomNumber(1));
- startAnimation(0x8258A030, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingReleased);
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002Ring::hmRingPulled2(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- startAnimation(0x04103090, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingHangingLow);
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002Ring::hmRingHangingLow(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4807:
- sendMessage(_parentScene, 0x4807, 0);
- setDoDeltaX(_vm->_rnd->getRandomNumber(1));
- startAnimation(0x8258A030, 0, -1);
- SetMessageHandler(&AsScene1002Ring::hmRingReleased);
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002Ring::hmRingReleased(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmRingIdle(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x05410F72)
- playSound(0, 0x21EE40A9);
- break;
- case 0x3002:
- startAnimation(0xA85C4011, 0, -1);
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect)
- : StaticSprite(vm, 1200) {
-
- loadSprite(0x1052370F, kSLFDefDrawOffset | kSLFSetPosition, 800, 526, getGlobalVar(V_FLYTRAP_RING_DOOR) ? 49 : 239);
- setClipRect(clipRect);
- SetUpdateHandler(&AsScene1002Door::update);
- SetMessageHandler(&AsScene1002Door::handleMessage);
- SetSpriteUpdate(NULL);
-}
-
-void AsScene1002Door::update() {
- handleSpriteUpdate();
- updatePosition();
-}
-
-uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4808:
- setGlobalVar(V_FLYTRAP_RING_DOOR, 1);
- SetSpriteUpdate(&AsScene1002Door::suOpenDoor);
- break;
- case 0x4809:
- setGlobalVar(V_FLYTRAP_RING_DOOR, 0);
- SetSpriteUpdate(&AsScene1002Door::suCloseDoor);
- break;
- }
- return messageResult;
-}
-
-void AsScene1002Door::suOpenDoor() {
- if (_y > 49) {
- _y -= 8;
- if (_y < 49) {
- SetSpriteUpdate(NULL);
- _y = 49;
- }
- _needRefresh = true;
- }
-}
-
-void AsScene1002Door::suCloseDoor() {
- if (_y < 239) {
- _y += 8;
- if (_y > 239) {
- SetSpriteUpdate(NULL);
- _y = 239;
- }
- _needRefresh = true;
- }
-}
-
-AsScene1002BoxingGloveHitEffect::AsScene1002BoxingGloveHitEffect(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1400) {
-
- createSurface(1025, 88, 165);
- setVisible(false);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1002BoxingGloveHitEffect::handleMessage);
-}
-
-uint32 AsScene1002BoxingGloveHitEffect::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2004:
- _x = ((Sprite*)sender)->getX() - 98;
- _y = ((Sprite*)sender)->getY() - 111;
- startAnimation(0x0422255A, 0, -1);
- setVisible(true);
- break;
- case 0x3002:
- stopAnimation();
- setVisible(false);
- break;
- }
- return messageResult;
-}
-
-AsScene1002DoorSpy::AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *asScene1002BoxingGloveHitEffect)
- : AnimatedSprite(vm, 1300), _clipRect(clipRect), _parentScene(parentScene), _asDoor(asDoor), _asBoxingGloveHitEffect(asScene1002BoxingGloveHitEffect) {
-
- createSurface(800, 136, 147);
- setClipRect(clipRect);
- suDoorSpy();
- loadSound(0, 0xC0C40298);
- startAnimation(0x586C1D48, 0, 0);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
- SetSpriteUpdate(&AsScene1002DoorSpy::suDoorSpy);
-}
-
-uint32 AsScene1002DoorSpy::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0xA61CA1C2)
- sendMessage(_asBoxingGloveHitEffect, 0x2004, 0);
- else if (param.asInteger() == 0x14CE0620)
- playSound(0);
- break;
- case 0x2003:
- stDoorSpyBoxingGlove();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002DoorSpy::hmDoorSpyAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1002DoorSpy::suDoorSpy() {
- _x = _asDoor->getX() + 34;
- _y = _asDoor->getY() + 175;
-}
-
-void AsScene1002DoorSpy::stDoorSpyIdle() {
- setClipRect(_clipRect);
- _parentScene->setSurfacePriority(getSurface(), 800);
- startAnimation(0x586C1D48, 0, 0);
- SetMessageHandler(&AsScene1002DoorSpy::handleMessage);
-}
-
-void AsScene1002DoorSpy::stDoorSpyBoxingGlove() {
- setClipRect(0, 0, 640, 480);
- _parentScene->setSurfacePriority(getSurface(), 1200);
- startAnimation(0x586C1D48, 1, -1);
- SetMessageHandler(&AsScene1002DoorSpy::hmDoorSpyAnimation);
- NextState(&AsScene1002DoorSpy::stDoorSpyIdle);
-}
-
-SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
- : StaticSprite(vm, 1100), _parentScene(parentScene), _status(0) {
-
- _soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
- _fileHashes[0] = fileHash1;
- _fileHashes[1] = fileHash2;
- createSurface(surfacePriority, 40, 40);
- loadSprite(fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
- setVisible(false);
- SetUpdateHandler(&SsCommonPressButton::update);
- SetMessageHandler(&SsCommonPressButton::handleMessage);
-}
-
-void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
- _fileHashes[0] = fileHash1;
- _fileHashes[1] = fileHash2;
- loadSprite(_status == 2 ? fileHash2 : fileHash1, kSLFDefDrawOffset | kSLFDefPosition);
-}
-
-void SsCommonPressButton::update() {
- if (_countdown != 0 && (--_countdown) == 0) {
- if (_status == 1) {
- _status = 2;
- loadSprite(_fileHashes[1], kSLFDefDrawOffset | kSLFDefPosition);
- _countdown = 4;
- } else if (_status == 2) {
- _status = 3;
- loadSprite(_fileHashes[0], kSLFDefDrawOffset | kSLFDefPosition);
- _countdown = 4;
- } else if (_status == 3) {
- _status = 0;
- setVisible(false);
- }
- }
-}
-
-uint32 SsCommonPressButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x480B:
- sendMessage(_parentScene, 0x480B, 0);
- _status = 1;
- _countdown = 4;
- setVisible(true);
- playSound(0, _soundFileHash);
- break;
- }
- return messageResult;
-}
-
-AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, bool isSecond)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klaymen(klaymen), _isSecond(isSecond), _countdown(0) {
-
- createSurface(995, 175, 195);
- if (!_isSecond) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
- setDoDeltaX(1);
- _x = 366;
- _y = 435;
- stRingGrabbed();
- } else {
- _x = 174 + getGlobalVar(V_FLYTRAP_POSITION_1) * 32;
- _y = 435;
- stIdle();
- }
- } else {
- _x = 186 + getGlobalVar(V_FLYTRAP_POSITION_2) * 32;
- _y = 364;
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE) || getGlobalVar(V_FLYTRAP_RING_FENCE)) {
- stRingGrabbed();
- } else {
- stIdle();
- }
- }
- _flags = 4;
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-void AsScene1002VenusFlyTrap::update() {
- if (_countdown != 0 && (--_countdown == 0))
- gotoNextState();
- AnimatedSprite::update();
-}
-
-void AsScene1002VenusFlyTrap::upIdle() {
- if (_countdown == 0 && _klaymen->getX() - 20 > _x)
- setDoDeltaX(1);
- else if (_klaymen->getX() + 20 < _x)
- setDoDeltaX(0);
- update();
-}
-
-uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x000890C4)
- playSound(0, 0xC21190D8);
- else if (param.asInteger() == 0x522200A0)
- playSound(0, 0x931080C8);
- break;
- case 0x1011:
- if (_isSecond) {
- if (_x >= 154 && _x <= 346) {
- sendMessage(_parentScene, 0x2000, 0);
- messageResult = 1;
- }
- } else {
- if (_x >= 174 && _x <= 430) {
- sendMessage(_parentScene, 0x2000, 0);
- messageResult = 1;
- }
- }
- break;
- case 0x480B:
- setDoDeltaX(param.asInteger() != 0 ? 1 : 0);
- if (!_isSecond) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR))
- stRelease();
- else
- stWalk();
- } else {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE) || getGlobalVar(V_FLYTRAP_RING_FENCE))
- stRelease();
- else
- stWalk();
- }
- break;
- case 0x480C:
- if (_isSecond) {
- if (_x >= 154 && _x <= 346)
- messageResult = 1;
- else
- messageResult = 0;
- } else {
- if (_x >= 174 && _x <= 430)
- messageResult = 1;
- else
- messageResult = 0;
- }
- break;
- case 0x480E:
- if (param.asInteger() == 1)
- stGrabRing();
- break;
- case 0x4810:
- swallowKlaymen();
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 995);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1015);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002VenusFlyTrap::hmAnimationSimple(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x000890C4)
- playSound(0, 0xC21190D8);
- else if (param.asInteger() == 0x41881801) {
- if (_isSecond) {
- if (_x > 330)
- sendMessage(_klaymen, 0x4811, 2);
- else
- sendMessage(_klaymen, 0x4811, 0);
- } else {
- sendMessage(_klaymen, 0x4811, 0);
- }
- } else if (param.asInteger() == 0x522200A0)
- playSound(0, 0x931080C8);
- break;
- case 0x3002:
- gotoNextState();
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 995);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1015);
- break;
- }
- return messageResult;
-}
-
-void AsScene1002VenusFlyTrap::stWalkBack() {
- setDoDeltaX(2);
- startAnimation(0xC4080034, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
- NextState(&AsScene1002VenusFlyTrap::stIdle);
-}
-
-void AsScene1002VenusFlyTrap::stWalk() {
- startAnimation(0xC4080034, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationSimple);
- NextState(&AsScene1002VenusFlyTrap::stIdle);
-}
-
-void AsScene1002VenusFlyTrap::stRelease() {
- sendMessage(_parentScene, 0x4807, 0);
- startAnimation(0x82292851, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationSimple);
- NextState(&AsScene1002VenusFlyTrap::stIdle);
-}
-
-void AsScene1002VenusFlyTrap::stGrabRing() {
- setDoDeltaX(1);
- startAnimation(0x86A82A11, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationSimple);
- NextState(&AsScene1002VenusFlyTrap::stRingGrabbed);
-}
-
-void AsScene1002VenusFlyTrap::stRingGrabbed() {
- startAnimation(0xB5A86034, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
-}
-
-void AsScene1002VenusFlyTrap::stKlaymenInside() {
- startAnimation(0x31303094, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(NULL);
- NextState(&AsScene1002VenusFlyTrap::stKlaymenInsideMoving);
- _countdown = 24;
-}
-
-void AsScene1002VenusFlyTrap::stIdle() {
- startAnimation(0xC8204250, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::upIdle);
- SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage);
- if (_isSecond) {
- if (_x >= 154 && _x <= 346)
- setGlobalVar(V_FLYTRAP_POSITION_2, (_x - 186) / 32);
- else {
- NextState(&AsScene1002VenusFlyTrap::stWalkBack);
- _countdown = 12;
- }
- } else {
- if (_x >= 174 && _x <= 430)
- setGlobalVar(V_FLYTRAP_POSITION_1, (_x - 174) / 32);
- else {
- NextState(&AsScene1002VenusFlyTrap::stWalkBack);
- _countdown = 12;
- }
- }
-}
-
-void AsScene1002VenusFlyTrap::stKlaymenInsideMoving() {
- startAnimation(0x152920C4, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
- NextState(&AsScene1002VenusFlyTrap::stSpitOutKlaymen);
-}
-
-void AsScene1002VenusFlyTrap::stSpitOutKlaymen() {
- startAnimation(0x84001117, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
- NextState(&AsScene1002VenusFlyTrap::stIdle);
-}
-
-void AsScene1002VenusFlyTrap::swallowKlaymen() {
- if (_x - 15 < _klaymen->getX() && _x + 15 > _klaymen->getX()) {
- if (_isSecond)
- setDoDeltaX(_x > 265 && _x < 330 ? 1 : 0);
- else
- setDoDeltaX(_x > 320 ? 1 : 0);
- sendMessage(_klaymen, 0x2001, 0);
- startAnimation(0x8C2C80D4, 0, -1);
- SetUpdateHandler(&AsScene1002VenusFlyTrap::update);
- SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt);
- NextState(&AsScene1002VenusFlyTrap::stKlaymenInside);
- }
-}
-
-AsScene1002OutsideDoorBackground::AsScene1002OutsideDoorBackground(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200), _countdown(0) {
-
- createSurface(850, 186, 212);
- _x = 320;
- _y = 240;
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
- startAnimation(0x004A4495, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- } else
- setVisible(false);
- SetUpdateHandler(&AsScene1002OutsideDoorBackground::update);
- SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
-}
-
-void AsScene1002OutsideDoorBackground::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
- if (_isDoorClosed)
- stCloseDoor();
- else
- stOpenDoor();
- }
- AnimatedSprite::update();
-}
-
-uint32 AsScene1002OutsideDoorBackground::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageResult) {
- case 0x4808:
- _isDoorClosed = false;
- _countdown = 2;
- break;
- case 0x4809:
- _isDoorClosed = true;
- _countdown = 2;
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1002OutsideDoorBackground::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = handleMessage(messageNum, param, sender);
- switch (messageResult) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1002OutsideDoorBackground::stOpenDoor() {
- startAnimation(0x004A4495, 0, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- setVisible(true);
- SetMessageHandler(&AsScene1002OutsideDoorBackground::handleMessage);
-}
-
-void AsScene1002OutsideDoorBackground::stCloseDoor() {
- startAnimation(0x004A4495, -1, -1);
- _playBackwards = true;
- setVisible(true);
- SetMessageHandler(&AsScene1002OutsideDoorBackground::hmAnimation);
- NextState(&AsScene1002OutsideDoorBackground::stDoorClosed);
-}
-
-void AsScene1002OutsideDoorBackground::stDoorClosed() {
- setVisible(false);
- stopAnimation();
-}
-
-AsScene1002KlaymenLadderHands::AsScene1002KlaymenLadderHands(NeverhoodEngine *vm, Klaymen *klaymen)
- : AnimatedSprite(vm, 1200), _klaymen(klaymen) {
-
- createSurface(1200, 40, 163);
- setVisible(false);
- SetUpdateHandler(&AsScene1002KlaymenLadderHands::update);
- SetMessageHandler(&Sprite::handleMessage);
-}
-
-void AsScene1002KlaymenLadderHands::update() {
- if (_klaymen->getCurrAnimFileHash() == 0x3A292504) {
- startAnimation(0xBA280522, _klaymen->getFrameIndex(), -1);
- _newStickFrameIndex = _klaymen->getFrameIndex();
- setVisible(true);
- _x = _klaymen->getX();
- _y = _klaymen->getY();
- setDoDeltaX(_klaymen->isDoDeltaX() ? 1 : 0);
- } else if (_klaymen->getCurrAnimFileHash() == 0x122D1505) {
- startAnimation(0x1319150C, _klaymen->getFrameIndex(), -1);
- _newStickFrameIndex = _klaymen->getFrameIndex();
- setVisible(true);
- _x = _klaymen->getX();
- _y = _klaymen->getY();
- setDoDeltaX(_klaymen->isDoDeltaX() ? 1 : 0);
- } else
- setVisible(false);
- AnimatedSprite::update();
-}
-
-AsScene1002KlaymenPeekHand::AsScene1002KlaymenPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klaymen *klaymen)
- : AnimatedSprite(vm, 1200), _parentScene(parentScene), _klaymen(klaymen),
- _isClipRectSaved(false) {
-
- createSurface(1000, 33, 41);
- setVisible(false);
- SetUpdateHandler(&AsScene1002KlaymenPeekHand::update);
- SetMessageHandler(&AsScene1002KlaymenPeekHand::handleMessage);
-}
-
-void AsScene1002KlaymenPeekHand::update() {
- if (_klaymen->getCurrAnimFileHash() == 0xAC20C012 && _klaymen->getFrameIndex() < 50) {
- startAnimation(0x9820C913, _klaymen->getFrameIndex(), -1);
- _newStickFrameIndex = _klaymen->getFrameIndex();
- setVisible(true);
- _x = _klaymen->getX();
- _y = _klaymen->getY();
- setDoDeltaX(_klaymen->isDoDeltaX() ? 1 : 0);
- } else
- setVisible(false);
- AnimatedSprite::update();
-}
-
-uint32 AsScene1002KlaymenPeekHand::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4AB28209) {
- sendMessage(_parentScene, 0x1022, 1200);
- _isClipRectSaved = true;
- _savedClipRect = _surface->getClipRect();
- setClipRect(0, 0, 640, 480);
- } else if (param.asInteger() == 0x88001184) {
- sendMessage(_parentScene, 0x1022, 1000);
- if (_isClipRectSaved)
- setClipRect(_savedClipRect);
- }
- break;
- }
- return messageResult;
-}
-
-Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _isKlaymenFloor(false), _isClimbingLadder(false) {
-
- NRect tempClipRect;
- Sprite *tempSprite;
-
- SetUpdateHandler(&Scene1002::update);
- SetMessageHandler(&Scene1002::handleMessage);
-
- setHitRects(0x004B4138);
- setBackground(0x12C23307);
- setPalette(0x12C23307);
-
- insertStaticSprite(0x06149428, 1100);
- insertStaticSprite(0x312C8774, 1100);
-
- _ssLadderArch = insertStaticSprite(0x152C1313, 1015);
- _ssLadderArchPart1 = insertStaticSprite(0x060000A0, 1200);
- _ssLadderArchPart2 = insertStaticSprite(0xB2A423B0, 1100);
- _ssLadderArchPart3 = insertStaticSprite(0x316E0772, 1100);
-
- _ssCeiling = insertStaticSprite(0x316C4BB4, 1015);
-
- if (which < 0) {
- // Restoring game
- if (_vm->_gameState.which == 0) {
- // Klaymen on top
- insertKlaymen<KmScene1002>(90, 226);
- _asKlaymenLadderHands = insertSprite<AsScene1002KlaymenLadderHands>(_klaymen);
- setMessageList(0x004B4270);
- _klaymen->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
- _asKlaymenLadderHands->getSurface()->getClipRect() = _klaymen->getSurface()->getClipRect();
- _klaymen->setRepl(64, 0);
- } else {
- // Klaymen on the floor
- insertKlaymen<KmScene1002>(379, 435);
- _asKlaymenLadderHands = insertSprite<AsScene1002KlaymenLadderHands>(_klaymen);
- setMessageList(0x004B4270);
- _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect());
- }
- } else if (which == 1) {
- // Klaymen entering from the right
- insertKlaymen<KmScene1002>(650, 435);
- _asKlaymenLadderHands = insertSprite<AsScene1002KlaymenLadderHands>(_klaymen);
- setMessageList(0x004B4478);
- _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect());
- _vm->_gameState.which = 1;
- } else if (which == 2) {
- // Klaymen coming up the ladder
- insertKlaymen<KmScene1002>(68, 645);
- _asKlaymenLadderHands = insertSprite<AsScene1002KlaymenLadderHands>(_klaymen);
- setMessageList(0x004B4298);
- _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect());
- _vm->_gameState.which = 1;
- sendMessage(_klaymen, 0x4820, 0);
- } else {
- // Klaymen entering from the left, peeking
- insertKlaymen<KmScene1002>(90, 226);
- _asKlaymenLadderHands = insertSprite<AsScene1002KlaymenLadderHands>(_klaymen);
- setMessageList(0x004B4470);
- _klaymen->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
- _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect());
- _asKlaymenPeekHand = insertSprite<AsScene1002KlaymenPeekHand>(this, _klaymen);
- _asKlaymenPeekHand->setClipRect(_klaymen->getClipRect());
- _klaymen->setRepl(64, 0);
- _vm->_gameState.which = 0;
- }
-
- insertScreenMouse(0x23303124);
-
- tempSprite = insertStaticSprite(0xB3242310, 825);
- tempClipRect.set(tempSprite->getDrawRect().x, tempSprite->getDrawRect().y,
- _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart2->getDrawRect().y2());
-
- _asRing1 = insertSprite<AsScene1002Ring>(this, false, 258, 191, _ssCeiling->getDrawRect().y, false);
- _asRing2 = insertSprite<AsScene1002Ring>(this, false, 297, 189, _ssCeiling->getDrawRect().y, false);
- _asRing3 = insertSprite<AsScene1002Ring>(this, true, 370, 201, _ssCeiling->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_DOOR));
- _asRing4 = insertSprite<AsScene1002Ring>(this, false, 334, 191, _ssCeiling->getDrawRect().y, false);
- _asRing5 = insertSprite<AsScene1002Ring>(this, false, 425, 184, _ssCeiling->getDrawRect().y, false);
-
- _asDoor = insertSprite<AsScene1002Door>(tempClipRect);
- tempSprite = insertSprite<AsScene1002BoxingGloveHitEffect>();
- _asDoorSpy = insertSprite<AsScene1002DoorSpy>(tempClipRect, this, _asDoor, tempSprite);
- _ssPressButton = insertSprite<SsCommonPressButton>(this, 0x00412692, 0x140B60BE, 800, 0);
- _asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klaymen, false);
- addCollisionSprite(_asVenusFlyTrap);
-
- sendEntityMessage(_klaymen, 0x2007, _asVenusFlyTrap);
-
- _asOutsideDoorBackground = insertSprite<AsScene1002OutsideDoorBackground>();
-
- setRectList(0x004B43A0);
-
- loadSound(1, 0x60755842);
- loadSound(2, 0x616D5821);
-
-}
-
-Scene1002::~Scene1002() {
-}
-
-void Scene1002::update() {
- Scene::update();
- if (!_isKlaymenFloor && _klaymen->getY() > 230) {
- _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
- _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect());
- deleteSprite(&_ssLadderArchPart3);
- _klaymen->clearRepl();
- _isKlaymenFloor = true;
- _vm->_gameState.which = 1;
- }
-}
-
-uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0xE6EE60E1) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR))
- setMessageList(0x004B4428);
- else
- setMessageList(0x004B4448);
- messageResult = 1;
- } else if (param.asInteger() == 0x4A845A00)
- sendEntityMessage(_klaymen, 0x1014, _asRing1);
- else if (param.asInteger() == 0x43807801)
- sendEntityMessage(_klaymen, 0x1014, _asRing2);
- else if (param.asInteger() == 0x46C26A01) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
- setMessageList(0x004B44B8);
- } else {
- sendEntityMessage(_klaymen, 0x1014, _asRing3);
- if (_asVenusFlyTrap->getX() - 10 < 366 && _asVenusFlyTrap->getX() + 10 > 366) {
- setGlobalVar(V_FLYTRAP_RING_EATEN, 1);
- setMessageList(0x004B44A8);
- } else {
- setMessageList(0x004B44A0);
- }
- }
- messageResult = 1;
- } else if (param.asInteger() == 0x468C7B11)
- sendEntityMessage(_klaymen, 0x1014, _asRing4);
- else if (param.asInteger() == 0x42845B19)
- sendEntityMessage(_klaymen, 0x1014, _asRing5);
- else if (param.asInteger() == 0xC0A07458)
- sendEntityMessage(_klaymen, 0x1014, _ssPressButton);
- break;
- case 0x1024:
- sendMessage(_parentModule, 0x1024, param.asInteger());
- break;
- case 0x2000:
- if (_isClimbingLadder) {
- setMessageList2(0x004B43D0);
- } else {
- if (_klaymen->getY() > 420) {
- sendEntityMessage(_klaymen, 0x1014, _asVenusFlyTrap);
- setMessageList2(0x004B4480);
- } else if (_klaymen->getY() > 227) {
- setMessageList2(0x004B41E0);
- } else {
- setMessageList2(0x004B4148);
- }
- }
- break;
- case 0x2002:
- _messageList = NULL;
- break;
- case 0x2005:
- _isClimbingLadder = true;
- setRectList(0x004B4418);
- break;
- case 0x2006:
- _isClimbingLadder = false;
- setRectList(0x004B43A0);
- break;
- case 0x4806:
- if (sender == _asRing1) {
- setGlobalVar(V_RADIO_ENABLED, 0);
- playSound(0, 0x665198C0);
- } else if (sender == _asRing2) {
- setGlobalVar(V_RADIO_ENABLED, 0);
- playSound(0, 0xE2D389C0);
- } else if (sender == _asRing3) {
- setGlobalVar(V_RADIO_ENABLED, 0);
- playSound(1);
- sendMessage(_asDoor, 0x4808, 0);
- sendMessage(_asOutsideDoorBackground, 0x4808, 0);
- } else if (sender == _asRing4) {
- setGlobalVar(V_RADIO_ENABLED, 0);
- playSound(0, 0xE0558848);
- } else if (sender == _asRing5) {
- setGlobalVar(V_RADIO_ENABLED, 1);
- playSound(0, 0x44014282);
- }
- break;
- case 0x4807:
- if (sender == _asRing3) {
- playSound(2);
- sendMessage(_asDoor, 0x4809, 0);
- sendMessage(_asOutsideDoorBackground, 0x4809, 0);
- } else if (sender == _asVenusFlyTrap) {
- if (getGlobalVar(V_FLYTRAP_RING_DOOR)) {
- sendMessage(_asRing3, 0x4807, 0);
- }
- }
- break;
- case 0x480B:
- sendEntityMessage(_klaymen, 0x1014, _asDoorSpy);
- break;
- case 0x480F:
- setGlobalVar(V_RADIO_ENABLED, 0);
- playSound(1);
- sendMessage(_asDoor, 0x4808, 0);
- sendMessage(_asOutsideDoorBackground, 0x4808, 0);
- break;
- case 0x8000:
- setSpriteSurfacePriority(_ssCeiling, 995);
- setSpriteSurfacePriority(_ssLadderArch, 995);
- break;
- case 0x8001:
- setSpriteSurfacePriority(_ssCeiling, 1015);
- setSpriteSurfacePriority(_ssLadderArch, 1015);
- break;
- }
- return messageResult;
-}
-
-// StaticScene
-
-StaticScene::StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&StaticScene::handleMessage);
-
- setBackground(backgroundFileHash);
- setPalette(backgroundFileHash);
- insertPuzzleMouse(cursorFileHash, 20, 620);
-}
-
-uint32 StaticScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
- leaveScene(0);
- break;
- }
- return 0;
-}
-
-// Scene1004
-
-AsScene1004TrashCan::AsScene1004TrashCan(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100) {
-
- _x = 330;
- _y = 327;
- createSurface(800, 56, 50);
- setVisible(false);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1004TrashCan::handleMessage);
-}
-
-uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x225A8587)
- playSound(0, 0x109AFC4C);
- break;
- case 0x2002:
- startAnimation(0xEB312C11, 0, -1);
- setVisible(true);
- break;
- case 0x3002:
- stopAnimation();
- setVisible(false);
- break;
- }
- return 0;
-}
-
-Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _paletteAreaStatus(-1) {
-
- Sprite *tempSprite;
-
- SetUpdateHandler(&Scene1004::update);
- SetMessageHandler(&Scene1004::handleMessage);
-
- setBackground(0x50C03005);
-
- if (getGlobalVar(V_ENTRANCE_OPEN)) {
- setPalette(0xA30BA329);
- _palette->addBasePalette(0xA30BA329, 0, 256, 0);
- } else {
- setPalette(0x50C03005);
- _palette->addBasePalette(0x50C03005, 0, 256, 0);
- }
- addEntity(_palette);
-
- insertScreenMouse(0x03001504);
-
- if (which < 0) {
- // Restoring game
- setRectList(0x004B7C70);
- insertKlaymen<KmScene1004>(330, 327);
- setMessageList(0x004B7C18);
- } else if (which == 1) {
- // Klaymen returning from reading a note
- setRectList(0x004B7C70);
- insertKlaymen<KmScene1004>(330, 327);
- setMessageList(0x004B7C08);
- } else {
- // Klaymen coming down the ladder
- loadDataResource(0x01900A04);
- insertKlaymen<KmScene1004>(_dataResource.getPoint(0x80052A29).x, 27);
- setMessageList(0x004B7BF0);
- }
-
- updatePaletteArea();
-
- _asKlaymenLadderHands = insertSprite<AsScene1002KlaymenLadderHands>(_klaymen);
-
- insertStaticSprite(0x800034A0, 1100);
- insertStaticSprite(0x64402020, 1100);
- insertStaticSprite(0x3060222E, 1300);
- tempSprite = insertStaticSprite(0x0E002004, 1300);
-
- _klaymen->setClipRect(0, tempSprite->getDrawRect().y, 640, 480);
- _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect());
-
- _asTrashCan = insertSprite<AsScene1004TrashCan>();
-
-}
-
-void Scene1004::update() {
- Scene::update();
- updatePaletteArea();
-}
-
-uint32 Scene1004::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x926500A1) {
- setMessageList(0x004B7C20);
- messageResult = 1;
- }
- break;
- case 0x2000:
- loadDataResource(0x01900A04);
- break;
- case 0x2001:
- setRectList(0x004B7C70);
- break;
- case 0x2002:
- sendMessage(_asTrashCan, 0x2002, 0);
- break;
- }
- return messageResult;
-}
-
-void Scene1004::updatePaletteArea() {
- if (_klaymen->getY() < 150) {
- if (_paletteAreaStatus != 0) {
- _paletteAreaStatus = 0;
- _palette->addBasePalette(0x406B0D10, 0, 64, 0);
- _palette->startFadeToPalette(12);
- }
- } else {
- if (_paletteAreaStatus != 1) {
- _paletteAreaStatus = 1;
- _palette->addBasePalette(0x24332243, 0, 64, 0);
- _palette->startFadeToPalette(12);
- }
- }
-}
-
-// Scene1005
-
-Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&Scene1005::handleMessage);
-
- if (getGlobalVar(V_ENTRANCE_OPEN)) {
- setBackground(0x2800E011);
- setPalette(0x2800E011);
- insertStaticSprite(0x492D5AD7, 100);
- insertPuzzleMouse(0x0E015288, 20, 620);
- } else {
- setBackground(0x8870A546);
- setPalette(0x8870A546);
- insertStaticSprite(0x40D1E0A9, 100);
- insertStaticSprite(0x149C00A6, 100);
- insertPuzzleMouse(0x0A54288F, 20, 620);
- }
-
- drawTextToBackground();
-
-}
-
-uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
- leaveScene(0);
- break;
- }
- return 0;
-}
-
-void Scene1005::drawTextToBackground() {
- TextResource textResource(_vm);
- const char *textStart, *textEnd;
- int16 y = 36;
- uint32 textIndex = getTextIndex();
- FontSurface *fontSurface = FontSurface::createFontSurface(_vm, getGlobalVar(V_ENTRANCE_OPEN) ? 0x283CE401 : 0xC6604282);
- textResource.load(0x80283101);
- textStart = textResource.getString(textIndex, textEnd);
- while (textStart < textEnd) {
- fontSurface->drawString(_background->getSurface(), 188, y, (const byte*)textStart);
- y += 36;
- textStart += strlen(textStart) + 1;
- }
- delete fontSurface;
-}
-
-uint32 Scene1005::getTextIndex() {
- uint32 textIndex;
- textIndex = getTextIndex1();
- if (getGlobalVar(V_ENTRANCE_OPEN)) {
- textIndex = getTextIndex2();
- }
- if (getGlobalVar(V_TEXT_FLAG1) && getGlobalVar(V_TEXT_INDEX) == textIndex) {
- textIndex = getTextIndex3();
- } else {
- setGlobalVar(V_TEXT_FLAG1, 1);
- setGlobalVar(V_TEXT_INDEX, textIndex);
- }
- return textIndex;
-}
-
-uint32 Scene1005::getTextIndex1() {
- uint32 textIndex;
- if (getGlobalVar(V_WORLDS_JOINED)) {
- if (!getGlobalVar(V_DOOR_PASSED))
- textIndex = 18;
- else if (!getGlobalVar(V_ROBOT_TARGET))
- textIndex = 19;
- else if (getGlobalVar(V_ROBOT_HIT)) {
- if (!getGlobalVar(V_ENTRANCE_OPEN))
- textIndex = 23;
- else if (!getSubVar(VA_HAS_KEY, 0) && !getSubVar(VA_IS_KEY_INSERTED, 0))
- textIndex = 24;
- else if (!getGlobalVar(V_HAS_FINAL_KEY))
- textIndex = 26;
- else if (!getSubVar(VA_HAS_KEY, 1) && !getSubVar(VA_IS_KEY_INSERTED, 1))
- textIndex = 27;
- else if (!getGlobalVar(V_HAS_FINAL_KEY))
- textIndex = 28;
- else
- textIndex = 29;
- } else if (!getGlobalVar(V_FELL_DOWN_HOLE))
- textIndex = 20;
- else if (!getGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT))
- textIndex = 21;
- else
- textIndex = 22;
- } else if (getGlobalVar(V_BOLT_DOOR_UNLOCKED)) {
- if (!getGlobalVar(V_WALL_BROKEN))
- textIndex = 12;
- else if (!getGlobalVar(V_STAIRS_DOWN_ONCE))
- textIndex = 13;
- else if (!getGlobalVar(V_RADIO_ENABLED))
- textIndex = 50;
- else if (!getGlobalVar(V_UNUSED))
- textIndex = 14;
- else if (!getGlobalVar(V_BEEN_SHRINKING_ROOM))
- textIndex = 15;
- else if (!getGlobalVar(V_BEEN_STATUE_ROOM))
- textIndex = 16;
- else
- textIndex = 17;
- } else if (!getGlobalVar(V_FLYTRAP_RING_EATEN)) {
- textIndex = 0;
- } else if (getGlobalVar(V_CREATURE_EXPLODED)) {
- if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))
- textIndex = 4;
- else if (!getGlobalVar(V_HAS_TEST_TUBE))
- textIndex = 5;
- else if (!getSubVar(VA_LOCKS_DISABLED, 0x40119852))
- textIndex = 6;
- else if (!getGlobalVar(V_WATER_RUNNING))
- textIndex = 7;
- else if (!getGlobalVar(V_NOTES_PUZZLE_SOLVED))
- textIndex = 8;
- else if (!getSubVar(VA_LOCKS_DISABLED, 0x304008D2))
- textIndex = 9;
- else if (!getSubVar(VA_LOCKS_DISABLED, 0x01180951))
- textIndex = 10;
- else
- textIndex = 11;
- } else if (!getGlobalVar(V_CREATURE_ANGRY)) {
- textIndex = 1;
- } else if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
- textIndex = 3;
- } else {
- textIndex = 2;
- }
- return textIndex;
-}
-
-uint32 Scene1005::getTextIndex2() {
- uint32 textIndex = getGlobalVar(V_TEXT_COUNTING_INDEX1);
- if (textIndex + 1 >= 10) {
- setGlobalVar(V_TEXT_COUNTING_INDEX1, 0);
- textIndex = 0;
- } else {
- setGlobalVar(V_TEXT_COUNTING_INDEX1, textIndex + 1);
- }
- return textIndex + 40;
-}
-
-uint32 Scene1005::getTextIndex3() {
- uint32 textIndex = getGlobalVar(V_TEXT_COUNTING_INDEX2);
- if (textIndex + 1 >= 10) {
- setGlobalVar(V_TEXT_COUNTING_INDEX2, 0);
- textIndex = 0;
- } else {
- setGlobalVar(V_TEXT_COUNTING_INDEX2, textIndex + 1);
- }
- return textIndex + 30;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h
deleted file mode 100644
index 897d026..0000000
--- a/engines/neverhood/module1000.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_MODULE1000_H
-#define NEVERHOOD_MODULE1000_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/module.h"
-#include "neverhood/scene.h"
-
-namespace Neverhood {
-
-// Module1000
-
-class Module1000 : public Module {
-public:
- Module1000(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Module1000();
-protected:
- int _sceneNum;
- uint32 _musicFileHash;
- void createScene(int sceneNum, int which);
- void updateScene();
-};
-
-// Scene1001
-
-class AsScene1001Door : public AnimatedSprite {
-public:
- AsScene1001Door(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void hammerHitsDoor();
- void stShowIdleDoor();
- void stBustedDoorMove();
- void stBustedDoorGone();
-};
-
-class AsScene1001Hammer : public AnimatedSprite {
-public:
- AsScene1001Hammer(NeverhoodEngine *vm, Sprite *asDoor);
-protected:
- Sprite *_asDoor;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1001Window : public AnimatedSprite {
-public:
- AsScene1001Window(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1001Lever : public AnimatedSprite {
-public:
- AsScene1001Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int deltaXType);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class SsCommonButtonSprite : public StaticSprite {
-public:
- SsCommonButtonSprite(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, int surfacePriority, uint32 soundFileHash);
-protected:
- Scene *_parentScene;
- uint32 _soundFileHash;
- int16 _countdown;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1001 : public Scene {
-public:
- Scene1001(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Scene1001();
-protected:
- Sprite *_asHammer;
- Sprite *_asDoor;
- Sprite *_asWindow;
- Sprite *_asLever;
- Sprite *_ssButton;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// TODO: Move this to some common file since it's used several times
-
-class StaticScene : public Scene {
-public:
- StaticScene(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 cursorFileHash);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1002
-
-class AsScene1002Ring : public AnimatedSprite {
-public:
- AsScene1002Ring(NeverhoodEngine *vm, Scene *parentScene, bool isSpecial, int16 x, int16 y, int16 clipY1, bool isRingLow);
-protected:
- Scene *_parentScene;
- bool _isSpecial;
- void update();
- uint32 hmRingIdle(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmRingPulled1(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmRingPulled2(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmRingHangingLow(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmRingReleased(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1002Door : public StaticSprite {
-public:
- AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect);
-protected:
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suOpenDoor();
- void suCloseDoor();
-};
-
-class AsScene1002BoxingGloveHitEffect : public AnimatedSprite {
-public:
- AsScene1002BoxingGloveHitEffect(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1002DoorSpy : public AnimatedSprite {
-public:
- AsScene1002DoorSpy(NeverhoodEngine *vm, NRect &clipRect, Scene *parentScene, Sprite *asDoor, Sprite *asScene1002BoxingGloveHitEffect);
-protected:
- Scene *_parentScene;
- Sprite *_asDoor;
- Sprite *_asBoxingGloveHitEffect;
- NRect _clipRect;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmDoorSpyAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
- void suDoorSpy();
- void stDoorSpyIdle();
- void stDoorSpyBoxingGlove();
-};
-
-class SsCommonPressButton : public StaticSprite {
-public:
- SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash);
- void setFileHashes(uint32 fileHash1, uint32 fileHash2);
-protected:
- Scene *_parentScene;
- uint32 _soundFileHash;
- uint32 _fileHashes[2];
- int _status;
- int _countdown;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1002VenusFlyTrap : public AnimatedSprite {
-public:
- AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, bool isSecond);
-protected:
- Scene *_parentScene;
- Sprite *_klaymen;
- int _countdown;
- bool _isSecond;
- void update();
- void upIdle();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmAnimationSimple(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmAnimationExt(int messageNum, const MessageParam ¶m, Entity *sender);
- void stWalkBack();
- void stWalk();
- void stRelease();
- void stGrabRing();
- void stRingGrabbed();
- void stKlaymenInside();
- void stIdle();
- void stKlaymenInsideMoving();
- void stSpitOutKlaymen();
- void swallowKlaymen();
-};
-
-class AsScene1002OutsideDoorBackground : public AnimatedSprite {
-public:
- AsScene1002OutsideDoorBackground(NeverhoodEngine *vm);
-protected:
- int _countdown;
- bool _isDoorClosed;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
- void stOpenDoor();
- void stCloseDoor();
- void stDoorClosed();
-};
-
-class AsScene1002KlaymenLadderHands : public AnimatedSprite {
-public:
- AsScene1002KlaymenLadderHands(NeverhoodEngine *vm, Klaymen *klaymen);
-protected:
- Klaymen *_klaymen;
- void update();
-};
-
-class AsScene1002KlaymenPeekHand : public AnimatedSprite {
-public:
- AsScene1002KlaymenPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klaymen *klaymen);
-protected:
- Scene *_parentScene;
- Klaymen *_klaymen;
- bool _isClipRectSaved;
- NRect _savedClipRect;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1002 : public Scene {
-public:
- Scene1002(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Scene1002();
-protected:
- Sprite *_asRing1;
- Sprite *_asRing2;
- Sprite *_asRing3;
- Sprite *_asRing4;
- Sprite *_asRing5;
- Sprite *_asDoor;
- Sprite *_asDoorSpy;
- Sprite *_asVenusFlyTrap;
- Sprite *_ssLadderArch;
- Sprite *_ssLadderArchPart1;
- Sprite *_ssLadderArchPart2;
- Sprite *_ssLadderArchPart3;
- Sprite *_ssCeiling;
- Sprite *_asKlaymenLadderHands;
- Sprite *_asKlaymenPeekHand;
- Sprite *_asOutsideDoorBackground;
- Sprite *_ssPressButton;
- bool _isKlaymenFloor;
- bool _isClimbingLadder;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1004
-
-class AsScene1004TrashCan : public AnimatedSprite {
-public:
- AsScene1004TrashCan(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1004 : public Scene {
-public:
- Scene1004(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_asKlaymenLadderHands;
- Sprite *_asTrashCan;
- int _paletteAreaStatus;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void updatePaletteArea();
-};
-
-// Scene1005
-
-class Scene1005 : public Scene {
-public:
- Scene1005(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void drawTextToBackground();
- uint32 getTextIndex();
- uint32 getTextIndex1();
- uint32 getTextIndex2();
- uint32 getTextIndex3();
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_MODULE1000_H */
diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp
deleted file mode 100644
index 067018d..0000000
--- a/engines/neverhood/module1100.cpp
+++ /dev/null
@@ -1,707 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1100.h"
-#include "neverhood/gamemodule.h"
-#include "neverhood/navigationscene.h"
-
-namespace Neverhood {
-
-static const uint32 kModule1100SoundList[] = {
- 0x90805C50,
- 0xB288D450,
- 0x98C05840,
- 0x98A01500,
- 0xB4005E50,
- 0x92025040,
- 0x90035066,
- 0x74E01054,
- 0
-};
-
-Module1100::Module1100(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- if (which < 0) {
- createScene(_vm->gameState().sceneNum, -1);
- } else if (which == 1) {
- createScene(8, 1);
- } else {
- createScene(8, 3);
- }
-
- _vm->_soundMan->addSoundList(0x0002C818, kModule1100SoundList);
- _vm->_soundMan->setSoundListParams(kModule1100SoundList, true, 50, 600, 20, 250);
- _vm->_soundMan->setSoundParams(0x74E01054, false, 100, 200, 10, 20);
- _vm->_soundMan->setSoundVolume(0x74E01054, 60);
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
-
-}
-
-Module1100::~Module1100() {
- _vm->_soundMan->deleteGroup(0x0002C818);
-}
-
-void Module1100::createScene(int sceneNum, int which) {
- static const uint32 kSmackerFileHashList06[] = {0x10880805, 0x1088081D, 0};
- static const uint32 kSmackerFileHashList07[] = {0x00290321, 0x01881000, 0};
- debug("Module1100::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 0:
- _vm->gameState().sceneNum = 0;
- _countdown = 65;
- createNavigationScene(0x004B8430, which);
- break;
- case 1:
- _vm->gameState().sceneNum = 1;
- _countdown = 50;
- createNavigationScene(0x004B8460, which);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- if (getGlobalVar(V_ROBOT_TARGET)) {
- createNavigationScene(0x004B84F0, which);
- } else {
- createNavigationScene(0x004B8490, which);
- }
- break;
- case 3:
- _vm->gameState().sceneNum = 3;
- if (getGlobalVar(V_ROBOT_TARGET)) {
- createNavigationScene(0x004B8580, which);
- } else {
- createNavigationScene(0x004B8550, which);
- }
- break;
- case 4:
- _vm->gameState().sceneNum = 4;
- _childObject = new Scene1105(_vm, this);
- break;
- case 5:
- _vm->gameState().sceneNum = 5;
- if (getGlobalVar(V_ROBOT_TARGET))
- createSmackerScene(0x04180001, true, false, false);
- else
- createSmackerScene(0x04180007, true, false, false);
- break;
- case 6:
- _vm->gameState().sceneNum = 6;
- _vm->_soundMan->deleteSoundGroup(0x0002C818);
- createSmackerScene(kSmackerFileHashList06, true, true, false);
- break;
- case 7:
- _vm->gameState().sceneNum = 7;
- _vm->_soundMan->setSoundParams(0x74E01054, false, 0, 0, 0, 0);
- createSmackerScene(kSmackerFileHashList07, true, true, false);
- break;
- case 8:
- _vm->gameState().sceneNum = 8;
- _childObject = new Scene1109(_vm, this, which);
- break;
- case 1002:
- _vm->gameState().sceneNum = 2;
- _countdown = 40;
- _vm->_soundMan->setTwoSoundsPlayFlag(true);
- createSmackerScene(0x00012211, true, true, false);
- break;
- }
- SetUpdateHandler(&Module1100::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1100::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 0:
- _countdown = 0;
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
- _vm->_soundMan->setSoundVolume(0x48498E46, 65);
- _vm->_soundMan->setSoundVolume(0x50399F64, 65);
- if (_moduleResult == 0)
- createScene(1, 0);
- else if (_moduleResult == 1)
- createScene(8, 0);
- break;
- case 1:
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
- if (getGlobalVar(V_ROBOT_HIT)) {
- if (_moduleResult == 0)
- createScene(6, -1);
- else if (_moduleResult == 1)
- createScene(0, 1);
- } else {
- if (_moduleResult == 0)
- createScene(2, 0);
- else if (_moduleResult == 1)
- createScene(0, 1);
- }
- break;
- case 2:
- _vm->_soundMan->setSoundParams(0x74E01054, false, 0, 0, 0, 0);
- if (_navigationAreaType == 3)
- createScene(7, -1);
- else if (_moduleResult == 1)
- createScene(3, 0);
- else if (_moduleResult == 2)
- createScene(1002, -1);
- break;
- case 3:
- if (_moduleResult == 0)
- createScene(4, 0);
- else if (_moduleResult == 1)
- createScene(2, 3);
- break;
- case 4:
- if (_moduleResult == 0)
- createScene(3, 0);
- else if (_moduleResult == 1)
- createScene(5, -1);
- break;
- case 5:
- _vm->_soundMan->setTwoSoundsPlayFlag(false);
- if (getGlobalVar(V_ROBOT_TARGET))
- createScene(3, 0);
- else
- createScene(4, 0);
- break;
- case 6:
- _vm->_soundMan->setTwoSoundsPlayFlag(false);
- leaveModule(1);
- break;
- case 7:
- _vm->_soundMan->setTwoSoundsPlayFlag(false);
- createScene(2, 2);
- break;
- case 8:
- if (_moduleResult == 0)
- createScene(0, 0);
- else if (_moduleResult == 1)
- leaveModule(0);
- break;
- case 1002:
- _vm->_soundMan->setTwoSoundsPlayFlag(false);
- _countdown = 0;
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
- createScene(1, 1);
- break;
- }
- } else {
- switch (_sceneNum) {
- case 0:
- if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0)) {
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
- _vm->_soundMan->setSoundVolume(0x48498E46, 65);
- _vm->_soundMan->setSoundVolume(0x50399F64, 65);
- }
- break;
- case 1:
- if (navigationScene()->isWalkingForward() && _countdown != 0 && (--_countdown == 0))
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x41861371, 0x43A2507F, 0);
- break;
- case 2:
- _vm->_soundMan->setSoundParams(0x74E01054, !navigationScene()->isWalkingForward(), 0, 0, 0, 0);
- break;
- case 5:
- case 6:
- case 7:
- case 1002:
- if (_countdown != 0 && (--_countdown == 0)) {
- _vm->_soundMan->playTwoSounds(0x0002C818, 0x48498E46, 0x50399F64, 0);
- _vm->_soundMan->setSoundVolume(0x48498E46, 65);
- _vm->_soundMan->setSoundVolume(0x50399F64, 65);
- }
- break;
- }
- }
-}
-
-static const uint32 kScene1105FileHashes[] = {
- 0x00028006,
- 0x0100A425,
- 0x63090415,
- 0x082100C4,
- 0x0068C607,
- 0x00018344,
- 0x442090E4,
- 0x0400E004,
- 0x5020A054,
- 0xB14A891E
-};
-
-static const uint32 kScene1105BackgroundFileHashes[] = {
- 0x20018662,
- 0x20014202,
- 0x20012202,
- 0x20010002 // CHECKME: This used ??
-};
-
-static const uint32 kSsScene1105SymbolDieFileHashes[] = {
- 0,
- 0x90898414,
- 0x91098414,
- 0x92098414,
- 0x94098414,
- 0x98098414,
- 0x80098414,
- 0xB0098414,
- 0xD0098414,
- 0x10098414
-};
-
-SsScene1105Button::SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &collisionBounds)
- : StaticSprite(vm, fileHash, 200), _parentScene(parentScene), _countdown(0) {
-
- _collisionBounds = collisionBounds;
- SetMessageHandler(&SsScene1105Button::handleMessage);
- SetUpdateHandler(&SsScene1105Button::update);
- setVisible(false);
-}
-
-void SsScene1105Button::update() {
- if (_countdown != 0 && (--_countdown == 0)) {
- sendMessage(_parentScene, 0x4807, 0);
- setVisible(false);
- }
-}
-
-uint32 SsScene1105Button::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- if (_countdown == 0) {
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- }
- break;
- case 0x480B:
- _countdown = 8;
- setVisible(true);
- playSound(0, 0x44141000);
- break;
- }
- return messageResult;
-}
-
-SsScene1105Symbol::SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16 x, int16 y)
- : StaticSprite(vm, 0) {
-
- loadSprite(fileHash, kSLFCenteredDrawOffset | kSLFSetPosition, 200, x, y);
-}
-
-void SsScene1105Symbol::hide() {
- setVisible(false);
- _needRefresh = true;
- updatePosition();
-}
-
-SsScene1105SymbolDie::SsScene1105SymbolDie(NeverhoodEngine *vm, uint dieIndex, int16 x, int16 y)
- : StaticSprite(vm, 1100), _dieIndex(dieIndex) {
-
- _x = x;
- _y = y;
- createSurface(200, 50, 50);
- loadSymbolSprite();
- SetMessageHandler(&SsScene1105SymbolDie::handleMessage);
-}
-
-uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2000:
- loadSymbolSprite();
- break;
- }
- return messageResult;
-}
-
-void SsScene1105SymbolDie::loadSymbolSprite() {
- loadSprite(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _dieIndex)], kSLFCenteredDrawOffset);
-}
-
-void SsScene1105SymbolDie::hide() {
- setVisible(false);
- _needRefresh = true;
- updatePosition();
-}
-
-AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
-
- createSurface(100, 556, 328);
- _x = 320;
- _y = 240;
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1105TeddyBear::handleMessage);
- startAnimation(0x65084002, 0, -1);
- _newStickFrameIndex = 0;
- setVisible(false);
- _needRefresh = true;
- updatePosition();
- loadSound(0, 0xCE840261);
- loadSound(1, 0xCCA41A62);
-}
-
-uint32 AsScene1105TeddyBear::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2002:
- if (getGlobalVar(V_ROBOT_TARGET)) {
- startAnimation(0x6B0C0432, 0, -1);
- playSound(0);
- } else {
- startAnimation(0x65084002, 0, -1);
- playSound(1);
- }
- break;
- case 0x3002:
- sendMessage(_parentScene, 0x2003, 0);
- stopAnimation();
- break;
- }
- return messageResult;
-}
-
-void AsScene1105TeddyBear::show() {
- setVisible(true);
- _needRefresh = true;
- updatePosition();
-}
-
-void AsScene1105TeddyBear::hide() {
- setVisible(false);
- _needRefresh = true;
- updatePosition();
-}
-
-SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene)
- : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _isClicked(false) {
-
- loadSprite(0x8228A46C, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400);
- setVisible(false);
- loadSound(0, 0x44045140);
- SetUpdateHandler(&SsScene1105OpenButton::update);
- SetMessageHandler(&SsScene1105OpenButton::handleMessage);
-}
-
-void SsScene1105OpenButton::update() {
- updatePosition();
- if (_countdown != 0 && (--_countdown == 0)) {
- setVisible(false);
- sendMessage(_parentScene, 0x2001, 0);
- }
-}
-
-uint32 SsScene1105OpenButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- if (_countdown == 0 && !_isClicked) {
- playSound(0);
- setVisible(true);
- _isClicked = true;
- _countdown = 4;
- }
- messageResult = 1;
- break;
- }
- return messageResult;
-}
-
-Scene1105::Scene1105(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _countdown(0), _isPanelOpen(false), _isActionButtonClicked(false), _doMoveTeddy(false),
- _isClosePanelDone(false), _leaveResult(0), _backgroundIndex(0) {
-
- Sprite *ssOpenButton;
-
- _vm->gameModule()->initMemoryPuzzle();
-
- SetUpdateHandler(&Scene1105::update);
- SetMessageHandler(&Scene1105::handleMessage);
-
- setBackground(0x20010002);
- setPalette(0x20010002);
-
- _asTeddyBear = insertSprite<AsScene1105TeddyBear>(this);
- ssOpenButton = insertSprite<SsScene1105OpenButton>(this);
- addCollisionSprite(ssOpenButton);
- insertPuzzleMouse(0x10006208, 20, 620);
-
- loadSound(0, 0x48442057);
- loadSound(1, 0xC025014F);
- loadSound(2, 0x68E25540);
-
-}
-
-uint32 Scene1105::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- if (!_isActionButtonClicked && _backgroundIndex == 0) {
- if (_isPanelOpen) {
- _isPanelOpen = false;
- _backgroundIndex = 15;
- SetUpdateHandler(&Scene1105::upClosePanel);
- } else
- _isPanelOpen = true;
- _leaveResult = 0;
- }
- }
- break;
- case 0x2001:
- showMouse(false);
- _backgroundIndex = 24;
- SetUpdateHandler(&Scene1105::upOpenPanel);
- break;
- case 0x2003:
- _backgroundIndex = 24;
- _leaveResult = 1;
- SetUpdateHandler(&Scene1105::upClosePanel);
- break;
- case 0x4807:
- if (sender == _ssActionButton) {
- if (getSubVar(VA_GOOD_DICE_NUMBERS, 0) == getSubVar(VA_CURR_DICE_NUMBERS, 0) &&
- getSubVar(VA_GOOD_DICE_NUMBERS, 1) == getSubVar(VA_CURR_DICE_NUMBERS, 1) &&
- getSubVar(VA_GOOD_DICE_NUMBERS, 2) == getSubVar(VA_CURR_DICE_NUMBERS, 2)) {
- setGlobalVar(V_ROBOT_TARGET, 1);
- playSound(2);
- _doMoveTeddy = true;
- } else {
- sendMessage(_asTeddyBear, 0x2002, 0);
- }
- showMouse(false);
- _isActionButtonClicked = true;
- }
- break;
- case 0x4826:
- if (_isPanelOpen) {
- if (sender == _ssActionButton) {
- sendMessage(_ssActionButton, 0x480B, 0);
- _isPanelOpen = false;
- } else if (!getGlobalVar(V_ROBOT_TARGET)) {
- if (sender == _ssSymbol1UpButton) {
- if (getSubVar(VA_CURR_DICE_NUMBERS, 0) < 9) {
- incSubVar(VA_CURR_DICE_NUMBERS, 0, +1);
- sendMessage(_ssSymbol1UpButton, 0x480B, 0);
- sendMessage(_ssSymbolDice[0], 0x2000, 0);
- }
- } else if (sender == _ssSymbol1DownButton) {
- if (getSubVar(VA_CURR_DICE_NUMBERS, 0) > 1) {
- incSubVar(VA_CURR_DICE_NUMBERS, 0, -1);
- sendMessage(_ssSymbol1DownButton, 0x480B, 0);
- sendMessage(_ssSymbolDice[0], 0x2000, 0);
- }
- } else if (sender == _ssSymbol2UpButton) {
- if (getSubVar(VA_CURR_DICE_NUMBERS, 1) < 9) {
- incSubVar(VA_CURR_DICE_NUMBERS, 1, +1);
- sendMessage(_ssSymbol2UpButton, 0x480B, 0);
- sendMessage(_ssSymbolDice[1], 0x2000, 0);
- }
- } else if (sender == _ssSymbol2DownButton) {
- if (getSubVar(VA_CURR_DICE_NUMBERS, 1) > 1) {
- incSubVar(VA_CURR_DICE_NUMBERS, 1, -1);
- sendMessage(_ssSymbol2DownButton, 0x480B, 0);
- sendMessage(_ssSymbolDice[1], 0x2000, 0);
- }
- } else if (sender == _ssSymbol3UpButton) {
- if (getSubVar(VA_CURR_DICE_NUMBERS, 2) < 9) {
- incSubVar(VA_CURR_DICE_NUMBERS, 2, +1);
- sendMessage(_ssSymbol3UpButton, 0x480B, 0);
- sendMessage(_ssSymbolDice[2], 0x2000, 0);
- }
- } else if (sender == _ssSymbol3DownButton) {
- if (getSubVar(VA_CURR_DICE_NUMBERS, 2) > 1) {
- incSubVar(VA_CURR_DICE_NUMBERS, 2, -1);
- sendMessage(_ssSymbol3DownButton, 0x480B, 0);
- sendMessage(_ssSymbolDice[2], 0x2000, 0);
- }
- }
- }
- }
- break;
- }
- return messageResult;
-}
-
-void Scene1105::createObjects() {
- _ssSymbols[0] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(VA_DICE_MEMORY_SYMBOLS, 0)], 161, 304);
- _ssSymbols[1] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(VA_DICE_MEMORY_SYMBOLS, 1)], 294, 304);
- _ssSymbols[2] = insertSprite<SsScene1105Symbol>(kScene1105FileHashes[getSubVar(VA_DICE_MEMORY_SYMBOLS, 2)], 440, 304);
-
- _ssSymbolDice[0] = insertSprite<SsScene1105SymbolDie>(0, 206, 304);
- _ssSymbolDice[1] = insertSprite<SsScene1105SymbolDie>(1, 339, 304);
- _ssSymbolDice[2] = insertSprite<SsScene1105SymbolDie>(2, 485, 304);
-
- _ssSymbol1UpButton = insertSprite<SsScene1105Button>(this, 0x08002860, NRect(146, 362, 192, 403));
- addCollisionSprite(_ssSymbol1UpButton);
- _ssSymbol1DownButton = insertSprite<SsScene1105Button>(this, 0x42012460, NRect(147, 404, 191, 442));
- addCollisionSprite(_ssSymbol1DownButton);
- _ssSymbol2UpButton = insertSprite<SsScene1105Button>(this, 0x100030A0, NRect(308, 361, 355, 402));
- addCollisionSprite(_ssSymbol2UpButton);
- _ssSymbol2DownButton = insertSprite<SsScene1105Button>(this, 0x840228A0, NRect(306, 406, 352, 445));
- addCollisionSprite(_ssSymbol2DownButton);
- _ssSymbol3UpButton = insertSprite<SsScene1105Button>(this, 0x20000120, NRect(476, 358, 509, 394));
- addCollisionSprite(_ssSymbol3UpButton);
- _ssSymbol3DownButton = insertSprite<SsScene1105Button>(this, 0x08043121, NRect(463, 401, 508, 438));
- addCollisionSprite(_ssSymbol3DownButton);
- _ssActionButton = insertSprite<SsScene1105Button>(this, 0x8248AD35, NRect(280, 170, 354, 245));
- addCollisionSprite(_ssActionButton);
-
- _isPanelOpen = true;
-
- _asTeddyBear->show();
-
- insertPuzzleMouse(0x18666208, 20, 620);
-
-}
-
-void Scene1105::upOpenPanel() {
- Scene::update();
- if (_backgroundIndex != 0) {
- _backgroundIndex--;
- if (_backgroundIndex < 6 && _backgroundIndex % 2 == 0) {
- uint32 backgroundFileHash = kScene1105BackgroundFileHashes[_backgroundIndex / 2];
- changeBackground(backgroundFileHash);
- _palette->addPalette(backgroundFileHash, 0, 256, 0);
- }
- if (_backgroundIndex == 10)
- playSound(0);
- if (_backgroundIndex == 0) {
- SetUpdateHandler(&Scene1105::update);
- _countdown = 2;
- }
- }
-}
-
-void Scene1105::upClosePanel() {
- Scene::update();
- if (_backgroundIndex != 0) {
- _backgroundIndex--;
- if (_backgroundIndex == 14) {
- showMouse(false);
- _ssSymbols[0]->hide();
- _ssSymbols[1]->hide();
- _ssSymbols[2]->hide();
- _ssSymbolDice[0]->hide();
- _ssSymbolDice[1]->hide();
- _ssSymbolDice[2]->hide();
- }
- if (_backgroundIndex < 6 && _backgroundIndex % 2 == 0) {
- uint32 backgroundFileHash = kScene1105BackgroundFileHashes[3 - _backgroundIndex / 2]; // CHECKME
- if (_backgroundIndex == 4) {
- playSound(1);
- _asTeddyBear->hide();
- }
- changeBackground(backgroundFileHash);
- _palette->addPalette(backgroundFileHash, 0, 256, 0);
- }
- if (_backgroundIndex == 0) {
- SetUpdateHandler(&Scene1105::update);
- _isClosePanelDone = true;
- }
- }
-}
-
-void Scene1105::update() {
-
- // DEBUG: Show the correct code
- debug("(%d, %d) (%d, %d) (%d, %d)",
- getSubVar(VA_GOOD_DICE_NUMBERS, 0), getSubVar(VA_CURR_DICE_NUMBERS, 0),
- getSubVar(VA_GOOD_DICE_NUMBERS, 1), getSubVar(VA_CURR_DICE_NUMBERS, 1),
- getSubVar(VA_GOOD_DICE_NUMBERS, 2), getSubVar(VA_CURR_DICE_NUMBERS, 2));
-
- Scene::update();
- if (_countdown != 0 && (--_countdown == 0))
- createObjects();
- if (_isClosePanelDone && !isSoundPlaying(1))
- leaveScene(_leaveResult);
- if (_doMoveTeddy && !isSoundPlaying(2)) {
- sendMessage(_asTeddyBear, 0x2002, 0);
- _doMoveTeddy = false;
- }
-}
-
-Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&Scene1109::handleMessage);
-
- setBackground(0x8449E02F);
- setPalette(0x8449E02F);
- insertScreenMouse(0x9E02B84C);
-
- _sprite1 = insertStaticSprite(0x600CEF01, 1100);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1109>(140, 436);
- setMessageList(0x004B6260);
- sendMessage(this, 0x2000, 0);
- } else if (which == 1) {
- // Klaymen teleporting in
- insertKlaymen<KmScene1109>(450, 436);
- sendMessage(_klaymen, 0x2000, 1);
- setMessageList(0x004B6268, false);
- sendMessage(this, 0x2000, 1);
- } else if (which == 2) {
- // Klaymen teleporting out
- insertKlaymen<KmScene1109>(450, 436);
- sendMessage(_klaymen, 0x2000, 1);
- setMessageList(0x004B6318, false);
- sendMessage(this, 0x2000, 1);
- } else if (which == 3) {
- // Klaymen returning from teleporter console
- insertKlaymen<KmScene1109>(450, 436);
- sendMessage(_klaymen, 0x2000, 1);
- setMessageList(0x004B6278, false);
- sendMessage(this, 0x2000, 1);
- } else {
- // Klaymen entering from the left
- insertKlaymen<KmScene1109>(0, 436);
- setMessageList(0x004B6258);
- sendMessage(this, 0x2000, 0);
- }
-
- _klaymen->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480);
-
-}
-
-uint32 Scene1109::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2000:
- if (param.asInteger()) {
- setRectList(0x004B63A8);
- _klaymen->setKlaymenIdleTable3();
- } else {
- setRectList(0x004B6398);
- _klaymen->setKlaymenIdleTable1();
- }
- break;
- }
- return 0;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1100.h b/engines/neverhood/module1100.h
deleted file mode 100644
index e3fb7cb..0000000
--- a/engines/neverhood/module1100.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_MODULE1100_H
-#define NEVERHOOD_MODULE1100_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/module.h"
-#include "neverhood/scene.h"
-
-namespace Neverhood {
-
-// Module1100
-
-class Module1100 : public Module {
-public:
- Module1100(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Module1100();
-protected:
- int _sceneNum;
- int _countdown;
- void createScene(int sceneNum, int which);
- void updateScene();
-};
-
-class SsScene1105Button : public StaticSprite {
-public:
- SsScene1105Button(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash, NRect &collisionBounds);
-protected:
- Scene *_parentScene;
- int _countdown;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class SsScene1105Symbol : public StaticSprite {
-public:
- SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16 x, int16 y);
- void hide();
-};
-
-class SsScene1105SymbolDie : public StaticSprite {
-public:
- SsScene1105SymbolDie(NeverhoodEngine *vm, uint dieIndex, int16 x, int16 y);
- void hide();
-protected:
- uint _dieIndex;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void loadSymbolSprite();
-};
-
-class AsScene1105TeddyBear : public AnimatedSprite {
-public:
- AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene);
- void show();
- void hide();
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class SsScene1105OpenButton : public StaticSprite {
-public:
- SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- int _countdown;
- bool _isClicked;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1105 : public Scene {
-public:
- Scene1105(NeverhoodEngine *vm, Module *parentModule);
-protected:
- int _countdown;
- int _backgroundIndex;
- bool _isPanelOpen;
- bool _isActionButtonClicked;
- bool _doMoveTeddy;
- bool _isClosePanelDone;
- int _leaveResult;
- AsScene1105TeddyBear *_asTeddyBear;
- SsScene1105Symbol *_ssSymbols[3];
- SsScene1105SymbolDie *_ssSymbolDice[3];
- Sprite *_ssSymbol1UpButton;
- Sprite *_ssSymbol1DownButton;
- Sprite *_ssSymbol2UpButton;
- Sprite *_ssSymbol2DownButton;
- Sprite *_ssSymbol3UpButton;
- Sprite *_ssSymbol3DownButton;
- Sprite *_ssActionButton;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void createObjects();
- void upOpenPanel();
- void upClosePanel();
- void update();
-};
-
-class Scene1109 : public Scene {
-public:
- Scene1109(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_sprite1;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_MODULE1100_H */
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
deleted file mode 100644
index 1536114..0000000
--- a/engines/neverhood/module1200.cpp
+++ /dev/null
@@ -1,1102 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1200.h"
-
-namespace Neverhood {
-
-Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- SetMessageHandler(&Module1200::handleMessage);
-
- if (which < 0)
- createScene(_vm->gameState().sceneNum, -1);
- else if (which == 1)
- createScene(0, 2);
- else
- createScene(0, 0);
-
- _vm->_soundMan->addMusic(0x00478311, 0x62222CAE);
- _vm->_soundMan->startMusic(0x62222CAE, 0, 0);
-}
-
-Module1200::~Module1200() {
- _vm->_soundMan->deleteMusicGroup(0x00478311);
-}
-
-void Module1200::createScene(int sceneNum, int which) {
- debug("Module1200::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 0:
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene1201(_vm, this, which);
- break;
- case 1:
- _vm->gameState().sceneNum = 1;
- _childObject = new Scene1202(_vm, this);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- _vm->_soundMan->stopMusic(0x62222CAE, 0, 0);
- createSmackerScene(0x31890001, true, true, false);
- setGlobalVar(V_SEEN_CREATURE_EXPLODE_VID, 1);
- break;
- }
- SetUpdateHandler(&Module1200::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1200::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 0:
- if (_moduleResult == 1)
- createScene(1, 0);
- else if (_moduleResult == 2) {
- if (getGlobalVar(V_CREATURE_EXPLODED) && !getGlobalVar(V_SEEN_CREATURE_EXPLODE_VID))
- createScene(2, -1);
- else
- leaveModule(1);
- } else
- leaveModule(0);
- break;
- case 1:
- createScene(0, 1);
- break;
- case 2:
- _vm->_soundMan->startMusic(0x62222CAE, 0, 0);
- createScene(0, 3);
- break;
- }
- }
-}
-
-// Scene1201
-
-static const uint32 kScene1201InitArray[] = {
- 1, 0, 2, 4, 5, 3, 6, 7, 8, 10, 9, 11, 13, 14, 12, 16, 17, 15
-};
-
-static const NPoint kScene1201PointArray[] = {
- {218, 193}, {410, 225}, {368, 277},
- {194, 227}, {366, 174}, {458, 224},
- {242, 228}, {512, 228}, {458, 277},
- {217, 233}, {458, 173}, {410, 276},
- {203, 280}, {371, 226}, {508, 279},
- {230, 273}, {410, 171}, {493, 174}
-};
-
-static const uint32 kScene1201TntFileHashList1[] = {
- 0x2098212D, 0x1600437E, 0x1600437E,
- 0x00A840E3, 0x1A1830F6, 0x1A1830F6,
- 0x00212062, 0x384010B6, 0x384010B6,
- 0x07A01080, 0xD80C2837, 0xD80C2837,
- 0x03A22092, 0xD8802CB6, 0xD8802CB6,
- 0x03A93831, 0xDA460476, 0xDA460476
-};
-
-static const uint32 kScene1201TntFileHashList2[] = {
- 0x3040C676, 0x10914448, 0x10914448,
- 0x3448A066, 0x1288C049, 0x1288C049,
- 0x78C0E026, 0x3098D05A, 0x3098D05A,
- 0x304890E6, 0x1284E048, 0x1284E048,
- 0xB140A1E6, 0x5088A068, 0x5088A068,
- 0x74C4C866, 0x3192C059, 0x3192C059
-};
-
-SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2)
- : StaticSprite(vm, 900) {
-
- int16 x = kScene1201PointArray[pointIndex].x;
- int16 y = kScene1201PointArray[pointIndex].y;
- if (x < 300)
- loadSprite(kScene1201TntFileHashList1[elemIndex], kSLFDefDrawOffset | kSLFDefPosition, 50);
- else
- loadSprite(kScene1201TntFileHashList2[elemIndex], kSLFCenteredDrawOffset | kSLFSetPosition, 50, x, y);
- setClipRect(0, 0, 640, clipY2);
-}
-
-AsScene1201Tape::AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash)
- : AnimatedSprite(vm, fileHash, surfacePriority, x, y), _parentScene(parentScene), _nameHash(nameHash) {
-
- if (!getSubVar(VA_HAS_TAPE, _nameHash) && !getSubVar(VA_IS_TAPE_INSERTED, _nameHash)) {
- SetMessageHandler(&AsScene1201Tape::handleMessage);
- } else {
- setVisible(false);
- SetMessageHandler(NULL);
- }
-}
-
-uint32 AsScene1201Tape::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- break;
- case 0x4806:
- setSubVar(VA_HAS_TAPE, _nameHash, 1);
- setVisible(false);
- SetMessageHandler(NULL);
- break;
- }
- return messageResult;
-}
-
-AsScene1201TntManRope::AsScene1201TntManRope(NeverhoodEngine *vm, bool isDummyHanging)
- : AnimatedSprite(vm, 1200) {
-
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1201TntManRope::handleMessage);
- createSurface(10, 34, 149);
- _x = 202;
- _y = -32;
- if (isDummyHanging) {
- startAnimation(0x928F0C10, 15, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- } else {
- startAnimation(0x928F0C10, 0, -1);
- _newStickFrameIndex = 0;
- }
-}
-
-uint32 AsScene1201TntManRope::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x02060018)
- playSound(0, 0x47900E06);
- break;
- case 0x2006:
- startAnimation(0x928F0C10, 1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- break;
- }
- return messageResult;
-}
-
-AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen)
- : AnimatedSprite(vm, 1100), _klaymen(klaymen), _countdown(0) {
-
- createSurface1(0xD088AC30, 100);
- _x = 320;
- _y = 240;
- SetUpdateHandler(&AsScene1201RightDoor::update);
- SetMessageHandler(&AsScene1201RightDoor::handleMessage);
- _newStickFrameIndex = STICK_LAST_FRAME;
- if (isOpen) {
- startAnimation(0xD088AC30, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- _countdown = 25;
- } else {
- stopAnimation();
- setVisible(false);
- }
-}
-
-void AsScene1201RightDoor::update() {
- if (_countdown != 0 && (--_countdown == 0))
- stCloseDoor();
- AnimatedSprite::update();
-}
-
-uint32 AsScene1201RightDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- case 0x4829:
- stOpenDoor();
- break;
- }
- return messageResult;
-}
-
-void AsScene1201RightDoor::stOpenDoor() {
- startAnimation(0xD088AC30, 0, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- setVisible(true);
- playSound(0, calcHash("fxDoorOpen20"));
-}
-
-void AsScene1201RightDoor::stCloseDoor() {
- startAnimation(0xD088AC30, -1, -1);
- _playBackwards = true;
- setVisible(true);
- playSound(0, calcHash("fxDoorClose20"));
- NextState(&AsScene1201RightDoor::stCloseDoorDone);
-}
-
-void AsScene1201RightDoor::stCloseDoorDone() {
- stopAnimation();
- setVisible(false);
-}
-
-AsScene1201KlaymenHead::AsScene1201KlaymenHead(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1200) {
-
- createSurface(1200, 69, 98);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1201KlaymenHead::handleMessage);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- setVisible(false);
-}
-
-uint32 AsScene1201KlaymenHead::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2006:
- _x = 436;
- _y = 339;
- startAnimation(0xA060C599, 0, -1);
- setVisible(true);
- break;
- case 0x3002:
- stopAnimation();
- setVisible(false);
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-AsScene1201TntMan::AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *asTntManRope, bool isComingDown)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _asTntManRope(asTntManRope),
- _isMoving(false) {
-
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1201TntMan::handleMessage);
- createSurface(990, 106, 181);
- _x = 201;
- if (isComingDown) {
- _y = 297;
- stComingDown();
- } else {
- _y = 334;
- stStanding();
- }
-}
-
-AsScene1201TntMan::~AsScene1201TntMan() {
- _vm->_soundMan->deleteSoundGroup(0x01D00560);
-}
-
-uint32 AsScene1201TntMan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x092870C0)
- sendMessage(_asTntManRope, 0x2006, 0);
- else if (param.asInteger() == 0x11CA0144)
- playSound(0, 0x51800A04);
- break;
- case 0x1011:
- sendMessage(_parentScene, 0x2002, 0);
- messageResult = 1;
- break;
- case 0x480B:
- if (!_isMoving) {
- _sprite = (Sprite*)sender;
- stMoving();
- }
- break;
- }
- return messageResult;
-
-}
-
-uint32 AsScene1201TntMan::hmComingDown(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = AsScene1201TntMan::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1201TntMan::suMoving() {
- _x = _sprite->getX() + 100;
-}
-
-void AsScene1201TntMan::stStanding() {
- startAnimation(0x654913D0, 0, -1);
- SetMessageHandler(&AsScene1201TntMan::handleMessage);
- SetSpriteUpdate(NULL);
-}
-
-void AsScene1201TntMan::stComingDown() {
- startAnimation(0x356803D0, 0, -1);
- SetMessageHandler(&AsScene1201TntMan::hmComingDown);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- NextState(&AsScene1201TntMan::stStanding);
-}
-
-void AsScene1201TntMan::stMoving() {
- _vm->_soundMan->addSound(0x01D00560, 0x4B044624);
- _vm->_soundMan->playSoundLooping(0x4B044624);
- _isMoving = true;
- startAnimation(0x85084190, 0, -1);
- SetMessageHandler(&AsScene1201TntMan::handleMessage);
- SetSpriteUpdate(&AsScene1201TntMan::suMoving);
- _newStickFrameIndex = STICK_LAST_FRAME;
-}
-
-AsScene1201TntManFlame::AsScene1201TntManFlame(NeverhoodEngine *vm, Sprite *asTntMan)
- : AnimatedSprite(vm, 1200), _asTntMan(asTntMan) {
-
- createSurface1(0x828C0411, 995);
- SetUpdateHandler(&AsScene1201TntManFlame::update);
- SetMessageHandler(&Sprite::handleMessage);
- SetSpriteUpdate(&AsScene1201TntManFlame::suUpdate);
- startAnimation(0x828C0411, 0, -1);
- setVisible(false);
-}
-
-AsScene1201TntManFlame::~AsScene1201TntManFlame() {
- _vm->_soundMan->deleteSoundGroup(0x041080A4);
-}
-
-void AsScene1201TntManFlame::update() {
- AnimatedSprite::update();
- if (getGlobalVar(V_TNT_DUMMY_FUSE_LIT)) {
- setVisible(true);
- SetUpdateHandler(&AnimatedSprite::update);
- _vm->_soundMan->addSound(0x041080A4, 0x460A1050);
- _vm->_soundMan->playSoundLooping(0x460A1050);
- }
-}
-
-void AsScene1201TntManFlame::suUpdate() {
- _x = _asTntMan->getX() - 18;
- _y = _asTntMan->getY() - 158;
-}
-
-AsScene1201Match::AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _countdown(0) {
-
- createSurface(1100, 57, 60);
- SetUpdateHandler(&AsScene1201Match::update);
- SetMessageHandler(&AsScene1201Match::hmOnDoorFrameAboutToMove);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- switch (getGlobalVar(V_MATCH_STATUS)) {
- case 0:
- _x = 521;
- _y = 112;
- _status = 0;
- stIdleOnDoorFrame();
- break;
- case 1:
- _x = 521;
- _y = 112;
- _status = 2;
- stOnDoorFrameAboutToMove();
- loadSound(0, 0xD00230CD);
- break;
- case 2:
- setDoDeltaX(1);
- _x = 403;
- _y = 337;
- _status = 0;
- stIdleOnFloor();
- break;
- }
-}
-
-void AsScene1201Match::update() {
- if (_countdown != 0 && (--_countdown == 0))
- gotoNextState();
- updateAnim();
- handleSpriteUpdate();
- updatePosition();
-}
-
-uint32 AsScene1201Match::hmOnDoorFrameAboutToMove(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x86668011)
- playSound(0);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1201Match::hmOnDoorFrameMoving(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmOnDoorFrameAboutToMove(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1201Match::hmIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmOnDoorFrameAboutToMove(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- sendMessage(_parentScene, 0x2001, 0);
- messageResult = 1;
- break;
- case 0x4806:
- setVisible(false);
- setGlobalVar(V_MATCH_STATUS, 3);
- break;
- }
- return messageResult;
-}
-
-void AsScene1201Match::stOnDoorFrameMoving() {
- startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::hmOnDoorFrameMoving);
- if (_status == 0) {
- NextState(&AsScene1201Match::stFallingFromDoorFrame);
- } else {
- NextState(&AsScene1201Match::stOnDoorFrameAboutToMove);
- }
-}
-
-void AsScene1201Match::stFallingFromDoorFrame() {
- setGlobalVar(V_MATCH_STATUS, 2);
- _x -= 199;
- _y += 119;
- startAnimation(0x018D0240, 0, -1);
- SetMessageHandler(&AsScene1201Match::hmOnDoorFrameMoving);
- NextState(&AsScene1201Match::stIdleOnFloor);
-}
-
-void AsScene1201Match::stOnDoorFrameAboutToMove() {
- startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::hmOnDoorFrameAboutToMove);
- _newStickFrameIndex = 0;
- if (_status != 0) {
- _countdown = 36;
- _status--;
- NextState(&AsScene1201Match::stOnDoorFrameMoving);
- }
-}
-
-void AsScene1201Match::stIdleOnDoorFrame() {
- startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::hmIdle);
- _newStickFrameIndex = 0;
-}
-
-void AsScene1201Match::stIdleOnFloor() {
- setDoDeltaX(1);
- _x = 403;
- _y = 337;
- startAnimation(0x00842374, 0, -1);
- SetMessageHandler(&AsScene1201Match::hmIdle);
- _newStickFrameIndex = 0;
-}
-
-AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen)
- : AnimatedSprite(vm, 900), _parentScene(parentScene), _klaymen(klaymen), _klaymenTooClose(false) {
-
- // NOTE: _countdown2 and _countdown3 were unused/without effect and thus removed
-
- createSurface(1100, 203, 199);
- SetUpdateHandler(&AsScene1201Creature::update);
- SetMessageHandler(&AsScene1201Creature::hmWaiting);
- _x = 540;
- _y = 320;
- stWaiting();
-}
-
-void AsScene1201Creature::update() {
- bool oldKlaymenTooClose = _klaymenTooClose;
- _klaymenTooClose = _klaymen->getX() >= 385;
- if (_klaymenTooClose != oldKlaymenTooClose)
- stWaiting();
- if (_countdown != 0 && (--_countdown == 0))
- gotoNextState();
- updateAnim();
- handleSpriteUpdate();
- updatePosition();
-}
-
-uint32 AsScene1201Creature::hmWaiting(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x02060018)
- playSound(0, 0xCD298116);
- break;
- case 0x2004:
- GotoState(&AsScene1201Creature::stStartReachForTntDummy);
- break;
- case 0x2006:
- GotoState(&AsScene1201Creature::stPincerSnapKlaymen);
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1201Creature::hmPincerSnap(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = hmWaiting(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1201Creature::hmPincerSnapKlaymen(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x02060018) {
- playSound(0, 0xCD298116);
- sendMessage(_parentScene, 0x4814, 0);
- sendMessage(_klaymen, 0x4814, 0);
- }
- break;
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1201Creature::stWaiting() {
- startAnimation(0x08081513, 0, -1);
- SetMessageHandler(&AsScene1201Creature::hmWaiting);
- NextState(&AsScene1201Creature::stPincerSnap);
- _countdown = 36;
-}
-
-void AsScene1201Creature::stPincerSnap() {
- if (!_klaymenTooClose) {
- startAnimation(0xCA287133, 0, -1);
- SetMessageHandler(&AsScene1201Creature::hmPincerSnap);
- NextState(&AsScene1201Creature::stWaiting);
- }
-}
-
-void AsScene1201Creature::stStartReachForTntDummy() {
- startAnimation(0x08081513, 0, -1);
- SetMessageHandler(&AsScene1201Creature::hmWaiting);
- NextState(&AsScene1201Creature::stReachForTntDummy);
- _countdown = 48;
-}
-
-void AsScene1201Creature::stReachForTntDummy() {
- startAnimation(0x5A201453, 0, -1);
- SetMessageHandler(&AsScene1201Creature::hmWaiting);
- _countdown = 0;
-}
-
-void AsScene1201Creature::stPincerSnapKlaymen() {
- startAnimation(0xCA287133, 0, -1);
- SetMessageHandler(&AsScene1201Creature::hmPincerSnapKlaymen);
- NextState(&AsScene1201Creature::stWaiting);
- _countdown = 0;
-}
-
-AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klaymen)
- : AnimatedSprite(vm, 1100), _klaymen(klaymen) {
-
- _x = 320;
- _y = 240;
- createSurface(800, 55, 199);
- if (_klaymen->getX() < 100) {
- startAnimation(0x508A111B, 0, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- playSound(0, calcHash("fxDoorOpen03"));
- } else {
- startAnimation(0x508A111B, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- }
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1201LeftDoor::handleMessage);
-}
-
-uint32 AsScene1201LeftDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4809:
- stCloseDoor();
- break;
- }
- return messageResult;
-}
-
-void AsScene1201LeftDoor::stCloseDoor() {
- startAnimation(0x508A111B, -1, -1);
- _playBackwards = true;
- _newStickFrameIndex = 0;
-}
-
-Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _creatureExploded(false), _asMatch(NULL), _asTntMan(NULL),
- _asCreature(NULL), _asTntManRope(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
-
- int16 topY1, topY2, topY3, topY4;
- int16 x1, x2;
- Sprite *tempSprite;
-
- SetUpdateHandler(&Scene1201::update);
- SetMessageHandler(&Scene1201::handleMessage);
-
- setHitRects(0x004AEBD0);
-
- if (!getSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52)) {
- setSubVar(VA_IS_PUZZLE_INIT, 0xE8058B52, 1);
- for (uint32 index = 0; index < 18; index++)
- setSubVar(VA_TNT_POSITIONS, index, kScene1201InitArray[index]);
- }
-
- insertScreenMouse(0x9A2C0409);
-
- _asTape = insertSprite<AsScene1201Tape>(this, 3, 1100, 243, 340, 0x9148A011);
- addCollisionSprite(_asTape);
-
- tempSprite = insertStaticSprite(0x03C82530, 100);
- topY1 = tempSprite->getY() + tempSprite->getDrawRect().height;
-
- tempSprite = insertStaticSprite(0x88182069, 200);
- topY2 = tempSprite->getY() + tempSprite->getDrawRect().height;
-
- tempSprite = insertStaticSprite(0x476014E0, 300);
- topY3 = tempSprite->getY() + tempSprite->getDrawRect().height;
-
- tempSprite = insertStaticSprite(0x04063110, 500);
- topY4 = tempSprite->getY() + 1;
-
- _asTntManRope = insertSprite<AsScene1201TntManRope>(getGlobalVar(V_TNT_DUMMY_BUILT) && which != 1);
- _asTntManRope->setClipRect(0, topY4, 640, 480);
-
- insertStaticSprite(0x400B04B0, 1200);
-
- tempSprite = insertStaticSprite(0x40295462, 1200);
- x1 = tempSprite->getX();
-
- tempSprite = insertStaticSprite(0xA29223FA, 1200);
- x2 = tempSprite->getX() + tempSprite->getDrawRect().width;
-
- _asKlaymenHead = insertSprite<AsScene1201KlaymenHead>();
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1201>(364, 333);
- setMessageList(0x004AEC08);
- } else if (which == 3) {
- // Klaymen standing after the weasel exploded
- insertKlaymen<KmScene1201>(400, 329);
- setMessageList(0x004AEC08);
- } else if (which == 2) {
- // Klaymen entering from the right
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
- insertKlaymen<KmScene1201>(374, 333);
- setMessageList(0x004AEC08);
- } else {
- insertKlaymen<KmScene1201>(640, 329);
- setMessageList(0x004AEC20);
- }
- } else if (which == 1) {
- // Klaymen returning from the TNT console
- if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) {
- insertKlaymen<KmScene1201>(364, 333);
- _klaymen->setDoDeltaX(1);
- } else {
- insertKlaymen<KmScene1201>(246, 333);
- }
- setMessageList(0x004AEC30);
- } else {
- // Klaymen entering from the left
- insertKlaymen<KmScene1201>(0, 336);
- setMessageList(0x004AEC10);
- }
-
- _klaymen->setClipRect(x1, 0, x2, 480);
- _klaymen->setRepl(64, 0);
-
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
- setBackground(0x4019A2C4);
- setPalette(0x4019A2C4);
- _asRightDoor = NULL;
- } else {
- setBackground(0x40206EC5);
- setPalette(0x40206EC5);
- _asRightDoor = insertSprite<AsScene1201RightDoor>(_klaymen, which == 2);
- }
-
- if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
- insertStaticSprite(0x10002ED8, 500);
- if (!getGlobalVar(V_CREATURE_EXPLODED)) {
- _asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
- _asTntMan->setClipRect(x1, 0, x2, 480);
- _asTntMan->setRepl(64, 0);
- addCollisionSprite(_asTntMan);
- tempSprite = insertSprite<AsScene1201TntManFlame>(_asTntMan);
- tempSprite->setClipRect(x1, 0, x2, 480);
- }
-
- uint32 tntIndex = 1;
- while (tntIndex < 18) {
- uint32 elemIndex = getSubVar(VA_TNT_POSITIONS, tntIndex);
- int16 clipY2;
- if (kScene1201PointArray[elemIndex].y < 175)
- clipY2 = topY1;
- else if (kScene1201PointArray[elemIndex].y < 230)
- clipY2 = topY2;
- else
- clipY2 = topY3;
- insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(VA_TNT_POSITIONS, tntIndex), clipY2);
- elemIndex = getSubVar(VA_TNT_POSITIONS, tntIndex + 1);
- if (kScene1201PointArray[elemIndex].y < 175)
- clipY2 = topY1;
- else if (kScene1201PointArray[elemIndex].y < 230)
- clipY2 = topY2;
- else
- clipY2 = topY3;
- insertSprite<SsScene1201Tnt>(tntIndex + 1, getSubVar(VA_TNT_POSITIONS, tntIndex + 1), clipY2);
- tntIndex += 3;
- }
-
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
- setRectList(0x004AEE58);
- } else {
- setRectList(0x004AEDC8);
- }
-
- } else {
-
- insertStaticSprite(0x8E8A1981, 900);
-
- uint32 tntIndex = 0;
- while (tntIndex < 18) {
- uint32 elemIndex = getSubVar(VA_TNT_POSITIONS, tntIndex);
- int16 clipY2;
- if (kScene1201PointArray[elemIndex].x < 300) {
- clipY2 = 480;
- } else {
- if (kScene1201PointArray[elemIndex].y < 175)
- clipY2 = topY1;
- else if (kScene1201PointArray[elemIndex].y < 230)
- clipY2 = topY2;
- else
- clipY2 = topY3;
- }
- insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(VA_TNT_POSITIONS, tntIndex), clipY2);
- tntIndex++;
- }
-
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED))
- setRectList(0x004AEE18);
- else
- setRectList(0x004AED88);
-
- }
-
- tempSprite = insertStaticSprite(0x63D400BC, 900);
-
- _asLeftDoor = insertSprite<AsScene1201LeftDoor>(_klaymen);
- _asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
-
- if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_MATCH_STATUS) == 0)
- setGlobalVar(V_MATCH_STATUS, 1);
-
- _asMatch = NULL;
-
- if (getGlobalVar(V_MATCH_STATUS) < 3) {
- _asMatch = insertSprite<AsScene1201Match>(this);
- addCollisionSprite(_asMatch);
- }
-
- if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_CREATURE_EXPLODED) == 0) {
- _asCreature = insertSprite<AsScene1201Creature>(this, _klaymen);
- _asCreature->setClipRect(x1, 0, x2, 480);
- }
-
-}
-
-Scene1201::~Scene1201() {
- if (_creatureExploded)
- setGlobalVar(V_CREATURE_EXPLODED, 1);
- setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0);
-}
-
-void Scene1201::update() {
- Scene::update();
- if (_asMatch && getGlobalVar(V_MATCH_STATUS) == 3)
- deleteSprite(&_asMatch);
-}
-
-uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x07053000) {
- _creatureExploded = true;
- sendMessage(_asCreature, 0x2004, 0);
- } else if (param.asInteger() == 0x140E5744)
- sendMessage(_asCreature, 0x2005, 0);
- else if (param.asInteger() == 0x40253C40) {
- _canAcceptInput = false;
- sendMessage(_asCreature, 0x2006, 0);
- } else if (param.asInteger() == 0x090EB048) {
- if (_klaymen->getX() < 572)
- setMessageList2(0x004AEC90);
- else
- setMessageList2(0x004AEC20);
- }
- break;
- case 0x2001:
- if (getGlobalVar(V_MATCH_STATUS) == 0)
- setMessageList2(0x004AECB0);
- else {
- sendEntityMessage(_klaymen, 0x1014, _asMatch);
- setMessageList2(0x004AECC0);
- }
- break;
- case 0x2002:
- if (getGlobalVar(V_TNT_DUMMY_FUSE_LIT)) {
- // Move the TNT dummy if the fuse is burning
- sendEntityMessage(_klaymen, 0x1014, _asTntMan);
- setMessageList2(0x004AECF0, false);
- } else if (getGlobalVar(V_MATCH_STATUS) == 3) {
- // Light the TNT dummy if we have the match
- sendEntityMessage(_klaymen, 0x1014, _asTntMan);
- if (_klaymen->getX() > _asTntMan->getX())
- setMessageList(0x004AECD0);
- else
- setMessageList(0x004AECE0);
- }
- break;
- case 0x4814:
- cancelMessageList();
- break;
- case 0x4826:
- if (sender == _asTape) {
- sendEntityMessage(_klaymen, 0x1014, _asTape);
- setMessageList(0x004AED38);
- }
- break;
- case 0x4829:
- sendMessage(_asRightDoor, 0x4829, 0);
- break;
- case 0x8000:
- sendMessage(_asKlaymenHead, 0x2006, 0);
- break;
- }
- return messageResult;
-}
-
-// Scene1202
-
-static const uint32 kScene1202Table[] = {
- 1, 2, 0, 4, 5, 3, 7, 8, 6, 10, 11, 9, 13, 14, 12, 16, 17, 15
-};
-
-static const NPoint kScene1202Points[] = {
- {203, 140}, {316, 212}, {277, 264},
- {176, 196}, {275, 159}, {366, 212},
- {230, 195}, {412, 212}, {368, 263},
- {204, 192}, {365, 164}, {316, 262},
- {191, 255}, {280, 213}, {406, 266},
- {214, 254}, {316, 158}, {402, 161}
-};
-
-static const uint32 kScene1202FileHashes[] = {
- 0x1AC00B8, 0x1AC14B8, 0x1AC14B8,
- 0x1AC30B8, 0x1AC14B8, 0x1AC14B8,
- 0x1AC00B8, 0x1AC14B8, 0x1AC14B8,
- 0x1AC90B8, 0x1AC18B8, 0x1AC18B8,
- 0x1AC30B8, 0x1AC14B8, 0x1AC14B8,
- 0x1AC50B8, 0x1AC14B8, 0x1AC14B8
-};
-
-AsScene1202TntItem::AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int itemIndex)
- : AnimatedSprite(vm, 900), _parentScene(parentScene), _itemIndex(itemIndex) {
-
- int positionIndex;
-
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1202TntItem::hmShowIdle);
- positionIndex = getSubVar(VA_TNT_POSITIONS, _itemIndex);
- createSurface(900, 37, 67);
- _x = kScene1202Points[positionIndex].x;
- _y = kScene1202Points[positionIndex].y;
- stShowIdle();
-}
-
-uint32 AsScene1202TntItem::hmShowIdle(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- sendMessage(_parentScene, 0x2000, _itemIndex);
- messageResult = 1;
- break;
- case 0x2001:
- _newPosition = (int)param.asInteger();
- stChangePositionFadeOut();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1202TntItem::hmChangePosition(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1202TntItem::stShowIdle() {
- startAnimation(kScene1202FileHashes[_itemIndex], 0, -1);
- SetMessageHandler(&AsScene1202TntItem::hmShowIdle);
- _newStickFrameIndex = 0;
-}
-
-void AsScene1202TntItem::stChangePositionFadeOut() {
- startAnimation(kScene1202FileHashes[_itemIndex], 0, -1);
- SetMessageHandler(&AsScene1202TntItem::hmChangePosition);
- NextState(&AsScene1202TntItem::stChangePositionFadeIn);
-}
-
-void AsScene1202TntItem::stChangePositionFadeIn() {
- _x = kScene1202Points[_newPosition].x;
- _y = kScene1202Points[_newPosition].y;
- startAnimation(kScene1202FileHashes[_itemIndex], 6, -1);
- _playBackwards = true;
- SetMessageHandler(&AsScene1202TntItem::hmChangePosition);
- NextState(&AsScene1202TntItem::stChangePositionDone);
-}
-
-void AsScene1202TntItem::stChangePositionDone() {
- sendMessage(_parentScene, 0x2002, _itemIndex);
- stShowIdle();
-}
-
-Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _paletteResource(vm),
- _soundToggle(true), _isPuzzleSolved(false), _counter(0), _clickedIndex(-1) {
-
- SetMessageHandler(&Scene1202::handleMessage);
- SetUpdateHandler(&Scene1202::update);
-
- setBackground(0x60210ED5);
- setPalette(0x60210ED5);
- addEntity(_palette);
-
- _paletteResource.load(0x60250EB5);
- _paletteResource.copyPalette(_paletteData);
-
- insertPuzzleMouse(0x10ED160A, 20, 620);
-
- for (int tntIndex = 0; tntIndex < 18; tntIndex++) {
- _asTntItems[tntIndex] = insertSprite<AsScene1202TntItem>(this, tntIndex);
- addCollisionSprite(_asTntItems[tntIndex]);
- }
-
- insertStaticSprite(0x8E8419C1, 1100);
-
- if (getGlobalVar(V_TNT_DUMMY_BUILT))
- SetMessageHandler(&Scene1202::hmSolved);
-
- playSound(0, 0x40106542);
- loadSound(1, 0x40005446);
- loadSound(2, 0x40005446); // Same sound as slot 1
- loadSound(3, 0x68E25540);
-
-}
-
-Scene1202::~Scene1202() {
- if (isSolved())
- setGlobalVar(V_TNT_DUMMY_BUILT, 1);
-}
-
-void Scene1202::update() {
- Scene::update();
- if (_isPuzzleSolved) {
- if (!isSoundPlaying(3))
- leaveScene(0);
- } else if (_counter == 0 && isSolved()) {
- _clickedIndex = 0;
- SetMessageHandler(&Scene1202::hmSolved);
- setGlobalVar(V_TNT_DUMMY_BUILT, 1);
- _palette->copyToBasePalette(_paletteData);
- _palette->startFadeToPalette(24);
- playSound(3);
- _isPuzzleSolved = true;
- } else if (_clickedIndex >= 0 && _counter == 0) {
- // Swap TNT positions
- int destIndex = kScene1202Table[_clickedIndex];
- sendMessage(_asTntItems[_clickedIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, destIndex));
- sendMessage(_asTntItems[destIndex], 0x2001, getSubVar(VA_TNT_POSITIONS, _clickedIndex));
- int temp = getSubVar(VA_TNT_POSITIONS, destIndex);
- setSubVar(VA_TNT_POSITIONS, destIndex, getSubVar(VA_TNT_POSITIONS, _clickedIndex));
- setSubVar(VA_TNT_POSITIONS, _clickedIndex, temp);
- _counter = 2;
- _clickedIndex = -1;
- playSound(_soundToggle ? 1 : 2);
- _soundToggle = !_soundToggle;
- }
-}
-
-uint32 Scene1202::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && !_isPuzzleSolved)
- leaveScene(0);
- break;
- case 0x2000:
- _clickedIndex = (int)param.asInteger();
- break;
- case 0x2002:
- _counter--;
- break;
- }
- return messageResult;
-}
-
-uint32 Scene1202::hmSolved(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
- leaveScene(0);
- break;
- }
- return 0;
-}
-
-bool Scene1202::isSolved() {
- return
- getSubVar(VA_TNT_POSITIONS, 0) == 0 && getSubVar(VA_TNT_POSITIONS, 3) == 3 &&
- getSubVar(VA_TNT_POSITIONS, 6) == 6 && getSubVar(VA_TNT_POSITIONS, 9) == 9 &&
- getSubVar(VA_TNT_POSITIONS, 12) == 12 && getSubVar(VA_TNT_POSITIONS, 15) == 15;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
deleted file mode 100644
index f6f97b4..0000000
--- a/engines/neverhood/module1200.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_MODULE1200_H
-#define NEVERHOOD_MODULE1200_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/module.h"
-#include "neverhood/scene.h"
-
-namespace Neverhood {
-
-// Module1200
-
-class Module1200 : public Module {
-public:
- Module1200(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Module1200();
-protected:
- int _sceneNum;
- void createScene(int sceneNum, int which);
- void updateScene();
-};
-
-// Scene1201
-
-class AsScene1201Tape : public AnimatedSprite {
-public:
- AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash);
-protected:
- Scene *_parentScene;
- uint32 _nameHash;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1201TntManRope : public AnimatedSprite {
-public:
- AsScene1201TntManRope(NeverhoodEngine *vm, bool isDummyHanging);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1201RightDoor : public AnimatedSprite {
-public:
- AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen);
-protected:
- Sprite *_klaymen;
- int _countdown;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stOpenDoor();
- void stCloseDoor();
- void stCloseDoorDone();
-};
-
-class AsScene1201KlaymenHead : public AnimatedSprite {
-public:
- AsScene1201KlaymenHead(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1201TntMan : public AnimatedSprite {
-public:
- AsScene1201TntMan(NeverhoodEngine *vm, Scene *parentScene, Sprite *asTntManRope, bool isDown);
- virtual ~AsScene1201TntMan();
-protected:
- Scene *_parentScene;
- Sprite *_asTntManRope;
- Sprite *_sprite;
- bool _isMoving;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmComingDown(int messageNum, const MessageParam ¶m, Entity *sender);
- void suMoving();
- void stStanding();
- void stComingDown();
- void stMoving();
-};
-
-class AsScene1201TntManFlame : public AnimatedSprite {
-public:
- AsScene1201TntManFlame(NeverhoodEngine *vm, Sprite *asTntMan);
- ~AsScene1201TntManFlame();
-protected:
- Sprite *_asTntMan;
- void update();
- void suUpdate();
-};
-
-class AsScene1201Match : public AnimatedSprite {
-public:
- AsScene1201Match(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- int _countdown;
- int _status;
- void update();
- uint32 hmOnDoorFrameAboutToMove(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmOnDoorFrameMoving(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmIdle(int messageNum, const MessageParam ¶m, Entity *sender);
- void stOnDoorFrameMoving();
- void stFallingFromDoorFrame();
- void stOnDoorFrameAboutToMove();
- void stIdleOnDoorFrame();
- void stIdleOnFloor();
-};
-
-class AsScene1201Creature : public AnimatedSprite {
-public:
- AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen);
-protected:
- Scene *_parentScene;
- Sprite *_klaymen;
- int _countdown;
- bool _klaymenTooClose;
- void update();
- uint32 hmWaiting(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmPincerSnap(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmPincerSnapKlaymen(int messageNum, const MessageParam ¶m, Entity *sender);
- void stWaiting();
- void stPincerSnap();
- void stStartReachForTntDummy();
- void stReachForTntDummy();
- void stPincerSnapKlaymen();
-};
-
-class AsScene1201LeftDoor : public AnimatedSprite {
-public:
- AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klaymen);
-protected:
- Sprite *_klaymen;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stCloseDoor();
-};
-
-class SsScene1201Tnt : public StaticSprite {
-public:
- SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2);
-protected:
- uint32 _elemIndex;
-};
-
-class Scene1201 : public Scene {
-public:
- Scene1201(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Scene1201();
-protected:
- Sprite *_asMatch;
- AsScene1201TntMan *_asTntMan;
- Sprite *_asCreature;
- Sprite *_asTntManRope;
- Sprite *_asLeftDoor;
- Sprite *_asRightDoor;
- Sprite *_asTape;
- Sprite *_asKlaymenHead;
- bool _creatureExploded;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1202
-
-class AsScene1202TntItem : public AnimatedSprite {
-public:
- AsScene1202TntItem(NeverhoodEngine *vm, Scene *parentScene, int index);
-protected:
- Scene *_parentScene;
- int _itemIndex, _newPosition;
- uint32 hmShowIdle(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmChangePosition(int messageNum, const MessageParam ¶m, Entity *sender);
- void stShowIdle();
- void stChangePositionFadeOut();
- void stChangePositionFadeIn();
- void stChangePositionDone();
-};
-
-class Scene1202 : public Scene {
-public:
- Scene1202(NeverhoodEngine *vm, Module *parentModule);
- virtual ~Scene1202();
-protected:
- PaletteResource _paletteResource;
- Sprite *_asTntItems[18];
- int _counter;
- int _clickedIndex;
- byte _paletteData[1024];
- bool _isPuzzleSolved;
- bool _soundToggle;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmSolved(int messageNum, const MessageParam ¶m, Entity *sender);
- bool isSolved();
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_MODULE1200_H */
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
deleted file mode 100644
index 162d710..0000000
--- a/engines/neverhood/module1300.cpp
+++ /dev/null
@@ -1,1835 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1300.h"
-#include "neverhood/module1000.h"
-#include "neverhood/module1200.h"
-#include "neverhood/module1400.h"
-#include "neverhood/module2200.h"
-#include "neverhood/gamemodule.h"
-#include "neverhood/diskplayerscene.h"
-#include "neverhood/menumodule.h"
-#include "neverhood/navigationscene.h"
-#include "neverhood/smackerscene.h"
-
-namespace Neverhood {
-
-static const uint32 kModule1300SoundList[] = {
- 0x16805648,
- 0x16805C48,
- 0xB4964448,
- 0x96A05481,
- 0xD0E14441,
- 0x90815450,
- 0
-};
-
-Module1300::Module1300(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- _vm->_soundMan->addMusic(0x61C090, 0x00203197);
- _vm->_soundMan->addSoundList(0x61C090, kModule1300SoundList);
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 50, 600, 20, 150);
- _vm->_soundMan->playTwoSounds(0x61C090, 0x48498E46, 0x50399F64, 0);
- _vm->_soundMan->setSoundVolume(0x48498E46, 70);
- _vm->_soundMan->setSoundVolume(0x50399F64, 70);
-
- if (which < 0) {
- if (_vm->gameState().sceneNum >= 1 && _vm->gameState().sceneNum <= 17)
- createScene(_vm->gameState().sceneNum, -1);
- else
- createScene(11, 0);
- } else {
- switch (which) {
- case 0:
- createScene(11, 0);
- break;
- case 1:
- createScene(13, 0);
- break;
- case 2:
- createScene(14, 0);
- break;
- case 3:
- createScene(15, 0);
- break;
- case 4:
- createScene(7, 0);
- break;
- case 5:
- createScene(5, 1);
- break;
- case 6:
- createScene(5, 5);
- break;
- case 7:
- createScene(3, 0);
- break;
- case 8:
- createScene(1, 0);
- break;
- case 9:
- createScene(2, 0);
- break;
- case 10:
- createScene(6, 0);
- break;
- case 11:
- createScene(4, 0);
- break;
- default:
- createScene(12, 0);
- break;
- }
- }
-
-}
-
-Module1300::~Module1300() {
- _vm->_soundMan->deleteGroup(0x61C090);
-}
-
-void Module1300::createScene(int sceneNum, int which) {
- debug("Module1300::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 1:
- _vm->gameState().sceneNum = 1;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x00203197, 0, 2);
- _childObject = new Scene1302(_vm, this, which);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new Scene1303(_vm, this);
- break;
- case 3:
- _vm->gameState().sceneNum = 3;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new Scene1304(_vm, this, which);
- break;
- case 4:
- _vm->gameState().sceneNum = 4;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x00203197, 0, 2);
- _childObject = new Scene1305(_vm, this, which);
- break;
- case 5:
- _vm->gameState().sceneNum = 5;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x00203197, 0, 2);
- _childObject = new Scene1306(_vm, this, which);
- break;
- case 6:
- _vm->gameState().sceneNum = 6;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x00203197, 0, 2);
- _childObject = new Scene1307(_vm, this);
- break;
- case 7:
- _vm->gameState().sceneNum = 7;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->startMusic(0x00203197, 0, 2);
- _childObject = new Scene1308(_vm, this, which);
- break;
- case 8:
- _vm->gameState().sceneNum = 8;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new DiskplayerScene(_vm, this, 1);
- break;
- case 9:
- _vm->gameState().sceneNum = 9;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createSmackerScene(0x20082818, true, true, false);
- break;
- case 10:
- _vm->gameState().sceneNum = 10;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createSmackerScene(0x20082828, true, true, false);
- break;
- case 11:
- _vm->gameState().sceneNum = 11;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createNavigationScene(0x004B27A8, which);
- break;
- case 12:
- _vm->gameState().sceneNum = 12;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createNavigationScene(0x004B2718, which);
- break;
- case 13:
- _vm->gameState().sceneNum = 13;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createNavigationScene(0x004B27D8, which);
- break;
- case 14:
- _vm->gameState().sceneNum = 14;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createNavigationScene(0x004B2808, which);
- break;
- case 15:
- _vm->gameState().sceneNum = 15;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- createNavigationScene(0x004B2838, which);
- break;
- case 16:
- _vm->gameState().sceneNum = 16;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new Scene1317(_vm, this);
- break;
- case 17:
- _vm->gameState().sceneNum = 17;
- _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0);
- _vm->_soundMan->stopMusic(0x00203197, 0, 2);
- _childObject = new CreditsScene(_vm, this, false);
- break;
- }
- SetUpdateHandler(&Module1300::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1300::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 1:
- if (_moduleResult == 1)
- createScene(4, 0);
- else
- createScene(7, 1);
- break;
- case 2:
- createScene(5, 3);
- break;
- case 3:
- createScene(15, 0);
- break;
- case 4:
- createScene(16, -1);
- break;
- case 5:
- if (_moduleResult == 2)
- createScene(8, 0);
- else if (_moduleResult == 3)
- createScene(2, 0);
- else if (_moduleResult == 0)
- leaveModule(0);
- else if (_moduleResult == 1)
- createScene(10, -1);
- break;
- case 6:
- createScene(7, 2);
- break;
- case 7:
- if (_moduleResult == 0)
- createScene(13, 0);
- else if (_moduleResult == 1)
- createScene(1, 0);
- else if (_moduleResult == 2)
- createScene(6, 0);
- break;
- case 8:
- createScene(5, 2);
- break;
- case 9:
- createScene(5, 0);
- break;
- case 10:
- createScene(14, 0);
- break;
- case 11:
- if (_moduleResult == 0)
- createScene(12, 0);
- else if (_moduleResult == 1)
- createScene(11, 1);
- break;
- case 12:
- if (_moduleResult == 0)
- createScene(14, 1);
- else if (_moduleResult == 1)
- createScene(15, 1);
- else if (_moduleResult == 3)
- createScene(11, 1);
- else if (_moduleResult == 5)
- createScene(13, 1);
- break;
- case 13:
- if (_moduleResult == 0)
- createScene(12, 2);
- else if (_moduleResult == 1)
- createScene(7, 0);
- break;
- case 14:
- if (_moduleResult == 0)
- createScene(12, 3);
- else if (_moduleResult == 1)
- createScene(9, -1);
- break;
- case 15:
- if (_moduleResult == 0)
- createScene(12, 4);
- else if (_moduleResult == 1)
- createScene(3, 0);
- break;
- case 16:
- createScene(17, -1);
- break;
- case 17:
- leaveModule(1);
- break;
- }
- }
-}
-
-AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
-
- _x = 320;
- _y = 240;
- createSurface1(0x88148150, 500);
- if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
- startAnimation(0x88148150, 0, -1);
- _newStickFrameIndex = 0;
- } else {
- startAnimation(0x88148150, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- }
- loadSound(0, 0x68895082);
- loadSound(1, 0x689BD0C1);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1302Bridge::handleMessage);
-}
-
-uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- case 0x4808:
- stLowerBridge();
- break;
- case 0x4809:
- stRaiseBridge();
- break;
- }
- return messageResult;
-}
-
-void AsScene1302Bridge::stLowerBridge() {
- startAnimation(0x88148150, 0, -1);
- playSound(1);
- NextState(&AsScene1302Bridge::cbLowerBridgeEvent);
-}
-
-void AsScene1302Bridge::stRaiseBridge() {
- startAnimation(0x88148150, 7, -1);
- _playBackwards = true;
- _newStickFrameIndex = 0;
- playSound(0);
-}
-
-void AsScene1302Bridge::cbLowerBridgeEvent() {
- sendMessage(_parentScene, 0x2032, 0);
- startAnimation(0x88148150, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
-}
-
-SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm)
- : StaticSprite(vm, 0x11122122, 200) {
-
- _firstY = _y;
- if (getGlobalVar(V_FLYTRAP_RING_FENCE))
- _y += 152;
- loadSound(0, 0x7A00400C);
- loadSound(1, 0x78184098);
- SetUpdateHandler(&SsScene1302Fence::update);
- SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteUpdate(NULL);
-}
-
-void SsScene1302Fence::update() {
- handleSpriteUpdate();
- updatePosition();
-}
-
-uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4808:
- playSound(0);
- SetMessageHandler(NULL);
- SetSpriteUpdate(&SsScene1302Fence::suMoveDown);
- break;
- case 0x4809:
- playSound(1);
- SetMessageHandler(NULL);
- SetSpriteUpdate(&SsScene1302Fence::suMoveUp);
- break;
- }
- return messageResult;
-}
-
-void SsScene1302Fence::suMoveDown() {
- if (_y < _firstY + 152)
- _y += 8;
- else {
- SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteUpdate(NULL);
- }
-}
-
-void SsScene1302Fence::suMoveUp() {
- if (_y > _firstY)
- _y -= 8;
- else {
- SetMessageHandler(&SsScene1302Fence::handleMessage);
- SetSpriteUpdate(NULL);
- }
-}
-
-Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&Scene1302::handleMessage);
-
- setHitRects(0x004B0858);
- setRectList(0x004B0A38);
- setBackground(0x420643C4);
- setPalette(0x420643C4);
- insertScreenMouse(0x643C0428);
-
- _class595 = insertStaticSprite(0xB0420130, 1015);
- _sprite1 = insertStaticSprite(0x942FC224, 300);
- _sprite2 = insertStaticSprite(0x70430830, 1200);
- _sprite2->setVisible(false);
- _sprite3 = insertStaticSprite(0x16E01E20, 1100);
- _asRing1 = insertSprite<AsScene1002Ring>(this, false, 218, 122, _class595->getDrawRect().y, false);
- _asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_BRIDGE));
- _asRing3 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false);
- _asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_FENCE));
- _asRing5 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false);
- _asBridge = insertSprite<AsScene1302Bridge>(this);
- _ssFence = insertSprite<SsScene1302Fence>();
- _ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1002>(380, 364);
- setMessageList(0x004B0868);
- } else {
- // Klaymen entering from back
- insertKlaymen<KmScene1002>(293, 330);
- setMessageList(0x004B0870);
- }
-
- _klaymen->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480);
-
- _asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klaymen, true);
- addCollisionSprite(_asVenusFlyTrap);
-
- sendEntityMessage(_klaymen, 0x2007, _asVenusFlyTrap);
-
-}
-
-uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x4A845A00)
- sendEntityMessage(_klaymen, 0x1014, _asRing1);
- else if (param.asInteger() == 0x43807801) {
- if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) {
- sendEntityMessage(_klaymen, 0x1014, _asRing2);
- if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32)
- setMessageList(0x004B0940);
- else
- setMessageList(0x004B0938);
- } else
- setMessageList(0x004B0950);
- messageResult = 1;
- } else if (param.asInteger() == 0x46C26A01)
- sendEntityMessage(_klaymen, 0x1014, _asRing3);
- else if (param.asInteger() == 0x468C7B11) {
- if (!getGlobalVar(V_FLYTRAP_RING_FENCE)) {
- sendEntityMessage(_klaymen, 0x1014, _asRing4);
- if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32)
- setMessageList(0x004B0940);
- else
- setMessageList(0x004B0938);
- } else
- setMessageList(0x004B0950);
- messageResult = 1;
- } else if (param.asInteger() == 0x42845B19)
- sendEntityMessage(_klaymen, 0x1014, _asRing5);
- else if (param.asInteger() == 0x430A6060) {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE))
- setMessageList2(0x004B0910);
- else
- cancelMessageList();
- } else if (param.asInteger() == 0x012E2070) {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE))
- setMessageList2(0x004B0968);
- else
- cancelMessageList();
- } else if (param.asInteger() == 0x11C40840) {
- if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342)
- setMessageList(0x004B0878);
- else
- setMessageList(0x004B0978);
- }
- break;
- case 0x2000:
- if (_klaymen->getY() > 360) {
- sendEntityMessage(_klaymen, 0x1014, _asVenusFlyTrap);
- setMessageList2(0x004B08F0);
- } else
- setMessageList2(0x004B0920);
- break;
- case 0x2002:
- if (_klaymen->getX() > 545)
- leaveScene(1);
- break;
- case 0x2032:
- _sprite2->setVisible(true);
- break;
- case 0x4806:
- sendMessage(_parentModule, 0x1024, 2);
- if (sender == _asRing1)
- playSound(0, 0x665198C0);
- else if (sender == _asRing2) {
- sendMessage(_asBridge, 0x4808, 0);
- setGlobalVar(V_FLYTRAP_RING_BRIDGE, 1);
- } else if (sender == _asRing3)
- playSound(0, 0xE2D389C0);
- else if (sender == _asRing4) {
- sendMessage(_ssFence, 0x4808, 0);
- setGlobalVar(V_FLYTRAP_RING_FENCE, 1);
- } else if (sender == _asRing5)
- playSound(0, 0x40428A09);
- break;
- case 0x4807:
- if (sender == _asRing2) {
- sendMessage(_asBridge, 0x4809, 0);
- setGlobalVar(V_FLYTRAP_RING_BRIDGE, 0);
- _sprite2->setVisible(false);
- } else if (sender == _asRing4) {
- sendMessage(_ssFence, 0x4809, 0);
- setGlobalVar(V_FLYTRAP_RING_FENCE, 0);
- } else if (sender == _asVenusFlyTrap) {
- if (getGlobalVar(V_FLYTRAP_RING_BRIDGE))
- sendMessage(_asRing2, 0x4807, 0);
- else
- sendMessage(_asRing4, 0x4807, 0);
- }
- break;
- case 0x480F:
- if (sender == _asRing2) {
- playSound(0, 0x60755842);
- sendMessage(_asBridge, 0x4808, 0);
- setGlobalVar(V_FLYTRAP_RING_BRIDGE, 1);
- } else if (sender == _asRing4) {
- playSound(0, 0x60755842);
- sendMessage(_ssFence, 0x4808, 0);
- setGlobalVar(V_FLYTRAP_RING_FENCE, 1);
- }
- break;
- case 0x482A:
- sendMessage(_asVenusFlyTrap, 0x482B, 0);
- break;
- case 0x482B:
- sendMessage(_asVenusFlyTrap, 0x482A, 0);
- break;
- case 0x8000:
- setSpriteSurfacePriority(_class595, 995);
- break;
- case 0x8001:
- setSpriteSurfacePriority(_class595, 1015);
- break;
- }
- return messageResult;
-}
-
-AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
-
- createSurface(200, 128, 315);
- _x = 289;
- _y = 390;
- startAnimation(0x800278D2, 0, -1);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1303Balloon::handleMessage);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
-}
-
-uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- break;
- case 0x2000:
- stPopBalloon();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x020B0003)
- playSound(0, 0x742B0055);
- break;
- case 0x3002:
- playSound(0, 0x470007EE);
- stopAnimation();
- setVisible(false);
- SetMessageHandler(NULL);
- break;
- }
- return messageResult;
-}
-
-void AsScene1303Balloon::stPopBalloon() {
- startAnimation(0xAC004CD0, 0, -1);
- SetMessageHandler(&AsScene1303Balloon::hmBalloonPopped);
-}
-
-Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&Scene1303::handleMessage);
-
- setRectList(0x004AF9E8);
- setBackground(0x01581A9C);
- setPalette(0x01581A9C);
- insertScreenMouse(0x81A9801D);
-
- if (!getGlobalVar(V_BALLOON_POPPED)) {
- _asBalloon = insertSprite<AsScene1303Balloon>(this);
- addCollisionSprite(_asBalloon);
- }
-
- _sprite1 = insertStaticSprite(0xA014216B, 1100);
-
- insertKlaymen<KmScene1303>(207, 332);
- setMessageList(0x004AF9A0);
-
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
-
-}
-
-uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2000:
- setGlobalVar(V_BALLOON_POPPED, 1);
- sendMessage(_asBalloon, 0x2000, 0);
- break;
- case 0x4826:
- if (sender == _asBalloon && getGlobalVar(V_HAS_NEEDLE))
- setMessageList(0x004AF9B8);
- break;
- }
- return 0;
-}
-
-AsScene1304Needle::AsScene1304Needle(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y)
- : AnimatedSprite(vm, 0x548E9411, surfacePriority, x, y), _parentScene(parentScene) {
-
- // NOTE: Skipped check if Klaymen already has the needle since that's done in the scene itself
- SetMessageHandler(&AsScene1304Needle::handleMessage);
-}
-
-uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- break;
- case 0x4806:
- setGlobalVar(V_HAS_NEEDLE, 1);
- setVisible(false);
- SetMessageHandler(NULL);
- break;
- }
- return messageResult;
-}
-
-Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _asNeedle(NULL) {
-
- SetMessageHandler(&Scene1304::handleMessage);
-
- setRectList(0x004B91A8);
- setBackground(0x062C0214);
- setPalette(0x062C0214);
- insertScreenMouse(0xC021006A);
-
- if (getGlobalVar(V_BALLOON_POPPED)) {
- _asKey = insertSprite<AsCommonKey>(this, 0, 1100, 278, 347);
- addCollisionSprite(_asKey);
- } else {
- _asKey = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
- }
-
- if (!getGlobalVar(V_HAS_NEEDLE)) {
- _asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347);
- addCollisionSprite(_asNeedle);
- }
-
- _sprite1 = insertStaticSprite(0x0562E621, 1100);
- insertStaticSprite(0x012AE033, 1100);
- insertStaticSprite(0x090AF033, 1100);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1304>(217, 347);
- setMessageList(0x004B90E8);
- } else {
- // Klaymen entering from the left
- insertKlaymen<KmScene1304>(100, 347);
- setMessageList(0x004B90F0);
- }
-
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
-
-}
-
-uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x415634A4) {
- if (getGlobalVar(V_BALLOON_POPPED))
- cancelMessageList();
- else
- setMessageList(0x004B9158);
- }
- break;
- case 0x4826:
- if (sender == _asNeedle) {
- sendEntityMessage(_klaymen, 0x1014, _asNeedle);
- setMessageList(0x004B9130);
- } else if (sender == _asKey) {
- sendEntityMessage(_klaymen, 0x1014, _asKey);
- setMessageList(0x004B9140);
- }
- break;
- }
- return 0;
-}
-
-Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&Scene1305::handleMessage);
-
- setRectList(0x004B6E98);
- setBackground(0x28801B64);
- setPalette(0x28801B64);
- insertScreenMouse(0x01B60280);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1305>(212, 441);
- setMessageList(0x004B6E40);
- } else {
- // Klaymen enters falling
- insertKlaymen<KmScene1305>(212, 441);
- setMessageList(0x004B6E48);
- }
-
-}
-
-uint32 Scene1305::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- return Scene::handleMessage(messageNum, param, sender);
-}
-
-AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene, AnimatedSprite *asElevatorDoor)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _asElevatorDoor(asElevatorDoor), _isUp(false), _isDown(true),
- _countdown(0) {
-
- _x = 320;
- _y = 240;
- createSurface1(0x043B0270, 100);
- startAnimation(0x043B0270, 0, -1);
- _newStickFrameIndex = 0;
- loadSound(0, 0x1C100E83);
- loadSound(1, 0x1C08CEC5);
- loadSound(2, 0x5D011E87);
- SetMessageHandler(&AsScene1306Elevator::handleMessage);
-}
-
-void AsScene1306Elevator::update() {
- if (_isUp && _countdown != 0 && (--_countdown == 0))
- stGoingDown();
- AnimatedSprite::update();
- if (_currFrameIndex == 7) {
- playSound(1);
- _asElevatorDoor->setVisible(false);
- }
-}
-
-void AsScene1306Elevator::upGoingDown() {
- AnimatedSprite::update();
- if (_currFrameIndex == 5)
- _asElevatorDoor->setVisible(true);
-}
-
-uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2001:
- if (_isUp)
- _countdown = 144;
- messageResult = _isUp ? 1 : 0;
- break;
- case 0x3002:
- gotoNextState();
- break;
- case 0x4808:
- if (_isDown)
- stGoingUp();
- break;
- }
- return messageResult;
-}
-
-void AsScene1306Elevator::stGoingUp() {
- setVisible(true);
- _isDown = false;
- startAnimation(0x043B0270, 0, -1);
- playSound(0);
- SetUpdateHandler(&AsScene1306Elevator::update);
- NextState(&AsScene1306Elevator::cbGoingUpEvent);
-}
-
-void AsScene1306Elevator::cbGoingUpEvent() {
- sendMessage(_parentScene, 0x4808, 0);
- _isUp = true;
- _countdown = 144;
- stopAnimation();
- setVisible(false);
- SetUpdateHandler(&AsScene1306Elevator::update);
-}
-
-void AsScene1306Elevator::stGoingDown() {
- _isUp = false;
- setVisible(true);
- startAnimation(0x043B0270, -1, -1);
- _playBackwards = true;
- playSound(1);
- SetUpdateHandler(&AsScene1306Elevator::upGoingDown);
- NextState(&AsScene1306Elevator::cbGoingDownEvent);
-}
-
-void AsScene1306Elevator::cbGoingDownEvent() {
- _isDown = true;
- sendMessage(_parentScene, 0x4809, 0);
- stopAnimation();
- SetUpdateHandler(&AsScene1306Elevator::update);
-}
-
-Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule) {
-
- if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
- setGlobalVar(V_KEY3_LOCATION, 4);
-
- SetMessageHandler(&Scene1306::handleMessage);
-
- setBackground(0x05303114);
- setPalette(0x05303114);
- insertScreenMouse(0x0311005B);
-
- if (getGlobalVar(V_KEY3_LOCATION) == 4) {
- _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 435, 445);
- addCollisionSprite(_asKey);
- }
-
- _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
- _asTape = insertSprite<AsScene1201Tape>(this, 19, 1100, 359, 445, 0x9148A011);
- _asElevatorDoor = insertSprite<AnimatedSprite>(0x043B0270, 90, 320, 240);
- _asElevatorDoor->startAnimation(0x043B0270, 6, -1);
- _asElevatorDoor->setNewHashListIndex(6);
- _asElevator = insertSprite<AsScene1306Elevator>(this, _asElevatorDoor);
- _sprite1 = insertStaticSprite(0x036A1EE0, 80);
- insertStaticSprite(0x00042313, 1100);
-
- if (which < 0) {
- // Resoring game
- insertKlaymen<KmScene1306>(380, 440);
- setMessageList(0x004AFAD0);
- sendMessage(this, 0x2000, 0);
- addCollisionSprite(_asTape);
- } else if (which == 1) {
- // Klaymen teleporting in
- insertKlaymen<KmScene1306>(136, 440);
- sendMessage(_klaymen, 0x2000, 1);
- setMessageList(0x004AFAF0);
- sendMessage(this, 0x2000, 1);
- addCollisionSprite(_asTape);
- } else if (which == 2) {
- // Klaymen returning from diskplayer
- if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) {
- insertKlaymen<KmScene1306>(515, 440);
- _klaymen->setDoDeltaX(1);
- } else {
- insertKlaymen<KmScene1306>(355, 440);
- }
- setMessageList(0x004AFBC8);
- sendMessage(this, 0x2000, 0);
- addCollisionSprite(_asTape);
- } else if (which == 3) {
- // Klaymen returning from window
- insertKlaymen<KmScene1306>(534, 440);
- setMessageList(0x004AFC30);
- sendMessage(this, 0x2000, 0);
- addCollisionSprite(_asTape);
- } else if (which == 4) {
- // Klaymen teleporting out
- insertKlaymen<KmScene1306>(136, 440);
- sendMessage(_klaymen, 0x2000, 1);
- setMessageList(0x004AFC38);
- sendMessage(this, 0x2000, 1);
- addCollisionSprite(_asTape);
- } else if (which == 5) {
- // Klaymen returning from teleporter
- insertKlaymen<KmScene1306>(136, 440);
- sendMessage(_klaymen, 0x2000, 1);
- setMessageList(0x004AFB00);
- sendMessage(this, 0x2000, 1);
- addCollisionSprite(_asTape);
- } else {
- // Klaymen coming up in elevator
- insertKlaymen<KmScene1306>(286, 408);
- setSurfacePriority(_asElevator->getSurface(), 1100);
- setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
- setSurfacePriority(_sprite1->getSurface(), 1080);
- sendMessage(this, 0x2000, 0);
- SetMessageHandler(&Scene1306::handleMessage416EB0);
- clearRectList();
- sendMessage(_asElevator, 0x4808, 0);
- }
-
-}
-
-Scene1306::~Scene1306() {
- setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0);
-}
-
-uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x402064D8)
- sendEntityMessage(_klaymen, 0x1014, _ssButton);
- else if (param.asInteger() == 0x01C66840) {
- if (sendMessage(_asElevator, 0x2001, 0) != 0)
- setMessageList(0x004AFBD8);
- else
- setMessageList(0x004AFAE0);
- } else if (param.asInteger() == 0x8E646E00) {
- setMessageList(0x004AFAD8);
- clearRectList();
- SetMessageHandler(&Scene1306::handleMessage416EB0);
- }
- break;
- case 0x2000:
- if (param.asInteger() != 0) {
- setRectList(0x004AFD28);
- _klaymen->setKlaymenIdleTable3();
- } else {
- setRectList(0x004AFD18);
- _klaymen->setKlaymenIdleTable1();
- }
- break;
- case 0x480B:
- if (sender == _ssButton)
- sendMessage(_asElevator, 0x4808, 0);
- break;
- case 0x4826:
- if (sender == _asKey) {
- if (_klaymen->getX() >= 249) {
- sendEntityMessage(_klaymen, 0x1014, _asKey);
- setMessageList(0x004AFC58);
- }
- } else if (sender == _asTape) {
- if (_klaymen->getX() >= 249) {
- sendEntityMessage(_klaymen, 0x1014, _asTape);
- setMessageList(0x004AFC68);
- }
- }
- break;
- case 0x482A:
- setSurfacePriority(_asElevator->getSurface(), 1100);
- setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
- setSurfacePriority(_sprite1->getSurface(), 1080);
- break;
- case 0x482B:
- setSurfacePriority(_asElevator->getSurface(), 100);
- setSurfacePriority(_asElevatorDoor->getSurface(), 90);
- setSurfacePriority(_sprite1->getSurface(), 80);
- sendMessage(this, 0x2000, 0);
- addCollisionSprite(_asTape);
- break;
- }
- return 0;
-}
-
-uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4808:
- setMessageList(0x004AFBD0);
- SetMessageHandler(&Scene1306::handleMessage);
- break;
- case 0x4809:
- leaveScene(1);
- break;
- case 0x482A:
- setSurfacePriority(_asElevator->getSurface(), 1100);
- setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
- setSurfacePriority(_sprite1->getSurface(), 1080);
- break;
- case 0x482B:
- setSurfacePriority(_asElevator->getSurface(), 100);
- setSurfacePriority(_asElevatorDoor->getSurface(), 90);
- setSurfacePriority(_sprite1->getSurface(), 80);
- sendMessage(this, 0x2000, 0);
- addCollisionSprite(_asTape);
- break;
- }
- return 0;
-}
-
-static const uint32 kAsScene1307KeyResourceList1[] = {
- 0x0438069C, 0x45B0023C, 0x05700217
-};
-
-static const uint32 kAsScene1307KeyResourceList2[] = {
- 0x04441334, 0x061433F0, 0x06019390
-};
-
-static const uint32 kAsScene1307KeyResourceList3[] = {
- 0x11A80030, 0x178812B1, 0x1488121C
-};
-
-static const uint32 *kAsScene1307KeyResourceLists[] = {
- kAsScene1307KeyResourceList1,
- kAsScene1307KeyResourceList2,
- kAsScene1307KeyResourceList3
-};
-
-static const int kAsScene1307KeySurfacePriorities[] = {
- 700, 500, 300, 100
-};
-
-const uint kAsScene1307KeyPointsCount = 12;
-
-static const NPoint kAsScene1307KeyPoints[] = {
- {-2, 0}, {-5, 0}, { 5, 0},
- {12, 0}, {17, 0}, {25, 0},
- {16, -2}, {10, -6}, { 0, -7},
- {-7, -3}, {-3, 4}, { 2, 2}
-};
-
-const uint kAsScene1307KeyFrameIndicesCount = 20;
-
-static const int16 kAsScene1307KeyFrameIndices[] = {
- 1, 4, 8, 11, 15, 16, 17, 17, 17, 16,
- 15, 14, 12, 10, 9, 7, 5, 3, 2, 1
-};
-
-const int kAsScene1307KeyDivValue = 200;
-const int16 kAsScene1307KeyXDelta = 70;
-const int16 kAsScene1307KeyYDelta = -12;
-
-AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint keyIndex, NRect *clipRects)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _keyIndex(keyIndex), _clipRects(clipRects),
- _isClickable(true) {
-
- NPoint pt;
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
-
- _dataResource.load(0x22102142);
- _pointList = _dataResource.getPointArray(0xAC849240);
- pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)];
- _x = pt.x;
- _y = pt.y;
- createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4], 190, 148);
- startAnimation(fileHashes[0], 0, -1);
- loadSound(0, 0xDC4A1280);
- loadSound(1, 0xCC021233);
- loadSound(2, 0xC4C23844);
- loadSound(3, 0xC4523208);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1307Key::handleMessage);
-}
-
-uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- if (_isClickable) {
- sendMessage(_parentScene, 0x4826, 0);
- stRemoveKey();
- messageResult = 1;
- }
- break;
- case 0x2000:
- _isClickable = param.asInteger() != 0;
- break;
- case 0x2001:
- setSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex, param.asInteger());
- stMoveKey();
- break;
- case 0x2003:
- playSound(3);
- stUnlock();
- break;
- case 0x2004:
- playSound(2);
- stInsert();
- break;
- }
- return messageResult;
-}
-
-void AsScene1307Key::suRemoveKey() {
- if (_pointIndex < kAsScene1307KeyPointsCount) {
- _x += kAsScene1307KeyPoints[_pointIndex].x;
- _y += kAsScene1307KeyPoints[_pointIndex].y;
- updateBounds();
- _pointIndex++;
- } else {
- SetSpriteUpdate(NULL);
- }
-}
-
-void AsScene1307Key::suInsertKey() {
- if (_pointIndex < kAsScene1307KeyPointsCount) {
- _x -= kAsScene1307KeyPoints[kAsScene1307KeyPointsCount - _pointIndex - 1].x;
- _y -= kAsScene1307KeyPoints[kAsScene1307KeyPointsCount - _pointIndex - 1].y;
- updateBounds();
- _pointIndex++;
- if (_pointIndex == 7)
- playSound(0);
- } else {
- SetSpriteUpdate(NULL);
- sendMessage(_parentScene, 0x2002, 0);
- }
-}
-
-void AsScene1307Key::suMoveKey() {
- if (_pointIndex < kAsScene1307KeyFrameIndicesCount) {
- _frameIndex += kAsScene1307KeyFrameIndices[_pointIndex];
- _x = _prevX + (_deltaX * _frameIndex) / kAsScene1307KeyDivValue;
- _y = _prevY + (_deltaY * _frameIndex) / kAsScene1307KeyDivValue;
- updateBounds();
- _pointIndex++;
- } else {
- NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)];
- _x = pt.x + kAsScene1307KeyXDelta;
- _y = pt.y + kAsScene1307KeyYDelta;
- stInsertKey();
- }
-}
-
-void AsScene1307Key::stRemoveKey() {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
- _pointIndex = 0;
- startAnimation(fileHashes[0], 0, -1);
- playSound(1);
- SetSpriteUpdate(&AsScene1307Key::suRemoveKey);
-}
-
-void AsScene1307Key::stInsertKey() {
- _pointIndex = 0;
- sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4]);
- setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4]);
- _newStickFrameIndex = STICK_LAST_FRAME;
- SetSpriteUpdate(&AsScene1307Key::suInsertKey);
-}
-
-void AsScene1307Key::stMoveKey() {
- NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)];
- int16 newX = pt.x + kAsScene1307KeyXDelta;
- int16 newY = pt.y + kAsScene1307KeyYDelta;
- sendMessage(_parentScene, 0x1022, 1000);
- setClipRect(0, 0, 640, 480);
- _prevX = _x;
- _prevY = _y;
- if (newX == _x && newY == _y) {
- stInsertKey();
- } else {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
- _pointIndex = 0;
- _frameIndex = 0;
- _deltaX = newX - _x;
- _deltaY = newY - _y;
- startAnimation(fileHashes[0], 0, -1);
- SetSpriteUpdate(&AsScene1307Key::suMoveKey);
- }
-}
-
-void AsScene1307Key::stUnlock() {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
- startAnimation(fileHashes[1], 0, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
-}
-
-void AsScene1307Key::stInsert() {
- const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex];
- startAnimation(fileHashes[2], 0, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
-}
-
-Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _countdown(0), _asCurrKey(NULL),
- _isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) {
-
- Sprite *tempSprite;
-
- _vm->gameModule()->initKeySlotsPuzzle();
-
- _dataResource.load(0x22102142);
- _keyHolePoints = _dataResource.getPointArray(0xAC849240);
-
- for (uint i = 0; i < 16; i++) {
- NPoint pt = (*_keyHolePoints)[i];
- _keyHoleRects[i].x1 = pt.x - 15;
- _keyHoleRects[i].y1 = pt.y - 15;
- _keyHoleRects[i].x2 = pt.x + 15;
- _keyHoleRects[i].y2 = pt.y + 15;
- }
-
- SetMessageHandler(&Scene1307::handleMessage);
- SetUpdateHandler(&Scene1307::update);
-
- setBackground(0xA8006200);
- setPalette(0xA8006200);
- addEntity(_palette);
- insertPuzzleMouse(0x06204A88, 20, 620);
-
- tempSprite = insertStaticSprite(0x00A3621C, 800);
- _clipRects[0].set(tempSprite->getDrawRect().x, 0, 640, 480);
- tempSprite = insertStaticSprite(0x00A3641C, 600);
- _clipRects[1].set(tempSprite->getDrawRect().x, 0, 640, 480);
- tempSprite = insertStaticSprite(0x00A3681C, 400);
- _clipRects[2].set(tempSprite->getDrawRect().x, 0, 640, 480);
- tempSprite = insertStaticSprite(0x00A3701C, 200);
- _clipRects[3].set(tempSprite->getDrawRect().x, 0, 640, 480);
-
- for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
- if (getSubVar(VA_IS_KEY_INSERTED, keyIndex)) {
- _asKeys[keyIndex] = insertSprite<AsScene1307Key>(this, keyIndex, _clipRects);
- addCollisionSprite(_asKeys[keyIndex]);
- } else {
- _asKeys[keyIndex] = NULL;
- }
- }
-
- loadSound(0, 0x68E25540);
-
-}
-
-void Scene1307::update() {
- Scene::update();
- if (_countdown && (--_countdown == 0))
- _doLeaveScene = true;
- else if (_countdown == 20)
- _palette->startFadeToWhite(40);
- if (_doLeaveScene && !isSoundPlaying(0)) {
- leaveScene(1);
- setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
- }
-}
-
-uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = 0;
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (!_isPuzzleSolved) {
- if (param.asPoint().x > 20 && param.asPoint().x < 620) {
- if (_asCurrKey && !_isInsertingKey) {
- int16 mouseX = param.asPoint().x;
- int16 mouseY = param.asPoint().y;
- uint clickedKeyHoleIndex;
- for (clickedKeyHoleIndex = 0; clickedKeyHoleIndex < 16; clickedKeyHoleIndex++) {
- if (mouseX >= _keyHoleRects[clickedKeyHoleIndex].x1 && mouseX <= _keyHoleRects[clickedKeyHoleIndex].x2 &&
- mouseY >= _keyHoleRects[clickedKeyHoleIndex].y1 && mouseY <= _keyHoleRects[clickedKeyHoleIndex].y2)
- break;
- }
- if (clickedKeyHoleIndex < 16) {
- // Check if the clicked keyhole is already occupied with a key
- bool occupied = false;
- for (uint keyIndex = 0; keyIndex < 3 && !occupied; keyIndex++) {
- if (getSubVar(VA_IS_KEY_INSERTED, keyIndex) && _asKeys[keyIndex] != _asCurrKey) {
- if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, keyIndex) == clickedKeyHoleIndex)
- occupied = true;
- }
- }
- if (!occupied) {
- // If the keyhole is free, insert the current key
- sendMessage(_asCurrKey, 0x2001, clickedKeyHoleIndex);
- _isInsertingKey = true;
- _mouseClicked = false;
- }
- }
- }
- } else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey)
- leaveScene(0);
- }
- break;
- case 0x2002:
- // Check if all keys are in the correct keyholes
- if (getSubVar(VA_IS_KEY_INSERTED, 0) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 0) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0) &&
- getSubVar(VA_IS_KEY_INSERTED, 1) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 1) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 1) &&
- getSubVar(VA_IS_KEY_INSERTED, 2) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, 2) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 2)) {
- // Play unlock animations for all keys
- for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
- if (_asKeys[keyIndex])
- sendMessage(_asKeys[keyIndex], 0x2003, 1);
- }
- playSound(0);
- _isPuzzleSolved = true;
- _countdown = 47;
- } else {
- for (uint keyIndex = 0; keyIndex < 3; keyIndex++)
- if (getSubVar(VA_IS_KEY_INSERTED, keyIndex) && _asKeys[keyIndex])
- sendMessage(_asKeys[keyIndex], 0x2000, 1);
- sendMessage(_asCurrKey, 0x2004, 1);
- }
- _asCurrKey = NULL;
- _isInsertingKey = false;
- break;
- case 0x4826:
- _asCurrKey = (Sprite*)sender;
- for (uint keyIndex = 0; keyIndex < 3; keyIndex++)
- if (getSubVar(VA_IS_KEY_INSERTED, keyIndex) && _asKeys[keyIndex])
- sendMessage(_asKeys[keyIndex], 0x2000, 0);
- break;
- }
- return messageResult;
-}
-
-static const uint32 kScene1308NumberFileHashes[] = {
- 0x08006320, 0x10006320, 0x20006320,
- 0x40006320, 0x80006320, 0x00006321,
- 0x00006322, 0x00006324, 0x00006328,
- 0x08306320, 0x10306320, 0x20306320,
- 0x40306320, 0x80306320, 0x00306321,
- 0x00306322
-};
-
-AsScene1308JaggyDoor::AsScene1308JaggyDoor(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _parentScene(parentScene) {
-
- setVisible(false);
- stopAnimation();
- SetMessageHandler(&AsScene1308JaggyDoor::handleMessage);
-}
-
-uint32 AsScene1308JaggyDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- case 0x4808:
- stOpenDoor();
- break;
- case 0x4809:
- stCloseDoor();
- break;
- }
- return messageResult;
-}
-
-void AsScene1308JaggyDoor::stOpenDoor() {
- startAnimation(0xBA0AE050, 0, -1);
- setVisible(true);
- playSound(0, calcHash("fxDoorOpen38"));
- NextState(&AsScene1308JaggyDoor::stOpenDoorDone);
-}
-
-void AsScene1308JaggyDoor::stOpenDoorDone() {
- sendMessage(_parentScene, 0x2000, 0);
- stopAnimation();
- setVisible(false);
-}
-
-void AsScene1308JaggyDoor::stCloseDoor() {
- startAnimation(0xBA0AE050, -1, -1);
- _playBackwards = true;
- setVisible(true);
- playSound(0, calcHash("fxDoorClose38"));
- NextState(&AsScene1308JaggyDoor::stCloseDoorDone);
-}
-
-void AsScene1308JaggyDoor::stCloseDoorDone() {
- sendMessage(_parentScene, 0x2001, 0);
- stopAnimation();
-}
-
-AsScene1308KeyboardDoor::AsScene1308KeyboardDoor(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _parentScene(parentScene) {
-
- playSound(0, 0x51456049);
- SetMessageHandler(&AsScene1308KeyboardDoor::handleMessage);
- NextState(&AsScene1308KeyboardDoor::stFallingKeys);
-}
-
-uint32 AsScene1308KeyboardDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1308KeyboardDoor::stFallingKeys() {
- startAnimation(0x6238B191, 0, -1);
- _x = 580;
- _y = 383;
- NextState(&AsScene1308KeyboardDoor::stFallingKeysDone);
-}
-
-void AsScene1308KeyboardDoor::stFallingKeysDone() {
- sendMessage(_parentScene, 0x2004, 0);
- stopAnimation();
- setVisible(false);
-}
-
-AsScene1308LightWallSymbols::AsScene1308LightWallSymbols(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 0x80180A10, 100, 320, 240), _parentScene(parentScene) {
-
- setVisible(false);
- stopAnimation();
- Entity::_priority = 1200;
- SetMessageHandler(&AsScene1308LightWallSymbols::handleMessage);
-}
-
-uint32 AsScene1308LightWallSymbols::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2002:
- stFadeIn();
- break;
- case 0x2003:
- stFadeOut();
- break;
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1308LightWallSymbols::stFadeIn() {
- startAnimation(0x80180A10, 0, -1);
- setVisible(true);
- _newStickFrameIndex = STICK_LAST_FRAME;
-}
-
-void AsScene1308LightWallSymbols::stFadeOut() {
- startAnimation(0x80180A10, -1, -1);
- _playBackwards = true;
- NextState(&AsScene1308LightWallSymbols::stFadeOutDone);
-}
-
-void AsScene1308LightWallSymbols::stFadeOutDone() {
- sendMessage(_parentScene, 0x2003, 0);
- stopAnimation();
- setVisible(false);
-}
-
-SsScene1308Number::SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int index)
- : StaticSprite(vm, fileHash, 100) {
-
- setVisible(false);
- _x = _spriteResource.getPosition().x + index * 20;
- updatePosition();
-}
-
-AsScene1308Mouse::AsScene1308Mouse(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100) {
-
- _x = 286;
- _y = 429;
- createSurface1(0xA282C472, 100);
- startAnimation(0xA282C472, 0, -1);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1308Mouse::handleMessage);
-}
-
-uint32 AsScene1308Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x66382026)
- playSound(0, 0x0CD84468);
- else if (param.asInteger() == 0x6E28061C)
- playSound(0, 0x78C8402C);
- else if (param.asInteger() == 0x462F0410)
- playSound(0, 0x60984E28);
- break;
- }
- return messageResult;
-}
-
-Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _isProjecting(false), _asProjector(NULL) {
-
- _vm->gameModule()->initKeySlotsPuzzle();
-
- SetMessageHandler(&Scene1308::handleMessage);
-
- setBackground(0x41024202);
- setPalette(0x41024202);
- insertScreenMouse(0x24206418);
-
- _asTape = insertSprite<AsScene1201Tape>(this, 17, 1100, 502, 445, 0x9148A011);
- addCollisionSprite(_asTape);
-
- if (getGlobalVar(V_MOUSE_SUCKED_IN)) {
- insertSprite<AsScene1308Mouse>();
- insertSprite<AnimatedSprite>(0x461A1490, 200, 235, 429);
- }
-
- _sprite1 = insertStaticSprite(0x0A042060, 1100);
- _asJaggyDoor = insertSprite<AsScene1308JaggyDoor>(this);
- _asLightWallSymbols = insertSprite<AsScene1308LightWallSymbols>(this);
- _ssNumber1 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 1)], 0);
- _ssNumber2 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0)], 1);
- _ssNumber3 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 2)], 2);
- _sprite2 = insertStaticSprite(0x40043120, 995);
- _sprite3 = insertStaticSprite(0x43003100, 995);
- _sprite4 = NULL;
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1308>(380, 440);
- setMessageList(0x004B57C0);
- if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
- _sprite4 = insertStaticSprite(0x0101A624, 1100);
- setRectList(0x004B5990);
- } else {
- _sprite5 = insertStaticSprite(0x080811A0, 100);
- setRectList(0x004B5980);
- }
- } else if (which == 1) {
- // Klaymen entering from the right
- insertKlaymen<KmScene1308>(640, 440);
- setMessageList(0x004B57C8);
- if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
- _sprite4 = insertStaticSprite(0x0101A624, 1100);
- setRectList(0x004B5990);
- } else {
- _sprite5 = insertStaticSprite(0x080811A0, 100);
- setRectList(0x004B5980);
- }
- } else if (which == 2) {
- // Klaymen returning from keyslots panel
- insertKlaymen<KmScene1308>(475, 440);
- setMessageList(0x004B58B0);
- if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
- _sprite5 = insertSprite<AsScene1308KeyboardDoor>(this);
- _sprite4 = insertStaticSprite(0x0101A624, 1100);
- _sprite4->setVisible(false);
- } else {
- _sprite5 = insertStaticSprite(0x080811A0, 100);
- setRectList(0x004B5980);
- }
- } else {
- // Klaymen entering from the left
- insertKlaymen<KmScene1308>(41, 440);
- setMessageList(0x004B57D0);
- sendMessage(_asJaggyDoor, 0x4808, 0);
- _sprite1->setVisible(false);
- if (getGlobalVar(V_KEYDOOR_UNLOCKED)) {
- _sprite4 = insertStaticSprite(0x0101A624, 1100);
- _klaymen->setVisible(false);
- } else {
- _sprite5 = insertStaticSprite(0x080811A0, 100);
- _klaymen->setVisible(false);
- }
- }
-
- if (_sprite4)
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, _sprite4->getDrawRect().x2(), 480);
- else
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
-
- if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) {
- _asProjector = insertSprite<AsCommonProjector>(this, _klaymen, (Sprite*)NULL);
- addCollisionSprite(_asProjector);
- _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
- _asProjector->setRepl(64, 0);
- }
-
-}
-
-uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x88C11390) {
- setRectList(0x004B59A0);
- _isProjecting = true;
- } else if (param.asInteger() == 0x08821382) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- if (getGlobalVar(V_KEYDOOR_UNLOCKED))
- setRectList(0x004B5990);
- else
- setRectList(0x004B5980);
- _isProjecting = false;
- } else if (param.asInteger() == 0x4AC68808) {
- clearRectList();
- sendMessage(_asJaggyDoor, 0x4809, 0);
- _sprite1->setVisible(false);
- _klaymen->setVisible(false);
- }
- break;
- case 0x1022:
- if (sender == _asProjector) {
- if (param.asInteger() >= 1000)
- setSurfacePriority(_sprite3->getSurface(), 1100);
- else
- setSurfacePriority(_sprite3->getSurface(), 995);
- }
- break;
- case 0x2000:
- if (getGlobalVar(V_KEYDOOR_UNLOCKED))
- setRectList(0x004B5990);
- else
- setRectList(0x004B5980);
- setMessageList(0x004B57E8, false);
- _sprite1->setVisible(true);
- _klaymen->setVisible(true);
- break;
- case 0x2001:
- leaveScene(0);
- break;
- case 0x2003:
- _ssNumber1->setVisible(false);
- _ssNumber2->setVisible(false);
- _ssNumber3->setVisible(false);
- break;
- case 0x2004:
- _sprite4->setVisible(true);
- setRectList(0x004B5990);
- break;
- case 0x4807:
- sendMessage(_asLightWallSymbols, 0x2003, 0);
- break;
- case 0x480F:
- sendMessage(_asLightWallSymbols, 0x2002, 0);
- _ssNumber1->setVisible(true);
- _ssNumber2->setVisible(true);
- _ssNumber3->setVisible(true);
- break;
- case 0x4826:
- if (sender == _asProjector) {
- if (_isProjecting)
- setMessageList2(0x004B5868);
- else {
- if (param.asInteger() == 1) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B5848);
- } else if (sendMessage(_asProjector, 0x480C, _klaymen->getX() <= _asProjector->getX() ? 0 : 1) != 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B5830);
- } else
- setMessageList2(0x004B5800);
- }
- } else if (sender == _asTape) {
- if (_isProjecting)
- setMessageList2(0x004B5868);
- else if (_messageListStatus != 2) {
- sendEntityMessage(_klaymen, 0x1014, _asTape);
- setMessageList2(0x004B58E0);
- }
- }
- break;
- }
- return 0;
-}
-
-Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule) {
-
- SetMessageHandler(&Scene1317::handleMessage);
- _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false));
- _vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
- insertScreenMouse(0x08284011);
- showMouse(false);
- _smackerFileHash = 0;
- _keepLastSmackerFrame = false;
-}
-
-void Scene1317::update() {
- if (_smackerFileHash) {
- _smackerPlayer->open(_smackerFileHash, _keepLastSmackerFrame);
- _smackerFileHash = 0;
- }
- Scene::update();
-}
-
-void Scene1317::upChooseKing() {
- if (!_klaymenBlinks && _klaymenBlinkCountdown != 0 && (--_klaymenBlinkCountdown == 0))
- _klaymenBlinks = true;
-
- if (!_klaymenBlinks && _smackerPlayer->getFrameNumber() + 1 >= 2) {
- _smackerPlayer->rewind();
- } else if (_klaymenBlinks && _smackerPlayer->getFrameNumber() + 1 >= 6) {
- _smackerPlayer->rewind();
- _klaymenBlinks = false;
- _klaymenBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15;
- }
-
- if (!_klaymenBlinks && _decisionCountdown != 0 && (--_decisionCountdown == 0))
- stNoDecisionYet();
-
- if (_smackerFileHash) {
- _smackerPlayer->open(_smackerFileHash, _keepLastSmackerFrame);
- _smackerFileHash = 0;
- }
-
- Scene::update();
-
-}
-
-uint32 Scene1317::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- stChooseKing();
- break;
- }
- return messageResult;
-}
-
-uint32 Scene1317::hmChooseKing(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x >= 21 && param.asPoint().y >= 24 &&
- param.asPoint().x <= 261 && param.asPoint().y <= 280) {
- stHoborgAsKing();
- } else if (param.asPoint().x >= 313 && param.asPoint().y >= 184 &&
- param.asPoint().x <= 399 && param.asPoint().y <= 379) {
- stKlaymenAsKing();
- } else if (param.asPoint().x >= 347 && param.asPoint().y >= 380 &&
- param.asPoint().x <= 418 && param.asPoint().y <= 474) {
- stKlaymenAsKing();
- }
- break;
- }
- return messageResult;
-}
-
-uint32 Scene1317::hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- stEndMovie();
- break;
- }
- return messageResult;
-}
-
-uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- leaveScene(0);
- break;
- }
- return messageResult;
-}
-
-void Scene1317::stChooseKing() {
- showMouse(true);
- _smackerFileHash = 0x10982841;
- _keepLastSmackerFrame = true;
- _decisionCountdown = 450;
- _klaymenBlinks = false;
- _klaymenBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15;
- SetMessageHandler(&Scene1317::hmChooseKing);
- SetUpdateHandler(&Scene1317::upChooseKing);
-}
-
-void Scene1317::stNoDecisionYet() {
- showMouse(false);
- _smackerFileHash = 0x20982841;
- _keepLastSmackerFrame = false;
- SetMessageHandler(&Scene1317::handleMessage);
- SetUpdateHandler(&Scene1317::update);
-}
-
-void Scene1317::stHoborgAsKing() {
- showMouse(false);
- _smackerFileHash = 0x40982841;
- _keepLastSmackerFrame = false;
- SetMessageHandler(&Scene1317::hmHoborgAsKing);
- SetUpdateHandler(&Scene1317::update);
-}
-
-void Scene1317::stKlaymenAsKing() {
- showMouse(false);
- _smackerFileHash = 0x80982841;
- _keepLastSmackerFrame = false;
- SetMessageHandler(&Scene1317::hmEndMovie);
- SetUpdateHandler(&Scene1317::update);
-}
-
-void Scene1317::stEndMovie() {
- showMouse(false);
- _smackerFileHash = 0x40800711;
- _keepLastSmackerFrame = false;
- SetMessageHandler(&Scene1317::hmEndMovie);
- SetUpdateHandler(&Scene1317::update);
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h
deleted file mode 100644
index 147bfd0..0000000
--- a/engines/neverhood/module1300.h
+++ /dev/null
@@ -1,295 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_MODULE1300_H
-#define NEVERHOOD_MODULE1300_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/module.h"
-#include "neverhood/scene.h"
-#include "neverhood/smackerplayer.h"
-
-namespace Neverhood {
-
-// Module1300
-
-class Module1300 : public Module {
-public:
- Module1300(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Module1300();
-protected:
- int _sceneNum;
- uint32 _musicFileHash;
- void createScene(int sceneNum, int which);
- void updateScene();
-};
-
-class AsScene1302Bridge : public AnimatedSprite {
-public:
- AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stLowerBridge();
- void stRaiseBridge();
- void cbLowerBridgeEvent();
-};
-
-class SsScene1302Fence : public StaticSprite {
-public:
- SsScene1302Fence(NeverhoodEngine *vm);
-protected:
- int16 _firstY;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suMoveDown();
- void suMoveUp();
-};
-
-class Scene1302 : public Scene {
-public:
- Scene1302(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_asVenusFlyTrap;
- Sprite *_asBridge;
- Sprite *_ssFence;
- Sprite *_asRing1;
- Sprite *_asRing2;
- Sprite *_asRing3;
- Sprite *_asRing4;
- Sprite *_asRing5;
- Sprite *_class595;
- Sprite *_sprite1;
- Sprite *_sprite2;
- Sprite *_sprite3;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1303Balloon : public AnimatedSprite {
-public:
- AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender);
- void stPopBalloon();
-};
-
-class Scene1303 : public Scene {
-public:
- Scene1303(NeverhoodEngine *vm, Module *parentModule);
-protected:
- Sprite *_sprite1;
- Sprite *_asBalloon;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1304Needle : public AnimatedSprite {
-public:
- AsScene1304Needle(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1304 : public Scene {
-public:
- Scene1304(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_sprite1;
- Sprite *_asKey;
- Sprite *_asNeedle;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1305 : public Scene {
-public:
- Scene1305(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1306Elevator : public AnimatedSprite {
-public:
- AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene, AnimatedSprite *asElevatorDoor);
-protected:
- Scene *_parentScene;
- AnimatedSprite *_asElevatorDoor;
- bool _isUp;
- bool _isDown;
- int _countdown;
- void update();
- void upGoingDown();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stGoingUp();
- void cbGoingUpEvent();
- void stGoingDown();
- void cbGoingDownEvent();
-};
-
-class Scene1306 : public Scene {
-public:
- Scene1306(NeverhoodEngine *vm, Module *parentModule, int which);
- ~Scene1306();
-protected:
- Sprite *_ssButton;
- Sprite *_asTape;
- AnimatedSprite *_asElevatorDoor;
- Sprite *_asElevator;
- Sprite *_sprite1;
- Sprite *_asKey;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 handleMessage416EB0(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1307Key : public AnimatedSprite {
-public:
- AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint keyIndex, NRect *clipRects);
-protected:
- Scene *_parentScene;
- NPointArray *_pointList;
- uint _pointIndex;
- int _frameIndex;
- uint _keyIndex;
- NRect *_clipRects;
- bool _isClickable;
- int16 _prevX, _prevY;
- int16 _deltaX, _deltaY;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suRemoveKey();
- void suInsertKey();
- void suMoveKey();
- void stRemoveKey();
- void stInsertKey();
- void stMoveKey();
- void stUnlock();
- void stInsert();
-};
-
-class Scene1307 : public Scene {
-public:
- Scene1307(NeverhoodEngine *vm, Module *parentModule);
-protected:
- NPointArray *_keyHolePoints;
- NRect _keyHoleRects[16];
- NRect _clipRects[4];
- Sprite *_asKeys[3];
- int _countdown;
- Sprite *_asCurrKey;
- bool _isInsertingKey;
- bool _doLeaveScene;
- bool _isPuzzleSolved;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class AsScene1308JaggyDoor : public AnimatedSprite {
-public:
- AsScene1308JaggyDoor(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stOpenDoor();
- void stOpenDoorDone();
- void stCloseDoor();
- void stCloseDoorDone();
-};
-
-class AsScene1308KeyboardDoor : public AnimatedSprite {
-public:
- AsScene1308KeyboardDoor(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stFallingKeys();
- void stFallingKeysDone();
-};
-
-class AsScene1308LightWallSymbols : public AnimatedSprite {
-public:
- AsScene1308LightWallSymbols(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stFadeIn();
- void stFadeOut();
- void stFadeOutDone();
-};
-
-class SsScene1308Number : public StaticSprite {
-public:
- SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int index);
-};
-
-class AsScene1308Mouse : public AnimatedSprite {
-public:
- AsScene1308Mouse(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1308 : public Scene {
-public:
- Scene1308(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_asTape;
- Sprite *_asJaggyDoor;
- Sprite *_asLightWallSymbols;
- Sprite *_ssNumber1;
- Sprite *_ssNumber2;
- Sprite *_ssNumber3;
- AnimatedSprite *_asProjector;
- Sprite *_sprite1;
- Sprite *_sprite2;
- Sprite *_sprite3;
- Sprite *_sprite4;
- Sprite *_sprite5;
- bool _isProjecting;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1317 : public Scene {
-public:
- Scene1317(NeverhoodEngine *vm, Module *parentModule);
-protected:
- SmackerPlayer *_smackerPlayer;
- bool _klaymenBlinks;
- int _klaymenBlinkCountdown;
- int _decisionCountdown;
- uint32 _smackerFileHash;
- bool _keepLastSmackerFrame;
- void update();
- void upChooseKing();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmChooseKing(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender);
- void stChooseKing();
- void stNoDecisionYet();
- void stHoborgAsKing();
- void stKlaymenAsKing();
- void stEndMovie();
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_MODULE1300_H */
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
deleted file mode 100644
index 8aa0632..0000000
--- a/engines/neverhood/module1400.cpp
+++ /dev/null
@@ -1,1621 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1400.h"
-#include "neverhood/module1000.h"
-#include "neverhood/module2100.h"
-#include "neverhood/module2200.h"
-#include "neverhood/diskplayerscene.h"
-#include "neverhood/gamemodule.h"
-
-namespace Neverhood {
-
-Module1400::Module1400(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- _vm->_soundMan->addMusic(0x00AD0012, 0x06333232);
- _vm->_soundMan->addMusic(0x00AD0012, 0x624A220E);
-
- if (which < 0)
- createScene(_vm->gameState().sceneNum, -1);
- else
- createScene(0, 0);
-
-}
-
-Module1400::~Module1400() {
- _vm->_soundMan->deleteMusicGroup(0x00AD0012);
-}
-
-void Module1400::createScene(int sceneNum, int which) {
- debug("Module1400::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 0:
- _vm->gameState().sceneNum = 0;
- _vm->_soundMan->startMusic(0x06333232, 0, 2);
- _childObject = new Scene1401(_vm, this, which);
- break;
- case 1:
- _vm->gameState().sceneNum = 1;
- _vm->_soundMan->stopMusic(0x06333232, 0, 2);
- _vm->_soundMan->stopMusic(0x624A220E, 0, 2);
- _childObject = new Scene1402(_vm, this, which);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- _vm->_soundMan->stopMusic(0x06333232, 0, 2);
- _vm->_soundMan->startMusic(0x624A220E, 0, 2);
- _childObject = new Scene1403(_vm, this, which);
- break;
- case 3:
- _vm->gameState().sceneNum = 3;
- _vm->_soundMan->startMusic(0x06333232, 0, 2);
- _childObject = new Scene1404(_vm, this, which);
- break;
- case 4:
- _vm->gameState().sceneNum = 4;
- _vm->_soundMan->startMusic(0x06333232, 0, 2);
- _childObject = new Scene1405(_vm, this);
- break;
- case 5:
- _vm->gameState().sceneNum = 5;
- _vm->_soundMan->stopMusic(0x06333232, 0, 2);
- _childObject = new DiskplayerScene(_vm, this, 2);
- break;
- case 6:
- _vm->gameState().sceneNum = 6;
- _vm->_soundMan->stopMusic(0x06333232, 0, 2);
- _childObject = new Scene1407(_vm, this);
- break;
- }
- SetUpdateHandler(&Module1400::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1400::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 0:
- if (_moduleResult == 1)
- createScene(1, 0);
- else if (_moduleResult == 2)
- createScene(3, 0);
- else
- leaveModule(0);
- break;
- case 1:
- if (_moduleResult == 1)
- createScene(2, 0);
- else if (_moduleResult == 2)
- createScene(6, -1);
- else
- createScene(0, 1);
- break;
- case 2:
- createScene(1, 1);
- break;
- case 3:
- if (_moduleResult == 1)
- createScene(4, 0);
- else if (_moduleResult == 2)
- createScene(5, -1);
- else
- createScene(0, 2);
- break;
- case 4:
- createScene(3, 1);
- break;
- case 5:
- createScene(3, 2);
- break;
- case 6:
- createScene(1, 2);
- break;
- }
- }
-}
-
-// Scene1401
-
-AsScene1401Pipe::AsScene1401Pipe(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100), _countdown1(0), _countdown2(0) {
-
- createSurface(900, 152, 147);
- _x = 454;
- _y = 217;
- startAnimation(0x4C210500, 0, -1);
- SetUpdateHandler(&AsScene1401Pipe::update);
- SetMessageHandler(&AsScene1401Pipe::handleMessage);
-}
-
-AsScene1401Pipe::~AsScene1401Pipe() {
- _vm->_soundMan->deleteSoundGroup(0x01104C08);
-}
-
-void AsScene1401Pipe::update() {
- AnimatedSprite::update();
- if (_countdown1 != 0 && (--_countdown1 == 0))
- stDoneSucking();
- if (_countdown2 != 0 && (--_countdown2 == 0)) {
- _vm->_soundMan->addSound(0x01104C08, 0x4A116437);
- _vm->_soundMan->playSoundLooping(0x4A116437);
- }
-}
-
-void AsScene1401Pipe::upSuckInProjector() {
- AnimatedSprite::update();
- if (_countdown1 != 0)
- _countdown1--;
-}
-
-uint32 AsScene1401Pipe::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x0A8A1490)
- playSound(1, 0x6AB6666F);
- break;
- case 0x2000:
- _countdown1 = 70;
- _countdown2 = 8;
- stStartSucking();
- break;
- case 0x483A:
- stSuckInProjector();
- break;
- }
- return messageResult;
-}
-
-uint32 AsScene1401Pipe::hmSuckInProjector(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- if (_countdown1 != 0)
- stStartSucking();
- else
- stDoneSucking();
- SetMessageHandler(&AsScene1401Pipe::handleMessage);
- SetUpdateHandler(&AsScene1401Pipe::update);
- break;
- }
- return messageResult;
-}
-
-void AsScene1401Pipe::stStartSucking() {
- startAnimation(0x4C240100, 0, -1);
- playSound(0, 0x4A30063F);
-}
-
-void AsScene1401Pipe::stDoneSucking() {
- _vm->_soundMan->deleteSound(0x4A116437);
- playSound(0, 0x4A120435);
- startAnimation(0x4C210500, 0, -1);
-}
-
-void AsScene1401Pipe::stSuckInProjector() {
- startAnimation(0x6C210810, 0, -1);
- SetUpdateHandler(&AsScene1401Pipe::upSuckInProjector);
- SetMessageHandler(&AsScene1401Pipe::hmSuckInProjector);
-}
-
-AsScene1401Mouse::AsScene1401Mouse(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100) {
-
- createSurface(100, 71, 41);
- _x = 478;
- _y = 433;
- startAnimation(0xA282C472, 0, -1);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1401Mouse::handleMessage);
-}
-
-uint32 AsScene1401Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x66382026)
- playSound(0, 0x0CD84468);
- else if (param.asInteger() == 0x6E28061C)
- playSound(0, 0x78C8402C);
- else if (param.asInteger() == 0x462F0410)
- playSound(0, 0x60984E28);
- break;
- case 0x4839:
- stSuckedIn();
- break;
- }
- return messageResult;
-}
-
-void AsScene1401Mouse::suSuckedIn() {
- AnimatedSprite::updateDeltaXY();
- if (_collisionBounds.y1 <= 150) {
- playSound(0, 0x0E32247F);
- stopAnimation();
- setVisible(false);
- SetMessageHandler(NULL);
- SetSpriteUpdate(NULL);
- }
-}
-
-void AsScene1401Mouse::stSuckedIn() {
- startAnimation(0x34880040, 0, -1);
- SetSpriteUpdate(&AsScene1401Mouse::suSuckedIn);
-}
-
-AsScene1401Cheese::AsScene1401Cheese(NeverhoodEngine *vm)
- : AnimatedSprite(vm, 1100) {
-
- createSurface(200, 152, 147);
- _x = 427;
- _y = 433;
- startAnimation(0x461A1490, 0, -1);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1401Cheese::handleMessage);
-}
-
-uint32 AsScene1401Cheese::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x4839:
- stSuckedIn();
- break;
- }
- return messageResult;
-}
-
-void AsScene1401Cheese::suSuckedIn() {
- AnimatedSprite::updateDeltaXY();
- if (_collisionBounds.y1 <= 150) {
- playSound(0, 0x18020439);
- stopAnimation();
- setVisible(false);
- SetMessageHandler(NULL);
- SetSpriteUpdate(NULL);
- }
-}
-
-void AsScene1401Cheese::stSuckedIn() {
- startAnimation(0x103B8020, 0, -1);
- SetSpriteUpdate(&AsScene1401Cheese::suSuckedIn);
-}
-
-AsScene1401BackDoor::AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen)
- : AnimatedSprite(vm, 1100), _klaymen(klaymen), _countdown(0), _isOpen(isOpen) {
-
- _x = 320;
- _y = 240;
- createSurface1(0x04551900, 100);
- if (isOpen) {
- startAnimation(0x04551900, -1, -1);
- _countdown = 48;
- } else {
- stopAnimation();
- setVisible(false);
- }
- _newStickFrameIndex = STICK_LAST_FRAME;
- SetUpdateHandler(&AsScene1401BackDoor::update);
- SetMessageHandler(&AsScene1401BackDoor::handleMessage);
-}
-
-void AsScene1401BackDoor::update() {
- if (_countdown != 0 && (--_countdown == 0))
- stCloseDoor();
- AnimatedSprite::update();
-}
-
-
-uint32 AsScene1401BackDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2001:
- if (_isOpen)
- _countdown = 168;
- messageResult = _isOpen ? 1 : 0;
- break;
- case 0x3002:
- gotoNextState();
- break;
- case 0x4808:
- _countdown = 168;
- if (!_isOpen)
- stOpenDoor();
- break;
- }
- return messageResult;
-}
-
-void AsScene1401BackDoor::stOpenDoor() {
- _isOpen = true;
- setVisible(true);
- startAnimation(0x04551900, 0, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- playSound(0, calcHash("fxDoorOpen24"));
-}
-
-void AsScene1401BackDoor::stCloseDoor() {
- _isOpen = false;
- setVisible(true);
- startAnimation(0x04551900, -1, -1);
- playSound(0, calcHash("fxDoorClose24"));
- _playBackwards = true;
- NextState(&AsScene1401BackDoor::stCloseDoorDone);
-}
-
-void AsScene1401BackDoor::stCloseDoorDone() {
- stopAnimation();
- setVisible(false);
-}
-
-static const AsCommonProjectorItem kAsCommonProjectorItems[] = {
- {{154, 453}, 4, 2, 0, 0, 1},
- {{104, 391}, 4, -1, -1, 1, 1},
- {{ 22, 447}, 6, -1, -1, 1, 1},
- {{112, 406}, 2, -1, -1, 1, 0},
- {{262, 433}, 1, 1, 0, 0, 0}
-};
-
-AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, Sprite *asPipe)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klaymen(klaymen), _asPipe(asPipe) {
-
- _asProjectorItem = &kAsCommonProjectorItems[getGlobalVar(V_PROJECTOR_LOCATION)];
- createSurface(990, 101, 182);
- startAnimation(0x10E3042B, 0, -1);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsCommonProjector::handleMessage);
- _x = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
- _lockedInSlot = true;
- moveProjector();
- setDoDeltaX(1);
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->lockSlotIndex)
- stStayLockedInSlot();
- loadSound(2, 0xC8C2507C);
-}
-
-AsCommonProjector::~AsCommonProjector() {
- _vm->_soundMan->deleteSoundGroup(0x05331081);
-}
-
-uint32 AsCommonProjector::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- break;
- case 0x4807:
- setGlobalVar(V_PROJECTOR_SLOT, (_x - _asProjectorItem->point.x) / 108);
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->lockSlotIndex)
- stStartLockedInSlot();
- else
- stIdle();
- break;
- case 0x480B:
- if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount)
- incGlobalVar(V_PROJECTOR_SLOT, 1);
- } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0)
- incGlobalVar(V_PROJECTOR_SLOT, -1);
- stMoving();
- break;
- case 0x480C:
- // Check if the projector can be moved
- if (param.asInteger() != 1)
- messageResult = (int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount ? 1 : 0;
- else
- messageResult = getGlobalVar(V_PROJECTOR_SLOT) > 0 ? 1 : 0;
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- case 0x4839:
- stStartSuckedIn();
- break;
- }
- return messageResult;
-}
-
-uint32 AsCommonProjector::hmLockedInSlot(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- if (param.asPoint().x - _x >= 17 && param.asPoint().x - _x <= 56 &&
- param.asPoint().y - _y >= -120 && param.asPoint().y - _y <= -82) {
- sendMessage(_parentScene, 0x4826, 1);
- } else
- sendMessage(_parentScene, 0x4826, 0);
- messageResult = 1;
- break;
- case 0x4807:
- sendMessage(_parentScene, 0x4807, 0);
- stStopProjecting();
- break;
- case 0x480B:
- if (param.asInteger() != 1) {
- if ((int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount)
- incGlobalVar(V_PROJECTOR_SLOT, 1);
- } else if (getGlobalVar(V_PROJECTOR_SLOT) > 0)
- incGlobalVar(V_PROJECTOR_SLOT, -1);
- stTurnToFront();
- break;
- case 0x480C:
- // Check if the projector can be moved
- if (param.asInteger() != 1)
- messageResult = (int8)getGlobalVar(V_PROJECTOR_SLOT) < _asProjectorItem->maxSlotCount ? 1 : 0;
- else
- messageResult = getGlobalVar(V_PROJECTOR_SLOT) > 0 ? 1 : 0;
- break;
- case 0x480F:
- stStartProjecting();
- break;
- case 0x482A:
- sendMessage(_parentScene, 0x1022, 990);
- break;
- case 0x482B:
- sendMessage(_parentScene, 0x1022, 1010);
- break;
- }
- return messageResult;
-}
-
-uint32 AsCommonProjector::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsCommonProjector::suMoving() {
- if (_x <= _klaymen->getX())
- _x = _klaymen->getX() - 100;
- else
- _x = _klaymen->getX() + 100;
- moveProjector();
- if (_beforeMoveX == _x) {
- if (getGlobalVar(V_PROJECTOR_SLOT) == 0 && _asProjectorItem->leftBorderLeaves != 0) {
- sendMessage(_parentScene, 0x1019, 0);
- incGlobalVar(V_PROJECTOR_LOCATION, -1);
- setGlobalVar(V_PROJECTOR_SLOT, kAsCommonProjectorItems[getGlobalVar(V_PROJECTOR_LOCATION)].maxSlotCount);
- } else if ((int8)getGlobalVar(V_PROJECTOR_SLOT) == _asProjectorItem->maxSlotCount && _asProjectorItem->rightBorderLeaves != 0) {
- sendMessage(_parentScene, 0x1019, 1);
- incGlobalVar(V_PROJECTOR_LOCATION, +1);
- setGlobalVar(V_PROJECTOR_SLOT, 0);
- }
- }
- Sprite::updateBounds();
-}
-
-void AsCommonProjector::moveProjector() {
-
- bool nowLockedInSlot = false;
-
- _y = _asProjectorItem->point.y;
-
- if (_asProjectorItem->index1 != -1) {
- int16 elX = _asProjectorItem->index1 * 108 + _asProjectorItem->point.x;
- if (elX - 20 < _x && elX + 20 > _x) {
- nowLockedInSlot = true;
- _y = _asProjectorItem->point.y + 10;
- }
- }
-
- if (_asProjectorItem->lockSlotIndex != -1) {
- int16 elX = _asProjectorItem->lockSlotIndex * 108 + _asProjectorItem->point.x;
- if (elX - 20 < _x && elX + 20 > _x) {
- nowLockedInSlot = true;
- _y = _asProjectorItem->point.y + 10;
- }
- }
-
- if (_lockedInSlot && !nowLockedInSlot)
- _lockedInSlot = false;
- else if (!_lockedInSlot && nowLockedInSlot) {
- playSound(1, 0x5440E474);
- _lockedInSlot = true;
- }
-
-}
-
-void AsCommonProjector::stSuckedIn() {
- AnimatedSprite::updateDeltaXY();
- if (_collisionBounds.y1 <= 150) {
- sendMessage(_asPipe, 0x483A, 0);
- stopAnimation();
- setVisible(false);
- SetMessageHandler(&Sprite::handleMessage);
- SetSpriteUpdate(NULL);
- }
-}
-
-void AsCommonProjector::stIdle() {
- startAnimation(0x10E3042B, 0, -1);
- SetMessageHandler(&AsCommonProjector::handleMessage);
- SetSpriteUpdate(NULL);
-}
-
-void AsCommonProjector::stMoving() {
- _beforeMoveX = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
- startAnimation(0x14A10137, 0, -1);
- playSound(1, 0xEC008474);
- SetMessageHandler(&AsCommonProjector::handleMessage);
- SetSpriteUpdate(&AsCommonProjector::suMoving);
-}
-
-void AsCommonProjector::stStartLockedInSlot() {
- startAnimation(0x80C32213, 0, -1);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
- SetSpriteUpdate(NULL);
- NextState(&AsCommonProjector::stStayLockedInSlot);
-}
-
-void AsCommonProjector::stStayLockedInSlot() {
- startAnimation(0xD23B207F, 0, -1);
- SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
- SetSpriteUpdate(NULL);
-}
-
-void AsCommonProjector::stStartProjecting() {
- startAnimation(0x50A80517, 0, -1);
- setGlobalVar(V_PROJECTOR_ACTIVE, 1);
- playSound(0, 0xCC4A8456);
- _vm->_soundMan->addSound(0x05331081, 0xCE428854);
- _vm->_soundMan->playSoundLooping(0xCE428854);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
- SetSpriteUpdate(NULL);
- NextState(&AsCommonProjector::stLockedInSlot);
-}
-
-void AsCommonProjector::stLockedInSlot() {
- sendMessage(_parentScene, 0x480F, 0);
- startAnimation(0xD833207F, 0, -1);
- SetMessageHandler(&AsCommonProjector::hmLockedInSlot);
- SetSpriteUpdate(NULL);
-}
-
-void AsCommonProjector::stStopProjecting() {
- startAnimation(0x50A94417, 0, -1);
- setGlobalVar(V_PROJECTOR_ACTIVE, 0);
- playSound(0, 0xCC4A8456);
- _vm->_soundMan->deleteSound(0xCE428854);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
- SetSpriteUpdate(NULL);
- NextState(&AsCommonProjector::stStayLockedInSlot);
-}
-
-void AsCommonProjector::stTurnToFront() {
- _beforeMoveX = getGlobalVar(V_PROJECTOR_SLOT) * 108 + _asProjectorItem->point.x;
- startAnimation(0x22CB4A33, 0, -1);
- SetMessageHandler(&AsCommonProjector::hmAnimation);
- SetSpriteUpdate(&AsCommonProjector::suMoving);
- NextState(&AsCommonProjector::stMoving);
-}
-
-void AsCommonProjector::stStartSuckedIn() {
- setGlobalVar(V_PROJECTOR_LOCATION, 4);
- setGlobalVar(V_PROJECTOR_SLOT, 0);
- startAnimation(0x708D4712, 0, -1);
- playSound(2);
- SetMessageHandler(&Sprite::handleMessage);
- SetSpriteUpdate(&AsCommonProjector::stSuckedIn);
-}
-
-Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _projectorBorderFlag(false), _ssFloorButton(NULL), _asProjector(NULL),
- _asPipe(NULL), _asMouse(NULL), _asCheese(NULL), _asBackDoor(NULL),
- _sprite1(NULL), _sprite2(NULL), _sprite3(NULL), _ssButton(NULL) {
-
- SetMessageHandler(&Scene1401::handleMessage);
- SetUpdateHandler(&Scene1401::update);
-
- setRectList(0x004B6758);
- setBackground(0x08221FA5);
- setPalette(0x08221FA5);
- insertScreenMouse(0x21FA108A);
-
- _ssFloorButton = insertSprite<SsCommonFloorButton>(this, 0x980F3124, 0x12192892, 100, 0);
- _asPipe = insertSprite<AsScene1401Pipe>();
-
- if (!getGlobalVar(V_MOUSE_SUCKED_IN)) {
- _asMouse = insertSprite<AsScene1401Mouse>();
- _asCheese = insertSprite<AsScene1401Cheese>();
- }
-
- _sprite3 = insertStaticSprite(0xA82BA811, 1100);
- insertStaticSprite(0x0A116C60, 1100);
- _ssButton = insertSprite<SsCommonButtonSprite>(this, 0xB84B1100, 100, 0);
- _sprite1 = insertStaticSprite(0x38EA100C, 1005);
- _sprite2 = insertStaticSprite(0x98D0223C, 1200);
- _sprite2->setVisible(false);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1401>(380, 447);
- setMessageList(0x004B65C8);
- _sprite1->setVisible(false);
- } else if (which == 1) {
- // Klaymen entering from the left
- insertKlaymen<KmScene1401>(0, 447);
- setMessageList(0x004B65D0);
- _sprite1->setVisible(false);
- } else if (which == 2) {
- // Klaymen entering from the right
- insertKlaymen<KmScene1401>(660, 447);
- setMessageList(0x004B65D8);
- _sprite1->setVisible(false);
- } else {
- // Klaymen entering from the back
- insertKlaymen<KmScene1401>(290, 413);
- setMessageList(0x004B65E8);
- _sprite1->setVisible(false);
- }
-
- if (getGlobalVar(V_PROJECTOR_LOCATION) == 2) {
- _asProjector = insertSprite<AsCommonProjector>(this, _klaymen, _asPipe);
- addCollisionSprite(_asProjector);
- if (getGlobalVar(V_PROJECTOR_SLOT) == 6) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- _klaymen->setX(_asProjector->getX() + 100);
- _klaymen->updateBounds();
- setMessageList(0x004B6670);
- } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- _klaymen->setX(_asProjector->getX() - 100);
- _klaymen->updateBounds();
- setMessageList(0x004B6670);
- }
- _asProjector->setClipRect(_sprite3->getDrawRect().x, _sprite2->getDrawRect().y, 640, 480);
- }
-
- _klaymen->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480);
-
- if (which == 0 && _asProjector)
- sendMessage(_asProjector, 0x482B, 0);
-
- _asBackDoor = insertSprite<AsScene1401BackDoor>(_klaymen, which == 0);
-
-}
-
-void Scene1401::update() {
- Scene::update();
- if (_asProjector && !_projectorBorderFlag && _asProjector->getY() < 360) {
- _sprite2->setVisible(true);
- _projectorBorderFlag = true;
- } else
- _sprite2->setVisible(false);
-}
-
-uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x02144CB1)
- sendEntityMessage(_klaymen, 0x1014, _ssFloorButton);
- else if (param.asInteger() == 0x402064D8)
- sendEntityMessage(_klaymen, 0x1014, _ssButton);
- else if (param.asInteger() == 0x01C66840) {
- if (sendMessage(_asBackDoor, 0x2001, 0) != 0)
- setMessageList(0x004B6690);
- else
- setMessageList(0x004B66B0);
- }
- break;
- case 0x1019:
- if (param.asInteger() != 0)
- leaveScene(2);
- else
- leaveScene(1);
- break;
- case 0x480B:
- if (sender == _ssFloorButton) {
- sendMessage(_asPipe, 0x2000, 0);
- if (!getGlobalVar(V_MOUSE_SUCKED_IN)) {
- sendMessage(_asMouse, 0x4839, 0);
- sendMessage(_asCheese, 0x4839, 0);
- setGlobalVar(V_MOUSE_SUCKED_IN, 1);
- }
- if (_asProjector && _asProjector->getX() > 404 && _asProjector->getX() < 504)
- sendMessage(_asProjector , 0x4839, 0);
- } else if (sender == _ssButton)
- sendMessage(_asBackDoor, 0x4808, 0);
- break;
- case 0x4826:
- if (sender == _asProjector) {
- if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B6658);
- } else
- setMessageList2(0x004B65F0);
- }
- break;
- case 0x482A:
- _sprite1->setVisible(true);
- if (_asProjector)
- sendMessage(_asProjector, 0x482B, 0);
- break;
- case 0x482B:
- _sprite1->setVisible(false);
- if (_asProjector)
- sendMessage(_asProjector, 0x482A, 0);
- break;
- }
- return 0;
-}
-
-// Scene1402
-
-SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority)
- : StaticSprite(vm, fileHash, surfacePriority) {
-
- SetFilterY(&Sprite::defFilterY);
- SetUpdateHandler(&StaticSprite::updatePosition);
-}
-
-AsScene1402PuzzleBox::AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int status)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene) {
-
- createSurface(900, 347, 230);
-
- SetFilterY(&Sprite::defFilterY);
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene1402PuzzleBox::handleMessage);
- _x = 279;
- _y = 270;
- if (status == 2) {
- // Puzzle box after the puzzle was solved
- startAnimation(0x20060259, 0, -1);
- playSound(0, 0x419014AC);
- loadSound(1, 0x61901C29);
- NextState(&AsScene1402PuzzleBox::stMoveDownSolvedDone);
- } else if (status == 1) {
- // Puzzle box appears
- startAnimation(0x210A0213, 0, -1);
- playSound(0, 0x41809C6C);
- NextState(&AsScene1402PuzzleBox::stMoveUpDone);
- } else {
- // Puzzle box is here
- startAnimation(0x20060259, -1, -1);
- loadSound(1, 0x61901C29);
- _newStickFrameIndex = STICK_LAST_FRAME;
- }
-}
-
-uint32 AsScene1402PuzzleBox::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2002:
- playSound(1);
- startAnimation(0x20060259, -1, -1);
- _playBackwards = true;
- NextState(&AsScene1402PuzzleBox::stMoveDownDone);
- break;
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-void AsScene1402PuzzleBox::stMoveUpDone() {
- sendMessage(_parentScene, 0x2000, 0);
- stopAnimation();
- setVisible(false);
-}
-
-void AsScene1402PuzzleBox::stMoveDownDone() {
- sendMessage(_parentScene, 0x2001, 0);
- stopAnimation();
- setVisible(false);
-}
-
-void AsScene1402PuzzleBox::stMoveDownSolvedDone() {
- sendMessage(_parentScene, 0x2003, 0);
- stopAnimation();
-}
-
-Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _isShaking(false), _asPuzzleBox(NULL), _asProjector(NULL) {
-
- SetMessageHandler(&Scene1402::handleMessage);
-
- _vm->_screen->setYOffset(0);
-
- setBackground(0x231482F0);
- setBackgroundY(-10);
- setPalette(0x231482F0);
- _palette->addPalette(0x91D3A391, 0, 64, 0);
- insertScreenMouse(0x482F4239);
-
- _ssBridgePart1 = insertSprite<SsScene1402BridgePart>(0x15402D64, 1100);
- _ssBridgePart2 = insertSprite<SsScene1402BridgePart>(0x10A02120, 1100);
- _ssBridgePart3 = insertSprite<SsScene1402BridgePart>(0x60882BE0, 1100);
-
- if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED))
- setRectList(0x004B0C48);
- else
- setRectList(0x004B0C98);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1402>(377, 391);
- setMessageList(0x004B0B48);
- if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED))
- _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
- } else if (which == 1) {
- // Klaymen entering from the left
- insertKlaymen<KmScene1402>(42, 391);
- setMessageList(0x004B0B50);
- } else if (which == 2) {
- // Klaymen returning from the puzzle box
- insertKlaymen<KmScene1402>(377, 391);
- setMessageList(0x004B0B60);
- _klaymen->setDoDeltaX(1);
- if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
- _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 1);
- clearRectList();
- showMouse(false);
- startShaking();
- } else
- _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 0);
- } else {
- // Klaymen entering from the right
- insertKlaymen<KmScene1402>(513, 391);
- setMessageList(0x004B0B58);
- if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) {
- _asPuzzleBox = insertSprite<AsScene1402PuzzleBox>(this, 2);
- startShaking();
- }
- }
-
- if (_asPuzzleBox)
- _asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
-
- if (getGlobalVar(V_PROJECTOR_LOCATION) == 1) {
- _asProjector = insertSprite<AsCommonProjector>(this, _klaymen, (Sprite*)NULL);
- addCollisionSprite(_asProjector);
- if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- _klaymen->setX(_asProjector->getX() + 100);
- _klaymen->updateBounds();
- setMessageList(0x004B0BD0);
- } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- _klaymen->setX(_asProjector->getX() - 100);
- _klaymen->updateBounds();
- setMessageList(0x004B0BD0);
- }
- _asProjector->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x, _ssBridgePart3->getDrawRect().y2());
- }
-
- _klaymen->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2());
-
-}
-
-void Scene1402::upShaking() {
- if (_isShaking) {
- setBackgroundY(_vm->_rnd->getRandomNumber(10 - 1) - 10);
- _vm->_screen->setYOffset(-10 - getBackgroundY());
- } else {
- setBackgroundY(-10);
- _vm->_screen->setYOffset(0);
- SetUpdateHandler(&Scene::update);
- }
- Scene::update();
- if (_asPuzzleBox)
- _asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
- _klaymen->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2());
-}
-
-uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x00F43389) {
- if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED))
- leaveScene(0);
- else {
- clearRectList();
- _klaymen->setVisible(false);
- showMouse(false);
- sendMessage(_asPuzzleBox, 0x2002, 0);
- startShaking();
- }
- }
- break;
- case 0x1019:
- if (param.asInteger())
- leaveScene(0);
- else
- leaveScene(1);
- break;
- case 0x2000:
- stopShaking();
- showMouse(true);
- setRectList(0x004B0C48);
- break;
- case 0x2001:
- stopShaking();
- leaveScene(0);
- break;
- case 0x2003:
- stopShaking();
- break;
- case 0x4826:
- if (sender == _asProjector) {
- if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B0BB8);
- } else
- setMessageList2(0x004B0B68);
- }
- break;
- }
- return 0;
-}
-
-void Scene1402::startShaking() {
- _isShaking = true;
- SetUpdateHandler(&Scene1402::upShaking);
-}
-
-void Scene1402::stopShaking() {
- _isShaking = false;
-}
-
-// Scene1407
-
-static const int16 kScene1407MouseFloorY[] = {
- 106, 150, 191, 230, 267, 308, 350, 395
-};
-
-static const struct {
- int16 x;
- int16 floorIndex;
- int16 sectionIndex;
- int16 nextHoleIndex;
-} kScene1407MouseHoles[] = {
- {125, 0, 0, 7},
- {452, 7, 21, 0},
- {337, 4, 11, 4},
- {286, 6, 17, 6},
- {348, 6, 17, 39},
- {536, 6, 18, 42},
- {111, 1, 3, 18},
- {203, 1, 3, 38},
- {270, 1, 3, 9},
- {197, 5, 14, 3},
- {252, 5, 14, 35},
- {297, 5, 14, 7},
- {359, 5, 14, 8},
- {422, 4, 12, 26},
- {467, 4, 12, 2},
- {539, 4, 12, 40},
- {111, 5, 13, 17},
- {211, 0, 1, 20},
- {258, 0, 1, 11},
- {322, 0, 1, 16},
- { 99, 6, 16, 31},
- {142, 6, 16, 27},
- {194, 6, 16, 12},
- {205, 2, 6, 45},
- {264, 2, 6, 10},
- { 98, 4, 10, 2},
- {152, 4, 10, 37},
- {199, 4, 10, 13},
- {258, 4, 10, 16},
- {100, 7, 19, 43},
- {168, 7, 19, 23},
- {123, 3, 8, 14},
- {181, 3, 8, 39},
- {230, 3, 8, 28},
- {292, 3, 8, 22},
- {358, 3, 8, 36},
- {505, 3, 9, 44},
- {400, 2, 7, 34},
- {454, 2, 7, 32},
- {532, 2, 7, 46},
- {484, 5, 15, 25},
- {529, 5, 15, 30},
- {251, 7, 20, 48},
- {303, 7, 20, 21},
- {360, 7, 20, 33},
- {503, 0, 2, 5},
- {459, 1, 4, 19},
- {530, 1, 4, 42},
- {111, 2, 5, 47},
- {442, 6, 18, 1}
-};
-
-static const struct {
- int16 x1, x2;
- int16 goodHoleIndex;
-} kScene1407MouseSections[] = {
- {100, 149, 0},
- {182, 351, 17},
- {430, 524, 45},
- { 89, 293, 7},
- {407, 555, 47},
- { 89, 132, 48},
- {178, 303, 23},
- {367, 551, 38},
- {105, 398, 31},
- {480, 537, 36},
- { 84, 275, 27},
- {318, 359, 2},
- {402, 560, 15},
- { 91, 132, 16},
- {179, 400, 10},
- {461, 552, 41},
- { 86, 218, 21},
- {267, 376, 4},
- {420, 560, 49},
- { 77, 188, 30},
- {237, 394, 44},
- {438, 515, 5}
-};
-
-AsScene1407Mouse::AsScene1407Mouse(NeverhoodEngine *vm, Scene *parentScene)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _currSectionIndex(0) {
-
- createSurface(100, 117, 45);
- _x = 108;
- _y = 106;
- stIdleLookAtGoodHole();
- SetUpdateHandler(&AnimatedSprite::update);
-}
-
-void AsScene1407Mouse::suWalkTo() {
- int16 xdelta = _walkDestX - _x;
- if (xdelta > _deltaX)
- xdelta = _deltaX;
- else if (xdelta < -_deltaX)
- xdelta = -_deltaX;
- _deltaX = 0;
- if (_walkDestX == _x)
- sendMessage(this, 0x1019, 0);
- else {
- _x += xdelta;
- updateBounds();
- }
-}
-
-void AsScene1407Mouse::upGoThroughHole() {
- if (_countdown != 0 && (--_countdown == 0)) {
- SetUpdateHandler(&AnimatedSprite::update);
- gotoNextState();
- }
- AnimatedSprite::update();
-}
-
-uint32 AsScene1407Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- {
- int16 mouseX = param.asPoint().x;
- int16 mouseY = param.asPoint().y;
- int holeIndex;
- for (holeIndex = 0; holeIndex < 50; holeIndex++) {
- int16 holeX = kScene1407MouseHoles[holeIndex].x;
- int16 holeY = kScene1407MouseFloorY[kScene1407MouseHoles[holeIndex].floorIndex];
- if (mouseX >= holeX - 14 && mouseX <= holeX + 14 && mouseY >= holeY - 36 && mouseY <= holeY)
- break;
- }
- if (holeIndex < 50 && kScene1407MouseHoles[holeIndex].sectionIndex == _currSectionIndex) {
- _nextHoleIndex = kScene1407MouseHoles[holeIndex].nextHoleIndex;
- _walkDestX = kScene1407MouseHoles[holeIndex].x;
- stWalkToHole();
- } else {
- if (mouseX < kScene1407MouseSections[_currSectionIndex].x1)
- _walkDestX = kScene1407MouseSections[_currSectionIndex].x1;
- else if (mouseX > kScene1407MouseSections[_currSectionIndex].x2)
- _walkDestX = kScene1407MouseSections[_currSectionIndex].x2;
- else
- _walkDestX = mouseX;
- stWalkToDest();
- }
- }
- break;
- case 0x1019:
- gotoNextState();
- break;
- case 0x2001:
- {
- // Reset the position
- // Find the nearest hole and go through it, and exit at the first hole
- int16 distance = 640;
- int matchIndex = 50;
- for (int index = 0; index < 50; index++)
- if (kScene1407MouseHoles[index].sectionIndex == _currSectionIndex &&
- ABS(kScene1407MouseHoles[index].x - _x) < distance) {
- matchIndex = index;
- distance = ABS(kScene1407MouseHoles[index].x - _x);
- }
- if (matchIndex < 50) {
- _nextHoleIndex = 0;
- _walkDestX = kScene1407MouseHoles[matchIndex].x;
- stWalkToHole();
- }
- }
- break;
- }
- return messageResult;
-}
-
-void AsScene1407Mouse::stIdleLookAtGoodHole() {
- setDoDeltaX(kScene1407MouseHoles[kScene1407MouseSections[_currSectionIndex].goodHoleIndex].x < _x ? 1 : 0);
- startAnimation(0x72215194, 0, -1);
- SetMessageHandler(&AsScene1407Mouse::handleMessage);
- SetSpriteUpdate(NULL);
-}
-
-void AsScene1407Mouse::stWalkToDest() {
- if (_walkDestX != _x) {
- setDoDeltaX(_walkDestX < _x ? 1 : 0);
- startAnimation(0x22291510, 0, -1);
- SetMessageHandler(&AsScene1407Mouse::handleMessage);
- SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
- NextState(&AsScene1407Mouse::stIdleLookAtGoodHole);
- }
-}
-
-void AsScene1407Mouse::stWalkToHole() {
- setDoDeltaX(_walkDestX < _x ? 1 : 0);
- startAnimation(0x22291510, 0, -1);
- SetMessageHandler(&AsScene1407Mouse::handleMessage);
- SetSpriteUpdate(&AsScene1407Mouse::suWalkTo);
- NextState(&AsScene1407Mouse::stGoThroughHole);
-}
-
-void AsScene1407Mouse::stGoThroughHole() {
- startAnimation(0x72215194, 0, -1);
- setVisible(false);
- _countdown = 12;
- SetUpdateHandler(&AsScene1407Mouse::upGoThroughHole);
- SetMessageHandler(NULL);
- SetSpriteUpdate(NULL);
- NextState(&AsScene1407Mouse::stArriveAtHole);
-}
-
-void AsScene1407Mouse::stArriveAtHole() {
- _currSectionIndex = kScene1407MouseHoles[_nextHoleIndex].sectionIndex;
- _x = kScene1407MouseHoles[_nextHoleIndex].x;
- _y = kScene1407MouseFloorY[kScene1407MouseHoles[_nextHoleIndex].floorIndex];
- if (_nextHoleIndex == 1) {
- sendMessage(_parentScene, 0x2000, 0);
- _walkDestX = 512;
- stWalkToDest();
- setVisible(true);
- } else {
- _walkDestX = _x + 14;
- stWalkToDest();
- setVisible(true);
- }
-}
-
-Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _puzzleSolvedCountdown(0), _resetButtonCountdown(0) {
-
- SetMessageHandler(&Scene1407::handleMessage);
- SetUpdateHandler(&Scene1407::update);
-
- setBackground(0x00442225);
- setPalette(0x00442225);
- insertPuzzleMouse(0x4222100C, 20, 620);
-
- _asMouse = insertSprite<AsScene1407Mouse>(this);
- _ssResetButton = insertStaticSprite(0x12006600, 100);
- _ssResetButton->setVisible(false);
-
-}
-
-void Scene1407::update() {
- Scene::update();
- if (_puzzleSolvedCountdown != 0 && (--_puzzleSolvedCountdown == 0))
- leaveScene(1);
- else if (_resetButtonCountdown != 0 && (--_resetButtonCountdown == 0))
- _ssResetButton->setVisible(false);
-}
-
-uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (_puzzleSolvedCountdown == 0) {
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
- // Exit scene
- leaveScene(0);
- } else if (param.asPoint().x >= 75 && param.asPoint().x <= 104 &&
- param.asPoint().y >= 62 && param.asPoint().y <= 90) {
- // The reset button was clicked
- sendMessage(_asMouse, 0x2001, 0);
- _ssResetButton->setVisible(true);
- playSound(0, 0x44045000);
- _resetButtonCountdown = 12;
- } else {
- // Handle the mouse
- sendMessage(_asMouse, messageNum, param);
- }
- }
- break;
- case 0x2000:
- // The mouse got the cheese (nomnom)
- setGlobalVar(V_MOUSE_PUZZLE_SOLVED, 1);
- playSound(0, 0x68E25540);
- showMouse(false);
- _puzzleSolvedCountdown = 72;
- break;
- }
- return 0;
-}
-
-// Scene1403
-
-Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _asProjector(NULL), _isProjecting(false) {
-
- SetMessageHandler(&Scene1403::handleMessage);
-
- setRectList(0x004B1FF8);
- setBackground(0x2110A234);
- setPalette(0x2110A234);
- insertScreenMouse(0x0A230219);
-
- _sprite1 = insertStaticSprite(0x01102A33, 100);
- _sprite1->setVisible(false);
- _sprite2 = insertStaticSprite(0x04442520, 995);
- _sprite3 = insertStaticSprite(0x08742271, 995);
- _asTape1 = insertSprite<AsScene1201Tape>(this, 12, 1100, 201, 468, 0x9148A011);
- addCollisionSprite(_asTape1);
- _asTape1->setRepl(64, 0);
- _asTape2 = insertSprite<AsScene1201Tape>(this, 16, 1100, 498, 468, 0x9048A093);
- addCollisionSprite(_asTape2);
- _asTape2->setRepl(64, 0);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1403>(380, 463);
- setMessageList(0x004B1F18);
- } else {
- // Klaymen entering from the right
- insertKlaymen<KmScene1403>(640, 463);
- setMessageList(0x004B1F20);
- }
- _klaymen->setRepl(64, 0);
-
- if (getGlobalVar(V_PROJECTOR_LOCATION) == 0) {
- _asProjector = insertSprite<AsCommonProjector>(this, _klaymen, (Sprite*)NULL);
- addCollisionSprite(_asProjector);
- if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- _klaymen->setX(_asProjector->getX() + 100);
- _klaymen->updateBounds();
- setMessageList(0x004B1F70);
- }
- _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
- _asProjector->setRepl(64, 0);
- }
-
-}
-
-uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x88C11390) {
- setRectList(0x004B2008);
- _isProjecting = true;
- } else if (param.asInteger() == 0x08821382) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setRectList(0x004B1FF8);
- _isProjecting = false;
- }
- break;
- case 0x1019:
- leaveScene(0);
- break;
- case 0x1022:
- if (sender == _asProjector) {
- if (param.asInteger() >= 1000)
- setSurfacePriority(_sprite3->getSurface(), 1100);
- else
- setSurfacePriority(_sprite3->getSurface(), 995);
- }
- break;
- case 0x4807:
- _sprite1->setVisible(false);
- break;
- case 0x480F:
- _sprite1->setVisible(true);
- break;
- case 0x4826:
- if (sender == _asProjector) {
- if (_isProjecting)
- setMessageList2(0x004B1FA8);
- else if (param.asInteger() == 1) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B1F88);
- } else if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B1F58);
- } else
- setMessageList2(0x004B1F28);
- } else if (sender == _asTape1 || sender == _asTape2) {
- if (_isProjecting)
- setMessageList2(0x004B1FA8);
- else if (_messageListStatus != 2) {
- sendEntityMessage(_klaymen, 0x1014, sender);
- setMessageList2(0x004B1FB8);
- }
- }
- break;
- }
- return 0;
-}
-
-// Scene1404
-
-Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _asProjector(NULL), _asKey(NULL) {
-
- if (getGlobalVar(V_HAS_FINAL_KEY) && getGlobalVar(V_KEY3_LOCATION) == 0)
- setGlobalVar(V_KEY3_LOCATION, 5);
-
- SetMessageHandler(&Scene1404::handleMessage);
-
- setRectList(0x004B8D80);
- setBackground(0xAC0B006F);
- setPalette(0xAC0B006F);
- _palette->addPalette(0x00801510, 0, 65, 0);
- insertScreenMouse(0xB006BAC8);
-
- if (getGlobalVar(V_KEY3_LOCATION) == 5) {
- _asKey = insertSprite<AsCommonKey>(this, 2, 1100, 267, 411);
- addCollisionSprite(_asKey);
- }
-
- _sprite1 = insertStaticSprite(0x1900A1F8, 1100);
- _asTape = insertSprite<AsScene1201Tape>(this, 14, 1100, 281, 411, 0x9148A011);
- addCollisionSprite(_asTape);
-
- if (which < 0) {
- // Restoring game
- insertKlaymen<KmScene1404>(376, 406);
- setMessageList(0x004B8C28);
- } else if (which == 1) {
- // Klaymen returning from the tiles puzzle
- insertKlaymen<KmScene1404>(376, 406);
- setMessageList(0x004B8C30);
- } else if (which == 2) {
- // Klaymen returning from the diskplayer
- if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) {
- insertKlaymen<KmScene1404>(347, 406);
- _klaymen->setDoDeltaX(1);
- } else {
- insertKlaymen<KmScene1404>(187, 406);
- }
- setMessageList(0x004B8D28);
- } else {
- // Klaymen entering from the left
- insertKlaymen<KmScene1404>(30, 406);
- setMessageList(0x004B8C38);
- }
-
- if (getGlobalVar(V_PROJECTOR_LOCATION) == 3) {
- _asProjector = insertSprite<AsCommonProjector>(this, _klaymen, (Sprite*)NULL);
- addCollisionSprite(_asProjector);
- if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- _klaymen->setX(_asProjector->getX() - 100);
- _klaymen->updateBounds();
- setMessageList(0x004B8CB8);
- }
- _asProjector->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
- }
-
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
-
-}
-
-Scene1404::~Scene1404() {
- setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0);
-}
-
-uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x410650C2) {
- if (_asProjector && _asProjector->getX() == 220)
- setMessageList(0x004B8C40);
- else
- setMessageList(0x004B8CE8);
- }
- break;
- case 0x1019:
- leaveScene(0);
- break;
- case 0x4826:
- if (sender == _asProjector) {
- if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) {
- sendEntityMessage(_klaymen, 0x1014, _asProjector);
- setMessageList2(0x004B8CA0);
- } else
- setMessageList2(0x004B8C40);
- } else if (sender == _asTape && _messageListStatus != 2) {
- sendEntityMessage(_klaymen, 0x1014, _asTape);
- setMessageList(0x004B8CD0);
- } else if (sender == _asKey && _messageListStatus != 2) {
- sendEntityMessage(_klaymen, 0x1014, _asKey);
- setMessageList(0x004B8D18);
- }
- break;
- }
- return 0;
-}
-
-// Scene1405
-
-static const NPoint kAsScene1405TileItemPositions[] = {
- {100, 80}, {162, 78}, {222, 76}, {292, 76},
- {356, 82}, {422, 84}, {488, 86}, {550, 90},
- {102, 134}, {164, 132}, {224, 136}, {294, 136},
- {360, 136}, {422, 138}, {484, 144}, {548, 146},
- { 98, 196}, {160, 200}, {228, 200}, {294, 202},
- {360, 198}, {424, 200}, {482, 202}, {548, 206},
- { 98, 260}, {160, 264}, {226, 260}, {296, 262},
- {358, 260}, {424, 262}, {486, 264}, {550, 266},
- { 94, 322}, {160, 316}, {226, 316}, {296, 320},
- {358, 322}, {422, 324}, {488, 322}, {550, 322},
- { 98, 380}, {160, 376}, {226, 376}, {294, 378},
- {356, 380}, {420, 380}, {490, 378}, {552, 376}
-};
-
-AsScene1405Tile::AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 tileIndex)
- : AnimatedSprite(vm, 1100), _parentScene(parentScene), _tileIndex(tileIndex), _countdown(0), _isShowing(false) {
-
- loadSound(0, 0x05308101);
- setSoundPan(0, (tileIndex % 8 * 4 + 4) * 25 / 8);
- _x = kAsScene1405TileItemPositions[_tileIndex].x;
- _y = kAsScene1405TileItemPositions[_tileIndex].y;
- createSurface1(0x844B805C, 1100);
- setVisible(false);
- if (getSubVar(VA_IS_TILE_MATCH, _tileIndex))
- _countdown = _vm->_rnd->getRandomNumber(36 - 1) + 1;
- startAnimation(0x844B805C, getSubVar(VA_TILE_SYMBOLS, _tileIndex), -1);
- _newStickFrameIndex = (int16)getSubVar(VA_TILE_SYMBOLS, _tileIndex);
- SetUpdateHandler(&AsScene1405Tile::update);
- SetMessageHandler(&AsScene1405Tile::handleMessage);
-}
-
-void AsScene1405Tile::update() {
- updateAnim();
- updatePosition();
- if (_countdown != 0 && (--_countdown == 0))
- show();
-}
-
-uint32 AsScene1405Tile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1011:
- if (getSubVar(VA_IS_TILE_MATCH, _tileIndex) == 0 && _parentScene->getCountdown() == 0) {
- show();
- sendMessage(_parentScene, 0x2000, _tileIndex);
- }
- messageResult = 1;
- break;
- }
- return messageResult;
-}
-
-void AsScene1405Tile::show() {
- if (!_isShowing) {
- _isShowing = true;
- playSound(0);
- setVisible(true);
- }
-}
-
-void AsScene1405Tile::hide() {
- if (_isShowing) {
- _isShowing = false;
- playSound(0);
- setVisible(false);
- }
-}
-
-Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _selectFirstTile(true), _tilesLeft(48), _countdown(0) {
-
- _vm->gameModule()->initMemoryPuzzle();
-
- SetUpdateHandler(&Scene1405::update);
- SetMessageHandler(&Scene1405::handleMessage);
-
- setBackground(0x0C0C007D);
- setPalette(0x0C0C007D);
- insertPuzzleMouse(0xC00790C8, 20, 620);
-
- for (uint32 tileIndex = 0; tileIndex < 48; tileIndex++) {
- _tiles[tileIndex] = insertSprite<AsScene1405Tile>(this, tileIndex);
- addCollisionSprite(_tiles[tileIndex]);
- if (getSubVar(VA_IS_TILE_MATCH, tileIndex))
- _tilesLeft--;
- }
-
- loadSound(0, 0x68E25540);
-}
-
-void Scene1405::update() {
- Scene::update();
- if (_countdown != 0 && (--_countdown == 0)) {
- _tilesLeft = 48;
- _tiles[_firstTileIndex]->hide();
- _tiles[_secondTileIndex]->hide();
- for (uint32 i = 0; i < 48; i++) {
- if (getSubVar(VA_IS_TILE_MATCH, i)) {
- _tiles[i]->hide();
- setSubVar(VA_IS_TILE_MATCH, i, 0);
- }
- }
- }
-}
-
-uint32 Scene1405::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
- leaveScene(0);
- break;
- case 0x2000:
- if (_selectFirstTile) {
- _firstTileIndex = param.asInteger();
- _selectFirstTile = false;
- } else {
- _secondTileIndex = param.asInteger();
- if (_firstTileIndex != _secondTileIndex) {
- _selectFirstTile = true;
- if (getSubVar(VA_TILE_SYMBOLS, _secondTileIndex) == getSubVar(VA_TILE_SYMBOLS, _firstTileIndex)) {
- setSubVar(VA_IS_TILE_MATCH, _firstTileIndex, 1);
- setSubVar(VA_IS_TILE_MATCH, _secondTileIndex, 1);
- _tilesLeft -= 2;
- if (_tilesLeft == 0)
- playSound(0);
- } else
- _countdown = 10;
- }
- }
- break;
- }
- return 0;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
deleted file mode 100644
index 1485706..0000000
--- a/engines/neverhood/module1400.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef NEVERHOOD_MODULE1400_H
-#define NEVERHOOD_MODULE1400_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/module.h"
-#include "neverhood/scene.h"
-#include "neverhood/module1200.h"
-
-namespace Neverhood {
-
-class Module1400 : public Module {
-public:
- Module1400(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Module1400();
-protected:
- int _sceneNum;
- void createScene(int sceneNum, int which);
- void updateScene();
-};
-
-// Scene1401
-
-class AsScene1401Pipe : public AnimatedSprite {
-public:
- AsScene1401Pipe(NeverhoodEngine *vm);
- virtual ~AsScene1401Pipe();
-protected:
- int _countdown1;
- int _countdown2;
- void update();
- void upSuckInProjector();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmSuckInProjector(int messageNum, const MessageParam ¶m, Entity *sender);
- void stStartSucking();
- void stDoneSucking();
- void stSuckInProjector();
-};
-
-class AsScene1401Mouse : public AnimatedSprite {
-public:
- AsScene1401Mouse(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suSuckedIn();
- void stSuckedIn();
-};
-
-class AsScene1401Cheese : public AnimatedSprite {
-public:
- AsScene1401Cheese(NeverhoodEngine *vm);
-protected:
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suSuckedIn();
- void stSuckedIn();
-};
-
-class AsScene1401BackDoor : public AnimatedSprite {
-public:
- AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen);
-protected:
- Sprite *_klaymen;
- int _countdown;
- bool _isOpen;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stOpenDoor();
- void stCloseDoor();
- void stCloseDoorDone();
-};
-
-struct AsCommonProjectorItem {
- NPoint point;
- int8 maxSlotCount;
- int8 lockSlotIndex;
- int8 index1;
- int8 leftBorderLeaves;
- int8 rightBorderLeaves;
-};
-
-class AsCommonProjector : public AnimatedSprite {
-public:
- AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, Sprite *asPipe);
- virtual ~AsCommonProjector();
-protected:
- Scene *_parentScene;
- Sprite *_klaymen;
- Sprite *_asPipe;
- const AsCommonProjectorItem *_asProjectorItem;
- int16 _beforeMoveX;
- bool _lockedInSlot;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmLockedInSlot(int messageNum, const MessageParam ¶m, Entity *sender);
- uint32 hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender);
- void suMoving();
- void moveProjector();
- void stSuckedIn();
- void stIdle();
- void stMoving();
- void stStartLockedInSlot();
- void stStayLockedInSlot();
- void stStartProjecting();
- void stLockedInSlot();
- void stStopProjecting();
- void stTurnToFront();
- void stStartSuckedIn();
-};
-
-class Scene1401 : public Scene {
-public:
- Scene1401(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- bool _projectorBorderFlag;
- Sprite *_ssFloorButton;
- AsCommonProjector *_asProjector;
- Sprite *_asPipe;
- Sprite *_asMouse;
- Sprite *_asCheese;
- Sprite *_asBackDoor;
- Sprite *_sprite1;
- Sprite *_sprite2;
- Sprite *_sprite3;
- Sprite *_ssButton;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1402
-
-class SsScene1402BridgePart : public StaticSprite {
-public:
- SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority);
-};
-
-class AsScene1402PuzzleBox : public AnimatedSprite {
-public:
- AsScene1402PuzzleBox(NeverhoodEngine *vm, Scene *parentScene, int status);
-protected:
- Scene *_parentScene;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void stMoveUpDone();
- void stMoveDownDone();
- void stMoveDownSolvedDone();
-};
-
-class Scene1402 : public Scene {
-public:
- Scene1402(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_ssBridgePart1;
- Sprite *_ssBridgePart2;
- Sprite *_ssBridgePart3;
- Sprite *_asPuzzleBox;
- AsCommonProjector *_asProjector;
- bool _isShaking;
- void upShaking();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void startShaking();
- void stopShaking();
-};
-
-// Scene1407
-
-class AsScene1407Mouse : public AnimatedSprite {
-public:
- AsScene1407Mouse(NeverhoodEngine *vm, Scene *parentScene);
-protected:
- Scene *_parentScene;
- int16 _walkDestX;
- int16 _currSectionIndex;
- int16 _nextHoleIndex;
- int _countdown;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
- void suWalkTo();
- void upGoThroughHole();
- void stIdleLookAtGoodHole();
- void stWalkToDest();
- void stWalkToHole();
- void stGoThroughHole();
- void stArriveAtHole();
-};
-
-class Scene1407 : public Scene {
-public:
- Scene1407(NeverhoodEngine *vm, Module *parentModule);
-protected:
- Sprite *_asMouse;
- Sprite *_ssResetButton;
- int _puzzleSolvedCountdown;
- int _resetButtonCountdown;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1403
-
-class Scene1403 : public Scene {
-public:
- Scene1403(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- Sprite *_sprite1;
- Sprite *_sprite2;
- Sprite *_sprite3;
- AsScene1201Tape *_asTape1;
- AsScene1201Tape *_asTape2;
- AsCommonProjector *_asProjector;
- bool _isProjecting;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1404
-
-class Scene1404 : public Scene {
-public:
- Scene1404(NeverhoodEngine *vm, Module *parentModule, int which);
- virtual ~Scene1404();
-protected:
- Sprite *_sprite1;
- Sprite *_asTape;
- AsCommonProjector *_asProjector;
- Sprite *_asKey;
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-// Scene1405
-
-class Scene1405;
-
-class AsScene1405Tile : public AnimatedSprite {
-public:
- AsScene1405Tile(NeverhoodEngine *vm, Scene1405 *parentScene, uint32 tileIndex);
- void show();
- void hide();
-protected:
- Scene1405 *_parentScene;
- bool _isShowing;
- uint32 _tileIndex;
- int _countdown;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-class Scene1405 : public Scene {
-public:
- Scene1405(NeverhoodEngine *vm, Module *parentModule);
- int getCountdown() const { return _countdown; }
-protected:
- bool _selectFirstTile;
- int _firstTileIndex;
- int _secondTileIndex;
- int _tilesLeft;
- int _countdown;
- AsScene1405Tile *_tiles[48];
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_MODULE1400_H */
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
deleted file mode 100644
index c49e968..0000000
--- a/engines/neverhood/module1500.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1500.h"
-
-namespace Neverhood {
-
-Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- if (which < 0)
- createScene(_vm->gameState().sceneNum, -1);
- else
- createScene(3, -1);
-
-}
-
-void Module1500::createScene(int sceneNum, int which) {
- debug("Module1500::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 0:
- _vm->gameState().sceneNum = 0;
- _childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
- break;
- case 1:
- _vm->gameState().sceneNum = 1;
- _childObject = new Scene1501(_vm, this, 0x30050A0A, 0x58B45E58, 110, 48);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- sendMessage(_parentModule, 0x0800, 0);
- createSmackerScene(0x001A0005, true, true, true);
- break;
- case 3:
- _vm->gameState().sceneNum = 3;
- _childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
- break;
- }
- SetUpdateHandler(&Module1500::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1500::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 0:
- createScene(1, -1);
- break;
- case 1:
- createScene(2, -1);
- break;
- case 3:
- createScene(0, -1);
- break;
- default:
- leaveModule(0);
- break;
- }
- }
-}
-
-// Scene1501
-
-Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
- : Scene(vm, parentModule), _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _skip(false) {
-
- SetUpdateHandler(&Scene1501::update);
- SetMessageHandler(&Scene1501::handleMessage);
-
- setBackground(backgroundFileHash);
- setPalette();
- addEntity(_palette);
- _palette->addBasePalette(backgroundFileHash, 0, 256, 0);
- _palette->startFadeToPalette(12);
-
- if (soundFileHash != 0)
- playSound(0, soundFileHash);
-
-}
-
-void Scene1501::update() {
- Scene::update();
- if (_countdown1 != 0) {
- _countdown1--;
- if (_countdown1 == 0) {
- _vm->_screen->clear();
- leaveScene(0);
- }
- } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || (_countdown2 == 0 && !isSoundPlaying(0))) {
- _countdown1 = 12;
- _palette->startFadeToBlack(11);
- }
-
- if (_countdown3 != 0)
- _countdown3--;
-
- if (_countdown3 == 0 && _skip && _countdown1 == 0) {
- _countdown1 = 12;
- _palette->startFadeToBlack(11);
- }
-
-}
-
-uint32 Scene1501::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0009:
- _skip = true;
- break;
- }
- return messageResult;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
deleted file mode 100644
index c17cb45..0000000
--- a/engines/neverhood/module1500.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-// TODO: I couldn't come up with a better name than 'Module' so far
-
-#ifndef NEVERHOOD_MODULE1500_H
-#define NEVERHOOD_MODULE1500_H
-
-#include "neverhood/neverhood.h"
-#include "neverhood/module.h"
-#include "neverhood/scene.h"
-#include "neverhood/smackerscene.h"
-
-namespace Neverhood {
-
-class Module1500 : public Module {
-public:
- Module1500(NeverhoodEngine *vm, Module *parentModule, int which);
-protected:
- int _sceneNum;
- void createScene(int sceneNum, int which);
- void updateScene();
-};
-
-class Scene1501 : public Scene {
-public:
- Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3);
-protected:
- int _countdown1;
- int _countdown2;
- int _countdown3;
- bool _skip;
- void update();
- uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);
-};
-
-} // End of namespace Neverhood
-
-#endif /* NEVERHOOD_MODULE1500_H */
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
deleted file mode 100644
index cc1aa2c..0000000
--- a/engines/neverhood/module1600.cpp
+++ /dev/null
@@ -1,1412 +0,0 @@
-/* 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 2
- * 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "neverhood/module1600.h"
-#include "neverhood/gamemodule.h"
-#include "neverhood/module1200.h"
-#include "neverhood/module2200.h"
-
-namespace Neverhood {
-
-static const uint32 kModule1600SoundList[] = {
- 0x90805C50, 0x90804450, 0xB4005E60,
- 0x91835066, 0x90E14440, 0
-};
-
-Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule) {
-
- if (which < 0)
- createScene(_vm->gameState().sceneNum, -1);
- else if (which == 1)
- createScene(4, 1);
- else if (which == 2)
- createScene(5, 0);
- else if (which == 3)
- createScene(6, 1);
- else if (which == 4)
- createScene(1, 0);
- else
- createScene(0, 0);
-
- _vm->_soundMan->addSoundList(0x1A008D8, kModule1600SoundList);
- _vm->_soundMan->setSoundListParams(kModule1600SoundList, true, 50, 600, 5, 150);
- _vm->_soundMan->playTwoSounds(0x1A008D8, 0x41861371, 0x43A2507F, 0);
-
-}
-
-Module1600::~Module1600() {
- _vm->_soundMan->deleteGroup(0x1A008D8);
-}
-
-void Module1600::createScene(int sceneNum, int which) {
- debug("Module1600::createScene(%d, %d)", sceneNum, which);
- _sceneNum = sceneNum;
- switch (_sceneNum) {
- case 0:
- _vm->gameState().sceneNum = 0;
- createNavigationScene(0x004B39D0, which);
- break;
- case 1:
- _vm->gameState().sceneNum = 1;
- createNavigationScene(0x004B3A30, which);
- break;
- case 2:
- _vm->gameState().sceneNum = 2;
- createNavigationScene(0x004B3A60, which);
- break;
- case 3:
- _vm->gameState().sceneNum = 3;
- createNavigationScene(0x004B3A90, which);
- break;
- case 4:
- _vm->gameState().sceneNum = 4;
- createNavigationScene(0x004B3B20, which);
- break;
- case 5:
- _vm->gameState().sceneNum = 5;
- createNavigationScene(0x004B3B50, which);
- break;
- case 6:
- _vm->gameState().sceneNum = 6;
- createNavigationScene(0x004B3B80, which);
- break;
- case 7:
- _vm->gameState().sceneNum = 7;
- _childObject = new Scene1608(_vm, this, which);
- break;
- case 8:
- _vm->gameState().sceneNum = 8;
- _childObject = new Scene1609(_vm, this);
- break;
- case 1001:
- _vm->gameState().sceneNum = 1;
- if (getGlobalVar(V_TALK_COUNTING_INDEX) == 1)
- createSmackerScene(0x80050200, true, true, false);
- else if (getGlobalVar(V_TALK_COUNTING_INDEX) == 2)
- createSmackerScene(0x80090200, true, true, false);
- else
- createSmackerScene(0x80000200, true, true, false);
- if (getGlobalVar(V_TALK_COUNTING_INDEX) >= 2)
- setGlobalVar(V_TALK_COUNTING_INDEX, 0);
- else
- incGlobalVar(V_TALK_COUNTING_INDEX, +1);
- break;
- }
- SetUpdateHandler(&Module1600::updateScene);
- _childObject->handleUpdate();
-}
-
-void Module1600::updateScene() {
- if (!updateChild()) {
- switch (_sceneNum) {
- case 0:
- if (_moduleResult == 0)
- createScene(2, 0);
- else if (_moduleResult == 1)
- createScene(1, 0);
- else if (_moduleResult == 2)
- leaveModule(4);
- break;
- case 1:
- if (_moduleResult == 0)
- createScene(1001, -1);
- else if (_moduleResult == 1)
- createScene(0, 3);
- break;
- case 2:
- if (_moduleResult == 0)
- createScene(3, 0);
- else if (_moduleResult == 1)
- createScene(0, 2);
- break;
- case 3:
- if (_moduleResult == 0)
- createScene(5, 0);
- else if (_moduleResult == 2)
- createScene(6, 0);
- else if (_moduleResult == 3)
- createScene(2, 1);
- else if (_moduleResult == 4)
- createScene(4, 0);
- break;
- case 4:
- if (_moduleResult == 0)
- leaveModule(1);
- else if (_moduleResult == 1)
- createScene(3, 1);
- break;
- case 5:
- if (_moduleResult == 0)
- leaveModule(2);
- else if (_moduleResult == 1)
- createScene(3, 3);
- break;
- case 6:
- if (_moduleResult == 0)
- createScene(8, -1);
- else if (_moduleResult == 1)
- createScene(3, 5);
- break;
- case 7:
- createScene(6, 1);
- break;
- case 8:
- if (_moduleResult == 0)
- createScene(6, 0);
- else
- createScene(7, 0);
- break;
- case 1001:
- createScene(1, 0);
- break;
- }
- }
-}
-
-AsCommonCar::AsCommonCar(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y)
- : AnimatedSprite(vm, 1000), _parentScene(parentScene) {
-
- createSurface(200, 556, 328);
- _x = x;
- _y = y;
-
- _inMainArea = false;
- _exitDirection = 0;
- _currPointIndex = 0;
- _hasAgainDestPoint = false;
- _stepError = 0;
- _hasAgainDestPointIndex = false;
- _steps = 0;
- _isBraking = false;
- _yMoveTotalSteps = 0;
- _isBusy = false;
- _isIdle = false;
- _isMoving = true;
- _rectFlag = false;
- _newDeltaXType = -1;
- _soundCounter = 0;
- _pathPoints = NULL;
- _currMoveDirection = 0;
-
- startAnimation(0xD4220027, 0, -1);
- setDoDeltaX(getGlobalVar(V_CAR_DELTA_X));
-
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::handleMessage);
- SetSpriteUpdate(NULL);
-}
-
-AsCommonCar::~AsCommonCar() {
- if (_finalizeStateCb == AnimationCallback(&AsCommonCar::evTurnCarDone))
- setGlobalVar(V_CAR_DELTA_X, !getGlobalVar(V_CAR_DELTA_X));
-}
-
-void AsCommonCar::setPathPoints(NPointArray *pathPoints) {
- _pathPoints = pathPoints;
-}
-
-void AsCommonCar::update() {
- if (_newDeltaXType >= 0) {
- setDoDeltaX(_newDeltaXType);
- _newDeltaXType = -1;
- }
- AnimatedSprite::update();
- if (_hasAgainDestPoint && _yMoveTotalSteps == 0 && !_isBusy) {
- _hasAgainDestPoint = false;
- _hasAgainDestPointIndex = false;
- sendPointMessage(this, 0x2004, _againDestPoint);
- } else if (_hasAgainDestPointIndex && _yMoveTotalSteps == 0 && !_isBusy) {
- _hasAgainDestPointIndex = false;
- sendMessage(this, 0x2003, _againDestPointIndex);
- }
- updateMovement();
- updateSound();
-}
-
-void AsCommonCar::upIdle() {
- update();
- if (++_idleCounter >= _idleCounterMax)
- stIdleBlink();
- updateSound();
-}
-
-uint32 AsCommonCar::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1019:
- SetSpriteUpdate(NULL);
- break;
- case 0x2002:
- // Set the current position without moving
- _currPointIndex = param.asInteger();
- _stepError = 0;
- _x = pathPoint(_currPointIndex).x;
- _y = pathPoint(_currPointIndex).y;
- break;
- case 0x2003:
- // Move to a point by its index
- {
- int newPointIndex = param.asInteger();
- if (_yMoveTotalSteps <= 0 && !_isBusy) {
- _destX = pathPoint(newPointIndex).x;
- _destY = pathPoint(newPointIndex).y;
- if (_currPointIndex < newPointIndex) {
- moveToNextPoint();
- } else if (_currPointIndex == newPointIndex && _stepError == 0) {
- if (_currPointIndex == 0) {
- _yMoveTotalSteps = 0;
- sendMessage(_parentScene, 0x2005, 0);
- } else if (_currPointIndex == (int)_pathPoints->size()) {
- _yMoveTotalSteps = 0;
- sendMessage(_parentScene, 0x2006, 0);
- }
- } else {
- moveToPrevPoint();
- }
- } else {
- _hasAgainDestPointIndex = true;
- _againDestPointIndex = newPointIndex;
- }
- }
- break;
- case 0x2004:
- // Move to the point closest to the parameter point
- {
- int minMatchIndex = -1;
- int minMatchDistance, distance;
- NPoint pt = param.asPoint();
- if (_yMoveTotalSteps <= 0 && !_isBusy) {
- // Check if we're already exiting (or something)
- if ((pt.x <= 20 && _exitDirection == 1) ||
- (pt.x >= 620 && _exitDirection == 3) ||
- (pt.y <= 20 && _exitDirection == 2) ||
- (pt.y >= 460 && _exitDirection == 4))
- break;
- _destX = pt.x;
- _destY = pt.y;
- minMatchDistance = calcDistance(_destX, _destY, _x, _y) + 1;
- for (int i = _currPointIndex + 1; i < (int)_pathPoints->size(); i++) {
- distance = calcDistance(_destX, _destY, pathPoint(i).x, pathPoint(i).y);
- if (distance >= minMatchDistance)
- break;
- minMatchDistance = distance;
- minMatchIndex = i;
- }
- for (int i = _currPointIndex; i >= 0; i--) {
- distance = calcDistance(_destX, _destY, pathPoint(i).x, pathPoint(i).y);
- if (distance >= minMatchDistance)
- break;
- minMatchDistance = distance;
- minMatchIndex = i;
- }
- if (minMatchIndex == -1) {
- if (_currPointIndex == 0)
- moveToPrevPoint();
- else
- SetSpriteUpdate(NULL);
- } else {
- if (minMatchIndex > _currPointIndex)
- moveToNextPoint();
- else
- moveToPrevPoint();
- }
- } else {
- _hasAgainDestPoint = true;
- _againDestPoint = pt;
- }
- }
- break;
- case 0x2007:
- _yMoveTotalSteps = param.asInteger();
- _steps = 0;
- _isBraking = false;
- _lastDistance = 640;
- SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
- break;
- case 0x2008:
- _yMoveTotalSteps = param.asInteger();
- _steps = 0;
- _isBraking = false;
- _lastDistance = 640;
- SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
- break;
- case 0x2009:
- stEnterCar();
- break;
- case 0x200A:
- stLeaveCar();
- break;
- case 0x200E:
- stTurnCar();
- break;
- case 0x200F:
- stCarAtHome();
- _newDeltaXType = param.asInteger();
- break;
- }
- return messageResult;
-}
-
-uint32 AsCommonCar::hmAnimation(int messageNum, const MessageParam ¶m, Entity *sender) {
- uint32 messageResult = AsCommonCar::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (_isBusy && param.asInteger() == 0x025424A2)
- gotoNextState();
- break;
- case 0x3002:
- gotoNextState();
- break;
- }
- return messageResult;
-}
-
-uint32 AsCommonCar::hmLeaveCar(int messageNum, const MessageParam ¶m, Entity *sender) {
- switch (messageNum) {
- case 0x2009:
- stEnterCar();
- break;
- case 0x3002:
- sendMessage(_parentScene, 0x200A, 0);
- SetMessageHandler(&AsCommonCar::handleMessage);
- break;
- }
- return 0;
-}
-
-void AsCommonCar::stCarAtHome() {
- bool doDeltaX = _doDeltaX;
- SetSpriteUpdate(NULL);
- _hasAgainDestPoint = false;
- _hasAgainDestPointIndex = false;
- _isBraking = false;
- _isBusy = false;
- _isIdle = false;
- _isMoving = false;
- _rectFlag = false;
- NextState(&AsCommonCar::stLeanForwardIdle);
- startAnimation(0x35698F78, 0, -1);
- setDoDeltaX(doDeltaX ? 1 : 0);
- _currMoveDirection = 0;
- _newMoveDirection = 0;
- _steps = 0;
- _idleCounter = 0;
- _idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
- SetUpdateHandler(&AsCommonCar::upIdle);
- SetMessageHandler(&AsCommonCar::handleMessage);
- FinalizeState(&AsCommonCar::evIdleDone);
-}
-
-void AsCommonCar::updateTurnMovement() {
- if (_turnMoveStatus == 1) {
- _lastDistance = 640;
- _isIdle = false;
- _isBraking = false;
- SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
- } else if (_turnMoveStatus == 2) {
- _lastDistance = 640;
- _isIdle = false;
- _isBraking = false;
- SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
- }
-}
-
-void AsCommonCar::updateMovement() {
- if (_isBraking && !_isIdle && !_isBusy) {
- gotoNextState();
- _isMoving = false;
- _isIdle = true;
- startAnimation(0x192ADD30, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- NextState(&AsCommonCar::stLeanForwardIdle);
- } else if (!_isBraking && _steps && _isIdle) {
- gotoNextState();
- _isIdle = false;
- startAnimation(0x9966B138, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- NextState(&AsCommonCar::stUpdateMoveDirection);
- } else if (_newMoveDirection != _currMoveDirection && _isMoving && !_isBusy) {
- gotoNextState();
- _currMoveDirection = _newMoveDirection;
- stUpdateMoveDirection();
- }
-}
-
-void AsCommonCar::stEnterCar() {
- startAnimation(0xA86A9538, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- NextState(&AsCommonCar::stLeanForwardIdle);
-}
-
-void AsCommonCar::stLeaveCar() {
- startAnimation(0xA86A9538, -1, -1);
- _playBackwards = true;
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmLeaveCar);
-}
-
-void AsCommonCar::stLeanForwardIdle() {
- startAnimation(0x35698F78, 0, -1);
- _currMoveDirection = 0;
- _newMoveDirection = 0;
- _steps = 0;
- _idleCounter = 0;
- _idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
- SetUpdateHandler(&AsCommonCar::upIdle);
- SetMessageHandler(&AsCommonCar::handleMessage);
- FinalizeState(&AsCommonCar::evIdleDone);
-}
-
-void AsCommonCar::evIdleDone() {
- SetUpdateHandler(&AsCommonCar::update);
-}
-
-void AsCommonCar::stIdleBlink() {
- startAnimation(0xB579A77C, 0, -1);
- _idleCounter = 0;
- _idleCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- NextState(&AsCommonCar::stLeanForwardIdle);
-}
-
-void AsCommonCar::stUpdateMoveDirection() {
- _isMoving = true;
- if (_currMoveDirection == 1)
- startAnimation(0xD4AA03A4, 0, -1);
- else if (_currMoveDirection == 3)
- startAnimation(0xD00A1364, 0, -1);
- else if ((_currMoveDirection == 2 && _doDeltaX) || (_currMoveDirection == 4 && !_doDeltaX))
- stTurnCar();
- else
- startAnimation(0xD4220027, 0, -1);
- setGlobalVar(V_CAR_DELTA_X, _doDeltaX ? 1 : 0);
-}
-
-void AsCommonCar::moveToNextPoint() {
- if (_currPointIndex >= (int)_pathPoints->size() - 1) {
- _yMoveTotalSteps = 0;
- sendMessage(this, 0x1019, 0);
- sendMessage(_parentScene, 0x2006, 0);
- } else {
- NPoint nextPt = pathPoint(_currPointIndex + 1);
- NPoint currPt = pathPoint(_currPointIndex);
- if (ABS(nextPt.y - currPt.y) <= ABS(nextPt.x - currPt.x) &&
- ((_currMoveDirection == 2 && nextPt.x < currPt.x) ||
- (_currMoveDirection == 4 && nextPt.x >= currPt.x))) {
- if (_currMoveDirection == 2)
- _currMoveDirection = 4;
- else if (_currMoveDirection == 4)
- _currMoveDirection = 2;
- if (_isIdle)
- stTurnCarMoveToNextPoint();
- else
- stBrakeMoveToNextPoint();
- } else {
- if (_steps == 0) {
- gotoNextState();
- _isIdle = false;
- startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::stUpdateMoveDirection);
- }
- _isBraking = false;
- SetSpriteUpdate(&AsCommonCar::suMoveToNextPoint);
- _lastDistance = 640;
- }
- }
-}
-
-void AsCommonCar::stBrakeMoveToNextPoint() {
- gotoNextState();
- _isBusy = true;
- _isBraking = true;
- startAnimation(0x192ADD30, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- NextState(&AsCommonCar::stTurnCarMoveToNextPoint);
-}
-
-void AsCommonCar::stTurnCar() {
- // Turn to left/right #1
- gotoNextState();
- _isBusy = true;
- startAnimation(0xF46A0324, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- FinalizeState(&AsCommonCar::evTurnCarDone);
- _turnMoveStatus = 0;
- updateTurnMovement();
-}
-
-void AsCommonCar::stTurnCarMoveToNextPoint() {
- // Turn to left/right #2
- gotoNextState();
- _isBusy = true;
- startAnimation(0xF46A0324, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- FinalizeState(&AsCommonCar::evTurnCarDone);
- _turnMoveStatus = 1;
- updateTurnMovement();
-}
-
-void AsCommonCar::stTurnCarMoveToPrevPoint() {
- // Turn to left/right #3
- FinalizeState(NULL);
- _isBusy = true;
- startAnimation(0xF46A0324, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- FinalizeState(&AsCommonCar::evTurnCarDone);
- _turnMoveStatus = 2;
- updateTurnMovement();
-}
-
-void AsCommonCar::moveToPrevPoint() {
- if (_currPointIndex == 0 && _stepError == 0) {
- _yMoveTotalSteps = 0;
- sendMessage(this, 0x1019, 0);
- sendMessage(_parentScene, 0x2005, 0);
- } else {
- NPoint prevPt;
- NPoint currPt;
- if (_stepError == 0) {
- prevPt = pathPoint(_currPointIndex - 1);
- currPt = pathPoint(_currPointIndex);
- } else {
- prevPt = pathPoint(_currPointIndex);
- currPt = pathPoint(_currPointIndex + 1);
- }
- if (ABS(prevPt.y - currPt.y) <= ABS(prevPt.x - currPt.x) &&
- ((_currMoveDirection == 2 && prevPt.x < currPt.x) ||
- (_currMoveDirection == 4 && prevPt.x >= currPt.x))) {
- if (_currMoveDirection == 2)
- _currMoveDirection = 4;
- else if (_currMoveDirection == 4)
- _currMoveDirection = 2;
- if (_isIdle)
- stTurnCarMoveToPrevPoint();
- else
- stBrakeMoveToPrevPoint();
- } else {
- if (_steps == 0) {
- gotoNextState();
- _isIdle = false;
- startAnimation(0x9966B138, 0, -1);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- SetUpdateHandler(&AsCommonCar::update);
- NextState(&AsCommonCar::stUpdateMoveDirection);
- }
- _isBraking = false;
- SetSpriteUpdate(&AsCommonCar::suMoveToPrevPoint);
- _lastDistance = 640;
- }
- }
-}
-
-void AsCommonCar::stBrakeMoveToPrevPoint() {
- FinalizeState(NULL);
- _isBusy = true;
- _isBraking = true;
- startAnimation(0x192ADD30, 0, -1);
- SetUpdateHandler(&AsCommonCar::update);
- SetMessageHandler(&AsCommonCar::hmAnimation);
- NextState(&AsCommonCar::stTurnCarMoveToPrevPoint);
-}
-
-void AsCommonCar::evTurnCarDone() {
- _isBusy = false;
- setDoDeltaX(2);
- _newMoveDirection = 0;
- stUpdateMoveDirection();
-}
-
-void AsCommonCar::suMoveToNextPoint() {
- int16 newX = _x, newY = _y;
-
- if (_currPointIndex >= (int)_pathPoints->size()) {
- _yMoveTotalSteps = 0;
- sendMessage(this, 0x1019, 0);
- sendMessage(_parentScene, 0x2006, 0);
- return;
- }
-
- if (_isBraking) {
- if (_steps <= 0) {
- sendMessage(this, 0x1019, 0);
- return;
- } else
- _steps--;
- } else if (_steps < 11)
- _steps++;
-
- bool firstTime = true;
- _ySteps = _steps;
- int stepsCtr = _steps;
-
- while (stepsCtr > 0) {
- NPoint pt1;
- NPoint pt2 = pathPoint(_currPointIndex);
- if (_currPointIndex + 1 >= (int)_pathPoints->size())
- pt1 = pathPoint(0);
- else
- pt1 = pathPoint(_currPointIndex + 1);
- int16 deltaX = ABS(pt1.x - pt2.x);
- int16 deltaY = ABS(pt1.y - pt2.y);
- if (deltaX >= deltaY) {
- _newMoveDirection = 2;
- if (pt1.x < pt2.x)
- _newMoveDirection = 4;
- if (stepsCtr + _stepError >= deltaX) {
- stepsCtr -= deltaX;
- stepsCtr += _stepError;
- _stepError = 0;
- _currPointIndex++;
- if (_currPointIndex == (int)_pathPoints->size() - 1)
- stepsCtr = 0;
- newX = pathPoint(_currPointIndex).x;
- newY = pathPoint(_currPointIndex).y;
- } else {
- _stepError += stepsCtr;
- if (pt1.x >= pt2.x)
- newX += stepsCtr;
- else
- newX -= stepsCtr;
- if (pt1.y >= pt2.y)
- newY = pt2.y + (deltaY * _stepError) / deltaX;
- else
- newY = pt2.y - (deltaY * _stepError) / deltaX;
- stepsCtr = 0;
- }
- } else {
- _newMoveDirection = 3;
- if (pt1.y < pt2.y)
- _newMoveDirection = 1;
- if (firstTime) {
- if (pt1.y >= pt2.y)
- stepsCtr += 7;
- else {
- stepsCtr -= 4;
- if (stepsCtr < 0)
- stepsCtr = 0;
- }
- _ySteps = stepsCtr;
- }
- if (stepsCtr + _stepError >= deltaY) {
- stepsCtr -= deltaY;
- stepsCtr += _stepError;
- _stepError = 0;
- _currPointIndex++;
- if (_currPointIndex == (int)_pathPoints->size() - 1)
- stepsCtr = 0;
- newX = pathPoint(_currPointIndex).x;
- newY = pathPoint(_currPointIndex).y;
- } else {
- _stepError += stepsCtr;
- if (pt1.x >= pt2.x)
- newX = pt2.x + (deltaX * _stepError) / deltaY;
- else
- newX = pt2.x - (deltaX * _stepError) / deltaY;
- if (pt1.y >= pt2.y)
- newY += stepsCtr;
- else
- newY -= stepsCtr;
- stepsCtr = 0;
- }
- }
- firstTime = false;
- }
-
- if (_yMoveTotalSteps != 0) {
- _x = newX;
- _y = newY;
- _yMoveTotalSteps -= _ySteps;
- if (_yMoveTotalSteps <= 0) {
- _isBraking = true;
- _yMoveTotalSteps = 0;
- }
- } else {
- int distance = calcDistance(_destX, _destY, _x, _y);
- _x = newX;
- _y = newY;
- if (newX > 20 && newX < 620 && newY > 20 && newY < 460) {
- _exitDirection = 0;
- _inMainArea = true;
- } else if (_inMainArea) {
- _destX = pathPoint(_pathPoints->size() - 1).x;
- _destY = pathPoint(_pathPoints->size() - 1).y;
- _inMainArea = false;
- if (_x <= 20)
- _exitDirection = 1;
- else if (_x >= 620)
- _exitDirection = 3;
- else if (_y <= 20)
- _exitDirection = 2;
- else if (_y >= 460)
- _exitDirection = 4;
- if (_exitDirection != 0 && _isBraking) {
- _isBraking = false;
- _steps = 11;
- }
- }
- if ((distance < 20 && _exitDirection == 0 && _lastDistance < distance) ||
- (_exitDirection == 0 && _lastDistance + 20 < distance))
- _isBraking = true;
- if (distance < _lastDistance)
- _lastDistance = distance;
- if (_currPointIndex == (int)_pathPoints->size() - 1) {
- _isBraking = true;
- _yMoveTotalSteps = 0;
- sendMessage(this, 0x1019, 0);
- sendMessage(_parentScene, 0x2006, 0);
- }
- }
-
-}
-
-void AsCommonCar::suMoveToPrevPoint() {
- int16 newX = _x, newY = _y;
-
- if (_currPointIndex == 0 && _stepError == 0) {
- _yMoveTotalSteps = 0;
- sendMessage(this, 0x1019, 0);
- sendMessage(_parentScene, 0x2005, 0);
- return;
- }
-
- if (_isBraking) {
- if (_steps <= 0) {
- sendMessage(this, 0x1019, 0);
- return;
- } else
- _steps--;
- } else if (_steps < 11)
- _steps++;
-
- bool firstTime = true;
- _ySteps = _steps;
- int stepsCtr = _steps;
-
- while (stepsCtr > 0) {
- if (_stepError == 0)
- _currPointIndex--;
- NPoint pt1;
- NPoint pt2 = pathPoint(_currPointIndex);
- if (_currPointIndex + 1 >= (int)_pathPoints->size())
- pt1 = pathPoint(0);
- else
- pt1 = pathPoint(_currPointIndex + 1);
- int16 deltaX = ABS(pt1.x - pt2.x);
- int16 deltaY = ABS(pt1.y - pt2.y);
- if (deltaX >= deltaY) {
- _newMoveDirection = 4;
- if (pt1.x < pt2.x)
- _newMoveDirection = 2;
- if (_stepError == 0)
- _stepError = deltaX;
- if (stepsCtr > _stepError) {
- stepsCtr -= _stepError;
- _stepError = 0;
- if (_currPointIndex == 0)
- stepsCtr = 0;
- newX = pathPoint(_currPointIndex).x;
- newY = pathPoint(_currPointIndex).y;
- } else {
- _stepError -= stepsCtr;
- if (pt1.x >= pt2.x)
- newX -= stepsCtr;
- else
- newX += stepsCtr;
- if (pt1.y >= pt2.y)
- newY = pt2.y + (deltaY * _stepError) / deltaX;
- else
- newY = pt2.y - (deltaY * _stepError) / deltaX;
- stepsCtr = 0;
- }
- } else {
- _newMoveDirection = 1;
- if (pt1.y < pt2.y)
- _newMoveDirection = 3;
- if (firstTime) {
- if (pt1.y >= pt2.y) {
- stepsCtr -= 4;
- if (stepsCtr < 0)
- stepsCtr = 0;
- } else {
- stepsCtr += 7;
- }
- _ySteps = stepsCtr;
- }
- if (_stepError == 0)
- _stepError = deltaY;
- if (stepsCtr > _stepError) {
- stepsCtr -= _stepError;
- _stepError = 0;
- if (_currPointIndex == 0)
- stepsCtr = 0;
- newX = pathPoint(_currPointIndex).x;
- newY = pathPoint(_currPointIndex).y;
- } else {
- _stepError -= stepsCtr;
- if (pt1.x >= pt2.x)
- newX = pt2.x + (deltaX * _stepError) / deltaY;
- else
- newX = pt2.x - (deltaX * _stepError) / deltaY;
- if (pt1.y >= pt2.y)
- newY -= stepsCtr;
- else
- newY += stepsCtr;
- stepsCtr = 0;
- }
- }
- firstTime = false;
- }
-
- if (_yMoveTotalSteps != 0) {
- _x = newX;
- _y = newY;
- _yMoveTotalSteps -= _ySteps;
- if (_yMoveTotalSteps <= 0) {
- _isBraking = true;
- _yMoveTotalSteps = 0;
- }
- } else {
- int distance = calcDistance(_destX, _destY, _x, _y);
- _x = newX;
- _y = newY;
- if (newX > 20 && newX < 620 && newY > 20 && newY < 460) {
- _exitDirection = 0;
- _inMainArea = true;
- } else if (_inMainArea) {
- _destX = pathPoint(0).x;
- _destY = pathPoint(0).y;
- _inMainArea = false;
- if (_x <= 20)
- _exitDirection = 1;
- else if (_x >= 620)
- _exitDirection = 3;
- else if (_y <= 20)
- _exitDirection = 2;
- else if (_y >= 460)
- _exitDirection = 4;
- if (_exitDirection != 0 && _isBraking) {
- _isBraking = false;
- _steps = 11;
- }
- }
- if ((distance < 20 && _exitDirection == 0 && _lastDistance < distance) ||
- (_exitDirection == 0 && _lastDistance + 20 < distance))
- _isBraking = true;
- if (distance < _lastDistance)
- _lastDistance = distance;
- if (_currPointIndex == 0 && _stepError == 0) {
- _isBraking = true;
- _yMoveTotalSteps = 0;
- sendMessage(this, 0x1019, 0);
- sendMessage(_parentScene, 0x2005, 0);
- }
- }
-
-}
-
-void AsCommonCar::updateSound() {
- int maxSoundCounter = 0;
- _soundCounter++;
- if (_steps != 0 && !_isIdle) {
- if (_currMoveDirection == 1)
- maxSoundCounter = 18 - _steps;
- else if (_currMoveDirection == 3) {
- maxSoundCounter = 5 - _steps;
- if (maxSoundCounter < 1)
- maxSoundCounter = 1;
- } else
- maxSoundCounter = 14 - _steps;
- } else
- maxSoundCounter = 21;
- if (_soundCounter >= maxSoundCounter) {
- sendMessage(_parentScene, 0x200D, 0);
- _soundCounter = 0;
- }
-}
-
-AsCommonIdleCarLower::AsCommonIdleCarLower(NeverhoodEngine *vm, int16 x, int16 y)
- : AnimatedSprite(vm, 0x1209E09F, 1100, x, y) {
-
- setDoDeltaX(1);
- startAnimation(0x1209E09F, 1, -1);
- _newStickFrameIndex = 1;
-}
-
-AsCommonIdleCarFull::AsCommonIdleCarFull(NeverhoodEngine *vm, int16 x, int16 y)
- : AnimatedSprite(vm, 0x1209E09F, 100, x, y) {
-
- setDoDeltaX(1);
- _newStickFrameIndex = 0;
-}
-
-AsCommonCarConnector::AsCommonCarConnector(NeverhoodEngine *vm, AsCommonCar *asCar)
- : AnimatedSprite(vm, 1100), _asCar(asCar) {
-
- createSurface1(0x60281C10, 150);
- startAnimation(0x60281C10, -1, -1);
- _newStickFrameIndex = STICK_LAST_FRAME;
- SetUpdateHandler(&AsCommonCarConnector::update);
-}
-
-void AsCommonCarConnector::update() {
- _x = _asCar->getX();
- _y = _asCar->getY();
- AnimatedSprite::update();
-}
-
-void Tracks::findTrackPoint(NPoint pt, int &minMatchTrackIndex, int &minMatchDistance,
- DataResource &dataResource) {
- const uint trackCount = size();
- minMatchTrackIndex = -1;
- minMatchDistance = 640;
- for (uint trackIndex = 0; trackIndex < trackCount; trackIndex++) {
- NPointArray *pointList = dataResource.getPointArray((*this)[trackIndex]->trackPointsName);
- for (uint pointIndex = 0; pointIndex < pointList->size(); pointIndex++) {
- NPoint testPt = (*pointList)[pointIndex];
- int distance = calcDistance(testPt.x, testPt.y, pt.x, pt.y);
- if (distance < minMatchDistance) {
- minMatchTrackIndex = trackIndex;
- minMatchDistance = distance;
- }
- }
- }
-}
-
-Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule), _asCar(NULL), _countdown1(0) {
-
- setGlobalVar(V_CAR_DELTA_X, 1);
-
- SetMessageHandler(&Scene1608::hmLowerFloor);
-
- _asKey = insertSprite<AsCommonKey>(this, 1, 1100, 198, 220);
- addCollisionSprite(_asKey);
-
- if (which < 0) {
- // Restoring game
- if (_vm->gameState().which == 1)
- // Klaymen is in the car
- which = 1;
- else {
- // Klaymen is standing around
- setRectList(0x004B47D0);
- insertKlaymen<KmScene1608>(380, 438);
- _kmScene1608 = _klaymen;
- _klaymenInCar = false;
- _sprite1 = insertStaticSprite(0x7D0404E8, 1100);
- setMessageList(0x004B46A8);
- setBackground(0x10080E01);
- setPalette(0x10080E01);
- _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- addCollisionSprite(_asTape);
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
- SetUpdateHandler(&Scene1608::upLowerFloor);
- insertScreenMouse(0x80E05108);
- insertStaticSprite(0x4B18F868, 1200);
- }
- } else if (which == 0) {
- // Klaymen entering from the left
- _vm->gameState().which = 0;
- setRectList(0x004B47D0);
- insertKlaymen<KmScene1608>(0, 438);
- _kmScene1608 = _klaymen;
- _klaymenInCar = false;
- setMessageList(0x004B46B0);
- setBackground(0x10080E01);
- setPalette(0x10080E01);
- _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- addCollisionSprite(_asTape);
- insertScreenMouse(0x80E05108);
- _sprite1 = insertStaticSprite(0x7D0404E8, 1100);
- _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
- SetUpdateHandler(&Scene1608::upLowerFloor);
- insertStaticSprite(0x4B18F868, 1200);
- } else if (which == 2) {
- // Klaymen returning from looking through the upper window
- _vm->gameState().which = 1;
- _dataResource.load(0x003C0492);
- _roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
- setBackground(0x98001604);
- setPalette(0x98001604);
- _palette->addPalette("paPodRed", 65, 31, 65);
- insertScreenMouse(0x01600988);
- _sprite2 = insertStaticSprite(0x491F38A8, 1100);
- _asCar = createSprite<AsCommonCar>(this, 375, 227); // Create but don't add to the sprite list yet
- _asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
- _asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
- _asCar->setVisible(false);
- if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) {
- insertKlaymen<KmScene1608>(373, 220);
- _klaymen->setDoDeltaX(1);
- } else
- insertKlaymen<KmScene1608>(283, 220);
- _kmScene1608 = _klaymen;
- setMessageList(0x004B47A8);
- SetMessageHandler(&Scene1608::hmUpperFloor);
- SetUpdateHandler(&Scene1608::upUpperFloor);
- _asCar->setPathPoints(_roomPathPoints);
- sendMessage(_asCar, 0x2002, _roomPathPoints->size() - 1);
- _sprite3 = insertStaticSprite(0xB47026B0, 1100);
- _clipRect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _clipRect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _clipRect2 = _clipRect1;
- _clipRect2.y2 = 215;
- _klaymen->setClipRect(_clipRect1);
- _asCar->setClipRect(_clipRect1);
- _asIdleCarLower->setClipRect(_clipRect1);
- _asIdleCarFull->setClipRect(_clipRect1);
- _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- addCollisionSprite(_asTape);
- insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
- _klaymenInCar = false;
- _carClipFlag = false;
- _carStatus = 0;
- setRectList(0x004B4810);
- }
-
- // NOTE: Not in the else because 'which' is set to 1 in the true branch
- if (which == 1) {
- // Klaymen riding the car
- _vm->gameState().which = 1;
- _dataResource.load(0x003C0492);
- _roomPathPoints = _dataResource.getPointArray(calcHash("meArchroArchRoomPath"));
- setBackground(0x98001604);
- setPalette(0x98001604);
- _palette->addPalette("paPodRed", 65, 31, 65);
- insertScreenMouse(0x01600988);
- _asCar = insertSprite<AsCommonCar>(this, 375, 227);
- _asIdleCarLower = insertSprite<AsCommonIdleCarLower>(375, 227);
- _asIdleCarFull = insertSprite<AsCommonIdleCarFull>(375, 227);
- _sprite2 = insertStaticSprite(0x491F38A8, 1100);
- _kmScene1608 = createSprite<KmScene1608>(this, 439, 220);
- sendMessage(_kmScene1608, 0x2032, 1);
- _kmScene1608->setDoDeltaX(1);
- SetMessageHandler(&Scene1608::hmRidingCar);
- SetUpdateHandler(&Scene1608::upRidingCar);
- _asIdleCarLower->setVisible(false);
- _asIdleCarFull->setVisible(false);
- _asCar->setPathPoints(_roomPathPoints);
- sendMessage(_asCar, 0x2002, 0);
- sendMessage(_asCar, 0x2008, 90);
- _sprite3 = insertStaticSprite(0xB47026B0, 1100);
- _clipRect1.set(_sprite3->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _clipRect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2());
- _clipRect2 = _clipRect1;
- _clipRect2.y2 = 215;
- _kmScene1608->setClipRect(_clipRect1);
- _asCar->setClipRect(_clipRect1);
- _asIdleCarLower->setClipRect(_clipRect1);
- _asIdleCarFull->setClipRect(_clipRect1);
- _asTape = insertSprite<AsScene1201Tape>(this, 13, 1100, 412, 443, 0x9148A011);
- // ... addCollisionSprite(_asTape);
- insertSprite<AsCommonCarConnector>(_asCar)->setClipRect(_clipRect1);
- _klaymenInCar = true;
- _carClipFlag = true;
- _carStatus = 0;
- }
-
- _palette->addPalette("paKlayRed", 0, 64, 0);
-
-}
-
-Scene1608::~Scene1608() {
- setGlobalVar(V_KLAYMEN_IS_DELTA_X, _kmScene1608->isDoDeltaX() ? 1 : 0);
- if (_klaymenInCar)
- delete _kmScene1608;
- else
- delete _asCar;
-}
-
-void Scene1608::upLowerFloor() {
- Scene::update();
- if (_countdown1 != 0 && (--_countdown1 == 0))
- leaveScene(0);
-}
-
-void Scene1608::upUpperFloor() {
- Scene::update();
- if (_carStatus == 1) {
- removeSurface(_klaymen->getSurface());
- removeEntity(_klaymen);
- addSprite(_asCar);
- _klaymenInCar = true;
- clearRectList();
- SetUpdateHandler(&Scene1608::upCarAtHome);
- SetMessageHandler(&Scene1608::hmCarAtHome);
- _asIdleCarLower->setVisible(false);
- _asIdleCarFull->setVisible(false);
- _asCar->setVisible(true);
- sendMessage(_asCar, 0x2009, 0);
- _asCar->handleUpdate();
- _klaymen = NULL;
- _carStatus = 0;
- }
- updateKlaymenCliprect();
-}
-
-void Scene1608::upCarAtHome() {
- Scene::update();
- if (_mouseClicked) {
- if (_mouseClickPos.x <= 329 && _asCar->getX() == 375 && _asCar->getY() == 227) {
- sendMessage(_asCar, 0x200A, 0);
- SetUpdateHandler(&Scene1608::upGettingOutOfCar);
- } else {
- sendPointMessage(_asCar, 0x2004, _mouseClickPos);
- SetMessageHandler(&Scene1608::hmRidingCar);
- SetUpdateHandler(&Scene1608::upRidingCar);
- }
- _mouseClicked = false;
- }
- updateKlaymenCliprect();
-}
-
-void Scene1608::upGettingOutOfCar() {
- Scene::update();
- if (_carStatus == 2) {
- _klaymen = _kmScene1608;
- removeSurface(_asCar->getSurface());
- removeEntity(_asCar);
- addSprite(_klaymen);
- _klaymenInCar = false;
- SetMessageHandler(&Scene1608::hmUpperFloor);
- SetUpdateHandler(&Scene1608::upUpperFloor);
- setRectList(0x004B4810);
- _asIdleCarLower->setVisible(true);
- _asIdleCarFull->setVisible(true);
- _asCar->setVisible(false);
- setMessageList(0x004B4748);
- processMessageList();
- _klaymen->handleUpdate();
- _carStatus = 0;
- }
- updateKlaymenCliprect();
-}
-
-void Scene1608::upRidingCar() {
- Scene::update();
- if (_mouseClicked) {
- sendPointMessage(_asCar, 0x2004, _mouseClickPos);
- _mouseClicked = false;
- }
- if (_asCar->getX() < 300) {
- if (_carClipFlag) {
- _carClipFlag = false;
- _asCar->setClipRect(_clipRect1);
- if (!_asCar->isDoDeltaX())
- sendMessage(_asCar, 0x200E, 0);
- }
- } else if (!_carClipFlag) {
- _carClipFlag = true;
- _asCar->setClipRect(_clipRect3);
- }
-}
-
-uint32 Scene1608::hmLowerFloor(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x20250B1A) {
- clearRectList();
- _klaymen->setVisible(false);
- showMouse(false);
- _sprite1->setVisible(false);
- //sendMessage(_asDoor, 0x4809, 0); // Play sound?
- _countdown1 = 28;
- }
- break;
- case 0x200D:
- sendMessage(_parentModule, 0x200D, 0);
- break;
- case 0x4826:
- if (sender == _asTape) {
- sendEntityMessage(_kmScene1608, 0x1014, _asTape);
- setMessageList(0x004B4770);
- } else if (sender == _asKey)
- setMessageList(0x004B46C8);
- break;
- }
- return 0;
-}
-
-uint32 Scene1608::hmUpperFloor(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x60842040)
- _carStatus = 1;
- break;
- case 0x200D:
- sendMessage(_parentModule, 0x200D, 0);
- break;
- case 0x4826:
- if (sender == _asKey) {
- sendEntityMessage(_kmScene1608, 0x1014, _asKey);
- setMessageList(0x004B4760);
- }
- break;
- }
- return 0;
-}
-
-uint32 Scene1608::hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x2005:
- leaveScene(1);
- break;
- case 0x2006:
- SetMessageHandler(&Scene1608::hmCarAtHome);
- SetUpdateHandler(&Scene1608::upCarAtHome);
- sendMessage(_asCar, 0x200F, 1);
- break;
- case 0x200D:
- sendMessage(_parentModule, 0x200D, 0);
- break;
- }
- return 0;
-}
-
-uint32 Scene1608::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x200A:
- _carStatus = 2;
- break;
- case 0x200D:
- sendMessage(_parentModule, 0x200D, 0);
- break;
- }
- return 0;
-}
-
-void Scene1608::updateKlaymenCliprect() {
- if (_kmScene1608->getX() <= 375)
- _kmScene1608->setClipRect(_clipRect1);
- else
- _kmScene1608->setClipRect(_clipRect2);
-}
-
-Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule)
- : Scene(vm, parentModule), _countdown1(1), _currentSymbolIndex(0), _symbolPosition(0), _changeCurrentSymbol(true), _isSolved(false) {
-
- _vm->gameModule()->initCodeSymbolsPuzzle();
- _noisySymbolIndex = getGlobalVar(V_NOISY_SYMBOL_INDEX);
-
- SetMessageHandler(&Scene1609::handleMessage);
- SetUpdateHandler(&Scene1609::update);
-
- setBackground(0x92124A14);
- setPalette(0x92124A14);
- insertPuzzleMouse(0x24A10929, 20, 620);
-
- for (int symbolPosition = 0; symbolPosition < 12; symbolPosition++)
- _asSymbols[symbolPosition] = insertSprite<AsScene3011Symbol>(symbolPosition, false);
-
- _ssButton = insertSprite<SsScene3011Button>(this, true);
- addCollisionSprite(_ssButton);
- loadSound(0, 0x68E25540);
-
-}
-
-void Scene1609::update() {
- if (!_isSolved && _countdown1 != 0 && (--_countdown1 == 0)) {
- if (_changeCurrentSymbol) {
- _currentSymbolIndex++;
- if (_currentSymbolIndex >= 12)
- _currentSymbolIndex = 0;
- _asSymbols[_symbolPosition]->change(_currentSymbolIndex + 12, _currentSymbolIndex == (int)getSubVar(VA_CODE_SYMBOLS, _noisySymbolIndex));
- _changeCurrentSymbol = false;
- _countdown1 = 36;
- } else {
- _asSymbols[_symbolPosition]->hide();
- _changeCurrentSymbol = true;
- _countdown1 = 12;
- }
- }
- if (_isSolved && !isSoundPlaying(0))
- leaveScene(1);
- Scene::update();
-}
-
-uint32 Scene1609::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {
- Scene::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
- leaveScene(0);
- break;
- case 0x2000:
- if (!_isSolved) {
- if (_changeCurrentSymbol)
- _asSymbols[_symbolPosition]->change(_currentSymbolIndex + 12, false);
- _asSymbols[_symbolPosition]->stopSymbolSound();
- _symbolPosition++;
- if (_symbolPosition >= 12) {
- if (testVars()) {
- playSound(0);
- setGlobalVar(V_CODE_SYMBOLS_SOLVED, 1);
- _isSolved = true;
- } else {
- _symbolPosition = 0;
- for (int i = 0; i < 12; i++)
- _asSymbols[i]->hide();
- }
- }
- _changeCurrentSymbol = true;
- _countdown1 = 1;
- }
- break;
- }
- return 0;
-}
-
-bool Scene1609::testVars() {
- int cmpSymbolIndex = 0;
-
- // Find the position of the first symbol
- while ((int)getSubVar(VA_CODE_SYMBOLS, cmpSymbolIndex) != _asSymbols[0]->getSymbolIndex())
- cmpSymbolIndex++;
-
- // Check if the entered symbols match
- for (int enteredSymbolIndex = 0; enteredSymbolIndex < 12; enteredSymbolIndex++) {
- if ((int)getSubVar(VA_CODE_SYMBOLS, cmpSymbolIndex) != _asSymbols[enteredSymbolIndex]->getSymbolIndex())
- return false;
- cmpSymbolIndex++;
- if (cmpSymbolIndex >= 12)
- cmpSymbolIndex = 0;
- }
-
- return true;
-}
-
-} // End of namespace Neverhood
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
Commit: 163023a8ed85b68ed877e1f3bf2e16cb1ef86862
https://github.com/scummvm/scummvm/commit/163023a8ed85b68ed877e1f3bf2e16cb1ef86862
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T12:01:54-07:00
Commit Message:
NEVERHOOD: Fix issues in the save/load screens
- Add virtual keyboard support in save/load screens
Changed paths:
engines/neverhood/menumodule.cpp
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index d4882c3..a8631cb 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -253,7 +253,7 @@ void MenuModule::handleDeleteGameMenuAction(bool doDelete) {
void MenuModule::loadSavegameList() {
- Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Common::SaveFileManager *saveFileMan = _vm->_system->getSavefileManager();
Neverhood::NeverhoodEngine::SaveHeader header;
Common::String pattern = _vm->getTargetName();
pattern += ".???";
@@ -606,22 +606,28 @@ void TextEditWidget::initialize() {
_parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1,
(const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _fontSurface);
_textLabelWidget->initialize();
- cursorSpriteResource.load(_cursorFileHash, true);
- _cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
- _cursorSurface->drawSpriteResourceEx(cursorSpriteResource, false, false, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
- _cursorSurface->setVisible(!_readOnly);
+ if (_cursorFileHash != 0) {
+ cursorSpriteResource.load(_cursorFileHash, true);
+ _cursorSurface = new BaseSurface(_vm, 0, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
+ _cursorSurface->drawSpriteResourceEx(cursorSpriteResource, false, false, cursorSpriteResource.getDimensions().width, cursorSpriteResource.getDimensions().height);
+ _cursorSurface->setVisible(!_readOnly);
+ }
refresh();
}
void TextEditWidget::enterWidget() {
- if (!_readOnly)
+ if (!_readOnly) {
_cursorSurface->setVisible(true);
+ _vm->_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+ }
refresh();
}
void TextEditWidget::exitWidget() {
- if (!_readOnly)
+ if (!_readOnly) {
_cursorSurface->setVisible(false);
+ _vm->_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ }
refresh();
}
@@ -709,7 +715,8 @@ void TextEditWidget::handleKeyDown(Common::KeyCode keyCode) {
void TextEditWidget::refresh() {
refreshPosition();
updateString();
- drawCursor();
+ if (_cursorFileHash != 0)
+ drawCursor();
}
void TextEditWidget::update() {
@@ -750,7 +757,9 @@ void SavegameListBox::onClick() {
mousePos.y -= _y + _rect.y1;
if (mousePos.x >= 0 && mousePos.x <= _rect.x2 - _rect.x1 &&
mousePos.y >= 0 && mousePos.y <= _rect.y2 - _rect.y1) {
- int newIndex = _firstVisibleItem + mousePos.y / _fontSurface->getCharHeight();
+ // We add 1 to the char height to ensure that the correct entry is chosen if the
+ // user clicks at the bottom the text entry
+ int newIndex = _firstVisibleItem + mousePos.y / (_fontSurface->getCharHeight() + 1);
if (newIndex <= _lastVisibleItem) {
_currIndex = newIndex;
refresh();
@@ -769,7 +778,7 @@ void SavegameListBox::initialize() {
_surface->setVisible(true);
buildItems();
_firstVisibleItem = 0;
- _lastVisibleItem = MIN(_maxVisibleItemsCount, (int)_textLabelItems.size());
+ _lastVisibleItem = MIN(_maxVisibleItemsCount, (int)_textLabelItems.size()) - 1;
refresh();
}
@@ -789,7 +798,7 @@ void SavegameListBox::buildItems() {
void SavegameListBox::drawItems() {
for (int i = 0; i < (int)_textLabelItems.size(); ++i) {
TextLabelWidget *label = _textLabelItems[i];
- if (i >= _firstVisibleItem && i < _lastVisibleItem) {
+ if (i >= _firstVisibleItem && i <= _lastVisibleItem) {
label->setY(_rect.y1 + (i - _firstVisibleItem) * _fontSurface->getCharHeight());
label->updateBounds();
label->drawString(_maxStringLength);
Commit: fb0332d8842d7a87435f80a54c91a3a8b324bc8e
https://github.com/scummvm/scummvm/commit/fb0332d8842d7a87435f80a54c91a3a8b324bc8e
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T12:02:00-07:00
Commit Message:
NEVERHOOD: Fix deletes in SpriteResource::unload() and ResourceMan::purgeResources()
Changed paths:
engines/neverhood/resource.cpp
engines/neverhood/resourceman.cpp
diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp
index 22a8028..4427131 100644
--- a/engines/neverhood/resource.cpp
+++ b/engines/neverhood/resource.cpp
@@ -63,7 +63,6 @@ bool SpriteResource::load(uint32 fileHash, bool doLoadPosition) {
void SpriteResource::unload() {
_vm->_res->unloadResource(_resourceHandle);
- delete[] _pixels;
_pixels = NULL;
_rle = false;
}
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index f662130..d5e7786 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -119,7 +119,7 @@ void ResourceMan::purgeResources() {
for (Common::HashMap<uint32, ResourceData*>::iterator it = _data.begin(); it != _data.end(); ++it) {
ResourceData *resourceData = (*it)._value;
if (resourceData->dataRefCount == 0) {
- delete resourceData->data;
+ delete[] resourceData->data;
resourceData->data = NULL;
}
}
Commit: 32c21754e20afd589556ea862876c6e304b3326b
https://github.com/scummvm/scummvm/commit/32c21754e20afd589556ea862876c6e304b3326b
Author: johndoe123 (john_doe at techie.com)
Date: 2013-05-08T12:02:00-07:00
Commit Message:
NEVERHOOD: Fix member var initializations
Changed paths:
engines/neverhood/scene.cpp
engines/neverhood/screen.cpp
engines/neverhood/sound.cpp
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index 2705668..07d4175 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -25,7 +25,8 @@
namespace Neverhood {
Scene::Scene(NeverhoodEngine *vm, Module *parentModule)
- : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm), _hitRects(NULL) {
+ : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm), _hitRects(NULL),
+ _mouseCursorWasVisible(true) {
_isKlaymenBusy = false;
_doConvertMessages = false;
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 25b4109..5a748cf 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -27,7 +27,7 @@ namespace Neverhood {
Screen::Screen(NeverhoodEngine *vm)
: _vm(vm), _paletteData(NULL), _paletteChanged(false), _smackerDecoder(NULL),
- _yOffset(0) {
+ _yOffset(0), _fullRefresh(false) {
_ticks = _vm->_system->getMillis();
diff --git a/engines/neverhood/sound.cpp b/engines/neverhood/sound.cpp
index a479bf2..c84b751 100644
--- a/engines/neverhood/sound.cpp
+++ b/engines/neverhood/sound.cpp
@@ -185,7 +185,7 @@ SoundItem::SoundItem(NeverhoodEngine *vm, uint32 groupNameHash, uint32 soundFile
bool playOnceAfterCountdown, int16 initialCountdown, bool playLooping, int16 currCountdown)
: _vm(vm), _soundResource(NULL), _groupNameHash(groupNameHash), _fileHash(soundFileHash),
_playOnceAfterRandomCountdown(false), _minCountdown(0), _maxCountdown(0),
- _playOnceAfterCountdown(_playOnceAfterCountdown), _initialCountdown(initialCountdown),
+ _playOnceAfterCountdown(playOnceAfterCountdown), _initialCountdown(initialCountdown),
_playLooping(false), _currCountdown(currCountdown) {
_soundResource = new SoundResource(vm);
@@ -607,7 +607,7 @@ bool AudioResourceManSoundItem::isPlaying() {
AudioResourceManMusicItem::AudioResourceManMusicItem(NeverhoodEngine *vm, uint32 fileHash)
: _vm(vm), _fileHash(fileHash), _terminate(false), _canRestart(false),
- _volume(100), _panning(50), _start(false), _isFadingIn(false), _isFadingOut(false) {
+ _volume(100), _panning(50), _start(false), _isFadingIn(false), _isFadingOut(false), _isPlaying(false) {
}
Commit: 0638308ef13727b4b359d98d54bc09156752aaaa
https://github.com/scummvm/scummvm/commit/0638308ef13727b4b359d98d54bc09156752aaaa
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-05-15T09:19:34-07:00
Commit Message:
Merge pull request #330 from johndoe123/neverhood
NEVERHOOD: Neverhood engine
Changed paths:
A devtools/create_neverhood/create_neverhood.cpp
A devtools/create_neverhood/create_neverhood.h
A devtools/create_neverhood/module.mk
A devtools/create_neverhood/tables.h
A devtools/create_neverhood/util.cpp
A devtools/create_neverhood/util.h
A dists/engine-data/neverhood.dat
A engines/neverhood/background.cpp
A engines/neverhood/background.h
A engines/neverhood/blbarchive.cpp
A engines/neverhood/blbarchive.h
A engines/neverhood/detection.cpp
A engines/neverhood/diskplayerscene.cpp
A engines/neverhood/diskplayerscene.h
A engines/neverhood/entity.cpp
A engines/neverhood/entity.h
A engines/neverhood/gamemodule.cpp
A engines/neverhood/gamemodule.h
A engines/neverhood/gamevars.cpp
A engines/neverhood/gamevars.h
A engines/neverhood/graphics.cpp
A engines/neverhood/graphics.h
A engines/neverhood/klaymen.cpp
A engines/neverhood/klaymen.h
A engines/neverhood/menumodule.cpp
A engines/neverhood/menumodule.h
A engines/neverhood/messages.h
A engines/neverhood/microtiles.cpp
A engines/neverhood/microtiles.h
A engines/neverhood/module.cpp
A engines/neverhood/module.h
A engines/neverhood/module.mk
A engines/neverhood/modules/module1000.cpp
A engines/neverhood/modules/module1000.h
A engines/neverhood/modules/module1100.cpp
A engines/neverhood/modules/module1100.h
A engines/neverhood/modules/module1200.cpp
A engines/neverhood/modules/module1200.h
A engines/neverhood/modules/module1300.cpp
A engines/neverhood/modules/module1300.h
A engines/neverhood/modules/module1400.cpp
A engines/neverhood/modules/module1400.h
A engines/neverhood/modules/module1500.cpp
A engines/neverhood/modules/module1500.h
A engines/neverhood/modules/module1600.cpp
A engines/neverhood/modules/module1600.h
A engines/neverhood/modules/module1700.cpp
A engines/neverhood/modules/module1700.h
A engines/neverhood/modules/module1800.cpp
A engines/neverhood/modules/module1800.h
A engines/neverhood/modules/module1900.cpp
A engines/neverhood/modules/module1900.h
A engines/neverhood/modules/module2000.cpp
A engines/neverhood/modules/module2000.h
A engines/neverhood/modules/module2100.cpp
A engines/neverhood/modules/module2100.h
A engines/neverhood/modules/module2200.cpp
A engines/neverhood/modules/module2200.h
A engines/neverhood/modules/module2300.cpp
A engines/neverhood/modules/module2300.h
A engines/neverhood/modules/module2400.cpp
A engines/neverhood/modules/module2400.h
A engines/neverhood/modules/module2500.cpp
A engines/neverhood/modules/module2500.h
A engines/neverhood/modules/module2600.cpp
A engines/neverhood/modules/module2600.h
A engines/neverhood/modules/module2700.cpp
A engines/neverhood/modules/module2700.h
A engines/neverhood/modules/module2800.cpp
A engines/neverhood/modules/module2800.h
A engines/neverhood/modules/module2900.cpp
A engines/neverhood/modules/module2900.h
A engines/neverhood/modules/module3000.cpp
A engines/neverhood/modules/module3000.h
A engines/neverhood/mouse.cpp
A engines/neverhood/mouse.h
A engines/neverhood/navigationscene.cpp
A engines/neverhood/navigationscene.h
A engines/neverhood/neverhood.cpp
A engines/neverhood/neverhood.h
A engines/neverhood/palette.cpp
A engines/neverhood/palette.h
A engines/neverhood/resource.cpp
A engines/neverhood/resource.h
A engines/neverhood/resourceman.cpp
A engines/neverhood/resourceman.h
A engines/neverhood/saveload.cpp
A engines/neverhood/scene.cpp
A engines/neverhood/scene.h
A engines/neverhood/screen.cpp
A engines/neverhood/screen.h
A engines/neverhood/smackerplayer.cpp
A engines/neverhood/smackerplayer.h
A engines/neverhood/smackerscene.cpp
A engines/neverhood/smackerscene.h
A engines/neverhood/sound.cpp
A engines/neverhood/sound.h
A engines/neverhood/sprite.cpp
A engines/neverhood/sprite.h
A engines/neverhood/staticdata.cpp
A engines/neverhood/staticdata.h
A engines/neverhood/todo.txt
engines/configure.engines
engines/engines.mk
engines/plugins_table.h
video/smk_decoder.h
More information about the Scummvm-git-logs
mailing list